mirror of
https://github.com/suitenumerique/meet.git
synced 2026-08-09 02:10:34 +00:00
58 lines
1.9 KiB
Python
58 lines
1.9 KiB
Python
"""Add-ons views."""
|
|
|
|
from django.conf import settings
|
|
from django.core.exceptions import SuspiciousOperation
|
|
from django.shortcuts import redirect, render
|
|
from django.utils.translation import gettext_lazy as _
|
|
from django.views.decorators.http import require_http_methods
|
|
|
|
from core.addons.service import SessionState, TokenExchangeService
|
|
|
|
|
|
def render_error(request, message, status=400):
|
|
"""Render simple error page."""
|
|
return render(request, "addons/error.html", {"message": message}, status=status)
|
|
|
|
|
|
@require_http_methods(["GET"])
|
|
def transit_page(request):
|
|
"""Initialize authentication flow for add-on session."""
|
|
|
|
session_id = request.GET.get("session_id")
|
|
|
|
if not session_id:
|
|
return render_error(request, _("Session ID is required."), status=400)
|
|
|
|
data = TokenExchangeService().get_session(session_id)
|
|
|
|
if not data:
|
|
return render_error(request, _("Session not found or expired."), status=404)
|
|
|
|
if data.get("state") != SessionState.PENDING:
|
|
return render_error(request, _("Invalid session state."), status=400)
|
|
|
|
request.session[settings.ADDONS_SESSION_KEY_AUTH] = session_id
|
|
|
|
return_to = f"{settings.APPLICATION_BASE_URL}/addons/redirect"
|
|
return redirect(f"/api/{settings.API_VERSION}/authenticate/?returnTo={return_to}")
|
|
|
|
|
|
@require_http_methods(["GET"])
|
|
def redirect_page(request):
|
|
"""Complete authentication and close the popup window."""
|
|
|
|
if not request.user.is_authenticated:
|
|
return render_error(request, _("Authentication required."), status=401)
|
|
|
|
session_id = request.session.pop(settings.ADDONS_SESSION_KEY_AUTH, None)
|
|
|
|
if not session_id:
|
|
return render_error(request, _("No active session found."), status=404)
|
|
|
|
try:
|
|
TokenExchangeService().set_access_token(request.user, session_id)
|
|
except SuspiciousOperation:
|
|
return render_error(request, _("Invalid or expired session."), status=400)
|
|
|
|
return render(request, "addons/redirect_success.html")
|