mirror of https://github.com/jumpserver/jumpserver
59 lines
2.1 KiB
Python
59 lines
2.1 KiB
Python
from django.views import View
|
|
from django.conf import settings
|
|
from django.contrib.auth import login
|
|
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)))
|
|
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)
|