Exemplo n.º 1
0
 def GETCHNL(self, params):
     chid = params['chid']
     chnl = self.channels.get(Query()['chid'] == chid)
     if chnl is None:
         return db_proto.Response(code=DBRespCode.FAIL,
                                  data={'msg': 'Channel not found'})
     return db_proto.Response(code=DBRespCode.OK, data=chnl)
Exemplo n.º 2
0
 def CHECKPWD(self, params):
     name = params['name'][-1]
     pwd = params['passwd'][-1]
     user = self.users.get(Query()['name'] == name)
     if pwd == user['passwd']:
         return db_proto.Response(code=DBRespCode.OK)
     return db_proto.Response(code=DBRespCode.FAIL)
Exemplo n.º 3
0
 def USRVERIFIED(self, params):
     usr = self.users.get(Query()['uid'] == params['uid'])
     if usr is None:
         return db_proto.Response(code=DBRespCode.FAIL)
     self.users.update({'verified': True}, doc_ids=[usr.doc_id])
     self.users.update(delete('verify_token'), doc_ids=[usr.doc_id])
     return db_proto.Response(code=DBRespCode.OK)
Exemplo n.º 4
0
    def CREATECHNL(self, params):
        target, initiator = params['target'], params['initiator']
        if target == initiator:
            return db_proto.Response(code=DBRespCode.FAIL,
                                     data={'msg': 'Users must be different'})
        users = []
        for uid in target, initiator:
            usr = self.users.get(Query()['uid'] == uid)
            if usr is None:
                return db_proto.Response(code=DBRespCode.FAIL,
                                         data={'msg': 'User not found'})
            users.append(usr)

        chid = create_unique_token(
            [chnl['chid'] for chnl in self.channels.all()])

        self.channels.insert({
            'chid': chid,
            'status': params['status'],
            'target': users[0],
            'initiator': users[1],
            'buffer': {
                params['target']: [],
                params['initiator']: []
            }
        })
        return db_proto.Response(code=DBRespCode.OK, data={'chid': chid})
Exemplo n.º 5
0
 def DELALLUSR(self, params):
     raise Exception('DELALLUSR tried')
     try:
         self.users.purge()
         return db_proto.Response(code=DBRespCode.OK)
     except Exception:
         return db_proto.Response(code=DBRespCode.FAIL)
Exemplo n.º 6
0
 def CHECKPWD(self, params):
     # Checks if provided password is correct
     # Requires: `uid`, `passwd`
     #
     record = self.private.get(Query()['uid'] == params['uid'])
     if params['passwd'] == record['passwd']:
         return db_proto.Response(code=DBRespCode.OK)
     return db_proto.Response(code=DBRespCode.FAIL)
Exemplo n.º 7
0
 def GETSESS(self, params):
     # Returns session with provided ssid
     # Requires: `ssid`
     #
     sess = self.sessions.get(Query()['ssid'] == params['ssid'])
     if sess is None:
         return db_proto.Response(code=DBRespCode.FAIL)
     return db_proto.Response(code=DBRespCode.OK, data=sess)
Exemplo n.º 8
0
 def CHECKSSID(self, params):
     client_ip = params['client_ip'][-1]
     ssid = params['ssid'][-1]
     user = self.users.get(Query()['SSID'] == ssid)
     if user and user['client_ip'] == client_ip and \
             (int(time.time()) - user['lastAct'] < self.EXPIRE_TIME):
         return db_proto.Response(code=DBRespCode.OK, data=[user['name']])
     return db_proto.Response(code=DBRespCode.FAIL)
Exemplo n.º 9
0
 def CHANGECHNLSTATUS(self, params):
     chid = params['chid']
     new_status = params['status']
     if self.channels.get(Query()['chid'] == chid) is None:
         return db_proto.Response(code=DBRespCode.FAIL,
                                  data={'msg': 'Channel not found'})
     self.channels.update({'status': new_status}, Query()['chid'] == chid)
     return db_proto.Response(code=DBRespCode.OK)
Exemplo n.º 10
0
 def GETUSRBYID(self, params):
     # Returns user info for given uid
     # Requires: `uid`
     #
     user = self.users.get(Query()['uid'] == params['uid'])
     if user is None:
         return db_proto.Response(code=DBRespCode.FAIL)
     return db_proto.Response(code=DBRespCode.OK, data=user)
Exemplo n.º 11
0
 def UPDSESS(self, params):
     # Updates lastUpd timestamp
     # Requires: `ssid`
     #
     sess = self.sessions.get(Query()['ssid'] == params['ssid'])
     if sess is None:
         return db_proto.Response(code=DBRespCode.FAIL)
     self.sessions.update({'lastUpd': int(time.time())},
                          doc_ids=[sess.doc_id])
     return db_proto.Response(code=DBRespCode.OK)
Exemplo n.º 12
0
 def GETIDBYNAME(self, params):
     # Checks if user with provided name exists
     # Return uid if user found
     # Requires: `name`
     #
     user = self.users.get(Query()['name'] == params['name'])
     if user is not None:
         return db_proto.Response(code=DBRespCode.OK,
                                  data={'uid': user['uid']})
     return db_proto.Response(code=DBRespCode.FAIL)
Exemplo n.º 13
0
 def DELUSR(self, params):
     # Delets user, if passwd provided correctly
     # Requires: `uid`, `passwd`
     #
     record = self.private.get(Query()['uid'] == params['uid'])
     if params['passwd'] == record['passwd']:
         self.private.remove(doc_ids=[record.doc_id])
         self.users.remove(Query()['uid'] == [params['uid']])
         return db_proto.Response(code=DBRespCode.OK)
     return db_proto.Response(code=DBRespCode.FAIL)
Exemplo n.º 14
0
 def perform(self, request):
     perform = getattr(self, request.method, None)
     if not perform:
         return db_proto.Response(code=DBRespCode.FAIL,
                                  data={'msg': 'Unsupported method'})
     try:
         return perform(request.params)
     except Exception as err:
         traceback.print_exc()
         self.__log_err(err)
         return db_proto.Response(code=DBRespCode.FAIL)
Exemplo n.º 15
0
    def NEWUSR(self, params):
        name = params['name'][-1]
        passwd = params['passwd'][-1]
        if self.users.contains(Query()['name'] == name):
            return db_proto.Response(code=DBRespCode.FAIL)

        self.users.insert({
            'name': name,
            'passwd': passwd,
            'registerDate': time.ctime(),
            'logged': False
        })
        return db_proto.Response(code=DBRespCode.OK)
Exemplo n.º 16
0
 def USROFF(self, params):
     ssid = params['ssid'][-1]
     self.users.update({'logged': False}, Query()['SSID'] == ssid)
     self.users.update(delete('lastAct'), Query()['SSID'] == ssid)
     self.users.update(delete('client_ip'), Query()['SSID'] == ssid)
     self.users.update(delete('SSID'), Query()['SSID'] == ssid)
     return db_proto.Response(code=DBRespCode.OK)
Exemplo n.º 17
0
 def perform(self, request):
     perform = getattr(self, request.method, None)
     if not perform:
         raise Exception('Unsupported request method')
     try:
         return perform(request.params)
     except Exception as err:
         self.__log_err(err)
         return db_proto.Response(code=DBRespCode.FAIL)
Exemplo n.º 18
0
 def DROPSESS(self, params):
     # Removes session with given ssid
     # Requires: `ssid`
     #
     ssid = params['ssid']
     sess = self.sessions.get(Query()['ssid'] == ssid)
     if sess is not None:
         self.sessions.remove(doc_ids=[sess.doc_id])
     return db_proto.Response(code=DBRespCode.OK)
Exemplo n.º 19
0
 def FINDCHNLBYTGT(self, params):
     uid = params['uid']
     status = params.get('status')
     if status is not None:
         chnls = self.channels.search((Query()['target']['uid'] == uid)
                                      & (Query()['status'] == status))
     else:
         chnls = self.channels.search(Query()['target']['uid'] == uid)
     return db_proto.Response(code=DBRespCode.OK, data=chnls)
Exemplo n.º 20
0
 def GETNAMESBYIDS(self, params):
     # Return user names for given uids
     # Requires: `uids`
     #
     names = []
     for uid in params['uids']:
         usr = self.users.get(Query()['uid'] == uid)
         if usr is not None:
             names.append((uid, usr['name']))
     return db_proto.Response(code=DBRespCode.OK, data=names)
Exemplo n.º 21
0
 def USRON(self, params):
     name = params['name'][-1]
     client_ip = params['client_ip'][-1]
     ssid = uuid.uuid4().hex
     self.users.update(
         {
             'logged': True,
             'client_ip': client_ip,
             'SSID': ssid,
             'lastAct': int(time.time())
         },
         Query()['name'] == name)
     return db_proto.Response(code=DBRespCode.OK, data=[ssid])
Exemplo n.º 22
0
 def CREATEUSR(self, params):
     # Create new user if possible
     # Returns uid of created user
     # Requires: `name`, `passwd`, `email`
     #
     if self.users.contains(Query()['name'] == params['name']):
         return db_proto.Response(
             code=DBRespCode.FAIL)  # Name must be unique
     token = create_unique_token([])
     doc_id = self.users.insert({
         'name': params['name'],
         'email': params['email'],
         'verified': False,
         'verify_token': token,
         'registerDate': time.ctime()
     })
     uid = SEED + doc_id
     self.users.update({'uid': uid}, doc_ids=[doc_id])
     self.private.insert({'uid': uid, 'passwd': params['passwd']})
     return db_proto.Response(code=DBRespCode.OK,
                              data={
                                  'uid': uid,
                                  'verify_token': token
                              })
Exemplo n.º 23
0
    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)
Exemplo n.º 24
0
 def CREATESESS(self, params):
     # Creates session for user
     # Returns generated ssid
     # Requires: `uid`
     #
     for i in range(0, 10):
         ssid = uuid.uuid4().hex
         SSIDs = [sess['ssid'] for sess in self.sessions.all()]
         if ssid not in SSIDs:
             break
     else:
         raise Exception('Number of attempts exceeded')
     self.sessions.upsert(
         {
             'uid': params['uid'],
             'ssid': ssid,
             'lastUpd': int(time.time())
         },
         Query()['uid'] == params['uid'])
     return db_proto.Response(code=DBRespCode.OK, data={'ssid': ssid})
Exemplo n.º 25
0
    def send(self, request):
        query = request.bytes
        ipc = socket.socket(socket.AF_UNIX)
        ipc.settimeout(self.sock_timeout)
        try:
            ipc.connect(self.ipc_path)
        except socket.timeout:
            raise ClientError('DB is not answering')

        try:
            ipc.sendall(query)
        except InterruptedError:
            try:
                ipc.sendall(query)
            except InterruptedError:
                raise ClientError('Sending query malformed')

        response = self._recv(ipc)
        ipc.close()

        return db_proto.Response(response)
Exemplo n.º 26
0
 def LISTUSR(self, params):
     data = []
     for user in self.users:
         data.append(user['name'])
     return db_proto.Response(code=DBRespCode.OK, data=data)
Exemplo n.º 27
0
 def CHECKUSR(self, params):
     name = params['name'][-1]
     if self.users.contains(Query()['name'] == name):
         return db_proto.Response(code=DBRespCode.OK)
     return db_proto.Response(code=DBRespCode.FAIL)
Exemplo n.º 28
0
 def DROPCHNL(self, params):
     chid = params['chid']
     chnl = self.channels.get(Query()['chid'] == chid)
     if chnl is not None:
         self.channels.remove(doc_ids=[chnl.doc_id])
     return db_proto.Response(code=DBRespCode.OK)
Exemplo n.º 29
0
 def ONLINEUIDS(self, params):
     # Returns list of uids of logged users
     # Requires: -
     #
     uids = [sess['uid'] for sess in self.sessions.all()]
     return db_proto.Response(code=DBRespCode.OK, data={'uids': uids})