summaryrefslogtreecommitdiff
path: root/micro/applications/der_topogo.mmd
blob: edace84326ff4152bc0798d359286c8e1ba4ef14 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
%% Source projet : E:\Dev\Web-Works\Der-topogo
%% Auth active : Payload CMS natif (email/password, RBAC admin/editor/viewer)
%% Auth planifiee : Auth.js v5 + Keycloak OIDC (client dertopogo)
%%{init: {'theme': 'base', 'flowchart': {'nodeSpacing': 40, 'rankSpacing': 50}}}%%
flowchart TB
    subgraph huitral_docker ["huitral 192.168.99.22 - Docker"]
        direction TB

        subgraph dt_app ["der-topogo - Next.js 16 + Payload CMS v3"]
            direction TB
            nextjs["Next.js standalone<br/>Port: 3000<br/>App Router + TypeScript"]
            payload["Payload CMS v3<br/>Admin: /admin<br/>REST API + GraphQL"]
            middleware["Middleware Next.js<br/>CSP headers<br/>connect-src: kc.arauco.online"]
        end
    end

    subgraph pg_ext ["PostgreSQL externe"]
        pg["PostgreSQL<br/>@payloadcms/db-postgres"]
    end

    subgraph auth_payload ["AuthN Active - Payload CMS natif"]
        direction TB
        pay_login["1. Login /admin<br/>email + password"]
        pay_session["2. Session Payload<br/>PAYLOAD_SECRET"]
        pay_access["3. Acces admin<br/>Controle par collection"]
        pay_login --> pay_session --> pay_access
    end

    subgraph rbac_payload ["AuthZ - RBAC Payload"]
        direction TB
        role_admin["admin<br/>CRUD toutes collections<br/>gestion utilisateurs"]
        role_editor["editor<br/>Lecture + ecriture articles<br/>upload media"]
        role_viewer["viewer<br/>Lecture seule"]
    end

    subgraph auth_oidc_planned ["AuthN Planifiee - Auth.js v5 + Keycloak"]
        direction TB
        oidc_step1["1. Login SSO<br/>Auth.js provider Keycloak"]
        oidc_step2["2. Redirect OIDC<br/>kc.arauco.online<br/>/realms/chiruca"]
        oidc_step3["3. Callback<br/>/api/auth/callback/keycloak"]
        oidc_step4["4. Session Auth.js<br/>AUTH_SECRET"]
        oidc_step1 -.-> oidc_step2 -.-> oidc_step3 -.-> oidc_step4
    end

    subgraph keycloak_ext ["Keycloak - npagnun .35"]
        direction TB
        kc["Realm chiruca<br/>Client: dertopogo<br/>Type: confidential"]
        google["-> Google IdP"]
        kc --> google
    end

    subgraph caddy_ext ["Caddy - araucaria .50"]
        direction TB
        caddy_pub["dt.arauco.online<br/>HTTPS -> :3000<br/>HSTS, X-Frame-Options: DENY<br/>X-Content-Type-Options: nosniff"]
        caddy_lan["dt.huitral.ruka.lan<br/>HTTPS auto-signe -> :3000"]
    end

    subgraph security ["Headers securite"]
        direction LR
        csp["CSP<br/>connect-src: kc.arauco.online<br/>Exclu pour /admin"]
        sec_headers["HSTS 2 ans<br/>X-Frame-Options: DENY<br/>Referrer-Policy: strict-origin<br/>Permissions-Policy: restrict"]
    end

    subgraph users ["Utilisateurs"]
        direction TB
        visitor["Visiteur public<br/>Pages sans auth"]
        cms_admin["Admin CMS<br/>Payload /admin"]
        sso_user["Utilisateur SSO<br/>Auth.js + Keycloak"]
    end

    caddy_pub -->|"HTTP"| nextjs
    caddy_lan -->|"HTTP"| nextjs
    nextjs --> payload
    payload -->|"JDBC"| pg

    auth_payload -.->|"Flux actif"| payload
    auth_oidc_planned -.->|"Flux planifie"| kc

    visitor --> caddy_pub
    cms_admin --> caddy_pub
    sso_user -.->|"Planifie"| caddy_pub

    classDef svcStyle fill:#1e4a2e,stroke:#4a9a6a,color:#a8e0c0
    classDef storStyle fill:#4a3a1e,stroke:#d9a84a,color:#f0d8a8
    classDef iamStyle fill:#4a1e3a,stroke:#d94a8a,color:#f0a8c8
    classDef netStyle fill:#1e3a5f,stroke:#4a90d9,color:#a8d0f0
    classDef secStyle fill:#4a3a1e,stroke:#d9a84a,color:#f0d8a8
    classDef userStyle fill:#3a1e5f,stroke:#8a6ad9,color:#c8b0f0
    classDef flowStyle fill:#3a2a1e,stroke:#aa7a4a,color:#e8c8a0
    classDef plannedStyle fill:#2a2a2a,stroke:#666,stroke-dasharray: 5 5,color:#999

    class nextjs,payload,middleware svcStyle
    class pg storStyle
    class pay_login,pay_session,pay_access flowStyle
    class role_admin,role_editor,role_viewer secStyle
    class oidc_step1,oidc_step2,oidc_step3,oidc_step4 plannedStyle
    class kc,google iamStyle
    class caddy_pub,caddy_lan netStyle
    class csp,sec_headers secStyle
    class visitor,cms_admin userStyle
    class sso_user plannedStyle