예제 #1
0
    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
예제 #2
0
    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
예제 #3
0
    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
예제 #4
0
    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
예제 #5
0
 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)
예제 #6
0
 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
예제 #7
0
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)
예제 #8
0
 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)
예제 #9
0
    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
예제 #10
0
 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)
예제 #11
0
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)])
예제 #12
0
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])
예제 #13
0
    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
예제 #14
0
    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
예제 #15
0
 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
예제 #16
0
    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)
예제 #17
0
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]])
예제 #18
0
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 ""
예제 #19
0
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 ""
예제 #20
0
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)
예제 #21
0
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)
예제 #22
0
            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
예제 #23
0
 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)
예제 #24
0
 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
예제 #25
0
 def options_handler(allow_header):
     response = make_response(request.headers)
     response.headers.add("Allow", allow_header)
     return response