from django.contrib.auth.decorators import login_required from django.http import HttpRequest, HttpResponse, HttpResponseForbidden, HttpResponseNotFound from django.shortcuts import render from coulomb_social.apps.core.principal import build_principal from .content import load_space_page from .services import get_space_for_member, spaces_for_member @login_required def space_detail(request: HttpRequest, slug: str) -> HttpResponse: principal = build_principal(request, authz_resource_id="space_detail") if not principal["authz_allow"]: return HttpResponseForbidden( f"Not authorized to view spaces ({principal['authz_reason']})." ) member = principal.get("member") space = get_space_for_member(member, slug) if space is None: return HttpResponseNotFound("Space not found.") page = request.GET.get("page") or "index" rendered = load_space_page(space, page) return render( request, "spaces/detail.html", { "principal": principal, "display_name": principal["display_name"], "space": space, "page": rendered, }, ) def list_spaces_context(member) -> dict: return {"spaces": list(spaces_for_member(member))}