예제 #1
0
    def server(self):
        """
        All in one endpoints. This property is created automaticly
        if you have implemented all the getters and setters.

        However, if you are not satisfied with the getter and setter,
        you can create a validator with :class:`OAuth2RequestValidator`::

            class MyValidator(OAuth2RequestValidator):
                def validate_client_id(self, client_id):
                    # do something
                    return True

        And assign the validator for the provider::

            oauth._validator = MyValidator()
        """
        expires_in = self.app.config.get('OAUTH2_PROVIDER_TOKEN_EXPIRES_IN')
        token_generator = self.app.config.get(
            'OAUTH2_PROVIDER_TOKEN_GENERATOR', None)
        if token_generator and not callable(token_generator):
            token_generator = import_string(token_generator)

        refresh_token_generator = self.app.config.get(
            'OAUTH2_PROVIDER_REFRESH_TOKEN_GENERATOR', None)
        if refresh_token_generator and not callable(refresh_token_generator):
            refresh_token_generator = import_string(refresh_token_generator)

        if hasattr(self, '_validator'):
            return BackendApplicationServer(
                self._validator,
                token_expires_in=expires_in,
                token_generator=token_generator,
                refresh_token_generator=refresh_token_generator,
            )

        if hasattr(self, '_clientgetter') and \
                hasattr(self, '_tokengetter') and \
                hasattr(self, '_tokensetter') and \
                hasattr(self, '_revoketoken'):

            validator = OAuth2RequestValidator(
                clientgetter=self._clientgetter,
                tokengetter=self._tokengetter,
                tokensetter=self._tokensetter,
                revoketoken=self._revoketoken,
            )
            self._validator = validator
            return BackendApplicationServer(
                validator,
                token_expires_in=expires_in,
                token_generator=token_generator,
                refresh_token_generator=refresh_token_generator,
            )
        raise RuntimeError('application not bound to required getters')
예제 #2
0
    def unauthenticated_userid(self, request):
        validator = RequestValidator(request)

        token_generator = generate_token
        server = BackendApplicationServer(validator, token_generator)

        # bw compat
        token = request.environ.get(self.environ_key)
        if token is not None:
            request.authorization = 'Bearer %s' % token

        try:
            valid, r = server.verify_request(
                request.url,
                request.method,
                None,
                request.headers,
                ['annotations'],
            )
        except:
            valid = False

        if valid:
            return r.user

        # bw compat
        personas = request.session.get('personas', [])
        if len(personas):
            return personas[0]

        return None
 def setUp(self):
     self.validator = mock.MagicMock(spec=RequestValidator)
     self.validator.get_default_redirect_uri.return_value = None
     self.web = WebApplicationServer(self.validator)
     self.mobile = MobileApplicationServer(self.validator)
     self.legacy = LegacyApplicationServer(self.validator)
     self.backend = BackendApplicationServer(self.validator)
 def __init__(self, **kwargs):
     super(BackendAuthentication, self).__init__(**kwargs)
     self.validator = BackendValidator()
     self.server = BackendApplicationServer(self.validator)
     self.provider = OAuth2ProviderDecorator('/error', self.server)
     # FIXME Must be given by the ressource
     self.scopes = ['ham', 'jam']
예제 #5
0
 def setUp(self):
     self.validator = mock.MagicMock(spec=RequestValidator)
     self.validator.get_default_redirect_uri.return_value = TestScopeHandling.DEFAULT_REDIRECT_URI
     self.validator.authenticate_client.side_effect = self.set_client
     self.web = WebApplicationServer(self.validator)
     self.mobile = MobileApplicationServer(self.validator)
     self.legacy = LegacyApplicationServer(self.validator)
     self.backend = BackendApplicationServer(self.validator)
예제 #6
0
 def setUp(self):
     self.validator = mock.MagicMock(spec=RequestValidator)
     self.validator.get_default_redirect_uri.return_value = 'http://i.b./path'
     self.web = WebApplicationServer(self.validator,
                                     token_generator=self.inspect_client)
     self.mobile = MobileApplicationServer(
         self.validator, token_generator=self.inspect_client)
     self.legacy = LegacyApplicationServer(
         self.validator, token_generator=self.inspect_client)
     self.backend = BackendApplicationServer(
         self.validator, token_generator=self.inspect_client)
예제 #7
0
 def setUp(self):
     self.validator = mock.MagicMock(spec=RequestValidator)
     self.validator.is_pkce_required.return_value = False
     self.validator.get_code_challenge.return_value = None
     self.validator.get_default_redirect_uri.return_value = 'http://i.b./path'
     self.web = WebApplicationServer(self.validator,
             token_generator=self.inspect_client)
     self.mobile = MobileApplicationServer(self.validator,
             token_generator=self.inspect_client)
     self.legacy = LegacyApplicationServer(self.validator,
             token_generator=self.inspect_client)
     self.backend = BackendApplicationServer(self.validator,
             token_generator=self.inspect_client)
     self.token_uri = 'http://example.com/path'
     self.auth_uri = 'http://example.com/path?client_id=abc&response_type=token'
     # should be base64 but no added value in this unittest
     self.basicauth_client_creds = {"Authorization": "john:doe"}
     self.basicauth_client_id = {"Authorization": "john:"}
예제 #8
0
import sys

from oauthlib.oauth2 import BackendApplicationServer
from oauthlib.oauth2.ext.django import OAuth2ProviderDecorator

from django.http import HttpResponse

from endpoint.backend_provider.validators import BackendValidator

log = logging.getLogger('endpoint')
log.addHandler(logging.StreamHandler(sys.stdout))
log.setLevel(logging.DEBUG)


validator = BackendValidator()
server = BackendApplicationServer(validator)
provider = OAuth2ProviderDecorator('/backendprovider/error', server)    # See next section


@provider.access_token_view
def create_token(request):
    # Not much too do here for you, return a dict with extra credentials
    # you want appended to request.credentials passed to the save_bearer_token
    # method of the validator.
    return {}


@provider.protected_resource_view(scopes=['ham'])
def protected_resource(request, client=None, user=None, scopes=None):
    # One of your many OAuth 2 protected resource views
    # Returns whatever you fancy