def cloud_hell(): verify_cloud() route: str = list(request.args)[0] player: Player = Player.from_ckey(request.args.get('ckey')) if route == 'list': #Sure, f**k it, take everything. saves = dict() data = dict() x: db.CloudSave for x in player.saves: saves.update({x.save_name: x.save}) x: db.CloudData for x in player.data: data.update({x.key: x.value}) return jsonify({"saves": saves, "cdata": data}) if route == 'put': #Okay shit we actually have to store things. sav: CloudSave = session.query(CloudSave).filter( CloudSave.ckey == player.ckey).filter( CloudSave.save_name == request.args.get('name')).one_or_none() if sav is not None: #Delete the previously existing file. sav.update(request.args.get('data')) return jsonify({"status": "OK"}) sav = CloudSave.add(player.ckey, request.args.get('name'), request.args.get('data')) return jsonify({"status": "OK"}) if route == 'delete': #Find the cloud save by name and delete it. sav: CloudSave = session.query(CloudSave).filter( CloudSave.ckey == player.ckey).filter( CloudSave.save_name == request.args.get('name')).one_or_none() if sav is None: abort(400) #What the f**k do you want us to delete asshole? session.delete(sav) session.commit() return jsonify({"status": "OK"}) if route == 'dataput': #Abitrary, key-based write and update-only data storage. This one might get unpleasant. dat: CloudData = session.query(CloudData).filter( CloudData.ckey == player.ckey).filter( CloudData.key == request.args.get('key')).one_or_none() if dat is not None: dat.update(urllib.parse.unquote(request.args.get('value'))) return jsonify({"status": "OK"}) dat = CloudData.add(player.ckey, request.args.get('key'), urllib.parse.unquote(request.args.get('value'))) return jsonify({"status": "OK"}) if route == 'get': #Okay why does it f*****g call this they got them the first time wtf sav: CloudSave = session.query(CloudSave).filter( CloudSave.ckey == player.ckey).filter( CloudSave.save_name == request.args.get('name')).one_or_none() if sav is None: abort(400) #What the f**k do you want us to get asshole? return jsonify({"savedata": sav.save}) return jsonify({ "status": "error", "error": "Invalid Route. Contact Francinum." })
def get_alljobban(): check_allowed(True) allbans: list = list( session.query(db.JobBan).filter(db.JobBan.removed == 0).all()) ret: dict = dict() x: db.JobBan for x in allbans: if x.ckey in ret: ret[x.ckey].append(x.rank) else: ret[x.ckey]: list = list([x.rank]) return jsonify(ret)
def bans_sort_ip(): searchval:str = str(request.args.get('search[ip]')) if searchval == '' or None: searchval = '%' query: sqlalchemy.orm.query = session.query(db.Ban).filter(db.Ban.removed == int(request.args.get('removed')))\ .filter(sqlalchemy.or_( db.Ban.ip.like(ip_getint(searchval) if searchval.isdigit() else searchval) )) ret = dict() bans: list = query.limit(int(request.args.get('limit'))).all() x:db.Ban for x in bans: ret.update({str(x.id): flask.json.loads(flask.json.dumps(x))}) ret.update({'total': query.count()}) return ret
def check_ban(): check_allowed(True) #These are requested in a super weird format, *And are also our only form of connection log.* # ckey/compID/ip/record player: Player = db.Player.from_ckey(request.args.get('ckey')) if player is None: #Player doesn't exist, construct them before continuing. player = db.Player.add(request.args.get('ckey'), ip_getint(request.args.get('ip')), request.args.get('compID')) #Log Connection db.Connection.add( request.args.get('ckey'), ip_getint(request.args.get('ip')), request.args.get('compID'), request.args.get('record'), db.Round_Entry.get_latest(request.args.get('data_id')).id) #Generate Return if player.flags & FLAG_EXEMPT: #Exempt. We're done here. return jsonify( {'exempt': True} ) #NOTE: This stuff looks legacy. Is it still meant to be functional? -F #Do we care about bee bans? if cfg["check_beebans"]: #If they have a beeban, we don't need to care about checking clover-related bans. beebans: list = fetch_beebans(player.ckey) if beebans is not None: return jsonify(beebans) #Interrogate the ban table for the latest. all_matching_bans: list = list() #Query CKEY bans directly so we can do matching. all_matching_bans.extend( list( session.query(db.Ban).filter(db.Ban.ckey == player.ckey).filter( db.Ban.removed == False))) #Retreive bans that match historic IP addresses. all_matching_bans.extend( list( session.query(db.Ban).filter( db.Ban.ip.in_(player.get_historic_inetaddr())).filter( db.Ban.removed == False))) #Likewise for CID all_matching_bans.extend( list( session.query(db.Ban).filter( db.Ban.cid.in_(player.get_historic_cid())).filter( db.Ban.removed == False))) #Deduplicate. all_matching_bans = list(dict.fromkeys(all_matching_bans)) #Update their previous data. if request.args.get('ip'): player.last_ip = ip_getint(request.args.get('ip')) if request.args.get('compID'): player.last_cid = request.args.get('compID') player.lastseen = datetime.datetime.utcnow() if len(all_matching_bans): all_matching_bans.insert(0, len(all_matching_bans) + 1) session.commit() return jsonify(all_matching_bans) #This is so f*****g stupid. #Returned format is f*****g #[1,{ban},{ban}]... You have len() in byond. *just get the last entry in the f*****g list* #Nothin' of note. Close her up. session.commit() return jsonify({'none': True})