Skip to content

Commit 05189ae

Browse files
authored
Merge pull request #68 from shift7-ch/docs
Add sequence diagrams
2 parents 1a92426 + c975971 commit 05189ae

File tree

1 file changed

+152
-0
lines changed

1 file changed

+152
-0
lines changed

README.md

Lines changed: 152 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,3 +70,155 @@ kattaserver:R --> L:postgres
7070
| Swagger OpenAPI | http://localhost:8080/q/swagger-ui// | http://localhost:8080//q/openapi.json | |
7171

7272
You 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

Comments
 (0)