feat: scaffold matrix_admin_panel v0.1.0 (issue 0163)
Wails + React + Mantine v7 admin panel for Matrix/Synapse. Replaces the removed synapse-admin container. MAS OIDC PKCE login (loopback :8766) + Synapse Admin API (users/rooms/sessions). - MAS client: XSFD2SWA394DXRVJFTREAMY6J6 (public PKCE, no auth method). - Backend: AdminService (Go) with Login/SetAdminToken/ListUsers/ DeactivateUser/ResetUserPassword/ListRooms/DeleteRoom/GetUserDevices. - Vendored helpers in internal/infra/ from registry: mas_oidc_loopback_go_infra, keyring_token_store_go_infra, synapse_admin_client_go_infra. - Frontend: AppShell + sidebar tabs (Users/Rooms/Sessions). Sessions placeholder pending MAS admin API. - Build verified: Linux + Windows.
This commit is contained in:
@@ -0,0 +1,73 @@
|
||||
---
|
||||
name: matrix_admin_panel
|
||||
lang: go
|
||||
domain: infra
|
||||
version: 0.1.0
|
||||
description: "Panel admin Matrix propio (Wails + React + Mantine). Sustituye synapse-admin. MAS OIDC login + Synapse Admin API."
|
||||
tags: [matrix, admin, synapse, mas, wails, react, mantine, infra, matrix-mas, client]
|
||||
uses_functions:
|
||||
- mas_oidc_loopback_go_infra
|
||||
- keyring_token_store_go_infra
|
||||
- synapse_admin_client_go_infra
|
||||
uses_types: []
|
||||
framework: "wails"
|
||||
entry_point: "main.go"
|
||||
dir_path: "projects/element_agents/apps/matrix_admin_panel"
|
||||
repo_url: "https://gitea-dgg044oo04woo4ggcsws4gk0.organic-machine.com/dataforge/matrix_admin_panel.git"
|
||||
icon:
|
||||
phosphor: "shield-check"
|
||||
accent: "#dc2626"
|
||||
---
|
||||
|
||||
## Goal
|
||||
|
||||
Panel admin Matrix propio que sustituye el contenedor synapse-admin eliminado (issue 0162). Wails (Go) + React+Mantine. Login MAS OIDC PKCE (loopback puerto 8766) + Synapse Admin API.
|
||||
|
||||
## Ejecutar
|
||||
|
||||
```bash
|
||||
cd projects/element_agents/apps/matrix_admin_panel
|
||||
wails dev # hot-reload
|
||||
wails build # binario Linux
|
||||
wails build -platform windows/amd64 # binario Windows
|
||||
```
|
||||
|
||||
## Flow
|
||||
|
||||
1. Login MAS OIDC (PKCE public client, mismo issuer que matrix_client_pc, distinto client_id).
|
||||
2. Tras login, modal `AdminTokenModal` pide el `access_token` Synapse de un user con `admin: true` (MAS no expone scope admin todavia).
|
||||
3. Validacion: GET `/_synapse/admin/v2/users/{self}` con el token. 200 = OK, se persiste en keyring con prefijo `admin_token:`.
|
||||
4. UI con AppShell.Navbar tabs: Users / Rooms / Sessions.
|
||||
5. Acciones row: Deactivate user (purge opcional), Reset password, Delete room (purge + block opcionales).
|
||||
|
||||
## Arquitectura
|
||||
|
||||
```
|
||||
main.go entry: wails.Run + bind AdminService
|
||||
admin_service.go bindings (Login/SetAdminToken/ListUsers/...)
|
||||
helpers.go whoami helper
|
||||
internal/infra/ vendored helpers del registry
|
||||
mas_oidc_loopback.go
|
||||
keyring_token_store.go
|
||||
synapse_admin_client.go
|
||||
frontend/ React+Vite+TS+Mantine v7
|
||||
src/
|
||||
main.tsx MantineProvider violet dark
|
||||
App.tsx router (Login | Home)
|
||||
LoginScreen.tsx boton "Sign in with MAS"
|
||||
AdminTokenModal.tsx pide admin_token Synapse
|
||||
HomeScreen.tsx AppShell + sidebar tabs
|
||||
UsersTab.tsx tabla users + acciones
|
||||
RoomsTab.tsx tabla rooms + acciones
|
||||
SessionsTab.tsx placeholder TBD
|
||||
```
|
||||
|
||||
## MAS client (registrado en production)
|
||||
|
||||
- `client_id`: `XSFD2SWA394DXRVJFTREAMY6J6`
|
||||
- `client_auth_method`: `none` (PKCE public)
|
||||
- redirect URIs: `http://127.0.0.1:8766/callback`, `http://localhost:8766/callback`, `https://admin-mas.organic-machine.com/callback`, `http://localhost:8090/callback`
|
||||
|
||||
## Capability growth log
|
||||
|
||||
- v0.1.0 (2026-05-25) — baseline scaffold (issue 0163): Wails skeleton + login MAS OIDC + admin token modal + Users/Rooms/Sessions tabs (Sessions placeholder).
|
||||
Reference in New Issue
Block a user