Exemplo n.º 1
0
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."
    })
Exemplo n.º 2
0
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)
Exemplo n.º 3
0
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
Exemplo n.º 4
0
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})