mirror of https://github.com/jumpserver/jumpserver
				
				
				
			
		
			
				
	
	
		
			89 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Python
		
	
	
			
		
		
	
	
			89 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Python
		
	
	
| from django.views import View
 | |
| from django.conf import settings
 | |
| from django.contrib import auth
 | |
| from django.http import HttpResponseRedirect
 | |
| from django.urls import reverse
 | |
| from django.utils.http import urlencode
 | |
| 
 | |
| from authentication.utils import build_absolute_uri
 | |
| from common.utils import get_logger
 | |
| from authentication.mixins import authenticate
 | |
| 
 | |
| logger = get_logger(__file__)
 | |
| 
 | |
| 
 | |
| class OAuth2AuthRequestView(View):
 | |
| 
 | |
|     def get(self, request):
 | |
|         log_prompt = "Process OAuth2 GET requests: {}"
 | |
|         logger.debug(log_prompt.format('Start'))
 | |
| 
 | |
|         query_dict = {
 | |
|             'client_id': settings.AUTH_OAUTH2_CLIENT_ID, 'response_type': 'code',
 | |
|             'scope': settings.AUTH_OAUTH2_SCOPE,
 | |
|             'redirect_uri': build_absolute_uri(
 | |
|                 request, path=reverse(settings.AUTH_OAUTH2_AUTH_LOGIN_CALLBACK_URL_NAME)
 | |
|             )
 | |
|         }
 | |
| 
 | |
|         redirect_url = '{url}?{query}'.format(
 | |
|             url=settings.AUTH_OAUTH2_PROVIDER_AUTHORIZATION_ENDPOINT,
 | |
|             query=urlencode(query_dict)
 | |
|         )
 | |
|         logger.debug(log_prompt.format('Redirect login url'))
 | |
|         return HttpResponseRedirect(redirect_url)
 | |
| 
 | |
| 
 | |
| class OAuth2AuthCallbackView(View):
 | |
|     http_method_names = ['get', ]
 | |
| 
 | |
|     def get(self, request):
 | |
|         """ Processes GET requests. """
 | |
|         log_prompt = "Process GET requests [OAuth2AuthCallbackView]: {}"
 | |
|         logger.debug(log_prompt.format('Start'))
 | |
|         callback_params = request.GET
 | |
| 
 | |
|         if 'code' in callback_params:
 | |
|             logger.debug(log_prompt.format('Process authenticate'))
 | |
|             user = authenticate(code=callback_params['code'], request=request)
 | |
|             if user and user.is_valid:
 | |
|                 logger.debug(log_prompt.format('Login: {}'.format(user)))
 | |
|                 auth.login(self.request, user)
 | |
|                 logger.debug(log_prompt.format('Redirect'))
 | |
|                 return HttpResponseRedirect(
 | |
|                     settings.AUTH_OAUTH2_AUTHENTICATION_REDIRECT_URI
 | |
|                 )
 | |
| 
 | |
|         logger.debug(log_prompt.format('Redirect'))
 | |
|         return HttpResponseRedirect(settings.AUTH_OAUTH2_AUTHENTICATION_FAILURE_REDIRECT_URI)
 | |
| 
 | |
| 
 | |
| class OAuth2EndSessionView(View):
 | |
|     http_method_names = ['get', 'post', ]
 | |
| 
 | |
|     def get(self, request):
 | |
|         """ Processes GET requests. """
 | |
|         log_prompt = "Process GET requests [OAuth2EndSessionView]: {}"
 | |
|         logger.debug(log_prompt.format('Start'))
 | |
|         return self.post(request)
 | |
| 
 | |
|     def post(self, request):
 | |
|         """ Processes POST requests. """
 | |
|         log_prompt = "Process POST requests [OAuth2EndSessionView]: {}"
 | |
|         logger.debug(log_prompt.format('Start'))
 | |
| 
 | |
|         logout_url = settings.LOGOUT_REDIRECT_URL or '/'
 | |
| 
 | |
|         # Log out the current user.
 | |
|         if request.user.is_authenticated:
 | |
|             logger.debug(log_prompt.format('Log out the current user: {}'.format(request.user)))
 | |
|             auth.logout(request)
 | |
| 
 | |
|             if settings.AUTH_OAUTH2_LOGOUT_COMPLETELY:
 | |
|                 logger.debug(log_prompt.format('Log out OAUTH2 platform user session synchronously'))
 | |
|                 next_url = settings.AUTH_OAUTH2_PROVIDER_END_SESSION_ENDPOINT
 | |
|                 return HttpResponseRedirect(next_url)
 | |
| 
 | |
|         logger.debug(log_prompt.format('Redirect'))
 | |
|         return HttpResponseRedirect(logout_url)
 |