Harmony/users/views.py

62 lines
1.9 KiB
Python

import json
import logging
from django.http import JsonResponse
from django.shortcuts import redirect
from django.conf import settings
from keycloak import KeycloakOpenID
from urllib.parse import urlencode, urljoin
from django.contrib.auth import logout
logger = logging.getLogger(__name__)
def keycloak_login(request):
keycloak_openid = KeycloakOpenID(
server_url=settings.KEYCLOAK_CONFIG['SERVER_URL'],
client_id=settings.KEYCLOAK_CONFIG['CLIENT_ID'],
realm_name=settings.KEYCLOAK_CONFIG['REALM'],
client_secret_key=settings.KEYCLOAK_CONFIG['CLIENT_SECRET']
)
redirect_uri = settings.KEYCLOAK_CONFIG['CALLBACK_URL']
auth_url = keycloak_openid.auth_url(redirect_uri=redirect_uri)
logger.info('Запрос успешно обработан')
return redirect(auth_url)
def keycloak_logout(request):
logout(request)
keycloak_server_url = settings.KEYCLOAK_CONFIG['SERVER_URL']
realm_name = settings.KEYCLOAK_CONFIG['REALM']
redirect_uri = settings.KEYCLOAK_CONFIG['POST_LOGOUT_REDIRECT_URI']
params = {'redirect_uri': redirect_uri}
keycloak_logout_url = (
f'{keycloak_server_url}/realms/{realm_name}/protocol/openid-connect/logout'
f'?{urlencode(params)}'
)
return redirect(keycloak_logout_url)
from django.http import HttpResponse
from django.views.decorators.http import require_http_methods
import logging
@require_http_methods(["GET"])
def keycloak_redirect(request):
# Extract the authorization code from the query parameters
authorization_code = request.GET.get('code')
if authorization_code:
# Proceed with the token exchange process here
print(authorization_code)
logger.info(' 2 Запрос успешно обработан')
return HttpResponse("Authorization code received.")
else:
return HttpResponse("Authorization code not found.", status=400)