def getAgent(self, bc, prot, userid, passwd): ma = ManageAgent(bc.dbconn, bc.cacheconn) if ma.resolveProtocol(prot) != userid: return False x = ma.verifyAgent(userid, passwd) if x['code'] == agent.AGST_FOUND: return x['agent'] return False
def web_trx(self, agent_id, product, msisdn, pin): bc = AgentNotifier() ma = ManageAgent(bc.dbconn, bc.cacheconn) hlrmap = HLRMap(bc.dbconn, bc.cacheconn) x = ma.verifyAgent(agent_id, '1234', True, False) if x['code'] in (agent.AGST_NOTFOUND, agent.AGST_NOTACTIVE): return json.dumps({'success': 0, 'reason': 'Agent not registered / not active'}) prod_c = DBCache(const.PRODUCT_PREFIX, config.DEFAULT_EXPIRE, const.PRODUCT_SQL) prod = prod_c.get(bc.dbconn, bc.cacheconn, product) if not prod: return json.dumps({'success': 0, 'reason': 'Invalid product id'}) msisdn = sanitizeMSISDN(msisdn) method = firstMethod(hlrmap, prod, msisdn) tran_id = self.topup(bc, x['agent'], msisdn, prod, method) return json.dumps({'success': 1, 'reason': '', 'tranid': tran_id})
class TopupParser(ProcessNotifyIn): def __init__(self): super(TopupParser, self).__init__('UNKN', 'INVL', 'TopupParser') self.agent_manager = ManageAgent(self.dbconn, self.cacheconn) self.dm = DepositMutation(5, self.dbconn, self.cacheconn) self.um = UnitMutation(5, self.dbconn, self.cacheconn) self.hlrmap = HLRMap(self.dbconn, self.cacheconn) cdf = config.DEFAULT_EXPIRE self.c_product = DBCache(const.PRODUCT_PREFIX, cdf, const.PRODUCT_SQL) self.c_price = DBCache(const.AGENTPRICE_PREFIX, cdf, const.AGENTPRICE_SQL) self.c_operator = DBCache(const.OPERATOR_PREFIX, cdf, const.OPERATOR_SQL, user_func={'prefix': lambda x: x.split(',')}) map(lambda x: x.setConn(self.dbconn, self.cacheconn), [ self.c_product, self.c_price, self.c_operator, ]) self.rx_check, self.rx_topup, self.rx_separator = (None, None, None) self._init2() self.log = mylogger('TopupParser', 'topupparser.log') self.to_db = [] self.parsed = [] self.handler = [ self.check, ] self.processUNKN = self.process def _init2(self): c = self.dbconn.cursor(MySQLdb.cursors.DictCursor) c.execute('SELECT `regex`,`separator` from `parse` where `name`=' \ '"topup" LIMIT 1') tmp = c.fetchone() self.rx_topup, self.rx_separator = tmp['regex'], tmp['separator'] c.execute('SELECT `regex` from `parse` where `name`=' \ '"initial_check" LIMIT 1') tmp = c.fetchone() self.rx_check = tmp['regex'] c.close() def check(self, r, tmp): def timeDifference(t): tmp = datetime.now() - datetime.strptime(t, '%y/%m/%d %H:%M:%S') if tmp.days >= 0: return tmp.seconds else: return -tmp.seconds parse_obj = re.match(self.rx_check, r['parameters'], re.IGNORECASE) if not parse_obj: return True parse_result = parse_obj.groupdict() if timeDifference(parse_result['time_sent']) > \ config.REQUEST_VALID_PERIOD: raise Timeout(self, r, tmp) prot = parse_result['protocol'] agent_id = self.agent_manager.resolveProtocol(prot) if not agent_id: self.writeNotifyOut(prot, 'agent_invalid') print 'AGST_NOTFOUND {0}'.format(prot) return True ag = self.agent_manager.verifyAgent(agent_id, 'xxxx') if ag['code'] == AGST_NOTFOUND or ag['code'] == AGST_NOTACTIVE: self.writeNotifyOut(prot, 'agent_invalid') print 'Reject non-active agent {0}'.format(agent_id) return True x = self.cmdList() _, _, _, _, msg = r['parameters'].split(',', 4) for c in x: cmd, _, _ = msg.partition(x[c]) if cmd.upper() == c: raise UNMS(self, r, tmp) parse_obj = re.match(self.rx_topup, r['parameters'], re.IGNORECASE) if not parse_obj: raise UNMS(self, r, tmp) parse_result = parse_obj.groupdict() try: self._topup(r['id'], agent_id, parse_result) except Error, e: if e.msg == AGST_NOTFOUND: self.writeNotifyOut(prot, 'agent_invalid') elif e.msg == AGST_NOTACTIVE: self.writeNotifyOut(prot, 'agent_invalid') elif e.msg == AGST_WRONGPIN: self.writeNotifyOut(prot, 'wrong_pin') elif e.msg == WRONG_REQ_FORMAT: self.writeNotifyOut(prot, 'wrong_req_format') finally: