summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/ngus/__main__.py103
1 files changed, 79 insertions, 24 deletions
diff --git a/src/ngus/__main__.py b/src/ngus/__main__.py
index efa2c4a..a1f3992 100644
--- a/src/ngus/__main__.py
+++ b/src/ngus/__main__.py
@@ -18,6 +18,7 @@ import argparse
18import base64 18import base64
19import logging 19import logging
20import pathlib 20import pathlib
21import ssl
21import sys 22import sys
22 23
23import ngus 24import ngus
@@ -31,75 +32,129 @@ def eprint(*arg, **kwargs):
31def main(inargs=None): 32def main(inargs=None):
32 """main entry point""" 33 """main entry point"""
33 parser = argparse.ArgumentParser( 34 parser = argparse.ArgumentParser(
34 description='The following options are available') 35 description='The following options are available'
36 )
35 parser.add_argument( 37 parser.add_argument(
36 '-b', '--basic-auth', 38 '-b',
39 '--basic-auth',
37 metavar='<username:password>', 40 metavar='<username:password>',
38 type=str, 41 type=str,
39 dest='basic_auth', 42 dest='basic_auth',
40 default='', 43 default='',
41 help=('Require Basic auth from the client in order to POST a file ' 44 help=(
42 '(default: No basic auth required)')) 45 'Require Basic auth from the client in order to POST a file '
46 '(default: No basic auth required)'
47 ),
48 )
43 parser.add_argument( 49 parser.add_argument(
44 '-H', '--hostname', 50 '-H',
51 '--hostname',
45 metavar='<hostname>', 52 metavar='<hostname>',
46 type=str, 53 type=str,
47 dest='hostname', 54 dest='hostname',
48 default='127.0.0.1', 55 default='127.0.0.1',
49 help='ngus server IP / hostname (default: 127.0.0.1)') 56 help='ngus server IP / hostname (default: 127.0.0.1)',
57 )
50 parser.add_argument( 58 parser.add_argument(
51 '-i', '--input-name', 59 '-c',
60 '--certfile',
61 metavar='<certfile>',
62 type=pathlib.Path,
63 dest='certfile',
64 default=None,
65 help=(
66 'Certfile (PEM) for TLS/SSL connections '
67 '(default: SSL/TLS disabled)'
68 ),
69 )
70 parser.add_argument(
71 '-i',
72 '--input-name',
52 metavar='<name>', 73 metavar='<name>',
53 type=str, 74 type=str,
54 dest='input_name', 75 dest='input_name',
55 default='ufile', 76 default='ufile',
56 help='The name of the form input field (default: "ufile")') 77 help='The name of the form input field (default: "ufile")',
78 )
79 parser.add_argument(
80 '-k',
81 '--keyfile',
82 metavar='<keyfile>',
83 type=pathlib.Path,
84 dest='keyfile',
85 default=None,
86 help='Keyfile for TLS/SSL connections (default: SSL/TLS disabled)',
87 )
57 parser.add_argument( 88 parser.add_argument(
58 '-p', '--port', 89 '-p',
90 '--port',
59 metavar='<port>', 91 metavar='<port>',
60 type=int, 92 type=int,
61 dest='port', 93 dest='port',
62 default=8080, 94 default=8080,
63 help='ngus server port (default: 8080)') 95 help='ngus server port (default: 8080)',
96 )
64 parser.add_argument( 97 parser.add_argument(
65 '-u', '--upload-dir', 98 '-u',
99 '--upload-dir',
66 metavar='<dir>', 100 metavar='<dir>',
67 type=pathlib.Path, 101 type=pathlib.Path,
68 dest='upload_dir', 102 dest='upload_dir',
69 default=pathlib.Path.cwd(), 103 default=pathlib.Path.cwd(),
70 help='ngus server upload dir (default: CWD)') 104 help='ngus server upload dir (default: CWD)',
105 )
71 parser.add_argument( 106 parser.add_argument(
72 '-U', '--upload-page', 107 '-U',
108 '--upload-page',
73 metavar='<filename>', 109 metavar='<filename>',
74 type=argparse.FileType('rb'), 110 type=argparse.FileType('rb'),
75 dest='upload_page', 111 dest='upload_page',
76 default=None, 112 default=None,
77 help='Alternative upload page (form) to display (default: None)') 113 help='Alternative upload page (form) to display (default: None)',
114 )
78 parser.add_argument( 115 parser.add_argument(
79 '-v', '--version', 116 '-v',
117 '--version',
80 action='version', 118 action='version',
81 version=f'%(prog)s {ngus.__version__}', 119 version=f'%(prog)s {ngus.__version__}',
82 help='Display program-version and exit') 120 help='Display program-version and exit',
121 )
83 args = parser.parse_args(inargs) 122 args = parser.parse_args(inargs)
84 try: 123 try:
85 logging.basicConfig(format='%(asctime)s - %(levelname)s - %(message)s', 124 logging.basicConfig(
86 level=logging.DEBUG) 125 format='%(asctime)s - %(levelname)s - %(message)s',
126 level=logging.DEBUG,
127 )
87 logger = logging.getLogger('ngus') 128 logger = logging.getLogger('ngus')
88 logger.info('ngus starting') 129 logger.info('ngus starting')
89 server_params = { 130 server_params = {
90 'input_name': args.input_name, 131 'input_name': args.input_name,
91 'upload_dir': args.upload_dir 132 'upload_dir': args.upload_dir,
92 } 133 }
93 if args.upload_page is not None: 134 if args.upload_page is not None:
94 server_params['upload_page'] = args.upload_page.read() 135 server_params['upload_page'] = args.upload_page.read()
95 if args.basic_auth and len(args.basic_auth.split(':')) == 2: 136 if args.basic_auth and len(args.basic_auth.split(':')) == 2:
96 server_params['basic_auth'] = base64.b64encode( 137 server_params['basic_auth'] = base64.b64encode(
97 args.basic_auth.strip().encode('utf-8')).decode() 138 args.basic_auth.strip().encode('utf-8')
139 ).decode()
98 logger.info('Requiring basic-auth') 140 logger.info('Requiring basic-auth')
99 ngus_server = ngus.NgusHTTPServer((args.hostname, args.port), 141 ngus_server = ngus.NgusHTTPServer(
100 ngus.NgusBaseHTTPRequestHandler, 142 (args.hostname, args.port),
101 **server_params) 143 ngus.NgusBaseHTTPRequestHandler,
102 logger.info(f'Listening on {args.hostname}:{args.port}') 144 **server_params,
145 )
146 if args.certfile and args.keyfile:
147 context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
148 context.load_cert_chain(
149 certfile=args.certfile, keyfile=args.keyfile
150 )
151 ngus_server.socket = context.wrap_socket(
152 ngus_server.socket, server_side=True
153 )
154 logger.info(
155 f'Listening on {args.hostname}:{args.port}'
156 f'{" (SSL/TLS)" if args.certfile and args.keyfile else ""}'
157 )
103 logger.info('Done!') 158 logger.info('Done!')
104 ngus_server.serve_forever() 159 ngus_server.serve_forever()
105 except KeyboardInterrupt: 160 except KeyboardInterrupt: