def register_application(db: Session, app_name, redirect_url=None, algorithm="HS256", enable_sso=False): redirect_url = redirect_url if redirect_url is not None else "" client_id = generate_client_id() client_secret = generate_client_secret() created_time = round(int(time.time())) updated_time = created_time is_deleted = 0 try: app = models.ApplicationTab(app_name=app_name, client_id=client_id, client_secret=client_secret, redirect_url=redirect_url, algorithm=algorithm, enable_sso=enable_sso, is_deleted=is_deleted, created_time=created_time, updated_time=updated_time) db = db.using_bind() db.add(app) db.commit() # db_.refresh(app) return 1 except Exception as err: log.warn("register_application_fail| error = %s", err) return 0
def update_application(db: Session, app_id, app_name=None, redirect_url=None, enable_sso=None, algorithm=None): updated_time = round(int(time.time())) model = db.using_bind("slave").query(models.ApplicationTab).filter( models.ApplicationTab.id == app_id).first() if not model: return 0 try: if app_name is not None: model.app_name = app_name if redirect_url is not None: model.redirect_url = redirect_url if enable_sso is not None: model.enable_sso = enable_sso if algorithm is not None: model.algorithm = algorithm model.updated_time = updated_time db = db.using_bind("master") db.commit() db.flush() return 1 except Exception as err: log.warn("update_application_fail|error=%s", err) return 0
def create_user_info(user_name, password, full_name, email, phone, db: Session): time_ts = round(int(time.time())) password = password salt_key = bcrypt.gensalt() hash_password = bcrypt.hashpw(password.encode("utf-8"), salt_key) user_name = user_name full_name = full_name email = email phone = phone is_deleted = 0 created_time = time_ts updated_time = time_ts try: db_user = models.UserInfoTab(user_name=user_name, password=hash_password.decode("utf-8"), salt_key=salt_key.decode("utf-8"), full_name=full_name, email=email, phone=phone, is_deleted=is_deleted, created_time=created_time, updated_time=updated_time) db = db.using_bind("master") db.add(db_user) db.commit() # db.using_bind("master").refresh(db_user) return 1 except Exception as err: log.warn("create_user_fail|error=%s", err) return 0
def _sync_player_dex(data_contract, address, transform_contract=None, base_stats_refresh=False): # get monster dex size dex_size = data_contract.call().getMonsterDexSize(address) dex_size = int(dex_size) if dex_size == 0: first_monster_id = int(data_contract.call().getMonsterObjId(address, 0)) if first_monster_id != 0: log.warn("sync_player_invalid|address=%s,dex_size=%s,first_monster_id=%s", address, dex_size, first_monster_id) return False return True monster_id_set = set() for index in range(dex_size): monster_id = data_contract.call().getMonsterObjId(address, index) monster_id_set.add(int(monster_id)) #log.info("sync_player_dex|monster_id_set=%s", monster_id_set) # get monster id which that user current has in db current_monster_ids = get_monster_ids(address) for current_monster_id in current_monster_ids: monster_id_set.add(current_monster_id) total_add = 0 total_update = 0 for monster_id in monster_id_set: result, add_flag, update_flag = _sync_monster_id(data_contract, monster_id, transform_contract, base_stats_refresh) if result is False: return False total_add += add_flag total_update += update_flag #log.info("sync_player_dex|address=%s,total_add=%s,total_update=%s", address, total_add, total_update) return True
def check_password_user(pass1, pass2): try: if bcrypt.checkpw(pass1.encode("utf-8"), pass2.encode("utf-8")): return True except Exception as err: log.warn("check_password_fail|error=%s", err) return False
def crawl_adventure_presale(): infura_client = InfuraClient(INFURA_API_URL) adventure_presale_contract = infura_client.getAdventurePresaleContract() current_ts = get_timestamp() site_id_index = 1 while site_id_index <= 54: site_item_index = 0 while site_item_index < 10: try: (bidder, bid_id, site_id, amount, bid_time ) = adventure_presale_contract.call().getBidBySiteIndex( site_id_index, site_item_index) if bid_id == 0: log.warn( "query_adventure_presale_invalid|site_id=%s,site_index=%s", site_id_index, site_item_index) time.sleep(3) continue except Exception as error: logging.exception( "query_adventure_presale_exception|site_id=%s,site_index=%s", site_id_index, site_item_index) time.sleep(3) continue bidder = bidder.lower() record = EtheremonDB.EmaAdventurePresaleTab.objects.filter( bid_id=bid_id).first() if record: record.site_id = site_id record.bid_id = bid_id record.site_index = site_item_index record.bidder = bidder record.bid_amount = amount record.bid_time = bid_time else: record = EtheremonDB.EmaAdventurePresaleTab( site_id=site_id, site_index=site_item_index, bid_id=bid_id, bidder=bidder, bid_amount=amount, bid_time=bid_time, token_id=0, update_time=current_ts) log.data( "adventure_presale_query|site_id=%s,site_index=%s,bid_id=%s", site_id_index, site_item_index, bid_id) record.save() site_item_index += 1 site_id_index += 1
def update_session(user_id, session, expired_time, db: Session): updated_time = get_timestamp() model = get_session_by_user_id(user_id, db) if not model: return 0 try: model.session = session model.expired_time = expired_time model.updated_time = updated_time db = db.using_bind("master") db.commit() db.flush() return 1 except Exception as err: log.warn("update_session_fail|err=%s", err) return 0
def update_castle(): castle_class = web3.eth.contract(abi=CASTLE_ABI) castle_contract = castle_class(CASTLE_ADDRESS) castle_length = castle_contract.call().totalCastle() if DEBUG: print "castle_length: ", castle_length log.info('update_castle_length|castle_length=%s', castle_length) castle_id = 1 with open(ID_LOG_FILE, 'r') as f: castle_id = int(f.read()) if DEBUG: print "castle id start:", castle_id log.info('update_castle_start|castle_start_id=%s', castle_id) while castle_id <= castle_length: (name, owner, brick_number, total_win, total_lose, create_time) = castle_contract.call().getCastleStats(castle_id) (monster_id_1, monster_id_2, monster_id_3, support_id_1, support_id_2, support_id_3) = castle_contract.call().getCastleObjInfo(castle_id) if DEBUG: print "castle id %s %s %s" % (castle_id, type(name), name.encode('utf-8')) log.info('update_castle|caslte_id=%s', castle_id) try: EtheremonDB.CastleTab.objects.create( castle_id=castle_id, name=name, owner_address=owner, brick_number=brick_number, castle_create_time=create_time, monster_id_1=monster_id_1, monster_id_2=monster_id_2, monster_id_3=monster_id_3, supporter_id_1=support_id_1, supporter_id_2=support_id_2, supporter_id_3=support_id_3, total_win=total_win, total_lose=total_lose, extra_data=json.dumps({})) except IntegrityError: log.warn('update_castle|re_update_id=%s', castle_id) castle_id += 1 with open(ID_LOG_FILE, 'w') as f: f.write(str(castle_id))
def crawl_monster_egg_data(): infura_client = InfuraClient(INFURA_API_URL) current_block_number = infura_client.getCurrentBlock() transform_data_contract = infura_client.getTransformDataContract() start_time = time.time() total_egg_no = transform_data_contract.call().totalEgg() log.data("start_crawl_egg_data|total_egg=%s,block=%s", total_egg_no, current_block_number) index = 1 while index <= total_egg_no: try: (egg_id, mother_id, class_id, trainer_address, hatch_time, monster_id) = transform_data_contract.call().getEggDataById(index) except Exception as error: log.warn("query_borrow_data_error|index=%s,error=%s", index, error.message) time.sleep(5) infura_client = InfuraClient(INFURA_API_URL) transform_data_contract = infura_client.getTransformDataContract() continue egg_record = EtheremonDB.EmaEggDataTab.objects.filter( egg_id=index).first() if egg_record: egg_record.mother_id = mother_id egg_record.class_id = class_id egg_record.trainer = str(trainer_address).lower() egg_record.hatch_time = int(hatch_time) egg_record.new_obj_id = monster_id egg_record.create_time = start_time else: EtheremonDB.EmaEggDataTab.objects.create( egg_id=index, mother_id=mother_id, class_id=class_id, trainer=str(trainer_address).lower(), hatch_time=int(hatch_time), new_obj_id=monster_id, create_time=start_time) index += 1 log.data("end_crawl_egg_data|total_egg=%s,block=%s,elapsed=%s", total_egg_no, current_block_number, time.time() - start_time)
def create_new_session(user_id, session_id, session, expired_time, db: Session): created_time = updated_time = get_timestamp() try: db_token = models.SsoSessionTab(session_id=session_id, session=session, user_id=user_id, expired_time=expired_time, created_time=created_time, updated_time=updated_time) db = db.using_bind("master") db.add(db_token) db.commit() # db.refresh(db_token) return 1 except Exception as err: log.warn("create_new_session_fail|error=%s", err) return 0
def fix_bonus_egg(): infura_client = InfuraClient(INFURA_API_URL) current_block_number = infura_client.getCurrentBlock() mother_egg_records = EtheremonDB.EmaEggDataTab.objects.filter( mother_id__gt=0).filter( class_id__lt=25).values('mother_id').distinct() mother_id = [] for mother_egg_record in mother_egg_records: mother_id.append(mother_egg_record["mother_id"]) # monster transform_contract = infura_client.getTransformContract() monster_records = list( EtheremonDB.EmaMonsterDataTab.objects.filter( monster_id__in=mother_id).filter(egg_bonus__gt=0).all()) count = 0 while count < len(monster_records): monster_record = monster_records[count] try: egg_bonus = transform_contract.call().getBonusEgg( monster_record.monster_id) except Exception as error: log.warn("get_egg_bonus_error|monster_id=%s,error=%s", monster_record.monster_id, error) time.sleep(4) continue if monster_record.egg_bonus != egg_bonus: log.info( "fix_egg_bonus|monster_id=%s,before_bonus=%s,after_bonus=%s,block=%s", monster_record.monster_id, monster_record.egg_bonus, egg_bonus, current_block_number) EtheremonDB.EmaMonsterDataTab.objects.filter( monster_id=monster_record.monster_id).update( egg_bonus=egg_bonus) else: log.info("correct_egg_bonus|monster_id=%s", monster_record.monster_id) count += 1
def fix_egg_info(): infura_client = InfuraClient(INFURA_API_URL) transform_data_contract = infura_client.getTransformDataContract() egg_records = list( EtheremonDB.EmaEggDataTab.objects.filter(class_id=0).all()) index = 0 while index < len(egg_records): egg_record = egg_records[index] (egg_id, mother_id, class_id, trainer_address, hatch_time, monster_id) = transform_data_contract.call().getEggDataById( egg_record.egg_id) if class_id is 0: log.warn("invalid_egg_data|egg_id=%s", index) continue egg_record.mother_id = mother_id egg_record.class_id = class_id egg_record.trainer = str(trainer_address).lower() egg_record.hatch_time = int(hatch_time) egg_record.new_obj_id = monster_id egg_record.save() index += 1