def cget_handler(self, query): response = None data = self._search_events(query) if data: if str(request.accept_mimetypes) == 'text/csv': # all are the same - in other words, i don't care csv = [EventHandler._generate_csv_header(data[0]['_source'])] for event in data: csv.append( self._generate_csv_body(event['_source'], UUID(event['_id']).int)) response = make_response(request.headers, HTTPStatus.OK, EventHandler._join_list(csv, '\n'), True, 'text/csv') else: dict_list = list() for event in data: dict_list.append( self._generate_dict_body(event['_source'], UUID(event['_id']).int)) response = make_response(request.headers, HTTPStatus.OK, json.dumps({'events': dict_list}), True) elif data is not None: response = make_response( request.headers, HTTPStatus.NOT_FOUND, json.dumps(http_message(HTTPStatus.NOT_FOUND))) else: response = make_response( request.headers, HTTPStatus.INTERNAL_SERVER_ERROR, json.dumps(http_message(HTTPStatus.INTERNAL_SERVER_ERROR))) return response
def set_permissions(self): try: txt = self.perm_edit.text() self.perm_edit.clear() self.perm_edit.setEnabled(False) self.comboBox.setEnabled(True) self.newfile_btn.setEnabled(True) self.open_btn.setEnabled(True) self.get_perm_btn.setEnabled(True) self.set_perm_btn.setEnabled(False) print("Set permissions", txt) permitted_user_list = re.split(r'[,; :]+', txt) print('Typed usernames:', txt) print('Split usernames:', permitted_user_list) permitted_user_list = rsp.make_response(permitted_user_list) self._s.send( rsp.make_response([ rsp._SET_PERM, str(self.comboBox.currentText()), permitted_user_list ])) except Exception as e: traceback.print_exc() return
def get_handler(self, event_id: UUID): response = None data = self._get_event_by_id(event_id) if data: if str(request.accept_mimetypes) == 'text/csv': response = make_response( request.headers, HTTPStatus.OK, EventHandler._join_list([ EventHandler._generate_csv_header(data), self._generate_csv_body(data, event_id.int) ], '\n'), True, 'text/csv') else: # default to 'application/json' response = make_response( request.headers, HTTPStatus.OK, json.dumps(self._generate_dict_body(data, event_id.int)), True) elif data is not None: response = make_response( request.headers, HTTPStatus.NOT_FOUND, json.dumps(http_message(HTTPStatus.NOT_FOUND))) else: response = make_response( request.headers, HTTPStatus.INTERNAL_SERVER_ERROR, json.dumps(http_message(HTTPStatus.INTERNAL_SERVER_ERROR))) return response
def post_handler(self, data: dict, schema_order: list): response = make_response( request.headers, HTTPStatus.INTERNAL_SERVER_ERROR, json.dumps(http_message(HTTPStatus.INTERNAL_SERVER_ERROR))) retries = 0 while retries <= 3: try: body = EventHandler._order_data(data, schema_order) body['date'] = rfc3339_to_timestamp(body['date']) event_id = uuid1() self.es.create(index=self.index, id=event_id, body=body) body = self._generate_dict_body(body, event_id.int) response = make_response(request.headers, HTTPStatus.CREATED, json.dumps(body)) response.headers.add("Location", body["_links"]["self"]["href"]) break except ConflictError: # it's pretty impossible an uuid collision, but who knows... retries += 1 continue except Exception: # here is if something really bad happens, so let's exit and thow a 500 error break return response
def validate_instance(*args, **kwargs): instance = None if request.is_json: # or request.mimetype == '*/*': # application/json or */* are accepted try: instance = request.json InstanceValidator(schema).validate(instance) except: abort(make_response(request.headers, HTTPStatus.UNPROCESSABLE_ENTITY, json.dumps( http_message(HTTPStatus.UNPROCESSABLE_ENTITY)))) else: abort(make_response(request.headers, HTTPStatus.UNPROCESSABLE_ENTITY, json.dumps( http_message(HTTPStatus.UNPROCESSABLE_ENTITY)))) return f(instance, *args, **kwargs)
def edit_file(self): print("edit file") # open selected file for editing self.current_file = str(self.comboBox.currentText()) self._s.send(rsp.make_response([rsp._OPEN_FILE, self.current_file])) self.main_text_edit.setEnabled(True) return
def get_perm(filename): user_list = [] for u_name in user_dict.keys(): if filename in user_dict[u_name]: user_list.append(u_name) print('User list', user_list) return rsp.make_response([rsp._PERM_LIST] + user_list)
def validate_uuid(event_id, *args, **kwargs): try: event_id = UUID(int=int(event_id)) except: abort(make_response(request.headers, HTTPStatus.UNPROCESSABLE_ENTITY, json.dumps( http_message(HTTPStatus.UNPROCESSABLE_ENTITY)))) return f(event_id, *args, **kwargs)
def __login(self, user_name): send_message = rsp.make_response([rsp._GET_FILES] + [user_name]) print('Sending message: ', send_message) self._s.send(send_message) response_message = self._s.recv(rsp.BUFFER_SIZE) print('Message received: ', response_message) return response_message
def validate_query(*args, **kwargs): try: query = dict(request.args.items()) ArgsValidator(schema).validate(query) except: abort(make_response(request.headers, HTTPStatus.UNPROCESSABLE_ENTITY, json.dumps( http_message(HTTPStatus.UNPROCESSABLE_ENTITY)))) return f(query, *args, **kwargs)
def create_file(user_name): if file_dict.keys(): max_nr = max(map(int, file_dict.keys())) + 1 else: max_nr = 0 file_dict[str(max_nr)] = '' user_dict[user_name].add(str(max_nr)) print('File created, ', str(max_nr)) return rsp.make_response([rsp._FILE_NAME, str(max_nr)])
def edit_file(args): """ Changes contents of the file args: -file name -file content """ file_dict[args[0]] = args[1] return rsp.make_response([rsp._RESP_OK])
def create_file(self): print("new file") self._s.send(rsp.make_response([rsp._CREATE_FILE])) self.comboBox.setEnabled(True) self.newfile_btn.setEnabled(True) self.open_btn.setEnabled(True) self.get_perm_btn.setEnabled(True) return
def cget_handler(self, query): response = None data = self._search_events(query) if data: data = [self._generate_dict_body( event['_source'], UUID(event['_id']).int) for event in data] if str(request.accept_mimetypes) == 'text/csv': response = make_response( request.headers, HTTPStatus.OK, EventHandler._generate_csv(data), True, 'text/csv') else: response = make_response( request.headers, HTTPStatus.OK, json.dumps({'events': data}), True) elif data is not None: response = make_response(request.headers, HTTPStatus.NOT_FOUND, json.dumps( http_message(HTTPStatus.NOT_FOUND))) else: response = make_response(request.headers, HTTPStatus.INTERNAL_SERVER_ERROR, json.dumps( http_message(HTTPStatus.INTERNAL_SERVER_ERROR))) return response
def get_permissions(self): # get permission list, all other functionality disabled self.comboBox.setEnabled(False) self.newfile_btn.setEnabled(False) self.open_btn.setEnabled(False) self.get_perm_btn.setEnabled(False) self.main_text_edit.setEnabled(False) self._s.send( rsp.make_response( [rsp._GET_PERM, str(self.comboBox.currentText())])) print("get permissions") return
def cors_prefligth_headers(*args, **kwargs): origin = request.headers.get( "origin") access_control_request_method = request.headers.get( "access-control-request-method") if origin and access_control_request_method: response = make_response(request.headers) response.headers.add("Access-Control-Allow-Methods", access_control_request_method) # something strange happens with prism here response.headers.add("Vary", "origin") abort(response) return f(*args, **kwargs)
def open_file(filename, sock): print('open_file, sock', sock, 'filename', filename) for file in open_files: print(file) if file != filename: try: print('open_files[file].remove(sock), sock:', sock) open_files[file].remove(sock) except Exception as e: pass open_files[filename] += [sock] print('open_files', open_files) return rsp.make_response([rsp._FILE_CONTENT, file_dict[filename]])
def action_route(): payload = json.loads(request.form.get("payload")) # print(f"actions payload is {json_format.pretty_json(payload)}") if payload['callback_id'] == "job_post": if payload['type'] != 'dialog_cancellation': # sc = SlackClient(os.environ.get( # f"{payload['team']['domain']}_token")) sc.api_call( "chat.postMessage", text="You can click *Post It!* to let jobbot post the job " + "listing exactly as you see it. \n " + "*Note:* The job listing posted by jobbot cannot " + "be edited or removed. If you’d prefer the flexibility " + "to tweak it later, then simply copy the text and paste it into the <#C035JE6UR|Jobs> channel \n", as_user="******", channel=payload['user']['id']) sc.api_call('chat.postMessage', channel=payload['user']['id'], text=responses.make_response( payload["submission"]["contract_type"], payload["submission"]["city"], payload["submission"]["job_title"], payload["submission"]["salary"], payload["submission"]["info"], payload["user"]["id"]), attachments=responses.attachm, as_user="******") return "" else: return make_response("", 200) elif payload['callback_id'] == 'confirm_post': if payload['actions'][0]['name'] == 'cancelled_job': return payload["original_message"]["text"] elif payload['actions'][0]['name'] == 'PostJob': # print(f"actions payload is {json_format.pretty_json(payload)}") sc.api_call("chat.postMessage", text=payload["original_message"]["text"], as_user="******", channel=target_channel) sc.api_call('chat.update', ts=payload["message_ts"], channel=payload["channel"]["id"], as_user="******", text=payload["original_message"]["text"], attachments=responses.attachm_update) return "" else: return ""
def action_route(): payload = json.loads(request.form.get("payload")) # print(f"actions payload is {json_format.pretty_json(payload)}") if payload['callback_id'] == "job_post": if payload['type'] != 'dialog_cancellation': # sc = SlackClient(os.environ.get( # f"{payload['team']['domain']}_token")) sc.api_call("chat.postMessage", text="You can click *Post It!* to let jobbot post the job " + "listing exactly as you see it. \n " + "*Note:* The job listing posted by jobbot cannot " + "be edited or removed. If you’d prefer the flexibility " + "to tweak it later, then simply copy the text and paste it into the <#C035JE6UR|Jobs> channel \n", as_user="******", channel=payload['user']['id']) sc.api_call('chat.postMessage', channel=payload['user']['id'], text=responses.make_response( payload["submission"]["contract_type"], payload["submission"]["city"], payload["submission"]["job_title"], payload["submission"]["salary"], payload["submission"]["info"], payload["user"]["id"] ), attachments=responses.attachm, as_user="******") return "" else: return make_response("", 200) elif payload['callback_id'] == 'confirm_post': if payload['actions'][0]['name'] == 'cancelled_job': return payload["original_message"]["text"] elif payload['actions'][0]['name'] == 'PostJob': # print(f"actions payload is {json_format.pretty_json(payload)}") sc.api_call("chat.postMessage", text=payload["original_message"]["text"], as_user="******", channel=target_channel) sc.api_call('chat.update', ts=payload["message_ts"], channel=payload["channel"]["id"], as_user="******", text=payload["original_message"]["text"], attachments=responses.attachm_update) return "" else: return ""
def broadcast_file_list(server_socket, sock): print('Broadcasting') for client, socket in online_clients.items(): print(client) # send the message only to peer if socket != server_socket and socket != sock: try: print('socket send, data>', [rsp._FILE_LIST, list(user_dict[client])]) socket.send( rsp.make_response([rsp._FILE_LIST] + list(user_dict[client]))) except: # broken socket connection socket.close() # broken socket, remove it remove_user_presence(sock)
def broadcast_text(server_socket, sock, filename): print('Broadcasting') print(filename) print(open_files[filename]) for socket in open_files[filename]: print(open_files) # send the message only to peer if socket != server_socket and socket != sock: try: print('socket send, data>', [rsp._UPDATE_FILE, file_dict[filename]]) socket.send( rsp.make_response([rsp._UPDATE_FILE, file_dict[filename]])) except: print('socket send error broadacst text') # broken socket connection traceback.print_exc() # broken socket, remove it remove_user_presence(sock)
for sock in ready_to_read: # print('sock', sock) # a new connection request recieved if sock == s: # Login choice sockfd, addr = s.accept() print('Tulen!') message = sockfd.recv( rsp.BUFFER_SIZE ) # We assume username is shorter than buffer message = rsp.sanitize_message(message) req_code = message[0] u_name = message[1] if u_name in online_clients: message = rsp.make_response([rsp._USERNAME_TAKEN]) sockfd.send(message) break SOCKET_LIST.append(sockfd) online_clients[u_name] = sockfd print(online_clients) print("Client (%s, %s) connected" % addr) print(user_dict) message = rsp.make_response([rsp._FILE_LIST] + list(user_dict[u_name])) sockfd.send(message) else: # message = get_message(sock) #Is message coming from that socket
def check_authorization(*args, **kwargs): if "X-API-Key" not in request.headers: abort(make_response(request.headers, HTTPStatus.UNAUTHORIZED, json.dumps(http_message(HTTPStatus.UNAUTHORIZED)))) return f(*args, **kwargs)
def read_text(self): txt = self.main_text_edit.toPlainText() if not self.is_locked: self._s.sendall( rsp.make_response([rsp._UPDATE_FILE, self.current_file, txt])) return
def options_handler(allow_header): response = make_response(request.headers) response.headers.add("Allow", allow_header) return response