coulomb-social/coulomb_social/apps/core/views.py
tegwick be32432d39 Add Space metadata model and provisional Forgejo content ADR
Introduce tenant-scoped Space/SpaceMembership with list and detail views.
Document markdown-in-Forgejo as content SoR (ADR-0002). Run migrations on
container start so app.coulomb.social picks up the new tables.
2026-08-12 01:30:05 +02:00

56 lines
1.7 KiB
Python

from django.contrib.auth.decorators import login_required
from django.http import HttpRequest, HttpResponse, HttpResponseForbidden, JsonResponse
from django.shortcuts import redirect, render
from coulomb_social.apps.spaces.services import spaces_for_member
from .principal import build_principal
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:
principal = build_principal(request, authz_resource_id="app_home")
if not principal["authz_allow"]:
return HttpResponseForbidden(
f"Not authorized to view shell ({principal['authz_reason']})."
)
member = principal.get("member")
spaces = list(spaces_for_member(member))
return render(
request,
"core/app_home.html",
{
"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"],
},
)
def healthz(_request: HttpRequest) -> JsonResponse:
return JsonResponse({"status": "ok", "service": "coulomb-social"})