def onSendError(self,err, disconnect_req):
     if self.db.query(models.TrOnline).filter_by(nas_addr=disconnect_req.nas_addr,
                                                 acct_session_id=disconnect_req.acct_session_id).count() > 0:
         radius_acct_stop.RadiusAcctStop(self.application.db_engine,
                                         self.application.mcache,
                                         self.application.aes, disconnect_req).acctounting()
     self.self.render_success(msg=u"send disconnect done! %s" % err.getErrorMessage())
Beispiel #2
0
 def onSendResp(self, resp, disconnect_req):
     if self.db.query(models.TrOnline).filter_by(
         nas_addr=disconnect_req.nas_addr, acct_session_id=disconnect_req.acct_session_id).count() > 0:
         radius_acct_stop.RadiusAcctStop(self.application.db_engine,
                                         self.application.mcache,
                                         self.application.aes,disconnect_req).acctounting()
     self.render_json(code=0, msg=u"send disconnect ok! coa resp : %s" % resp)
 def onSendError(self,err, disconnect_req):
     if disconnect_req and self.db.query(models.TrOnline).filter_by(
             nas_addr=disconnect_req.nas_addr,
             acct_session_id=disconnect_req.acct_session_id).count() > 0:
         radius_acct_stop.RadiusAcctStop(
             self.dbengine,self.mcache,self.aes, disconnect_req).acctounting()
     logger.error(u"send disconnect done! %s" % err.getErrorMessage())
 def onSendResp(self, resp, disconnect_req):
     if disconnect_req and self.db.query(models.TrOnline).filter_by(
             nas_addr=disconnect_req.nas_addr,
             acct_session_id=disconnect_req.acct_session_id).count() > 0:
         radius_acct_stop.RadiusAcctStop(
             self.dbengine,self.mcache,self.aes,disconnect_req).acctounting()
     logger.info(u"send disconnect ok! coa resp : %s" % resp)
Beispiel #5
0
    def post(self):
        username = self.get_argument('username',None)
        nas_addr = self.get_argument('nas_addr',None)
        session_id = self.get_argument('session_id',None)
        nas = self.db.query(models.TrBas).filter_by(ip_addr=nas_addr).first()
        if nas_addr and not nas:
            self.db.query(models.TrOnline).filter_by(
                nas_addr=nas_addr,
                acct_session_id=session_id
            ).delete()
            self.db.commit()
            self.render_json(code=1,msg=u"nasaddr not exists, online clear!")
            return

        if nas_addr and not session_id:
            onlines = self.db.query(models.TrOnline).filter_by(nas_addr=nas_addr)
            for online in onlines:
                radius_acct_stop.RadiusAcctStop(self.application.db_engine,
                                                self.application.mcache,
                                                self.application.aes, self.get_request(online)).acctounting()
            self.render_json(code=1,msg=u"unlock all online done!")
            return


        online = self.db.query(models.TrOnline).filter_by(
            nas_addr=nas_addr, acct_session_id=session_id).first()

        if not online:
            self.render_json(code=1,msg=u"online not exists")
            return


        if not CustomerOnlineUnlockHandler.dictionary:
            CustomerOnlineUnlockHandler.dictionary = dictionary.Dictionary(
            os.path.join(os.path.dirname(toughradius.__file__), 'dictionarys/dictionary'))

        deferd = authorize.disconnect(
            int(nas.vendor_id or 0), 
            CustomerOnlineUnlockHandler.dictionary, 
            nas.bas_secret, 
            nas.ip_addr, 
            coa_port=int(nas.coa_port or 3799), 
            debug=True,
            User_Name=username,
            NAS_IP_Address=nas.ip_addr,
            Acct_Session_Id=session_id)


        deferd.addCallback(
            self.onSendResp, self.get_request(online)).addErrback(
            self.onSendError, self.get_request(online))

        return deferd
    def event_clear_online(self, account_number,nas_addr, acct_session_id):
        try:
            with make_db(self.db) as db:
                logger.info("event clear expire online [username:{0}] {1} {2}".format(account_number, nas_addr, acct_session_id))
                nas = db.query(models.TrBas).filter_by(ip_addr=nas_addr).first()
                if nas_addr and  not nas:
                    db.query(models.TrOnline).filter_by(
                        nas_addr=nas_addr,acct_session_id=acct_session_id).delete()
                    db.commit()                
                    return

                online = db.query(models.TrOnline).filter_by(
                        nas_addr=nas_addr, acct_session_id=acct_session_id).first()            
                clear_req = self.get_request(online)
                radius_acct_stop.RadiusAcctStop(self.dbengine,self.mcache,self.aes,clear_req).acctounting()
                logger.info(u"系统触发用户过期清理成功: [username:%s] OnlineInfo: %s "%(str(account_number), json.dumps(clear_req)),trace="event" )
        except Exception as err:
            logger.exception(err)