diff --git a/reaction-mailcreate/createMails.py b/reaction-mailcreate/createMails.py index 1833f31e4cfc74a7ea50471f306a3e0c3022b1a8..c5a7b8033cbe9cc659fc388955d343f00c43ced0 100755 --- a/reaction-mailcreate/createMails.py +++ b/reaction-mailcreate/createMails.py @@ -41,6 +41,17 @@ if sys.version_info < (3, 8): setattr(namespace, self.dest, items) parser.register('action', 'extend', ExtendAction) +class KeyValueAction(argparse.Action): + # Constructor calling + def __call__( self , parser, namespace, + values, option_string = None): + for value in values: + # split it into key and value + key, value = value.split('=') + # assign into dictionary + getattr(namespace, self.dest)[key] = value +parser.register('action', 'keyvalue', KeyValueAction) + # Parse args parser.add_argument('-a', '--attach', dest='attach', default=[], nargs=1, action='extend', help='add attachment(s) to mail (default: None)') parser.add_argument('-b', '--basedir', dest='basedir', default='Mails', help='base directory for all output (default: "Mails")') @@ -56,7 +67,7 @@ parser.add_argument('-o', '--output', dest='output', default='{basedir}/ parser.add_argument('-R', '--reply-to', dest='replyto', default=None, help='reply-to mail address (default: None)') parser.add_argument( '--salt', dest='salt', default=None, help='salt to use for hashing (default: random 8-byte hex string)') parser.add_argument( '--sign', dest='sign', default='', choices=['', 'gpg'], help='signature method (default: ""); one of "", "gpg"') -parser.add_argument( '--sign-as', dest='signas', default=None, help='signature key to use (default: None meaning autoselect)') +parser.add_argument( '--sign-arg', dest='signarg', default={}, nargs=1, action='keyvalue', help='additional arguments to be passed to the signature call (default: None)') parser.add_argument('-s', '--subject', dest='subject', default='Security Challenge for {site} -- {campaign}{infix}', help='mail subject (default: "Security Challenge Message -- {campaign}{infix}")') parser.add_argument('-S', '--smtpserver', dest='smtpserver', default='localhost', help='SMTP server to use (default: "localhost"); port can be specified with "<host>:<port>" notation and takes precedence over implied ports and port specification') parser.add_argument( '--smtpport', dest='smtpport', default=0, type=int, help='SMTP port to use (default: 25); takes precedence over implied ports') @@ -73,6 +84,8 @@ parser.add_argument('-w', '--webserver', dest='webserver', default='https://ch parser.add_argument('infix', default='', nargs='?', help='infix for ID purposes, default empty') args = parser.parse_args() +print(args) + class SafeDict(dict): def __missing__(self, key): return '{' + key + '}'