Esempio n. 1
0
    def post(self):
        """Refresh an existing token."""
        post_data = request.get_json()
        refresh_token = post_data.get("refresh_token")
        response_object = {}

        try:
            resp = User.decode_token(refresh_token)
            user = get_user_by_id(resp)
            if not user:
                auth_namespace.abort(401, "Invalid token")
            access_token = user.encode_token(user.id, "access")
            refresh_token = user.encode_token(user.id, "refresh")

            response_object = {
                "access_token": access_token.decode(),
                "refresh_token": refresh_token.decode(),
            }
            return response_object, 200
        except jwt.ExpiredSignatureError:
            auth_namespace.abort(401,
                                 "Signature expired. Please log in again.")
            return "Signature expired. Please log in again."
        except jwt.InvalidTokenError:
            auth_namespace.abort(401, "Invalid token. Please log in again.")
Esempio n. 2
0
    def get(self):
        auth_header = request.headers.get("Authorization") or ""
        if auth_header:
            try:
                access_token = auth_header.split(" ")[1]
                user_id = User.decode_token(access_token)
                user = get_user_by_id(user_id)
                if not user:
                    namespace.abort(401, "Invalid token")

                return user, 200
            except jwt.ExpiredSignatureError:
                namespace.abort(401, "Token expired")
            except jwt.InvalidTokenError:
                namespace.abort(401, "Invalid token")
            except IndexError:
                namespace.abort(401, "Invalid token")
        else:
            namespace.abort(403, "Access token required")
Esempio n. 3
0
 def get(self):
     auth_header = request.headers.get("Authorization")
     if auth_header:
         try:
             access_token = auth_header.split(" ")[1]
             resp = User.decode_token(access_token)
             user = get_user_by_id(resp)
             if not user:
                 auth_namespace.abort(401, "Invalid token")
             return user, 200
         except jwt.ExpiredSignatureError:
             auth_namespace.abort(
                 401, "Signature expired. Please log in again.")
             return "Signature expired. Please log in again."
         except jwt.InvalidTokenError:
             auth_namespace.abort(401,
                                  "Invalid token. Please log in again.")
     else:
         auth_namespace.abort(403, "Token required")
Esempio n. 4
0
    def decorator(*args, **kwargs):

        token = None

        if 'Authorization' in request.headers:
            auth_header = request.headers.get("Authorization")
            token = auth_header
            resp = User.decode_token(token)

        if not resp:
            users_namespace.abort(404, f"a valid token is missing")

        try:
            user = get_user_by_id(resp)
            if not user:
                users_namespace.abort(404, f"User does not exist")
        except Exception as e:
            users_namespace.abort(404, f"a valid token is missing")

        return f(*args, **kwargs)
Esempio n. 5
0
    def post(self):
        """Creates new Access and Refresh tokens."""
        payload = request.get_json()
        refresh_token = payload.get("refresh_token")

        try:
            user_id = User.decode_token(refresh_token)

            user = get_user_by_id(user_id)
            if not user:
                namespace.abort(401, "Invalid token")

            access_token = User.encode_token(user.id, "access").decode()
            refresh_token = User.encode_token(user.id, "refresh").decode()

            return {
                "access_token": access_token,
                "refresh_token": refresh_token
            }, 200
        except jwt.ExpiredSignature:
            namespace.abort(401, "Token expired")
        except jwt.InvalidTokenError:
            namespace.abort(401, "Invalid token")
Esempio n. 6
0
def refresh():
    post_data = request.get_json()
    refresh_token = post_data['refresh_token']
    response_object = {}
    try:
        resp = User.decode_token(refresh_token)
        user = get_user_by_id(resp)
        if not user:
            response_object["message"] = "Invalid token"
            return response_object, 401   
        access_token = user.encode_token(user.id, "access")
        refresh_token = user.encode_token(user.id, "refresh")

        response_object = {
            "access_token": access_token.decode(),
            "refresh_token": refresh_token.decode(),
        }
        return response_object, 200
    except jwt.ExpiredSignatureError:
        auth_namespace.abort(401, "Signature expired. Please log in again.")
        return "Signature expired. Please log in again."
    except jwt.InvalidTokenError:
        auth_namespace.abort(401, "Invalid token. Please log in again.")    
Esempio n. 7
0
def get_status():
    auth_header = request.headers.get("Authorization")
    response_object = {}
    if auth_header:
        try:
            access_token = auth_header.split(" ")[1]
            resp = User.decode_token(access_token)
            user = get_user_by_id(resp)
            if not user:
                response_object['message'] = "Invalid token"
                return response_object, 401   
            response_object['username'] = user.username
            response_object['email'] = user.email
            return response_object, 200 
        except jwt.ExpiredSignatureError:
            response_object["message"] = "Signature expired. Please log in again."
            return response_object, 401            
        except jwt.InvalidTokenError:
            response_object["message"] = "Invalid token. Please log in again."
            return response_object, 401            
    else:
        auth_namespace.abort(403, "Token required")
        response_object["message"] = "Token required."
        return response_object, 403            
def test_decode_token(test_app, test_database, add_user):
    user = add_user("justatest", "*****@*****.**", "test")
    token = user.encode_token(user.id, "refresh")
    assert isinstance(token, bytes)
    assert User.decode_token(token) == user.id
def test_decode_token(test_app, test_database, add_user):
    user = add_user("foo", "*****@*****.**", "foobar")
    token = user.encode_token(user.id, "access")
    assert isinstance(token, bytes)
    assert User.decode_token(token) == user.id
Esempio n. 10
0
def test_decode_refresh_token(test_app, test_database, add_user):
    user = add_user("aaa", "*****@*****.**", "xyz")
    token = User.encode_token(user.id, "refresh")
    assert isinstance(token, bytes)
    assert User.decode_token(token) == user.id