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())
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)
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)