diff -r 000000000000 -r 676905a3b03c dejsem.1.5/python/dejsem.pycharm/parms.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dejsem.1.5/python/dejsem.pycharm/parms.py Wed Nov 27 09:50:16 2019 +0100 @@ -0,0 +1,154 @@ +#!/usr/bin/python3 +# coding=utf8 + +import os, argparse, subprocess, socket + +class Parms(): + + positiv = ('1', 'Y', 'YES', 'ON') + negativ = ('0', 'N', 'NO', 'OFF') + + @classmethod + def setup(cls): + cls.applName = "dejsem" + cls.version = 1.00 + + cls.defaultsFile = os.path.join("/etc/default", cls.applName) + cls.parsedflts() + cls.parsecmdl() + + cls.clientMode = False # řídí chování při ABENDu: client po ABENDu sys.exit(), server pokračuje + + cls.debugLevel = cls.cmdl("debugLevel", int(cls.env("DEB", cls.dflt("DEB", 0)))) + cls.random_seed= int(cls.env('RS', 0)) + + cls.action = cls.cmdl("action", cls.env("ACT", "")).upper() + cls.clientMode = cls.action != "SRV" + + cls.ssl = True + + cls.sslchannel = int(cls.cmdl("sslchannel", cls.env("CHAN", cls.dflt("CHAN", 2)))) + cls.sslPath = cls.cmdl("sslPath", cls.env("SSLP", cls.dflt("SSLP", os.path.join("/usr/share", cls.applName, "ssl")))) + cls.sslCAPath = os.path.join(cls.sslPath, "dejCA.crt") + cls.sslCert = os.path.join(cls.sslPath, "{:02d}.pem".format(cls.sslchannel)) + + cls.srvhost = cls.cmdl("srvhost", cls.env("HOST", cls.dflt("HOST", "dejsem.org"))) + cls.filedir = "files" + cls.exposed = ".exposed_to_http" + cls.clipfile = "clipboard" + cls.histdir = "history" # cliboard history dir + cls.srv_wwwhomedir = os.path.join("/var/www/html", cls.applName) + cls.srv_homedir = os.path.join("/usr/local/", cls.applName) + cls.client_homedir = cls.env("HOME", os.path.join("/home", "{}".format(os.getlogin))) + cls.client_appldir = os.path.join(cls.client_homedir, ".local/share", cls.applName) + cls.client_histdir = os.path.join(cls.client_appldir, cls.histdir) + + cls.bindhost = cls.env("BINDHOST", cls.dflt("BINDHOST", cls.getbindhost())) + # cls.bindhost = cls.env("BINDHOST", "") + # cls.broadcast = cls.env("BROADCAST", cls.getbroadcast(cls.bindhost)) + cls.broadcast = cls.env("BROADCAST", "255.255.255.255") + cls.baseport = int(cls.env("BASEPORT", cls.dflt("BASEPORT", 42000))) + cls.udpport = 4242 if cls.applName == "dejsem" else 4224 + cls.pullPeerIface = None + + cls.bufSize = 256 * 1024 + cls.connThreshold = 77 + cls.connTimeout = 0.01 + cls.blockTimeout = 20 + cls.accept_timeout = 60 # seconds + cls.long_run_accept_timeout = 60 # seconds + cls.peer_accept_timeout = 60 # seconds + + cls.datapaths = cls.args["datapaths"] # data paths from cmdline + cls.orig = cls.cmdl("datapaths", list(cls.env("ORIG", ""))) # origin data path + cls.dest = cls.env("DEST", "") # destination data path from ENV + + @classmethod + def parsecmdl(cls): + parser = argparse.ArgumentParser(description='sdílení clipboardu a filů přes server, přenos filů peer-to-peer') + cmds = parser.add_mutually_exclusive_group() + cmds.add_argument('--push', dest='action', + action='store_const', const='PUSHCLIP', + help='copy from local clipboard to shared clipboard') + cmds.add_argument('--pull', dest='action', + action='store_const', const='PULLCLIP', + help='copy from shared clipboard to local clipboard') + cmds.add_argument('--pullhist', dest='action', + action='store_const', const='PULLHIST', + help='synchronize local clipboard history from shared clipboard') + cmds.add_argument('--pushsrv', '--pushfile', '--puf', dest='action', + action='store_const', const='PUSHFILE', + help='copy local file to server') + cmds.add_argument('--pullsrv', '--pullfile', '--plf', dest='action', + action='store_const', const='PULLFILE', + help='copy server file to local') + cmds.add_argument('--pulllist', dest='action', + action='store_const', const='PULLLIST', + help='list files on server') + cmds.add_argument('--pushpeer', '--pup', dest='action', + action='store_const', const='PUSHPEER', + help='copy from local file to LAN peer') + cmds.add_argument('--pullpeer', '--plp', dest='action', + action='store_const', const='PULLPEER', + help='copy from LAN peer to local dir') + options = parser.add_argument_group(title='options') + options.add_argument('-d', dest='debugLevel', type=int, + metavar='', help='debug level 0-5, ENV DEB') + options.add_argument('-s', dest='srvhost', + metavar='', help='server domain name or ip, ENV HOST') + options.add_argument('-c', dest='sslchannel', type=int, + metavar='', help='ssl channel NN, ENV CHAN') + options.add_argument('-x', dest='sslPath', + metavar='', help='ssl keys store directory, ENV SSL') + options.add_argument('-i', dest='pullPeerIface', + metavar='', help='copy from LAN peer via ') + parser.add_argument('datapaths', nargs='*', metavar='datapath') + cls.args = vars(parser.parse_args()) + + @classmethod + def parsedflts(cls): + cls.defaults = dict() + with open(cls.defaultsFile) as df: + for line in df: + key, value = line.split('=') + cls.defaults[key] = value[:-1] + + @classmethod + def dflt(cls, key, wired): + return cls.defaults[key] if key in cls.defaults else wired + + @classmethod + def env(cls, key, default): + return os.environ[key] if key in os.environ else default + + @classmethod + def cmdl(cls, arg, default): + return cls.args[arg] if (arg in cls.args and cls.args[arg]) else default + + @classmethod + def getbindhost(cls): + return socket.getfqdn() + + """ + p = subprocess.Popen(["host", "-t", "A", socket.gethostname()], stdout=subprocess.PIPE) + p.wait() + if p.returncode == 0: + return p.stdout.readlines()[0].decode().split()[3] + else: + return '' + """ + + @classmethod + def getbroadcast(cls, bindhost): + return '255.255.255.255' + + """zatím mimo použití, je to hodně nejasné + p = subprocess.Popen(("ip", "-o", "addr", "list"), stdout=subprocess.PIPE) + p.wait() + if p.returncode == 0: + return subprocess.check_output(("grep", bindhost), stdin=p.stdout).decode().split()[5] + else: + return '255.255.255.255' + """ + +