token.py 1.16 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
import json 
from flask_restful import Resource, request, abort
from marshmallow import Schema, fields
import pika
from models.token import TokenModel


class TokenQuerySchema(Schema):
    client_id = fields.Str(required=True)
    secret = fields.Str(required=True)


class Token(Resource):
    clients = None
    schema = None
    model = None

    def __init__(self):
        self.schema = TokenQuerySchema()
        self.model = TokenModel()
        with open("clients.json", "r") as clients_file:
            self.clients = json.load(clients_file)
    
    def get(self):
        errors = self.schema.validate(request.args)
        if errors:
            abort(400, message=str(errors))

        token = None
        allow = False
        max_messages = request.args.get("max_messages", 10)
        client_id = request.args.get("client_id")
        if client_id in self.clients:
            client = self.clients.get(client_id)
            if request.args.get("secret") == client.get("secret"):
                allow = True

        if allow:
            token = self.model.get(client_id)

        else:
            abort(403, message="Invalid client credentials")
        return token