def start(self): while True: try: ###For debug if Kconfig().debug: host, port = Kconfig().server.split(":") else: host, port, en_mods = Khttp().get_connection( Kconfig().server_url, Kconfig().credential) Kmodules().unpacker(en_mods) print("return {} {}".format(host, port)) self.socket = Ksocket(host, port, Kconfig().credential) self.socket.start() self.socket.loop() except Exception as e: traceback.print_exc() if self.socket: self.socket.close() self.socket = None time.sleep(10)
def __init__(self): self.logger = None dirname = os.path.dirname(Kconfig().log_path) if not os.path.exists(dirname): os.mkdir(dirname)
def rsa_long_encrypt(self, msg, length = 100): msg = msg.encode("utf8") pubobj = RSA.importKey(Kconfig().server_publickey) pubobj = PKCS1_OAEP.new(pubobj) res = [] for i in range(0, len(msg), length): res.append(pubobj.encrypt(msg[i : i + length])) return "".join(res)
def init_config(): common.setdefaultencoding("utf8") common.set_work_dir() common.add_module_path("lib") if not Kconfig().init(): sys.exit(1) Klogger().init() Ksecurity().init() Kmodules().init()
def init(self): # create logger logger_name = "loginfo" self.logger = logging.getLogger(logger_name) self.logger.setLevel(logging.DEBUG) # create file handler rfh = RotatingFileHandler(Kconfig().log_path, maxBytes=Kconfig().log_max_bytes, backupCount=Kconfig().log_backup_count) rfh.setLevel(logging.DEBUG) # create formatter fmt = "%(asctime)s [%(levelname)s] %(message)s" formatter = logging.Formatter(fmt) # add handler and formatter to logger rfh.setFormatter(formatter) self.logger.addHandler(rfh)
def start(self): while True: try: host, port, en_mods = Khttp().get_connection( Kconfig().server, Kconfig().credential) Kmodules().unpacker(en_mods) self.socket = Ksocket(host, port, Kconfig().credential) self.socket.start() self.socket.loop() except Exception as e: Klogger().error(str(e)) traceback.print_exc() Kevent().do_disconnected() if self.socket: self.socket.close() self.socket = None time.sleep(10)
def get_connection(self, addr, userID): host = None port = None gate_host, gate_port = addr.rsplit(":", 1) if common.is_python2x(): import httplib if Kconfig().release: conn = httplib.HTTPSConnection(gate_host, gate_port) else: conn = httplib.HTTPConnection(gate_host, gate_port) else: from http.client import HTTPConnection conn = HTTPConnection(gate_host, gate_port) data = "{};{}".format(userID, Ksecurity().get_pubkey()) encrypt = Ksecurity().rsa_long_encrypt(data, 200) Klogger().info("Request to Gateway server userid:{}".format(userID)) conn.request("POST", "/xxx", encrypt, { "Content-type": "application/octet-stream", "Accept": "text/plain" }) res = conn.getresponse() Klogger().info("Get Response From Gateway server status({})".format( res.status)) if res.status == 200: data = res.read() data = Ksecurity().rsa_long_decrypt(data, 256) if ":" in data: host, port, en_mods = data.split(":", 2) pattern = re.compile(r"<data>(.*)</data>", re.S) match = re.search(pattern, en_mods) if match and len(match.groups()): en_mods = match.groups()[0] conn.close() Klogger().info("Logic Server Host:{} Port:{}".format(host, port)) return host, port, en_mods
def init(self): self.client_publickey = Kconfig().client_publickey self.client_privatekey = Kconfig().client_privatekey