coulomb-social/coulomb_social/apps/spaces/views.py
tegwick 1cedd8f219 Render space pages from Forgejo markdown (CSOC-WP-0004-T04)
Fetch raw files from Forgejo, sanitize markdown to HTML, and show them on
space detail. Ship a public demo fixture path and seed_demo_space command.
2026-08-12 01:56:30 +02:00

38 lines
1.2 KiB
Python

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))}