Exemple #1
0
def save_token(token):
    blacklist_token = BlacklistToken(token=token)
    try:
        db.session.add(blacklist_token)
        db.session.commit()
        response_object = {
            'status': 'success',
            'message': 'Successfully logged out.'
        }
        return response_object, 200
    except Exception as e:
        response_object = {'status': 'fail', 'message': e}
        return response_object, 200
Exemple #2
0
    def logout_user(data):
        if data:
            auth_token = data.split(" ")
        else:
            auth_token = ''

        if len(auth_token) == 2:
            resp = JwtHelper.decode_auth_token(auth_token[1])
            if not isinstance(resp, str):
                # mark the token as blacklisted
                return BlacklistToken.save_token(token=auth_token[1])
            else:
                return ResponseHelper.error_custom(401, resp)
        else:
            return ResponseHelper.error_custom(401,'Provide a valid auth token.')
Exemple #3
0
 def decode_auth_token(auth_token):
     """
     Decodes tha auth token
     :param auth_token:
     :return: integer|string
     """
     try:
         is_blacklisted_token = BlacklistToken.check_blacklist(auth_token)
         if is_blacklisted_token:
             return 'Token Blacklisted. Please log again.'
         else:
             payload = jwt.decode(auth_token, key)
             return payload['sub']
     except jwt.ExpiredSignatureError:
         return 'Signature expired. Please log again.'
     except jwt.InvalidTokenError:
         return 'Invalid toekn. Please log again.'
Exemple #4
0
    def decode_auth_token(auth_token):
        try:
            payload = jwt.decode(auth_token, key)

            is_blacklisted_token = BlacklistToken.check_blacklist(auth_token)

            if is_blacklisted_token:
                return "Token has been blacklisted. Please log in again."

            else:
                return payload["sub"]

        except jwt.ExpiredSignatureError:
            return "Signature has expired. Please log in again."

        except jwt.InvalidTokenError:
            return "Token is invalid. Please log in again."
def save_token_to_blacklist(token):
    blacklist_token = BlacklistToken(token=token)

    try:
        db.session.add(blacklist_token)
        db.session.commit()
        
        response_object = {
            "status" : "success",
            "message" : "Successfully logged out."
        }

        return response_object, 200

    except Exception as e:
        response_object = {
            "status" : "fail",
            "message" : e
        }
        
        return response_object, 200
Exemple #6
0
 def test_valid_blacklisted_token_logout(self):
     """ Test for logout after a valid token gets blacklisted """
     with self.client:
         # user registration
         resp_register = register_user(self)
         data_register = json.loads(resp_register.data.decode())
         self.assertTrue(data_register['status'] == 'success')
         self.assertTrue(
             data_register['message'] == 'Successfully registered.')
         self.assertTrue(data_register['Authorization'])
         self.assertTrue(resp_register.content_type == 'application/json')
         self.assertEqual(resp_register.status_code, 201)
         # user login
         resp_login = login_user(self)
         data_login = json.loads(resp_login.data.decode())
         self.assertTrue(data_login['status'] == 'success')
         self.assertTrue(data_login['message'] == 'Successfully logged in.')
         self.assertTrue(data_login['Authorization'])
         self.assertTrue(resp_login.content_type == 'application/json')
         self.assertEqual(resp_login.status_code, 200)
         # blacklist a valid token
         blacklist_token = BlacklistToken(
             token=json.loads(resp_login.data.decode())['Authorization'])
         db.session.add(blacklist_token)
         db.session.commit()
         # blacklisted valid token logout
         response = self.client.post(
             '/auth/logout',
             headers=dict(
                 Authorization='Bearer ' +
                 json.loads(resp_login.data.decode())['Authorization']))
         data = json.loads(response.data.decode())
         self.assertTrue(data['status'] == 'fail')
         self.assertTrue(
             data['message'] == 'Token blacklisted. Please log in again.')
         self.assertEqual(response.status_code, 401)