예제 #1
0
    def wrapper(cls, root, info, password, **kwargs):
        context = info.context
        context._jwt_token_auth = True
        username = kwargs.get(get_user_model().USERNAME_FIELD)

        # user = jwt_settings.JWT_GET_USER_BY_NATURAL_KEY_HANDLER(username)
        # if user is None:
        #     raise exceptions.JSONWebTokenError(
        #         _('Please enter valid credentials'),
        #     )

        user = authenticate(
            request=context,
            username=username,
            password=password,
        )
        if user is None:
            raise exceptions.JSONWebTokenError(
                _('Please enter valid credentials'), )

        if hasattr(context, 'user'):
            context.user = user

        result = f(cls, root, info, **kwargs)
        signals.token_issued.send(sender=cls, request=context, user=user)
        return maybe_thenable((context, user, result), on_token_auth_resolve)
예제 #2
0
    def refresh(cls, root, info, token, **kwargs):
        def on_resolve(values):
            payload, token = values
            payload.token = token
            return payload

        context = info.context
        payload = get_payload(token, context)
        user = get_user_by_payload(payload)
        orig_iat = payload.get('origIat')

        if not orig_iat:
            raise exceptions.JSONWebTokenError(_('origIat field is required'))

        if jwt_settings.JWT_REFRESH_EXPIRED_HANDLER(orig_iat, context):
            raise exceptions.JSONWebTokenError(_('Refresh has expired'))

        payload = jwt_settings.JWT_PAYLOAD_HANDLER(user, context)
        payload['origIat'] = orig_iat
        refresh_expires_in = orig_iat +\
            jwt_settings.JWT_REFRESH_EXPIRATION_DELTA.total_seconds()

        token = jwt_settings.JWT_ENCODE_HANDLER(payload, context)
        signals.token_refreshed.send(sender=cls, request=context, user=user)

        result = cls(payload=payload, refresh_expires_in=refresh_expires_in)
        return maybe_thenable((result, token), on_resolve)
예제 #3
0
    def connection_resolver(cls, resolver, connection_type, root, info, **args):
        resolved = resolver(root, info, **args)

        if isinstance(connection_type, NonNull):
            connection_type = connection_type.of_type

        on_resolve = partial(cls.resolve_connection, connection_type, args)
        return maybe_thenable(resolved, on_resolve)
예제 #4
0
    def wrapper(cls, *args, **kwargs):
        def on_resolve(payload):
            payload.refresh_expires_in = (
                timegm(datetime.utcnow().utctimetuple()) +
                jwt_settings.JWT_REFRESH_EXPIRATION_DELTA.total_seconds())
            return payload

        result = f(cls, *args, **kwargs)
        return maybe_thenable(result, on_resolve)
    def connection_resolver(cls, resolver, connection_type, root, info,
                            **args):
        resolved = resolver(root, info, **args)

        if isinstance(connection_type, NonNull):
            connection_type = connection_type.of_type

        if not resolved and getattr(connection_type, 'resolve_objects', None):
            resolved = connection_type.resolve_objects(root, info, **args)

        on_resolve = partial(cls.resolve_connection, connection_type, args)
        return maybe_thenable(resolved, on_resolve)
예제 #6
0
    def mutate(cls, root, info, input):
        def on_resolve(payload):
            try:
                payload.client_mutation_id = input.get("client_mutation_id")
            except Exception:
                raise Exception(
                    ("Cannot set client_mutation_id in the payload object {}").format(
                        repr(payload)
                    )
                )
            return payload

        result = cls.mutate_and_get_payload(root, info, **input) 
        return maybe_thenable(result, on_resolve)
예제 #7
0
    def mutate(cls, root, info, input):
        def on_resolve(payload):
            try:
                payload.client_mutation_id = input.get("client_mutation_id")
                payload.hospital_code = input.get("coded_value")
                payload.generated_coded_value = cls.callSP(
                    cls, input.get("coded_value"))

            except Exception as ex:
                raise Exception(
                    (str(ex) +
                     "Cannot set client_mutation_id in the payload object {}"
                     ).format(repr(payload)))
            return payload

        from graphene.utils.thenables import maybe_thenable
        result = cls.mutate_and_get_payload(root, info, **input)
        return maybe_thenable(result, on_resolve)
예제 #8
0
    def wrapper(cls, root, info, password, **kwargs):
        context = info.context
        context._jwt_token_auth = True
        username = kwargs.get(get_user_model().USERNAME_FIELD)

        user = authenticate(
            request=context,
            username=username,
            password=password,
        )
        if user is None:
            raise exceptions.JSONWebTokenError(
                _("Please enter valid credentials"), )

        if hasattr(context, "user"):
            context.user = user

        result = f(cls, root, info, **kwargs)
        signals.token_issued.send(sender=cls, request=context, user=user)
        return maybe_thenable((context, user, result), on_token_auth_resolve)
예제 #9
0
    def refresh(cls, root, info, refresh_token, **kwargs):
        def on_resolve(values):
            payload, token, refresh_token = values
            payload.token = token
            payload.refresh_token = refresh_token
            return payload

        context = info.context
        old_refresh_token = get_refresh_token(refresh_token, context)

        if old_refresh_token.is_expired(context):
            raise exceptions.JSONWebTokenError(_("Refresh token is expired"))

        payload = jwt_settings.JWT_PAYLOAD_HANDLER(
            old_refresh_token.user,
            context,
        )
        token = jwt_settings.JWT_ENCODE_HANDLER(payload, context)

        if getattr(context, "jwt_cookie", False):
            context.jwt_refresh_token = create_refresh_token(
                old_refresh_token.user,
                old_refresh_token,
            )
            new_refresh_token = context.jwt_refresh_token.get_token()
        else:
            new_refresh_token = refresh_token_lazy(
                old_refresh_token.user,
                old_refresh_token,
            )

        signals.refresh_token_rotated.send(
            sender=cls,
            request=context,
            refresh_token=old_refresh_token,
            refresh_token_issued=new_refresh_token,
        )
        result = cls(payload=payload)
        return maybe_thenable((result, token, new_refresh_token), on_resolve)
예제 #10
0
 def connection_resolver(cls, resolver, connection_type, root, info, **args):
     resolved = resolver(root, info, **args)
     on_resolve = partial(cls.resolve_connection, connection_type, root, args)
     return maybe_thenable(resolved, on_resolve)