spostato d mail a init caricamento utenti

This commit is contained in:
2022-01-22 16:10:21 +01:00
parent cba605cfd9
commit 254dc6c99f
3 changed files with 51 additions and 37 deletions

View File

@@ -19,7 +19,7 @@ from utils.time import timestamp_fmt as ts
from utils.time import date_refmt as df
from utils.config import set_config as setting
from pyftpdlib.handlers import FTPHandler
from pyftpdlib.handlers import FTPHandler, TLS_FTPHandler
from pyftpdlib.servers import FTPServer
from pyftpdlib.authorizers import DummyAuthorizer, AuthenticationFailed
@@ -96,9 +96,23 @@ class mq:
class DummyMD5Authorizer(DummyAuthorizer):
def __init__(self, cfg):
super().__init__()
self.add_user(
cfg.adminuser[0], cfg.adminuser[1], cfg.adminuser[2], perm=cfg.adminuser[3])
con = sqlite3.connect(cfg.virtusersdb)
cur = con.cursor()
cur.execute(
'''CREATE TABLE IF NOT EXISTS virtusers (user text, hash text, virtpath text, perm text)''')
cur.execute(
'''CREATE INDEX IF NOT EXISTS user_idx on virtusers(user)''')
for row in cur.execute('SELECT * FROM virtusers'):
self.add_user(row[0], row[1], row[2], perm=row[3])
con.close()
def validate_authentication(self, username, password, handler):
# if sys.version_info >= (3, 0):
# password = md5(password.encode("latin1"))
hash = md5(password.encode("UTF-8")).hexdigest()
try:
if self.user_table[username]["pwd"] != hash:
@@ -109,6 +123,22 @@ class DummyMD5Authorizer(DummyAuthorizer):
class ASEHandler(FTPHandler):
def __init__(self, conn, server, ioloop=None):
super().__init__(conn, server, ioloop)
self.proto_cmds = FTPHandler.proto_cmds.copy()
self.proto_cmds.update(
{'SITE ADDU': dict(perm='M', auth=True, arg=True,
help='Syntax: SITE <SP> ADDU USERNAME PASSWORD (add virtual user).')}
)
self.proto_cmds.update(
{'SITE DELU': dict(perm='M', auth=True, arg=True,
help='Syntax: SITE <SP> DELU USERNAME (remove virtual user).')}
)
self.proto_cmds.update(
{'SITE LSTU': dict(perm='M', auth=True, arg=None,
help='Syntax: SITE <SP> LSTU (list virtual users).')}
)
def on_file_received(self, file):
unitType = ""
unitName = ""
@@ -286,11 +316,16 @@ class ASEHandler(FTPHandler):
(user, hash, cfg.virtpath + user, 'elmw'))
con.commit()
con.close()
logging.info(
"PID {:>5} >> User {} created.".format(
os.getpid(), user
)
)
self.respond('200 SITE ADDU successful.')
except:
self.respond('501 Invalid SITE ADDU format.')
self.respond('501 SITE ADDU failed.')
def ftp_SITE_REMU(self, line):
def ftp_SITE_DELU(self, line):
"""
remove virtual user and save virtuser cfg file
"""
@@ -304,10 +339,15 @@ class ASEHandler(FTPHandler):
cur.execute("DELETE FROM virtusers WHERE user = ?", (user,))
con.commit()
con.close()
self.respond('200 SITE REMU successful.')
logging.info(
"PID {:>5} >> User {} deleted.".format(
os.getpid(), user
)
)
self.respond('200 SITE DELU successful.')
except:
self.respond('501 Invalid SITE REMU format.')
self.respond('501 SITE DELU failed.')
def ftp_SITE_LSTU(self, line):
"""
@@ -334,37 +374,8 @@ def main():
cfg = setting.config()
try:
proto_cmds = FTPHandler.proto_cmds.copy()
proto_cmds.update(
{'SITE ADDU': dict(perm='M', auth=True, arg=True,
help='Syntax: SITE <SP> ADDU USERNAME PASSWORD (add virtual user).')}
)
proto_cmds.update(
{'SITE REMU': dict(perm='M', auth=True, arg=True,
help='Syntax: SITE <SP> REMU USERNAME (remove virtual user).')}
)
proto_cmds.update(
{'SITE LSTU': dict(perm='M', auth=True, arg=None,
help='Syntax: SITE <SP> LSTU (list virtual users).')}
)
authorizer = DummyMD5Authorizer()
authorizer.add_user(
cfg.adminuser[0], cfg.adminuser[1], cfg.adminuser[2], perm=cfg.adminuser[3])
con = sqlite3.connect(cfg.virtusersdb)
cur = con.cursor()
cur.execute(
'''CREATE TABLE IF NOT EXISTS virtusers (user text, hash text, virtpath text, perm text)''')
cur.execute(
'''CREATE INDEX IF NOT EXISTS user_idx on virtusers(user)''')
for row in cur.execute('SELECT * FROM virtusers'):
authorizer.add_user(row[0], row[1], row[2], perm=row[3])
con.close()
authorizer = DummyMD5Authorizer(cfg)
handler = ASEHandler
handler.proto_cmds = proto_cmds
handler.cfg = cfg
handler.authorizer = authorizer
handler.masquerade_address = cfg.proxyaddr

View File

@@ -6,6 +6,8 @@
virtusersdb = /home/aseftp/virtusers.db
virtpath = /home/aseftp/
adminuser = admin|c8cf955bd8b8a78419013b831e627eb2|/home/aseftp/|elradfmwMT
servertype = FTPHandler
#servertype = FTPHandler/TLS_FTPHandler
[mailserver]

View File

@@ -16,6 +16,7 @@ class config:
self.virtusersdb = c.get("ftpserver", "virtusersdb")
self.virtpath = c.get("ftpserver", "virtpath")
self.adminuser = c.get("ftpserver", "adminuser").split("|")
self.servertype = c.get("ftpserver", "servertype")
# MAIL setting
self.smtphost = c.get("mailserver", "hostname")
self.smtpport = c.getint("mailserver", "port")