@@ -70,3 +70,155 @@ kattaserver:R --> L:postgres
7070| Swagger OpenAPI | http://localhost:8080/q/swagger-ui// | http://localhost:8080//q/openapi.json | |
7171
7272You can use SecurityScheme (OAuth2, password) with ` client_id = cryptomatorhub ` for Swagger UI.
73+
74+ ## Flow to retrieve user keys
75+
76+ ``` mermaid
77+ sequenceDiagram
78+ actor user as User
79+ activate user
80+ participant session as Session
81+ activate session
82+ user->>session: Open Connection
83+ participant katta as Katta API Server
84+ activate katta
85+ session->>katta: Retrieve user information
86+ participant keychain as Password Store
87+ session->>+keychain: Retrieve device keys
88+ keychain->>-session: Previously saved device key
89+ alt Use saved device key
90+ user->>katta: Retrieve device specific user keys
91+ opt: 404 Not found
92+ Note over user,katta: Device key not found on server
93+ session->>user: Prompt for account key
94+ user->>session: Input account key
95+ session->>session: Recover user keys
96+ session->>katta: Upload device specific user keys
97+ end
98+ katta->>session: Return device specific user keys
99+ session->>session: Decrypt with device key
100+ else Device key not available
101+ alt Recover user keys
102+ Note over user,katta: Setting up new device
103+ session->>user: Prompt for account key
104+ user->>session: Input account key
105+ session->>session: Recover user keys
106+ else No user keys stored on Katta Server
107+ Note over user,katta: Setting up new user keys and account key
108+ session->>user: Generate account key and prompt for device name
109+ user->>session: Input device name
110+ session->>session: Generate user key pair
111+ session->>katta: Upload user keys with account key
112+ session->>session: Generate new device key
113+ end
114+ session->>katta: Upload device specific user keys
115+ session->>keychain: Save device keys
116+ end
117+ session->>user: Return user keys
118+ deactivate katta
119+ deactivate session
120+ deactivate user
121+ ```
122+
123+ ## Flow to authenticate and access vaults
124+
125+ ``` mermaid
126+ sequenceDiagram
127+ actor User
128+
129+ participant session as HubSession
130+ participant katta as Katta API Server
131+
132+ Note right of session: client_id=cryptomator
133+
134+ activate session
135+ User->>session: Open Connection
136+ activate katta
137+ session->>katta: GET /api/config
138+ Note over session,katta: Retrieve Public Discovery Configuration
139+ katta->>session: application/json
140+
141+ participant keycloak as Keycloak Server
142+ activate keycloak
143+ session->>+keycloak: POST /realms/cryptomator/protocol/openid-connect/token
144+ Note over session,keycloak: OpenID Connect Token Exchange
145+ keycloak->>-session: OIDC Tokens
146+
147+ participant keychain as Password Store
148+ activate keychain
149+ session->>keychain: Save OIDC Tokens
150+
151+ Note over User,keychain: Flow to retrieve user keys
152+ alt
153+ opt
154+ Note over User,katta: Device key not found on server
155+ end
156+ else
157+ alt
158+ Note over User,katta: Setting up new device
159+ else
160+ Note over User,katta: Setting up new user keys and account key
161+ end
162+ Note over katta,keychain: Save device keys
163+ end
164+
165+
166+ loop Storage Profile Sync
167+ session->>katta: GET /api/storageprofile
168+ Note over session,katta: Retrieve storage configurations
169+ katta->>session: application/json
170+ end
171+ loop Storage Vault Sync
172+ session->>katta: GET /api/vaults/accessible
173+ katta->>session: application/json
174+ end
175+ deactivate katta
176+
177+ participant vault as S3AssumeRoleSession
178+ activate vault
179+ vault->>keychain: Lookup OIDC tokens
180+ keychain->>vault: Return OIDC tokens
181+ deactivate keychain
182+ activate keycloak
183+
184+ opt: Expired OIDC Tokens
185+ vault->>+katta: Refresh OIDC Tokens
186+ katta->>-vault: OIDC Tokens
187+ end
188+
189+ opt: Exchange OIDC token to scoped token using OAuth 2.0 Token Exchange
190+ vault->>keycloak: Exchange OIDC Access Token
191+ keycloak->>vault: Return Scoped Access Token
192+ end
193+ deactivate keycloak
194+
195+ opt: AssumeRoleWithWebIdentity
196+ participant sts as STS API Server
197+ vault->>+sts: Retrieve Temporary Tokens
198+ Note over vault,sts: Assume role with OIDC Id token
199+ sts->>-vault: STS Tokens
200+ opt: AssumeRole
201+ vault->>+sts: Retrieve Temporary Tokens
202+ Note over vault,sts: Assume role with previously obtained temporary access token
203+ sts->>-vault: STS Tokens
204+ end
205+ end
206+
207+ participant s3 as S3 API Server
208+
209+ vault->>+s3: GET /bucket
210+ Note over vault,s3: Access vault with AWS4-HMAC-SHA256 authorization
211+ s3->>-vault: ListBucketResult
212+
213+ vault->>+katta: GET /api/vaults/c62d1ffe-7bab-4ec9-a36a-327f9b7b8f9e/access-token
214+ Note over vault,katta: Retrieve vault access token
215+ katta->>-vault: JWE
216+ vault->>+katta: GET /api/vaults/c62d1ffe-7bab-4ec9-a36a-327f9b7b8f9e
217+ Note over vault,katta: Retrieve vault UVF metadata
218+ katta->>-vault: UVF Payload
219+ vault->>vault: Unlock Vault
220+
221+ vault->>+User: Display Vault
222+ deactivate vault
223+ deactivate session
224+ ```
0 commit comments