From 9b4753a7539867fba3a407ba078ed6f7ef82b8ff Mon Sep 17 00:00:00 2001 From: Rune Olsen Date: Tue, 4 Mar 2025 10:14:27 +0100 Subject: [PATCH] Added function to list timed aliases. Cleand up the code some --- .gitignore | 3 ++- README.md | 5 ++++- malias.py | 37 +++++++++++++++++++++++++++++++++---- 3 files changed, 39 insertions(+), 6 deletions(-) diff --git a/.gitignore b/.gitignore index 835adad..5c86205 100644 --- a/.gitignore +++ b/.gitignore @@ -2,4 +2,5 @@ list_alias.py malias.zip malias_local.py *.json -.DS_Store \ No newline at end of file +.DS_Store +.python-version \ No newline at end of file diff --git a/README.md b/README.md index 6c2bfc3..f3ed539 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,7 @@ malias -h ## Documentation ```bash -usage: malias [-h] [-c] [-s server APIKey] [-a alias@domain.com to@domain.com] [-f alias@domain.com] [-d alias@domain.com] [-t user@domain.com domain.com] [-l] [-o] [-e] [-v] +usage: malias [-h] [-c] [-s server APIKey] [-a alias@domain.com to@domain.com] [-f alias@domain.com] [-d alias@domain.com] [-t user@domain.com domain.com] [-w alias@domain.com] [-l] [-o] [-e] [-v] Malias is an application for adding, creating, and deleting aliases on a Mailcow instance. @@ -45,6 +45,9 @@ options: The domain.com is which domain to use when creating the timed-alias. One year validity + -w alias@domain.com, --alias alias@domain.com + List timed (temprary) aliases connected toone account. + -l, --list List all aliases on the Mailcow instance. -o, --domains List all mail domains on the Mailcow instance. diff --git a/malias.py b/malias.py index 898cc56..1f3396e 100644 --- a/malias.py +++ b/malias.py @@ -1,4 +1,4 @@ -#!/usr/bin/python3 +#!/usr/bin/python3 -W ignore::DeprecationWarning import sys import sqlite3 from pathlib import Path @@ -10,7 +10,7 @@ import argparse import os import time from rich import print -from datetime import datetime +from datetime import datetime, timedelta from string import ascii_letters, digits from argparse import RawTextHelpFormatter from operator import itemgetter @@ -32,6 +32,11 @@ app_version = '2.0' db_version = '2.0.0' footer = 'malias version %s'%(app_version) + +def unix_to_datetime(unix_timestamp): + return datetime.fromtimestamp(unix_timestamp) + + def get_latest_release(): version = 'N/A' req = httpx.get('https://gitlab.pm/api/v1/repos/rune/malias/releases/latest', @@ -457,7 +462,7 @@ def create_timed(username,domain): print('[b][red]Error[/red][/b] : something went wrong. The server responded with [b]access denied[/b].') exit(0) alias = get_last_timed(username) - validity = datetime.utcfromtimestamp(alias['validity']).strftime('%d-%m-%Y %H:%M') + validity = unix_to_datetime(alias['validity']) print('The timed alias %s was created. The alias is valid until %s UTC\n' %(alias['address'], validity)) cursor = conn.cursor() cursor.execute('INSERT INTO timedaliases values(?,?,?,?)', (alias['validity'],alias['address'],username,validity)) @@ -514,6 +519,26 @@ def export_data(): json.dump(data, outfile, ensure_ascii=False, indent=4) +def list_timed_aliases(account): + connection = get_settings('connection') + req = httpx.get('https://'+connection['server']+'/api/v1/get/time_limited_aliases/'+account, + headers={"Content-Type": "application/json", + 'X-API-Key': connection['key'] + } + ) + data = req.json() + i = 0 + print('\n[b]malias[/b] - Timed aliases on %s for %s' %(connection['server'], account)) + print('==========================================================================================================') + for data in data: + the_alias = data['address'].ljust(30,' ') + the_goto = data['goto'].ljust(20,' ') + the_validity = unix_to_datetime(data['validity']) + print(the_alias + '\tgoes to\t\t' + the_goto+'Valid to: '+str(the_validity)) + i=i+1 + #print('\n\nTotal number of timed aliases on instance [b]%s[/b] for account.' %(connection['server'],account)) + print('\n'+footer) + # For Testing purposes @@ -554,6 +579,8 @@ parser.add_argument('-d', '--delete', help='Delete alias.\n\n', nargs=1, metavar=('alias@domain.com'), required=False, action="append") parser.add_argument('-t', '--timed', help='Add new time limited alias for user on domain. \nThe user@domain.com is where you want the alias to be delivered to.\nThe domain.com is which domain to use when creating the timed-alias.\nOne year validity\n\n', nargs=2, metavar=('user@domain.com', 'domain.com'), required=False, action="append") +parser.add_argument('-w', '--alias', help='List timed (temprary) aliases connected toone account.\n\n', + nargs=1, metavar=('alias@domain.com'), required=False, action="append") parser.add_argument('-l', '--list', help='List all aliases on the Mailcow instance.\n\n', required=False, action='store_true') parser.add_argument('-o', '--domains', help='List all mail domains on the Mailcow instance.\n\n', @@ -580,6 +607,8 @@ elif args['delete']: delete_alias(args['delete'][0][0]) elif args['timed']: create_timed(args['timed'][0][0],args['timed'][0][1]) +elif args['alias']: + list_timed_aliases(args['alias'][0][0]) elif args['list']: list_alias() elif args['domains']: @@ -588,4 +617,4 @@ elif args['export']: export_data() else: print('\n\nEh, sorry! I need something more to help you! If you write [b]malias -h[/b] I\'ll show a help screen to get you going!!!\n\n\n') - #export_data() +