Esempio n. 1
0
class LoginHandler(UserHandler):
    def initialize(self, service_config, mysql_handler, redis_handler, LOG):
        super(UserHandler, self).initialize()
        self.mysql_handler = mysql_handler
        self.redis_handler = redis_handler
        self.LOG = LOG
        self.user = User(mysql_handler, LOG)
        self.picture = Picture(mysql_handler, LOG)
        self.rsp_handler = CommResponse()
        self.show_account = service_config['show_account']
        return

    def verify_security_code(self, user_phone, security_code):
        key = 'security:%s' % user_phone
        field = 'security_code'
        save_code = self.redis_handler.redis_conn.hget(key, field)
        if security_code.upper() == save_code:
            self.redis_handler.redis_conn.delete(key)
            self.LOG.info('this user [%s] sms verify successful.' % user_phone)
            return True
        else:
            self.LOG.error('this user [%s] sms verify failed.' % user_phone)
            return False

    def post(self):
        self.LOG.debug('this is %s' % self.__class__.__name__)
        try:
            request_json = json.loads(self.request.body)
            self.LOG.info(request_json)
            user_phone = request_json['user_phone']
            user_phone_mno = request_json['user_phone_mno']
            security_code = request_json['security_code']
            user_login_mobile_uuid = request_json['user_login_mobile_uuid']
        except Exception as e:
            self.LOG.error('parameters error.')
            self.rsp_msg = self.rsp_handler.generate_rsp_msg('21001', None)
            self.write(self.rsp_msg)
            return

        if user_phone != self.show_account:
            if not self.verify_security_code(user_phone, security_code):
                self.rsp_msg = self.rsp_handler.generate_rsp_msg('21002', None)
                self.write(self.rsp_msg)
                return

        user_info = self.get_self_info(user_phone)
        if user_info:
            if user_info['login_status'] == 'login' and user_info['user_login_mobile_uuid'] != user_login_mobile_uuid:
                modify_info = {
                    'user_login_mobile_uuid': user_login_mobile_uuid
                }
            else: #elif user_info['login_status'] != 'login':
                modify_info = {
                    'login_status': 'login',
                    'user_login_mobile_uuid': user_login_mobile_uuid 
                }
            self.user.modify_user(user_phone, modify_info)
            user_info['user_login_mobile_uuid'] = user_login_mobile_uuid
            rsp_data = {
                'rsp_data': {
                    'user': user_info
                }
            }
            self.rsp_msg = self.rsp_handler.generate_rsp_msg('200', rsp_data)
            self.mysql_handler.commit_db()
            self.write(self.rsp_msg)
            return

        ret, user_id = self.user.add_user(user_phone, user_phone_mno, user_login_mobile_uuid)
        if not ret:
            self.rsp_msg = self.rsp_handler.generate_rsp_msg('21999', None)
            self.mysql_handler.rollback_db()
            self.write(self.rsp_msg)
            return
        user_info = self.get_self_info(user_phone)
        rsp_data = {
            'rsp_data': {
                'user': user_info
            }
        }
        self.rsp_msg = self.rsp_handler.generate_rsp_msg('200', rsp_data)
        self.LOG.info('user [%s] login successful.' % user_phone)
        self.LOG.debug(self.rsp_msg)
        self.mysql_handler.commit_db()
        self.write(self.rsp_msg)
        return