예제 #1
0
def check_if_token_is_valid(decrypted_token):
    jti = decrypted_token['jti']
    logging.debug('verifying token [%s] in redis-store' % (jti))

    try:
        revoked_store = redis.StrictRedis(host=AppConfig.get_redis_hostname(),
                                          port=AppConfig.get_redis_port(),
                                          db=0,
                                          decode_responses=True)
        entry = revoked_store.get(jti)
        logging.debug('token found %r' % (entry))

        if entry is None:
            return True
        if entry:
            return False
        return True

    except Exception as e:
        logging.error('connection redis failed with :%s' % (e))
예제 #2
0
    def post(self):
        args = login_parser.parse_args()
        user = UserServiceProvider(args, ignore_username=True)
        user.role = user.get_role()
        status, service_provider = UserServiceProviderRepositories.match(user)
        if status:
            logging.debug(
                'username [%s] app_key [%s] with role [%s] is now logged-in successfully'
                % (service_provider['username'], user.app_key, user.role))

            access_token = create_access_token({
                'role':
                user.role,
                'username':
                service_provider['username'],
                'app_key':
                user.app_key
            })
            refresh_token = create_access_token({
                'role':
                user.role,
                'username':
                service_provider['username'],
                'app_key':
                user.app_key
            })
            access_jti = get_jti(encoded_token=access_token)
            refresh_jti = get_jti(encoded_token=refresh_token)

            try:
                revoked_store = redis.StrictRedis(
                    host=AppConfig.get_redis_hostname(),
                    port=AppConfig.get_redis_port(),
                    db=0,
                    decode_responses=True)
                revoked_store.set(
                    access_jti, 'true',
                    timedelta(minutes=AppConfig.
                              get_jwt_access_token_expiry_in_mins()) * 1.2)
                revoked_store.set(
                    refresh_jti, 'true',
                    timedelta(
                        days=AppConfig.get_jwt_refresh_token_expiry_in_days())
                    * 1.2)
            except Exception as e:
                logging.error(
                    'connection redis failed with :%s, cannot login user' %
                    (e))
                logging.error('username [%s] with role [%s] is not logged-in' %
                              (service_provider['username'], user.role))
                return API.response(
                    STATUS_CODES.ERROR_LOGIN_FAILED_SYSTEM_ERROR, {})

            res = {
                'access_token': access_token,
                'refresh_token': refresh_token
            }
            return API.response(STATUS_CODES.SUCCESS_USER_LOGGED_IN, res)
        else:
            logging.error('app_key [%s] with role [%s] is not logged-in' %
                          (user.app_key, user.role))
            return API.response(STATUS_CODES.ERROR_USER_LOGIN, {})