def test_get_domain(self):
        domains = (
            ('genepeeks.com', 'genepeeks.com'),
            ('www.genepeeks.com', 'genepeeks.com'),
            ('www-dev.genepeeks.com', 'genepeeks.com'),
            ('www.127.0.0.1.xip.io', '127.0.0.1.xip.io'),
        )

        # Validate all test domains
        for domain in domains:
            self.assertEqual(get_domain(domain[0]), domain[1])
示例#2
0
    def dispatch(self, request, *args, **kwargs):
        # Logout the user object
        auth.logout(request)

        # Check for a logout URL, otherwise send the user back to where they once came from
        response = HttpResponseRedirect(settings.LOGOUT_URL or request.META.get('HTTP_REFERER', '/'))
        response.delete_cookie(
            jwt_settings.TOKEN_COOKIE_NAME,
            domain=get_domain(request.META['HTTP_HOST'])
        )

        return response
示例#3
0
    def post(self, request, *args, **kwargs):
        username = request.POST.get('username')
        password = request.POST.get('password')

        # If additional username processing is requested, perform it
        username_processor = getattr(jwt_settings, 'USERNAME_PROCESSOR', None)
        if username_processor is not None:
            module = '.'.join(username_processor.split('.')[:-1])
            method = username_processor.split('.')[-1]
            module = __import__(module, fromlist=[method, ])
            username = getattr(module, method)(username)

        # Make a request to the auth server
        jwt_response = requests.post(jwt_settings.SERVER_OBTAIN_URL, {'username': username, 'password': password})
        jwt_response_json = json.loads(jwt_response.content)

        # Where the user would like to go after logging in
        next_url = request.GET.get('next', '/')
        get_params = dict(request.GET)
        get_params.update({
            'next': next_url,
            'error': base64.b64encode(jwt_response.content),
        })

        # Default to returning the error
        response = HttpResponseRedirect(settings.LOGIN_URL + '?' + urllib.urlencode(get_params))
        # Make sure there was not an error returned
        if jwt_response.status_code == 200:
            # Authenticate the user based on the token
            user = auth.authenticate(token=jwt_response_json['token'])
            auth.login(request, user)

            # Assuming we are logged in successfully, set the cookie for other domains
            response = HttpResponseRedirect(next_url)
            response.set_cookie(
                jwt_settings.TOKEN_COOKIE_NAME,
                jwt_response_json['token'],
                domain=get_domain(request.META['HTTP_HOST']),
                max_age=jwt_settings.TOKEN_EXPIRATION
            )

        # Redirect after login
        return response