|
@@ -2,11 +2,20 @@
|
|
|
|
|
|
import argparse
|
|
import argparse
|
|
import hashlib
|
|
import hashlib
|
|
|
|
+import logging
|
|
import os
|
|
import os
|
|
import pyftpdlib.authorizers
|
|
import pyftpdlib.authorizers
|
|
import pyftpdlib.handlers
|
|
import pyftpdlib.handlers
|
|
import pyftpdlib.servers
|
|
import pyftpdlib.servers
|
|
|
|
|
|
|
|
+LOG_LEVELS = {
|
|
|
|
+ 'critical': logging.CRITICAL,
|
|
|
|
+ 'error': logging.ERROR,
|
|
|
|
+ 'warning': logging.WARNING,
|
|
|
|
+ 'info': logging.INFO,
|
|
|
|
+ 'debug': logging.DEBUG,
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
|
|
class SHA256Authorizer(pyftpdlib.authorizers.DummyAuthorizer):
|
|
class SHA256Authorizer(pyftpdlib.authorizers.DummyAuthorizer):
|
|
|
|
|
|
@@ -19,7 +28,8 @@ class SHA256Authorizer(pyftpdlib.authorizers.DummyAuthorizer):
|
|
raise pyftpdlib.authorizers.AuthenticationFailed()
|
|
raise pyftpdlib.authorizers.AuthenticationFailed()
|
|
|
|
|
|
|
|
|
|
-def serve(root_dir_path, username, password_sha256_hexdigest, control_port, passive_port):
|
|
|
|
|
|
+def serve(root_dir_path, username, password_sha256_hexdigest, control_port, passive_port, log_level):
|
|
|
|
+ logging.basicConfig(level=log_level)
|
|
assert os.path.isdir(root_dir_path), root_dir_path
|
|
assert os.path.isdir(root_dir_path), root_dir_path
|
|
authorizer = SHA256Authorizer()
|
|
authorizer = SHA256Authorizer()
|
|
authorizer.add_user(
|
|
authorizer.add_user(
|
|
@@ -96,7 +106,16 @@ def _init_argparser():
|
|
dest='passive_port',
|
|
dest='passive_port',
|
|
envvar='FTP_PASSIVE_PORT',
|
|
envvar='FTP_PASSIVE_PORT',
|
|
default=62121,
|
|
default=62121,
|
|
- help='default: env var $FTP_PASSIVE_PORT or 62121',
|
|
|
|
|
|
+ help='port for passive (PASV) & extended passive (EPSV) mode;'
|
|
|
|
+ +' default: env var $FTP_PASSIVE_PORT or 62121',
|
|
|
|
+ )
|
|
|
|
+ argparser.add_argument(
|
|
|
|
+ '--log-level',
|
|
|
|
+ metavar='level_name',
|
|
|
|
+ dest='log_level_name',
|
|
|
|
+ default='info',
|
|
|
|
+ choices=LOG_LEVELS.keys(),
|
|
|
|
+ help='default: %(default)s',
|
|
)
|
|
)
|
|
return argparser
|
|
return argparser
|
|
|
|
|
|
@@ -104,6 +123,8 @@ def _init_argparser():
|
|
def main(argv):
|
|
def main(argv):
|
|
argparser = _init_argparser()
|
|
argparser = _init_argparser()
|
|
args = argparser.parse_args(argv[1:])
|
|
args = argparser.parse_args(argv[1:])
|
|
|
|
+ args.log_level = LOG_LEVELS[args.log_level_name]
|
|
|
|
+ del args.log_level_name
|
|
serve(**vars(args))
|
|
serve(**vars(args))
|
|
return 0
|
|
return 0
|
|
|
|
|