chore: bootstrap gscMy on @gsc/web-kit + PAM/JIT request flow
Initial commit for gscMy carved out as its own repo (was tracked
loosely under the monorepo's web/ which is gitignored).
What this contains:
- Auth: next-auth v5 via @gsc/web-kit createAuth (Keycloak only,
identity sourced from claims, no admin.users writes)
- Chrome: @gsc/web-kit AdminShell — replaces the legacy MyShell.
Sidebar JSON config carried over and mapped to DbMenuItem.
- Middleware: createAuthMiddleware. Public: /access-denied,
/auth/keycloak, /signed-out, /api/health, /api/pam/approve.
- RP-initiated signout at /api/auth/signout → Keycloak end_session →
/signed-out (mirrors gscAdmin).
- Phosphor-iconned access-denied + signed-out landing pages.
PAM/JIT request flow (ported from gscAdmin's pre-strip git history):
- /access page (Active + Eligible tables, request modal with
duration slider + justification + optional MFA)
- API: /api/pam/{eligible, active, audit, request, approve/:token,
revoke/:id}
- src/lib/{authz, pam, pam-mail, pam-mfa}.ts — same files as
gscAdmin had before the strip. PAM tables (admin.privilege_*)
are shared with gscAdmin; gscMy uses the same Prisma model defs.
- Top-bar widget shows active grants with countdown + revoke.
Build/Deploy: Dockerfile (monorepo-root context), k8s manifests for
my.gosec.internal, self-signed TLS placeholder, DNS A record.
Keycloak gsc-my client extended to include my.gosec.internal/* in
redirect_uris + web_origins.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
23
public/locales/de/common.json
Normal file
23
public/locales/de/common.json
Normal file
@@ -0,0 +1,23 @@
|
||||
{
|
||||
"header": {
|
||||
"apps": {},
|
||||
"messages": {},
|
||||
"search": {},
|
||||
"notification": {},
|
||||
"top-menu": {},
|
||||
"sub-bar": {
|
||||
"support": "Support",
|
||||
"settings": "Einstellungen"
|
||||
}
|
||||
},
|
||||
"menu": {
|
||||
"support": "Support",
|
||||
"settings": "Einstellungen",
|
||||
"allSettings": "Alle Einstellungen",
|
||||
"logout": "Abmelden"
|
||||
},
|
||||
"sidebar": {},
|
||||
"footer": {
|
||||
"docs": "Dokumentation"
|
||||
}
|
||||
}
|
||||
23
public/locales/en/common.json
Normal file
23
public/locales/en/common.json
Normal file
@@ -0,0 +1,23 @@
|
||||
{
|
||||
"header": {
|
||||
"apps": {},
|
||||
"messages": {},
|
||||
"search": {},
|
||||
"notification": {},
|
||||
"top-menu": {},
|
||||
"sub-bar": {
|
||||
"support": "Support",
|
||||
"settings": "Settings"
|
||||
}
|
||||
},
|
||||
"menu": {
|
||||
"support": "Support",
|
||||
"settings": "Settings",
|
||||
"allSettings": "All settings",
|
||||
"logout": "Logout"
|
||||
},
|
||||
"sidebar": {},
|
||||
"footer": {
|
||||
"docs": "Docs"
|
||||
}
|
||||
}
|
||||
23
public/locales/fr/common.json
Normal file
23
public/locales/fr/common.json
Normal file
@@ -0,0 +1,23 @@
|
||||
{
|
||||
"header": {
|
||||
"apps": {},
|
||||
"messages": {},
|
||||
"search": {},
|
||||
"notification": {},
|
||||
"top-menu": {},
|
||||
"sub-bar": {
|
||||
"support": "Support",
|
||||
"settings": "Paramètres"
|
||||
}
|
||||
},
|
||||
"menu": {
|
||||
"support": "Support",
|
||||
"settings": "Paramètres",
|
||||
"allSettings": "Tous les paramètres",
|
||||
"logout": "Déconnexion"
|
||||
},
|
||||
"sidebar": {},
|
||||
"footer": {
|
||||
"docs": "Documentation"
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user