예제 #1
0
 def parse_request(self):
     try:
         return apiutils.parse_request(self.settings.config.system.secret,
                                       self.request.body)
     except Exception as err:
         logger.error(u"api authorize parse error, %s" %
                      utils.safeunicode(traceback.format_exc()))
         raise ValueError(u"Error: %s" % utils.safeunicode(err.message))
예제 #2
0
 def process(self, msgid, message):
     self.syslog.info("accept acct message @ %s : %r" % (self.listen, utils.safeunicode(message)))
     try:
         req_msg = apiutils.parse_request(self.secret, message)
         if req_msg.get("action") == 'ping':
             return self.agent.reply(msgid, apiutils.make_message(self.secret,code=0))
     except Exception as err:
         resp = apiutils.make_message(self.secret, code=1, msg=utils.safestr(err.message))
         self.agent.reply(msgid, resp)
         return
예제 #3
0
    def process(self, msgid, message):
        self.syslog.info("accept auth message @ %s : %r" % (self.listen, utils.safeunicode(message)))
        @self.cache.cache(expire=600)   
        def get_account_by_username(username):
            return self.db.query(models.TrAccount).filter_by(account_number=username).first()

        @self.cache.cache(expire=600)   
        def get_product_by_id(product_id):
            return self.db.query(models.TrProduct).filter_by(id=product_id).first()

        try:
            req_msg = apiutils.parse_request(self.secret, message)
            if req_msg.get("action") == 'ping':
                return self.agent.reply(msgid, apiutils.make_message(self.secret,code=0))
            if 'username' not in req_msg:
                raise ValueError('username is empty')
        except Exception as err:
            resp = apiutils.make_message(self.secret, code=1, msg=utils.safestr(err.message))
            self.agent.reply(msgid, resp)
            return
            
        try:
            username = req_msg['username']
            account = get_account_by_username(username)
            if not account:
                apiutils.make_message(self.secret, code=1, msg=u'user  {0} not exists'.format(utils.safeunicode(username)))
                self.agent.reply(msgid, resp)
                return
                
            passwd = self.app.aes.decrypt(account.password)
            product = get_product_by_id(account.product_id)

            result = dict(
                code=0,
                msg='success',
                username=username,
                passwd=passwd,
                input_rate=product.input_max_limit,
                output_rate=product.output_max_limit,
                attrs={
                    "Session-Timeout"      : 86400,
                    "Acct-Interim-Interval": 300
                }
            )

            resp = apiutils.make_message(self.secret, **result)
            self.agent.reply(msgid, resp)
            self.syslog.info("send auth response %r" % (utils.safeunicode(resp)))
        except Exception as err:
            self.syslog.error(u"api authorize error %s" % utils.safeunicode(err.message))
            resp = apiutils.make_message(self.secret, code=1, msg=utils.safestr(err.message))
            return self.agent.reply(msgid, resp)
예제 #4
0
 def process(self, msgid, message):
     self.syslog.info("accept acct message @ %s : %r" %
                      (self.listen, utils.safeunicode(message)))
     try:
         req_msg = apiutils.parse_request(self.secret, message)
         if req_msg.get("action") == 'ping':
             return self.agent.reply(
                 msgid, apiutils.make_message(self.secret, code=0))
     except Exception as err:
         resp = apiutils.make_message(self.secret,
                                      code=1,
                                      msg=utils.safestr(err.message))
         self.agent.reply(msgid, resp)
         return
예제 #5
0
 def parse_request(self):
     try:
         return apiutils.parse_request(self.settings.config.system.secret, self.request.body)
     except Exception as err:
         self.syslog.error(u"api authorize parse error, %s" % utils.safeunicode(traceback.format_exc()))
         raise ValueError(u"parse params error")
예제 #6
0
 def parse_request(self):
     return apiutils.parse_request(self.settings.config.system.secret,self.request.body)
예제 #7
0
    def process(self, msgid, message):
        self.syslog.info("accept auth message @ %s : %r" %
                         (self.listen, utils.safeunicode(message)))

        @self.cache.cache(expire=600)
        def get_account_by_username(username):
            return self.db.query(
                models.TrAccount).filter_by(account_number=username).first()

        @self.cache.cache(expire=600)
        def get_product_by_id(product_id):
            return self.db.query(
                models.TrProduct).filter_by(id=product_id).first()

        try:
            req_msg = apiutils.parse_request(self.secret, message)
            if req_msg.get("action") == 'ping':
                return self.agent.reply(
                    msgid, apiutils.make_message(self.secret, code=0))
            if 'username' not in req_msg:
                raise ValueError('username is empty')
        except Exception as err:
            resp = apiutils.make_message(self.secret,
                                         code=1,
                                         msg=utils.safestr(err.message))
            self.agent.reply(msgid, resp)
            return

        try:
            username = req_msg['username']
            account = get_account_by_username(username)
            if not account:
                apiutils.make_message(self.secret,
                                      code=1,
                                      msg=u'user  {0} not exists'.format(
                                          utils.safeunicode(username)))
                self.agent.reply(msgid, resp)
                return

            passwd = self.app.aes.decrypt(account.password)
            product = get_product_by_id(account.product_id)

            result = dict(code=0,
                          msg='success',
                          username=username,
                          passwd=passwd,
                          input_rate=product.input_max_limit,
                          output_rate=product.output_max_limit,
                          attrs={
                              "Session-Timeout": 86400,
                              "Acct-Interim-Interval": 300
                          })

            resp = apiutils.make_message(self.secret, **result)
            self.agent.reply(msgid, resp)
            self.syslog.info("send auth response %r" %
                             (utils.safeunicode(resp)))
        except Exception as err:
            self.syslog.error(u"api authorize error %s" %
                              utils.safeunicode(err.message))
            resp = apiutils.make_message(self.secret,
                                         code=1,
                                         msg=utils.safestr(err.message))
            return self.agent.reply(msgid, resp)
예제 #8
0
 def parse_form_request(self):
     try:
         return apiutils.parse_request(self.settings.config.system.secret, self.get_params())
     except Exception as err:
         logger.error(u"api authorize parse error, %s" % utils.safeunicode(traceback.format_exc()))
         raise ValueError(u"parse params error")
예제 #9
0
 def parse_request(self):
     return apiutils.parse_request(self.settings.config.system.secret,
                                   self.request.body)