Esempio n. 1
0
    def validate_access_token(self, client_key, resource_owner_key):
        token = None
        client = Client.query(Client.client_key == client_key).get()

        if client:
            token = AccessToken.query(
                AccessToken.client == client.key,
                AccessToken.token == resource_owner_key).get()

        return token is not None
Esempio n. 2
0
    def validate_access_token(self, client_key, resource_owner_key):
        token = None
        client = Client.query(Client.client_key == client_key).get()

        if client:
            token = AccessToken.query(
                AccessToken.client == client.key,
                AccessToken.token == resource_owner_key).get()

        return token is not None
Esempio n. 3
0
    def get_access_token_secret(self, client_key, resource_owner_key):
        client = Client.query(Client.client_key == client_key).get()

        if client:
            token = AccessToken.query(
                AccessToken.client == client.key,
                AccessToken.token == resource_owner_key).get()

            if token:
                return token.secret

        return None
Esempio n. 4
0
    def get_access_token_secret(self, client_key, resource_owner_key):
        client = Client.query(Client.client_key == client_key).get()

        if client:
            token = AccessToken.query(
                AccessToken.client == client.key,
                AccessToken.token == resource_owner_key).get()

            if token:
                return token.secret

        return None
Esempio n. 5
0
    def validate_realm(self, client_key, access_token, uri=None, required_realm=None):
        if not required_realm:
            return True

        client = Client.query(Client.client_key == client_key).get()

        if client:
            token = AccessToken.query(
                AccessToken.token == access_token,
                AccessToken.client == client.key).get()

            if token:
                return token.realm in required_realm

        return False
Esempio n. 6
0
    def validate_realm(self,
                       client_key,
                       access_token,
                       uri=None,
                       required_realm=None):
        if not required_realm:
            return True

        client = Client.query(Client.client_key == client_key).get()

        if client:
            token = AccessToken.query(AccessToken.token == access_token,
                                      AccessToken.client == client.key).get()

            if token:
                return token.realm in required_realm

        return False
Esempio n. 7
0
    def save_timestamp_and_nonce(self, client_key, timestamp, nonce,
            request_token=None, access_token=None):
        client = Client.query(Client.client_key == client_key).get()

        if client:
            nonce = Nonce(
                nonce=nonce,
                timestamp=timestamp,
                client=client.key)

            if request_token:
                req_token = RequestToken.query(
                    RequestToken.token == request_token).get()
                nonce.request_token = req_token.key

            if access_token:
                token = AccessToken.query(
                    AccessToken.token == access_token).get()
                nonce.access_token = token.key

            nonce.put()
Esempio n. 8
0
    def save_timestamp_and_nonce(self,
                                 client_key,
                                 timestamp,
                                 nonce,
                                 request_token=None,
                                 access_token=None):
        client = Client.query(Client.client_key == client_key).get()

        if client:
            nonce = Nonce(nonce=nonce, timestamp=timestamp, client=client.key)

            if request_token:
                req_token = RequestToken.query(
                    RequestToken.token == request_token).get()
                nonce.request_token = req_token.key

            if access_token:
                token = AccessToken.query(
                    AccessToken.token == access_token).get()
                nonce.access_token = token.key

            nonce.put()
Esempio n. 9
0
def user():
    """
    Hakee, lisää ja poistaa käyttäjän seuraamia pelaajia/joukkueita.

    Vaatii OAuth-allekirjoitetun pyynnön.
    TODO välimuisti
    """
    # Poimitaan oauth token HTTP-pyynnön Authorization-headerista:
    auth_header = request.headers.get("Authorization", None)
    if not auth_header:
        abort(401)  # Unauthorized

    for param in auth_header.split():
        if param.startswith("oauth_token"):
            token = param.split("=")[-1][1:-2]
            break

    if not token:
        abort(401)

    # Haetaan tokenia vastaava käyttäjä:
    try:
        acc_token = AccessToken.query(AccessToken.token == token).get()
        user = acc_token.resource_owner.get()
    except KeyError:  # Access tokenia tai käyttäjää ei löydy
        abort(401)

    # Poimitaan ids_only-parametri joko urlista tai post-parametreista:
    if "ids_only" in request.form:
        ids_only = request.form["ids_only"]
    else:
        ids_only = request.args.get("ids_only", "0")
    try:
        ids_only = int(ids_only)
    except ValueError:
        abort(400)

    if request.method == "GET":
        # Palautetaan käyttäjän seuraamat pelaajat ja joukkueet:
        if ids_only:
            # Palautetaan vain id:t:
            ret = dict(players=user.players, teams=user.teams)
        else:
            # Jos ids_only == 1, palautetaan tunnusten lisäksi tilastoja:
            ret = get_players_and_teams(user.players, user.teams)
        ret["name"] = user.name
        return jsonify(ret)

    if request.method == "POST":
        # Lisätään seurattava pelaaja tai joukkue:
        if "pid" in request.form:
            pid = request.form["pid"]

            # Validoitaan pelaajan id:
            if pid in user.players:
                abort(400)  # Pelaaja on jo seurattavien listassa

            all_players = scraper.scrape_players()
            if not pid in all_players:
                abort(400)  # pid:tä vastaavaa pelaajaa ei löydy

            # Lisätään pid käyttäjän seurattavien pelaajien listalle:
            user.players.append(pid)
            user.put()

            # Palautetaan päivittynyt seurantalista, kuten GET-pyynnössä:
            if ids_only:
                ret = dict(players=user.players, teams=user.teams)
            else:
                ret = get_players_and_teams(user.players, user.teams)
            ret["name"] = user.name
            return jsonify(ret)

        if "team" in request.form:
            team = request.form["team"].lower()
            # Validoitaan joukkueen tunnus
            if team in user.teams:
                abort(400)  # Joukkue on jo seurattavien listassa
            if not team in scraper.TEAMS:
                abort(400)  # Epäkelpo joukkueen tunnus

            # Lisätään joukkue käyttäjän seurattavien joukkueiden listalle:
            user.teams.append(team)
            user.put()

            # Palautetaan päivittynyt seurantalista, kuten GET-pyynnössä:
            if ids_only:
                ret = dict(players=user.players, teams=user.teams)
            else:
                ret = get_players_and_teams(user.players, user.teams)
            ret["name"] = user.name
            return jsonify(ret)

        else:
            abort(400)  # Lisättävä pelaaja tai joukkue tulee määrittää

    if request.method == "DELETE":
        # Poistetaan seurattava pelaaja tai joukkue:
        pid = request.args.get("pid", None)
        team = request.args.get("team", None)
        if pid:
            if not pid in user.players:
                abort(400)  # pelaajaa ei löydy seurattavien listasta
            user.players.remove(pid)

        elif team:
            if not team in user.teams:
                abort(400)  # joukkuetta ei löydy seurattavien listasta
            user.teams.remove(team)

        else:
            abort(400)  # joko poistettava pelaaja tai joukkue tulee määrittää

        user.put()

        if ids_only:
            ret = dict(players=user.players, teams=user.teams)
        else:
            ret = get_players_and_teams(user.players, user.teams)
        ret["name"] = user.name
        return jsonify(ret)
Esempio n. 10
0
def user():
    """
    Hakee, lisää ja poistaa käyttäjän seuraamia pelaajia/joukkueita.

    Vaatii OAuth-allekirjoitetun pyynnön.
    TODO välimuisti
    """
    # Poimitaan oauth token HTTP-pyynnön Authorization-headerista:
    auth_header = request.headers.get("Authorization", None)
    if not auth_header:
        abort(401)  # Unauthorized

    for param in auth_header.split():
        if param.startswith("oauth_token"):
            token = param.split("=")[-1][1:-2]
            break

    if not token:
        abort(401)

    # Haetaan tokenia vastaava käyttäjä:
    try:
        acc_token = AccessToken.query(AccessToken.token == token).get()
        user = acc_token.resource_owner.get()
    except KeyError:  # Access tokenia tai käyttäjää ei löydy
        abort(401)

    # Poimitaan ids_only-parametri joko urlista tai post-parametreista:
    if "ids_only" in request.form:
        ids_only = request.form["ids_only"]
    else:
        ids_only = request.args.get("ids_only", "0")
    try:
        ids_only = int(ids_only)
    except ValueError:
        abort(400)

    if request.method == "GET":
        # Palautetaan käyttäjän seuraamat pelaajat ja joukkueet:
        if ids_only:
            # Palautetaan vain id:t:
            ret = dict(players=user.players, teams=user.teams)
        else:
            # Jos ids_only == 1, palautetaan tunnusten lisäksi tilastoja:
            ret = get_players_and_teams(user.players, user.teams)
        ret["name"] = user.name
        return jsonify(ret)

    if request.method == "POST":
        # Lisätään seurattava pelaaja tai joukkue:
        if "pid" in request.form:
            pid = request.form["pid"]

            # Validoitaan pelaajan id:
            if pid in user.players:
                abort(400)  # Pelaaja on jo seurattavien listassa

            all_players = scraper.scrape_players()
            if not pid in all_players:
                abort(400)  # pid:tä vastaavaa pelaajaa ei löydy

            # Lisätään pid käyttäjän seurattavien pelaajien listalle:
            user.players.append(pid)
            user.put()

            # Palautetaan päivittynyt seurantalista, kuten GET-pyynnössä:
            if ids_only:
                ret = dict(players=user.players, teams=user.teams)
            else:
                ret = get_players_and_teams(user.players, user.teams)
            ret["name"] = user.name
            return jsonify(ret)

        if "team" in request.form:
            team = request.form["team"].lower()
            # Validoitaan joukkueen tunnus
            if team in user.teams:
                abort(400)  # Joukkue on jo seurattavien listassa
            if not team in scraper.TEAMS:
                abort(400)  # Epäkelpo joukkueen tunnus

            # Lisätään joukkue käyttäjän seurattavien joukkueiden listalle:
            user.teams.append(team)
            user.put()

            # Palautetaan päivittynyt seurantalista, kuten GET-pyynnössä:
            if ids_only:
                ret = dict(players=user.players, teams=user.teams)
            else:
                ret = get_players_and_teams(user.players, user.teams)
            ret["name"] = user.name
            return jsonify(ret)

        else:
            abort(400)  # Lisättävä pelaaja tai joukkue tulee määrittää

    if request.method == "DELETE":
        # Poistetaan seurattava pelaaja tai joukkue:
        pid = request.args.get("pid", None)
        team = request.args.get("team", None)
        if pid:
            if not pid in user.players:
                abort(400)  # pelaajaa ei löydy seurattavien listasta
            user.players.remove(pid)

        elif team:
            if not team in user.teams:
                abort(400)  # joukkuetta ei löydy seurattavien listasta
            user.teams.remove(team)

        else:
            abort(400)  # joko poistettava pelaaja tai joukkue tulee määrittää

        user.put()

        if ids_only:
            ret = dict(players=user.players, teams=user.teams)
        else:
            ret = get_players_and_teams(user.players, user.teams)
        ret["name"] = user.name
        return jsonify(ret)