Ejemplo n.º 1
0
    def validate(self, request):
        '''Check a validation code and generates a user token to login with.'''
        code = request.args['c'][0]
        if not code or len(code) != utils.VALIDATION_CODE_LENGTH:
            return utils.bad_request(request)

        # lookup the verification code
        valdb = database.validations(self.broker.db)

        userid = valdb.get_userid(code)
        if userid:
            # damn unicode!
            userid = str(userid)

            # delete verification entry in validations table
            valdb.delete(code)
            # touch user so we get a first presence
            self.broker.usercache.touch_user(userid)

            # here is your token
            log.debug("generating token for %s" % (userid, ))
            str_token = token.user_token(
                userid, str(self.broker.config['server']['fingerprint']))
            return {'auth': str_token, 'userid': userid}

        else:
            return utils.not_found(request)
Ejemplo n.º 2
0
    def validate_user(self, tx_id, code):
        if not code or len(code) != utils.VALIDATION_CODE_LENGTH:
            return c2s.ValidationResponse.STATUS_FAILED, None

        # lookup the verification code
        valdb = database.validations(self.broker.db)

        userid = valdb.get_userid(code)
        if userid:
            # damn unicode!
            userid = str(userid)

            # delete verification entry in validations table
            valdb.delete(code)
            # touch user so we get a first presence
            self.broker.usercache.touch_user(userid)

            # here is your token
            log.debug("[%s] generating token for %s" % (tx_id, userid))
            str_token = token.user_token(userid,
                str(self.config['server']['fingerprint']))
            return c2s.ValidationResponse.STATUS_SUCCESS, str_token

        else:
            return c2s.ValidationResponse.STATUS_FAILED, None
Ejemplo n.º 3
0
    def validate_user(self, tx_id, code):
        if not code or len(code) != utils.VALIDATION_CODE_LENGTH:
            return c2s.ValidationResponse.STATUS_FAILED, None

        # lookup the verification code
        valdb = database.validations(self.broker.db)

        userid = valdb.get_userid(code)
        if userid:
            # damn unicode!
            userid = str(userid)

            # delete verification entry in validations table
            valdb.delete(code)
            # touch user so we get a first presence
            self.broker.usercache.touch_user(userid)

            # here is your token
            log.debug("[%s] generating token for %s" % (tx_id, userid))
            str_token = token.user_token(
                userid, str(self.config['server']['fingerprint']))
            return c2s.ValidationResponse.STATUS_SUCCESS, str_token

        else:
            return c2s.ValidationResponse.STATUS_FAILED, None
Ejemplo n.º 4
0
    def validate(self, request):
        '''Check a validation code and generates a user token to login with.'''
        code = request.args['c'][0]
        if not code or len(code) != utils.VALIDATION_CODE_LENGTH:
            return utils.bad_request(request)

        # lookup the verification code
        valdb = database.validations(self.broker.db)

        userid = valdb.get_userid(code)
        if userid:
            # damn unicode!
            userid = str(userid)

            # delete verification entry in validations table
            valdb.delete(code)
            # touch user so we get a first presence
            self.broker.usercache.touch_user(userid)

            # here is your token
            log.debug("generating token for %s" % (userid, ))
            str_token = token.user_token(userid,
                str(self.broker.config['server']['fingerprint']))
            return {'auth': str_token, 'userid': userid }

        else:
            return utils.not_found(request)
Ejemplo n.º 5
0
    def _register_sms(self, n):
        # validate phone number syntax
        if not n or len(n.strip()) == 0:
            log.debug("number empty - %s" % n)
            return c2s.RegistrationResponse.STATUS_INVALID_USERNAME

        phone = phone_num = n.strip()
        # exclude the initial plus to verify the digits
        if (phone[0] == '+'):
            phone_num = phone[1:]

        # not all digits...
        if not phone_num.isdigit():
            log.debug("number is not all-digits - %s" % phone_num)
            return c2s.RegistrationResponse.STATUS_INVALID_USERNAME

        # replace double-zero with plus
        if phone[0:2] == '00':
            phone = '+' + phone[2:]

        # insert validation record
        # TODO do not use directly - let the storage module do it
        valdb = database.validations(self.broker.db)
        userid = utils.sha1(phone)

        # throttling :P
        if valdb.get_code(userid, True):
            return c2s.RegistrationResponse.STATUS_THROTTLING

        userid += utils.rand_str(8, utils.CHARSBOX_AZN_UPPERCASE)
        ret = valdb.update(userid)
        if ret[0] > 0:
            # send SMS
            code = ret[1]
            sms_from = self.config['registration']['from']

            if self.config['registration']['android_emu']:
                # android emulation
                import os
                os.system('adb emu sms send %s %s' % (sms_from, code))
            else:
                # send sms
                from nexmomessage import NexmoMessage
                msg = {
                    'reqtype' : 'json',
                    'username' : self.config['registration']['nx.username'],
                    'password': self.config['registration']['nx.password'],
                    'from': sms_from,
                    'to': phone
                }
                sms = NexmoMessage(msg)
                # FIXME send just the code for now
                sms.set_text_info(code)
                js = sms.send_request()
                log.debug("sms sent [response=%s]" % js)

            return c2s.RegistrationResponse.STATUS_CONTINUE
        else:
            return c2s.RegistrationResponse.STATUS_ERROR
Ejemplo n.º 6
0
    def _register_sms(self, n):
        # validate phone number syntax
        if not n or len(n.strip()) == 0:
            log.debug("number empty - %s" % n)
            return c2s.RegistrationResponse.STATUS_INVALID_USERNAME

        phone = phone_num = n.strip()
        # exclude the initial plus to verify the digits
        if (phone[0] == '+'):
            phone_num = phone[1:]

        # not all digits...
        if not phone_num.isdigit():
            log.debug("number is not all-digits - %s" % phone_num)
            return c2s.RegistrationResponse.STATUS_INVALID_USERNAME

        # replace double-zero with plus
        if phone[0:2] == '00':
            phone = '+' + phone[2:]

        # insert validation record
        # TODO do not use directly - let the storage module do it
        valdb = database.validations(self.broker.db)
        userid = utils.sha1(phone)

        # throttling :P
        if valdb.get_code(userid, True):
            return c2s.RegistrationResponse.STATUS_THROTTLING

        userid += utils.rand_str(8, utils.CHARSBOX_AZN_UPPERCASE)
        ret = valdb.update(userid)
        if ret[0] > 0:
            # send SMS
            code = ret[1]
            sms_from = self.config['registration']['from']

            if self.config['registration']['android_emu']:
                # android emulation
                import os
                os.system('adb emu sms send %s %s' % (sms_from, code))
            else:
                # send sms
                from nexmomessage import NexmoMessage
                msg = {
                    'reqtype': 'json',
                    'username': self.config['registration']['nx.username'],
                    'password': self.config['registration']['nx.password'],
                    'from': sms_from,
                    'to': phone
                }
                sms = NexmoMessage(msg)
                # FIXME send just the code for now
                sms.set_text_info(code)
                js = sms.send_request()
                log.debug("sms sent [response=%s]" % js)

            return c2s.RegistrationResponse.STATUS_CONTINUE
        else:
            return c2s.RegistrationResponse.STATUS_ERROR
Ejemplo n.º 7
0
 def revalidate(self):
     valdb = database.validations(self.broker.db)
     userid = self.userid[:utils.USERID_LENGTH] + utils.rand_str(8, utils.CHARSBOX_AZN_UPPERCASE)
     log.debug("revalidating user %s as %s" % (self.userid, userid))
     ret = valdb.update(userid)
     if ret[0] > 0:
         return ret[1]
     else:
         return False
Ejemplo n.º 8
0
 def revalidate(self):
     valdb = database.validations(self.broker.db)
     userid = self.userid[:utils.USERID_LENGTH] + utils.rand_str(
         8, utils.CHARSBOX_AZN_UPPERCASE)
     log.debug("revalidating user %s as %s" % (self.userid, userid))
     ret = valdb.update(userid)
     if ret[0] > 0:
         return ret[1]
     else:
         return False
Ejemplo n.º 9
0
 def _update_ds(self):
     if self._db:
         self.userdb = database.usercache(self._db)
         self.msgdb = database.messages(self._db)
         self.attdb = database.attachments(self._db)
         self.valdb = database.validations(self._db)
     else:
         self.userdb = None
         self.msgdb = None
         self.attdb = None
         self.valdb = None
Ejemplo n.º 10
0
 def _update_ds(self):
     if self._db:
         self.userdb = database.usercache(self._db)
         self.msgdb = database.messages(self._db)
         self.attdb = database.attachments(self._db)
         self.valdb = database.validations(self._db)
     else:
         self.userdb = None
         self.msgdb = None
         self.attdb = None
         self.valdb = None