def login(args): # Handling login requests # # Reqeust example: # GET /app/auth?name=Sasha&pwd=sdjcn23jnd322jdjkn # or (same): # GET /app/auth?action=authorize&name=Sasha&pwd=sdjcn23jnd322jdjkn # Get nickname and pwd params = parse.parse_qs(args.get('params', '')) name = params.get('name', [None])[-1] passwd = params.get('pwd', [None])[-1] if name is None or passwd is None: return {'code': HTTPStatus.BAD_REQUEST} response = {'code': HTTPStatus.OK, 'headers': []} # Identification identify = db_proto.Request(method='CHECKUSR', params={'name': name}) if db_cli.send(identify).code != db_proto.DBRespCode.OK: response['headers'].append(('X-Auth-status', 'Identification failed')) return response # Authentication auth = db_proto.Request(method='CHECKPWD', params={ 'name': name, 'passwd': passwd }) if db_cli.send(auth).code != db_proto.DBRespCode.OK: response['headers'].append(('X-Auth-status', 'Authentication failed')) return response # Change user status to `online` mkonline = db_proto.Request(method='USRON', params={ 'name': name, 'client_ip': args['client'][0] }) db_response = db_cli.send(mkonline) if db_response.code == db_proto.DBRespCode.OK: ssid = db_response.data[0] response['headers'].append(('X-Auth-status', 'OK')) response['headers'].append( ('Set-Cookie', 'SSID={}; Max-Age={}; HttpOnly'.format(ssid, CHECKOUT_TIME))) else: response['headers'].append(('X-Auth-status', 'Status failed')) return response
def activate(args): # Handle register request # Accepts new user name and pwd hash # # Request example: # GET /app/register?name=Sasha&pwd=as322mdj93dk params = parse.parse_qs(args.get('params', '')) name = params.get('name', [None])[-1] passwd = params.get('pwd', [None])[-1] if name is None or passwd is None: return {'code': HTTPStatus.BAD_REQUEST} response = { 'code': HTTPStatus.OK, 'headers': [] } request = db_proto.Request(method='NEWUSR', params={'name': name, 'passwd': passwd}) if client.send(request).code == db_proto.DBRespCode.OK: response['headers'].append(('X-Reg-status', 'OK')) else: response['headers'].append(('X-Reg-status', 'FAIL')) return response
def checkssid(args): # Check if client has valid SSID # # Request example: # GET /app/auth?action=checkssid response = {'code': HTTPStatus.OK, 'headers': []} ssid = extract_ssid(args) if ssid: cookiecheck = db_proto.Request(method='CHECKSSID', params={ 'ssid': ssid.value, 'client_ip': args['client'][0] }) resp = db_cli.send(cookiecheck) if resp.code == db_proto.DBRespCode.OK: response['headers'].append(('X-SSID-approvement', 'OK')) response['headers'].append( ('Set-Cookie', 'SSID={}; Max-Age={}'.format(ssid.value, CHECKOUT_TIME))) response['headers'].append( ('Set-Cookie', 'nickname={}; Max-Age={}'.format(resp.data[0], CHECKOUT_TIME))) else: response['headers'].append(('X-SSID-approvement', 'Invalid')) else: response['headers'].append(('X-SSID-approvement', 'Not Found')) return response
def handle(self, conn, address): t = time.time() request = db_proto.Request(self.get_request(conn)) response = self.wrapper.perform(request) conn.sendall(response.bytes) self.logger.info('{} - {} ({}s)'.format(request.method, response.code, round(time.time() - t, 7)))
def handle(self): try: request = db_proto.Request(self.raw_request) self.server.push_task(request, self.callback) except Exception as e: self.server.logger.info('Exception during hadnling - {}'.format(e)) if self.server.logger.level == logging.DEBUG: print('*' * 80) traceback.print_exc() print('*' * 80)
def send(self, method, params={}): # Forms request from given method and params # Sends it to DBServer # Waits for response and returns it # response = None ipc = socket.socket(socket.AF_UNIX) ipc.settimeout(self.sock_timeout) try: request = db_proto.Request(method=method, params=params).bytes ipc.connect(self.ipc_path) ipc.sendall(request) response = self.recvall(ipc) except Exception as e: self._log_err(e) finally: ipc.close() if response is not None: return db_proto.Response(response)
def logout(args): # Handling log out requests # # Request example: # GET /app/auth?action=logout ssid = extract_ssid(args) if ssid: off_user = db_proto.Request(method='USROFF', params={'ssid': ssid.value}) if db_cli.send(off_user) == db_proto.DBRespCode.OK: return { 'code': HTTPStatus.OK, 'headers': [('X-Auth-status', 'OUT')] } else: return { 'code': HTTPStatus.OK, 'headers': [('X-Auth-status', 'Logging out failed')] } return {'code': HTTPStatus.OK, 'headers': [('X-Auth-status', 'OUT')]}