2026-08-09 01:45:05 +02:00
|
|
|
from django.contrib.auth.decorators import login_required
|
2026-08-09 02:00:12 +02:00
|
|
|
from django.http import HttpRequest, HttpResponse, HttpResponseForbidden, JsonResponse
|
2026-08-11 02:31:55 +02:00
|
|
|
from django.shortcuts import redirect, render
|
2026-08-09 01:45:05 +02:00
|
|
|
|
2026-08-12 01:30:05 +02:00
|
|
|
from coulomb_social.apps.spaces.services import spaces_for_member
|
|
|
|
|
|
2026-08-11 02:31:55 +02:00
|
|
|
from .principal import build_principal
|
2026-08-09 02:00:12 +02:00
|
|
|
|
2026-08-09 01:45:05 +02:00
|
|
|
|
|
|
|
|
def landing(request: HttpRequest) -> HttpResponse:
|
|
|
|
|
if request.user.is_authenticated:
|
|
|
|
|
return redirect("core:app_home")
|
|
|
|
|
return render(request, "core/landing.html")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@login_required
|
|
|
|
|
def app_home(request: HttpRequest) -> HttpResponse:
|
2026-08-11 02:31:55 +02:00
|
|
|
principal = build_principal(request, authz_resource_id="app_home")
|
|
|
|
|
if not principal["authz_allow"]:
|
2026-08-09 02:00:12 +02:00
|
|
|
return HttpResponseForbidden(
|
2026-08-11 02:31:55 +02:00
|
|
|
f"Not authorized to view shell ({principal['authz_reason']})."
|
2026-08-09 02:00:12 +02:00
|
|
|
)
|
|
|
|
|
|
2026-08-12 01:30:05 +02:00
|
|
|
member = principal.get("member")
|
|
|
|
|
spaces = list(spaces_for_member(member))
|
2026-08-09 01:45:05 +02:00
|
|
|
return render(
|
|
|
|
|
request,
|
|
|
|
|
"core/app_home.html",
|
|
|
|
|
{
|
2026-08-11 02:31:55 +02:00
|
|
|
"principal": principal,
|
|
|
|
|
"display_name": principal["display_name"],
|
|
|
|
|
"spaces": spaces,
|
|
|
|
|
},
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@login_required
|
|
|
|
|
def account_session(request: HttpRequest) -> HttpResponse:
|
|
|
|
|
"""Principal / session diagnostics (profile menu → T07)."""
|
|
|
|
|
principal = build_principal(request, authz_resource_id="account_session")
|
|
|
|
|
if not principal["authz_allow"]:
|
|
|
|
|
return HttpResponseForbidden(
|
|
|
|
|
f"Not authorized to view session details ({principal['authz_reason']})."
|
|
|
|
|
)
|
|
|
|
|
return render(
|
|
|
|
|
request,
|
|
|
|
|
"core/account_session.html",
|
|
|
|
|
{
|
|
|
|
|
"principal": principal,
|
|
|
|
|
"display_name": principal["display_name"],
|
2026-08-09 01:45:05 +02:00
|
|
|
},
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def healthz(_request: HttpRequest) -> JsonResponse:
|
|
|
|
|
return JsonResponse({"status": "ok", "service": "coulomb-social"})
|