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])
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
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