@trokky/trokky 3.5.0 → 3.5.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/adapters/cloudflare-d1/cloudflare-d1-adapter.d.ts +2 -0
- package/dist/adapters/cloudflare-d1/cloudflare-d1-adapter.d.ts.map +1 -1
- package/dist/adapters/cloudflare-d1/cloudflare-d1-adapter.js +17 -0
- package/dist/adapters/cloudflare-d1/cloudflare-d1-adapter.js.map +1 -1
- package/dist/adapters/filesystem-data/filesystem-data-adapter.d.ts +1 -0
- package/dist/adapters/filesystem-data/filesystem-data-adapter.d.ts.map +1 -1
- package/dist/adapters/filesystem-data/filesystem-data-adapter.js +27 -2
- package/dist/adapters/filesystem-data/filesystem-data-adapter.js.map +1 -1
- package/dist/adapters/filesystem-media/filesystem-media-adapter.d.ts.map +1 -1
- package/dist/adapters/filesystem-media/filesystem-media-adapter.js +3 -1
- package/dist/adapters/filesystem-media/filesystem-media-adapter.js.map +1 -1
- package/dist/adapters/postgres-data/postgres-data-adapter.d.ts +2 -0
- package/dist/adapters/postgres-data/postgres-data-adapter.d.ts.map +1 -1
- package/dist/adapters/postgres-data/postgres-data-adapter.js +24 -0
- package/dist/adapters/postgres-data/postgres-data-adapter.js.map +1 -1
- package/dist/core/core/engine.d.ts +10 -1
- package/dist/core/core/engine.d.ts.map +1 -1
- package/dist/core/core/engine.js +34 -4
- package/dist/core/core/engine.js.map +1 -1
- package/dist/core/security/auth-flow-store.d.ts +69 -0
- package/dist/core/security/auth-flow-store.d.ts.map +1 -0
- package/dist/core/security/auth-flow-store.js +145 -0
- package/dist/core/security/auth-flow-store.js.map +1 -0
- package/dist/core/security/oauth2/authorization-server.d.ts +68 -13
- package/dist/core/security/oauth2/authorization-server.d.ts.map +1 -1
- package/dist/core/security/oauth2/authorization-server.js +161 -151
- package/dist/core/security/oauth2/authorization-server.js.map +1 -1
- package/dist/core/security/oauth2/scoped-permissions.d.ts +15 -0
- package/dist/core/security/oauth2/scoped-permissions.d.ts.map +1 -0
- package/dist/core/security/oauth2/scoped-permissions.js +53 -0
- package/dist/core/security/oauth2/scoped-permissions.js.map +1 -0
- package/dist/core/services/auth-service.d.ts +4 -0
- package/dist/core/services/auth-service.d.ts.map +1 -1
- package/dist/core/services/auth-service.js +67 -6
- package/dist/core/services/auth-service.js.map +1 -1
- package/dist/core/services/document-service.d.ts.map +1 -1
- package/dist/core/services/document-service.js +5 -1
- package/dist/core/services/document-service.js.map +1 -1
- package/dist/core/services/oauth2-server-service.d.ts +48 -1
- package/dist/core/services/oauth2-server-service.d.ts.map +1 -1
- package/dist/core/services/oauth2-server-service.js +170 -10
- package/dist/core/services/oauth2-server-service.js.map +1 -1
- package/dist/core/services/token-service.d.ts.map +1 -1
- package/dist/core/services/token-service.js +11 -1
- package/dist/core/services/token-service.js.map +1 -1
- package/dist/core/types/index.d.ts +4 -0
- package/dist/core/types/index.d.ts.map +1 -1
- package/dist/core/types/index.js.map +1 -1
- package/dist/core/types/oauth2.d.ts +1 -1
- package/dist/core/types/oauth2.d.ts.map +1 -1
- package/dist/core/types/oauth2.js +1 -1
- package/dist/core/types/oauth2.js.map +1 -1
- package/dist/core/types/storage-adapters.d.ts +11 -1
- package/dist/core/types/storage-adapters.d.ts.map +1 -1
- package/dist/i18n/config.d.ts +34 -0
- package/dist/i18n/config.d.ts.map +1 -1
- package/dist/i18n/locales/en/studio.json +18 -1
- package/dist/i18n/locales/fr/studio.json +18 -1
- package/dist/integrations/express/config.d.ts +12 -0
- package/dist/integrations/express/config.d.ts.map +1 -1
- package/dist/integrations/express/config.js.map +1 -1
- package/dist/integrations/workers/index.d.ts +5 -0
- package/dist/integrations/workers/index.d.ts.map +1 -1
- package/dist/integrations/workers/index.js +10 -1
- package/dist/integrations/workers/index.js.map +1 -1
- package/dist/routes/auth/auth-flow-store.d.ts +3 -59
- package/dist/routes/auth/auth-flow-store.d.ts.map +1 -1
- package/dist/routes/auth/auth-flow-store.js +3 -119
- package/dist/routes/auth/auth-flow-store.js.map +1 -1
- package/dist/routes/auth/oauth.d.ts.map +1 -1
- package/dist/routes/auth/oauth.js +4 -2
- package/dist/routes/auth/oauth.js.map +1 -1
- package/dist/routes/auth/oauth2-server.d.ts.map +1 -1
- package/dist/routes/auth/oauth2-server.js +28 -8
- package/dist/routes/auth/oauth2-server.js.map +1 -1
- package/dist/routes/handlers/audit.d.ts +6 -0
- package/dist/routes/handlers/audit.d.ts.map +1 -1
- package/dist/routes/handlers/audit.js +19 -17
- package/dist/routes/handlers/audit.js.map +1 -1
- package/dist/routes/handlers/auth.d.ts +23 -1
- package/dist/routes/handlers/auth.d.ts.map +1 -1
- package/dist/routes/handlers/auth.js +101 -2
- package/dist/routes/handlers/auth.js.map +1 -1
- package/dist/routes/handlers/base.d.ts +35 -0
- package/dist/routes/handlers/base.d.ts.map +1 -1
- package/dist/routes/handlers/base.js +102 -15
- package/dist/routes/handlers/base.js.map +1 -1
- package/dist/routes/handlers/documents.d.ts.map +1 -1
- package/dist/routes/handlers/documents.js +23 -2
- package/dist/routes/handlers/documents.js.map +1 -1
- package/dist/routes/handlers/media.js +7 -7
- package/dist/routes/handlers/media.js.map +1 -1
- package/dist/routes/handlers/search.d.ts.map +1 -1
- package/dist/routes/handlers/search.js +8 -2
- package/dist/routes/handlers/search.js.map +1 -1
- package/dist/routes/handlers/tokens.d.ts.map +1 -1
- package/dist/routes/handlers/tokens.js +43 -8
- package/dist/routes/handlers/tokens.js.map +1 -1
- package/dist/routes/handlers/users.d.ts.map +1 -1
- package/dist/routes/handlers/users.js +35 -6
- package/dist/routes/handlers/users.js.map +1 -1
- package/dist/routes/routes.d.ts.map +1 -1
- package/dist/routes/routes.js +8 -1
- package/dist/routes/routes.js.map +1 -1
- package/dist/types/auth.d.ts +8 -0
- package/dist/types/auth.d.ts.map +1 -1
- package/dist/types/index.d.ts +1 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +1 -1
- package/dist/types/index.js.map +1 -1
- package/dist/types/oauth2.d.ts +13 -1
- package/dist/types/oauth2.d.ts.map +1 -1
- package/dist/types/oauth2.js +25 -10
- package/dist/types/oauth2.js.map +1 -1
- package/package.json +1 -1
|
@@ -9,7 +9,22 @@
|
|
|
9
9
|
* - External web applications (authorization code flow)
|
|
10
10
|
*/
|
|
11
11
|
import { randomBytes, createHash, timingSafeEqual } from 'crypto';
|
|
12
|
-
import { SCOPE_TO_PERMISSIONS,
|
|
12
|
+
import { SCOPE_TO_PERMISSIONS, ALL_OAUTH2_SCOPES, BUILTIN_CLIENTS } from '../../types/oauth2.js';
|
|
13
|
+
import { saveAuthFlowState, getAuthFlowState, consumeAuthFlowState } from '../auth-flow-store.js';
|
|
14
|
+
const inProcessFlowStore = {
|
|
15
|
+
save: state => saveAuthFlowState(null, state),
|
|
16
|
+
get: (id, kind) => getAuthFlowState(null, id, kind),
|
|
17
|
+
consume: (id, kind) => consumeAuthFlowState(null, id, kind)
|
|
18
|
+
};
|
|
19
|
+
// Record ids. A device code is found by its hash when the device polls, and by its short
|
|
20
|
+
// user code when a person approves it, so it is stored under the first and indexed by the
|
|
21
|
+
// second.
|
|
22
|
+
const deviceId = (deviceCodeHash) => `dev-${deviceCodeHash}`;
|
|
23
|
+
const userCodeId = (userCode) => `usr-${normalizeUserCode(userCode)}`;
|
|
24
|
+
const authCodeId = (codeHash) => `code-${codeHash}`;
|
|
25
|
+
function normalizeUserCode(userCode) {
|
|
26
|
+
return userCode.replace(/-/g, '').toUpperCase().replace(/[^A-Z0-9]/g, '');
|
|
27
|
+
}
|
|
13
28
|
/**
|
|
14
29
|
* OAuth2 Authorization Server
|
|
15
30
|
*
|
|
@@ -18,12 +33,8 @@ import { SCOPE_TO_PERMISSIONS, BUILTIN_CLI_CLIENT as CLI_CLIENT } from '../../ty
|
|
|
18
33
|
export class OAuth2AuthorizationServer {
|
|
19
34
|
config;
|
|
20
35
|
externalClients;
|
|
21
|
-
|
|
22
|
-
deviceCodes = new Map();
|
|
23
|
-
authorizationCodes = new Map();
|
|
36
|
+
store;
|
|
24
37
|
clients = new Map();
|
|
25
|
-
// Cleanup interval
|
|
26
|
-
cleanupInterval = null;
|
|
27
38
|
constructor(config) {
|
|
28
39
|
this.config = {
|
|
29
40
|
issuer: config.issuer,
|
|
@@ -36,23 +47,20 @@ export class OAuth2AuthorizationServer {
|
|
|
36
47
|
pollingInterval: config.pollingInterval ?? 5
|
|
37
48
|
};
|
|
38
49
|
this.externalClients = config.clients || [];
|
|
50
|
+
this.store = config.flowStore ?? inProcessFlowStore;
|
|
39
51
|
// Register built-in CLI client
|
|
40
52
|
this.registerBuiltInClient();
|
|
41
53
|
// Register external clients from config
|
|
42
54
|
this.registerExternalClients();
|
|
43
|
-
// Start cleanup interval
|
|
44
|
-
this.startCleanup();
|
|
45
55
|
}
|
|
46
56
|
/**
|
|
47
57
|
* Register the built-in CLI client
|
|
48
58
|
*/
|
|
49
59
|
registerBuiltInClient() {
|
|
50
60
|
const now = new Date().toISOString();
|
|
51
|
-
|
|
52
|
-
...
|
|
53
|
-
|
|
54
|
-
updatedAt: now
|
|
55
|
-
});
|
|
61
|
+
for (const client of BUILTIN_CLIENTS) {
|
|
62
|
+
this.clients.set(client.id, { ...client, createdAt: now, updatedAt: now });
|
|
63
|
+
}
|
|
56
64
|
}
|
|
57
65
|
/**
|
|
58
66
|
* Register external OAuth2 clients from config
|
|
@@ -67,11 +75,11 @@ export class OAuth2AuthorizationServer {
|
|
|
67
75
|
type: clientConfig.type || 'public',
|
|
68
76
|
secretHash: clientConfig.secret ? this.hashSecret(clientConfig.secret) : undefined,
|
|
69
77
|
redirectUris: clientConfig.redirectUris,
|
|
70
|
-
allowedScopes: (clientConfig.allowedScopes || [
|
|
71
|
-
'openid', 'profile', 'content:read', 'content:write',
|
|
72
|
-
'content:delete', 'media:read', 'media:write', 'offline_access'
|
|
73
|
-
]),
|
|
78
|
+
allowedScopes: (clientConfig.allowedScopes || [...ALL_OAUTH2_SCOPES]),
|
|
74
79
|
grantTypes: (clientConfig.grantTypes || ['authorization_code', 'refresh_token']),
|
|
80
|
+
// Never the CLI: a config entry may override the built-in client (a site narrowing its
|
|
81
|
+
// scopes does), but making every CLI login act as the full user must not be one line away
|
|
82
|
+
trusted: clientConfig.trusted === true && !BUILTIN_CLIENTS.some(builtIn => builtIn.id === clientConfig.id),
|
|
75
83
|
isActive: true,
|
|
76
84
|
createdAt: now,
|
|
77
85
|
updatedAt: now
|
|
@@ -82,32 +90,11 @@ export class OAuth2AuthorizationServer {
|
|
|
82
90
|
/**
|
|
83
91
|
* Start periodic cleanup of expired codes
|
|
84
92
|
*/
|
|
85
|
-
startCleanup() {
|
|
86
|
-
this.cleanupInterval = setInterval(() => {
|
|
87
|
-
const now = Date.now();
|
|
88
|
-
// Clean expired device codes
|
|
89
|
-
for (const [key, state] of this.deviceCodes) {
|
|
90
|
-
if (state.expiresAt < now) {
|
|
91
|
-
this.deviceCodes.delete(key);
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
// Clean expired authorization codes
|
|
95
|
-
for (const [key, state] of this.authorizationCodes) {
|
|
96
|
-
if (state.expiresAt < now) {
|
|
97
|
-
this.authorizationCodes.delete(key);
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
}, 60000); // Run every minute
|
|
101
|
-
}
|
|
102
93
|
/**
|
|
103
|
-
*
|
|
94
|
+
* Kept for callers that stop the server on shutdown. Codes now expire in the flow store,
|
|
95
|
+
* which sweeps on request, so there is no timer to stop.
|
|
104
96
|
*/
|
|
105
|
-
stopCleanup() {
|
|
106
|
-
if (this.cleanupInterval) {
|
|
107
|
-
clearInterval(this.cleanupInterval);
|
|
108
|
-
this.cleanupInterval = null;
|
|
109
|
-
}
|
|
110
|
-
}
|
|
97
|
+
stopCleanup() { }
|
|
111
98
|
// ============================================
|
|
112
99
|
// Client Management
|
|
113
100
|
// ============================================
|
|
@@ -162,7 +149,7 @@ export class OAuth2AuthorizationServer {
|
|
|
162
149
|
* Start device authorization flow
|
|
163
150
|
* Returns device_code, user_code, and verification URI
|
|
164
151
|
*/
|
|
165
|
-
startDeviceAuthorization(clientId, requestedScopes) {
|
|
152
|
+
async startDeviceAuthorization(clientId, requestedScopes) {
|
|
166
153
|
// Validate client
|
|
167
154
|
const client = this.getClient(clientId);
|
|
168
155
|
if (!client) {
|
|
@@ -200,18 +187,17 @@ export class OAuth2AuthorizationServer {
|
|
|
200
187
|
const deviceCode = this.generateDeviceCode();
|
|
201
188
|
const userCode = this.generateUserCode();
|
|
202
189
|
const deviceCodeHash = this.hashSecret(deviceCode);
|
|
203
|
-
|
|
204
|
-
const
|
|
190
|
+
const expiresAt = new Date(Date.now() + this.config.deviceCodeTtl * 1000).toISOString();
|
|
191
|
+
const record = {
|
|
205
192
|
deviceCodeHash,
|
|
206
193
|
userCode,
|
|
207
194
|
clientId,
|
|
208
195
|
scopes,
|
|
209
|
-
expiresAt: Date.now() + (this.config.deviceCodeTtl * 1000),
|
|
210
196
|
interval: this.config.pollingInterval,
|
|
211
197
|
status: 'pending'
|
|
212
198
|
};
|
|
213
|
-
|
|
214
|
-
this.
|
|
199
|
+
await this.store.save({ id: deviceId(deviceCodeHash), kind: 'oauth2_device', data: { ...record }, expiresAt });
|
|
200
|
+
await this.store.save({ id: userCodeId(userCode), kind: 'oauth2_device', data: { deviceCodeHash }, expiresAt });
|
|
215
201
|
// Build verification URIs
|
|
216
202
|
// Studio serves the approval page under its own mount; the default assumes /studio.
|
|
217
203
|
const verificationUri = this.config.verificationUri;
|
|
@@ -228,86 +214,97 @@ export class OAuth2AuthorizationServer {
|
|
|
228
214
|
}
|
|
229
215
|
};
|
|
230
216
|
}
|
|
217
|
+
/** The device record behind a user code, with its expiry, or null. */
|
|
218
|
+
async findByUserCode(userCode) {
|
|
219
|
+
if (normalizeUserCode(userCode).length !== 8)
|
|
220
|
+
return null;
|
|
221
|
+
const index = await this.store.get(userCodeId(userCode), 'oauth2_device');
|
|
222
|
+
const deviceCodeHash = index?.data.deviceCodeHash;
|
|
223
|
+
if (typeof deviceCodeHash !== 'string')
|
|
224
|
+
return null;
|
|
225
|
+
const stored = await this.store.get(deviceId(deviceCodeHash), 'oauth2_device');
|
|
226
|
+
if (!stored)
|
|
227
|
+
return null;
|
|
228
|
+
return { record: stored.data, expiresAt: stored.expiresAt };
|
|
229
|
+
}
|
|
231
230
|
/**
|
|
232
231
|
* Get device code state by user code (for verification page)
|
|
233
232
|
*/
|
|
234
|
-
getDeviceCodeByUserCode(userCode) {
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
return
|
|
233
|
+
async getDeviceCodeByUserCode(userCode) {
|
|
234
|
+
const found = await this.findByUserCode(userCode);
|
|
235
|
+
if (!found)
|
|
236
|
+
return null;
|
|
237
|
+
return { ...found.record, expiresAt: new Date(found.expiresAt).getTime() };
|
|
239
238
|
}
|
|
240
239
|
/**
|
|
241
|
-
* Authorize a device code (called when user approves in Studio)
|
|
240
|
+
* Authorize a device code (called when user approves in Studio).
|
|
241
|
+
*
|
|
242
|
+
* `approvedScopes` is what the person left ticked on the consent screen. It can only
|
|
243
|
+
* narrow the request: anything not requested is ignored, and approving nothing is refused.
|
|
242
244
|
*/
|
|
243
|
-
authorizeDeviceCode(userCode, userId) {
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
return false;
|
|
254
|
-
}
|
|
255
|
-
state.status = 'authorized';
|
|
256
|
-
state.userId = userId;
|
|
257
|
-
state.decidedAt = Date.now();
|
|
258
|
-
return true;
|
|
245
|
+
async authorizeDeviceCode(userCode, userId, approvedScopes) {
|
|
246
|
+
return this.decide(userCode, record => {
|
|
247
|
+
const scopes = approvedScopes
|
|
248
|
+
? record.scopes.filter(scope => approvedScopes.includes(scope))
|
|
249
|
+
: record.scopes;
|
|
250
|
+
// Approving nothing is not an approval; the code stays pending
|
|
251
|
+
if (scopes.length === 0)
|
|
252
|
+
return null;
|
|
253
|
+
return { ...record, scopes, status: 'authorized', userId, decidedAt: Date.now() };
|
|
254
|
+
});
|
|
259
255
|
}
|
|
260
256
|
/**
|
|
261
257
|
* Deny a device code (called when user denies in Studio)
|
|
262
258
|
*/
|
|
263
|
-
denyDeviceCode(userCode) {
|
|
264
|
-
|
|
265
|
-
|
|
259
|
+
async denyDeviceCode(userCode) {
|
|
260
|
+
return this.decide(userCode, record => ({ ...record, status: 'denied', decidedAt: Date.now() }));
|
|
261
|
+
}
|
|
262
|
+
/**
|
|
263
|
+
* Record one decision on a pending code.
|
|
264
|
+
*
|
|
265
|
+
* Taking the user-code index is the lock: of two decisions racing (two clicks, an approve
|
|
266
|
+
* and a deny), exactly one gets it, and the other is refused rather than both reporting
|
|
267
|
+
* success while the last write wins. The index goes back afterwards so the approval page
|
|
268
|
+
* can still show that this code was already handled.
|
|
269
|
+
*/
|
|
270
|
+
async decide(userCode, apply) {
|
|
271
|
+
if (normalizeUserCode(userCode).length !== 8)
|
|
266
272
|
return false;
|
|
267
|
-
|
|
268
|
-
|
|
273
|
+
const index = await this.store.consume(userCodeId(userCode), 'oauth2_device');
|
|
274
|
+
const deviceCodeHash = index?.data.deviceCodeHash;
|
|
275
|
+
if (typeof deviceCodeHash !== 'string')
|
|
269
276
|
return false;
|
|
277
|
+
const stored = await this.store.get(deviceId(deviceCodeHash), 'oauth2_device');
|
|
278
|
+
if (!stored)
|
|
279
|
+
return false;
|
|
280
|
+
let decided = false;
|
|
281
|
+
const record = stored.data;
|
|
282
|
+
if (record.status === 'pending') {
|
|
283
|
+
const next = apply(record);
|
|
284
|
+
if (next) {
|
|
285
|
+
await this.store.save({ id: deviceId(deviceCodeHash), kind: 'oauth2_device', data: { ...next }, expiresAt: stored.expiresAt });
|
|
286
|
+
decided = true;
|
|
287
|
+
}
|
|
270
288
|
}
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
return true;
|
|
289
|
+
await this.store.save({ id: userCodeId(userCode), kind: 'oauth2_device', data: { deviceCodeHash }, expiresAt: stored.expiresAt });
|
|
290
|
+
return decided;
|
|
274
291
|
}
|
|
275
292
|
/**
|
|
276
293
|
* Poll for device token (called by CLI)
|
|
277
294
|
*/
|
|
278
|
-
pollDeviceToken(deviceCode, clientId, generateToken) {
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
}
|
|
292
|
-
}
|
|
293
|
-
if (!foundState || !foundKey) {
|
|
294
|
-
return {
|
|
295
|
-
success: false,
|
|
296
|
-
error: 'invalid_grant',
|
|
297
|
-
error_description: 'Invalid device code'
|
|
298
|
-
};
|
|
299
|
-
}
|
|
300
|
-
// Check expiration
|
|
301
|
-
if (foundState.expiresAt < Date.now()) {
|
|
302
|
-
this.deviceCodes.delete(foundKey);
|
|
303
|
-
return {
|
|
304
|
-
success: false,
|
|
305
|
-
error: 'expired_token',
|
|
306
|
-
error_description: 'Device code has expired'
|
|
307
|
-
};
|
|
308
|
-
}
|
|
309
|
-
// Check status
|
|
310
|
-
switch (foundState.status) {
|
|
295
|
+
async pollDeviceToken(deviceCode, clientId, generateToken) {
|
|
296
|
+
const id = deviceId(this.hashSecret(deviceCode));
|
|
297
|
+
const stored = await this.store.get(id, 'oauth2_device');
|
|
298
|
+
// The store drops expired codes, so an unknown code and an expired one look alike here.
|
|
299
|
+
// Report expiry: a client that polls past its code's lifetime is told to start over.
|
|
300
|
+
if (!stored) {
|
|
301
|
+
return { success: false, error: 'expired_token', error_description: 'Device code is unknown or has expired' };
|
|
302
|
+
}
|
|
303
|
+
const record = stored.data;
|
|
304
|
+
if (record.clientId !== clientId) {
|
|
305
|
+
return { success: false, error: 'invalid_grant', error_description: 'Invalid device code' };
|
|
306
|
+
}
|
|
307
|
+
switch (record.status) {
|
|
311
308
|
case 'pending':
|
|
312
309
|
return {
|
|
313
310
|
success: false,
|
|
@@ -315,41 +312,28 @@ export class OAuth2AuthorizationServer {
|
|
|
315
312
|
error_description: 'The authorization request is still pending'
|
|
316
313
|
};
|
|
317
314
|
case 'denied':
|
|
318
|
-
this.
|
|
315
|
+
await this.store.consume(id, 'oauth2_device');
|
|
319
316
|
return {
|
|
320
317
|
success: false,
|
|
321
318
|
error: 'access_denied',
|
|
322
319
|
error_description: 'The user denied the authorization request'
|
|
323
320
|
};
|
|
324
|
-
case '
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
case 'authorized':
|
|
332
|
-
if (!foundState.userId) {
|
|
333
|
-
return {
|
|
334
|
-
success: false,
|
|
335
|
-
error: 'server_error',
|
|
336
|
-
error_description: 'User ID not found for authorized request'
|
|
337
|
-
};
|
|
321
|
+
case 'authorized': {
|
|
322
|
+
// Taking the record is what makes the code single use: two concurrent polls cannot
|
|
323
|
+
// both receive tokens, because only one of them gets it back.
|
|
324
|
+
const taken = await this.store.consume(id, 'oauth2_device');
|
|
325
|
+
const approved = taken?.data;
|
|
326
|
+
if (!approved || approved.status !== 'authorized' || !approved.userId) {
|
|
327
|
+
return { success: false, error: 'invalid_grant', error_description: 'Device code was already used' };
|
|
338
328
|
}
|
|
339
|
-
// Generate tokens
|
|
340
|
-
const tokenResponse = await generateToken(foundState.userId, foundState.scopes, foundState.clientId);
|
|
341
|
-
// Remove used device code
|
|
342
|
-
this.deviceCodes.delete(foundKey);
|
|
343
329
|
return {
|
|
344
330
|
success: true,
|
|
345
|
-
response:
|
|
331
|
+
response: await generateToken(approved.userId, approved.scopes, approved.clientId)
|
|
346
332
|
};
|
|
333
|
+
}
|
|
347
334
|
default:
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
error: 'server_error',
|
|
351
|
-
error_description: 'Unknown device code status'
|
|
352
|
-
};
|
|
335
|
+
await this.store.consume(id, 'oauth2_device');
|
|
336
|
+
return { success: false, error: 'expired_token', error_description: 'Device code has expired' };
|
|
353
337
|
}
|
|
354
338
|
}
|
|
355
339
|
// ============================================
|
|
@@ -427,7 +411,7 @@ export class OAuth2AuthorizationServer {
|
|
|
427
411
|
/**
|
|
428
412
|
* Generate authorization code after user approval
|
|
429
413
|
*/
|
|
430
|
-
generateAuthorizationCode(clientId, redirectUri, scopes, codeChallenge, userId) {
|
|
414
|
+
async generateAuthorizationCode(clientId, redirectUri, scopes, codeChallenge, userId) {
|
|
431
415
|
const code = randomBytes(32).toString('base64url');
|
|
432
416
|
const codeHash = this.hashSecret(code);
|
|
433
417
|
const state = {
|
|
@@ -439,15 +423,52 @@ export class OAuth2AuthorizationServer {
|
|
|
439
423
|
userId,
|
|
440
424
|
expiresAt: Date.now() + (this.config.authCodeTtl * 1000)
|
|
441
425
|
};
|
|
442
|
-
this.
|
|
426
|
+
await this.store.save({
|
|
427
|
+
id: authCodeId(codeHash),
|
|
428
|
+
kind: 'oauth2_code',
|
|
429
|
+
data: { ...state },
|
|
430
|
+
expiresAt: new Date(state.expiresAt).toISOString()
|
|
431
|
+
});
|
|
443
432
|
return code;
|
|
444
433
|
}
|
|
434
|
+
/**
|
|
435
|
+
* Check an approval posted from the consent screen before issuing a code for it.
|
|
436
|
+
*
|
|
437
|
+
* The approval arrives as a fresh request, so everything the authorization request was
|
|
438
|
+
* checked for is checked again: the client, its grant, the redirect URI, the PKCE
|
|
439
|
+
* challenge, and scopes the client may have. The person may have unticked scopes, but the
|
|
440
|
+
* result must still be within what the client is allowed.
|
|
441
|
+
*/
|
|
442
|
+
validateApproval(params) {
|
|
443
|
+
const client = this.getClient(params.client_id);
|
|
444
|
+
if (!client || !client.isActive || !client.grantTypes.includes('authorization_code')) {
|
|
445
|
+
return { valid: false, error_description: 'Unknown or inactive client' };
|
|
446
|
+
}
|
|
447
|
+
if (!client.redirectUris.includes(params.redirect_uri)) {
|
|
448
|
+
return { valid: false, error_description: 'Invalid redirect_uri' };
|
|
449
|
+
}
|
|
450
|
+
if (params.denial) {
|
|
451
|
+
return { valid: true, scopes: [] };
|
|
452
|
+
}
|
|
453
|
+
if (typeof params.code_challenge !== 'string' || params.code_challenge.length < 43) {
|
|
454
|
+
return { valid: false, error_description: 'Invalid code_challenge' };
|
|
455
|
+
}
|
|
456
|
+
if (!Array.isArray(params.scopes) || !params.scopes.every(scope => typeof scope === 'string')) {
|
|
457
|
+
return { valid: false, error_description: 'scopes must be a list' };
|
|
458
|
+
}
|
|
459
|
+
const scopes = this.validateScopes(params.scopes, client.allowedScopes);
|
|
460
|
+
if (scopes.length === 0 || scopes.length !== params.scopes.length) {
|
|
461
|
+
return { valid: false, error_description: 'scopes must be a non-empty subset of what the client may request' };
|
|
462
|
+
}
|
|
463
|
+
return { valid: true, scopes };
|
|
464
|
+
}
|
|
445
465
|
/**
|
|
446
466
|
* Exchange authorization code for tokens
|
|
447
467
|
*/
|
|
448
468
|
async exchangeAuthorizationCode(code, clientId, redirectUri, codeVerifier, generateToken) {
|
|
449
|
-
|
|
450
|
-
const
|
|
469
|
+
// Taken, not read: a code is single use even when two exchanges race
|
|
470
|
+
const taken = await this.store.consume(authCodeId(this.hashSecret(code)), 'oauth2_code');
|
|
471
|
+
const state = taken?.data;
|
|
451
472
|
if (!state) {
|
|
452
473
|
return {
|
|
453
474
|
success: false,
|
|
@@ -455,8 +476,6 @@ export class OAuth2AuthorizationServer {
|
|
|
455
476
|
error_description: 'Invalid authorization code'
|
|
456
477
|
};
|
|
457
478
|
}
|
|
458
|
-
// Remove code immediately (single use)
|
|
459
|
-
this.authorizationCodes.delete(codeHash);
|
|
460
479
|
// Validate expiration
|
|
461
480
|
if (state.expiresAt < Date.now()) {
|
|
462
481
|
return {
|
|
@@ -547,16 +566,7 @@ export class OAuth2AuthorizationServer {
|
|
|
547
566
|
token_endpoint: `${this.config.issuer}/auth/token`,
|
|
548
567
|
device_authorization_endpoint: `${this.config.issuer}/auth/device`,
|
|
549
568
|
revocation_endpoint: `${this.config.issuer}/auth/revoke`,
|
|
550
|
-
scopes_supported: [
|
|
551
|
-
'openid',
|
|
552
|
-
'profile',
|
|
553
|
-
'content:read',
|
|
554
|
-
'content:write',
|
|
555
|
-
'content:delete',
|
|
556
|
-
'media:read',
|
|
557
|
-
'media:write',
|
|
558
|
-
'offline_access'
|
|
559
|
-
],
|
|
569
|
+
scopes_supported: [...ALL_OAUTH2_SCOPES],
|
|
560
570
|
response_types_supported: ['code'],
|
|
561
571
|
grant_types_supported: [
|
|
562
572
|
'authorization_code',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"authorization-server.js","sourceRoot":"","sources":["../../../../src/core/security/oauth2/authorization-server.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"authorization-server.js","sourceRoot":"","sources":["../../../../src/core/security/oauth2/authorization-server.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What an OAuth2 access token may do: the lesser of what its scopes allow and what the user
|
|
3
|
+
* who granted it may do.
|
|
4
|
+
*
|
|
5
|
+
* Neither side alone is enough. The scopes are what the user agreed to hand the client, so a
|
|
6
|
+
* token must never exceed them, even for an admin. The user's permissions are the ceiling, so
|
|
7
|
+
* a scope must never lend a user something they could not do themselves.
|
|
8
|
+
*/
|
|
9
|
+
import type { Permission, UserRole } from '../../../types/auth.js';
|
|
10
|
+
export declare function scopesToPermissionSet(scopes: string[]): Permission[];
|
|
11
|
+
export declare function scopedPermissions(user: {
|
|
12
|
+
role: UserRole;
|
|
13
|
+
permissions?: Permission[];
|
|
14
|
+
}, scopes: string[]): Permission[];
|
|
15
|
+
//# sourceMappingURL=scoped-permissions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scoped-permissions.d.ts","sourceRoot":"","sources":["../../../../src/core/security/oauth2/scoped-permissions.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AAKlE,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,UAAU,EAAE,CAQpE;AAED,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,WAAW,CAAC,EAAE,UAAU,EAAE,CAAA;CAAE,EACpD,MAAM,EAAE,MAAM,EAAE,GACf,UAAU,EAAE,CA+Bd"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What an OAuth2 access token may do: the lesser of what its scopes allow and what the user
|
|
3
|
+
* who granted it may do.
|
|
4
|
+
*
|
|
5
|
+
* Neither side alone is enough. The scopes are what the user agreed to hand the client, so a
|
|
6
|
+
* token must never exceed them, even for an admin. The user's permissions are the ceiling, so
|
|
7
|
+
* a scope must never lend a user something they could not do themselves.
|
|
8
|
+
*/
|
|
9
|
+
import { ROLE_PERMISSIONS } from '../../types/user.js';
|
|
10
|
+
import { SCOPE_TO_PERMISSIONS } from '../../../types/oauth2.js';
|
|
11
|
+
/** Resources that are not content collections, so `<name>:<action>` is not a schema permission */
|
|
12
|
+
const NON_CONTENT_RESOURCES = new Set(['content', 'media', 'users', 'settings', 'studio', 'tokens', 'webhooks']);
|
|
13
|
+
export function scopesToPermissionSet(scopes) {
|
|
14
|
+
const permissions = new Set();
|
|
15
|
+
for (const scope of scopes) {
|
|
16
|
+
for (const permission of SCOPE_TO_PERMISSIONS[scope] ?? []) {
|
|
17
|
+
permissions.add(permission);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
return [...permissions];
|
|
21
|
+
}
|
|
22
|
+
export function scopedPermissions(user, scopes) {
|
|
23
|
+
const granted = scopesToPermissionSet(scopes);
|
|
24
|
+
if (user.role === 'admin') {
|
|
25
|
+
return granted;
|
|
26
|
+
}
|
|
27
|
+
// Stored permissions are a snapshot from creation; the role's current defaults count too,
|
|
28
|
+
// as they do everywhere else a user's permissions are judged
|
|
29
|
+
const held = new Set([...(user.permissions ?? []), ...(ROLE_PERMISSIONS[user.role] ?? [])]);
|
|
30
|
+
const holds = (permission) => held.has(permission) || held.has(`${permission.split(':')[0]}:*`);
|
|
31
|
+
const result = new Set();
|
|
32
|
+
for (const permission of granted) {
|
|
33
|
+
if (holds(permission)) {
|
|
34
|
+
result.add(permission);
|
|
35
|
+
continue;
|
|
36
|
+
}
|
|
37
|
+
// A user limited to some collections (`posts:write`) keeps exactly those under a
|
|
38
|
+
// site-wide content scope (`content:write`)
|
|
39
|
+
const [resource, action] = permission.split(':');
|
|
40
|
+
if (resource !== 'content')
|
|
41
|
+
continue;
|
|
42
|
+
for (const own of held) {
|
|
43
|
+
const [ownResource, ownAction] = own.split(':');
|
|
44
|
+
if (!ownResource || NON_CONTENT_RESOURCES.has(ownResource))
|
|
45
|
+
continue;
|
|
46
|
+
if (ownAction === action || ownAction === '*') {
|
|
47
|
+
result.add(`${ownResource}:${action}`);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
return [...result];
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=scoped-permissions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scoped-permissions.js","sourceRoot":"","sources":["../../../../src/core/security/oauth2/scoped-permissions.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAA;AAI/D,kGAAkG;AAClG,MAAM,qBAAqB,GAAG,IAAI,GAAG,CAAC,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAA;AAEhH,MAAM,UAAU,qBAAqB,CAAC,MAAgB;IACpD,MAAM,WAAW,GAAG,IAAI,GAAG,EAAc,CAAA;IACzC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,KAAK,MAAM,UAAU,IAAI,oBAAoB,CAAC,KAAoB,CAAC,IAAI,EAAE,EAAE,CAAC;YAC1E,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;QAC7B,CAAC;IACH,CAAC;IACD,OAAO,CAAC,GAAG,WAAW,CAAC,CAAA;AACzB,CAAC;AAED,MAAM,UAAU,iBAAiB,CAC/B,IAAoD,EACpD,MAAgB;IAEhB,MAAM,OAAO,GAAG,qBAAqB,CAAC,MAAM,CAAC,CAAA;IAC7C,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QAC1B,OAAO,OAAO,CAAA;IAChB,CAAC;IAED,0FAA0F;IAC1F,6DAA6D;IAC7D,MAAM,IAAI,GAAG,IAAI,GAAG,CAAS,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;IACnG,MAAM,KAAK,GAAG,CAAC,UAAkB,EAAW,EAAE,CAC5C,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;IAEnE,MAAM,MAAM,GAAG,IAAI,GAAG,EAAc,CAAA;IACpC,KAAK,MAAM,UAAU,IAAI,OAAO,EAAE,CAAC;QACjC,IAAI,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;YACtB,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;YACtB,SAAQ;QACV,CAAC;QACD,iFAAiF;QACjF,4CAA4C;QAC5C,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QAChD,IAAI,QAAQ,KAAK,SAAS;YAAE,SAAQ;QACpC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,MAAM,CAAC,WAAW,EAAE,SAAS,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;YAC/C,IAAI,CAAC,WAAW,IAAI,qBAAqB,CAAC,GAAG,CAAC,WAAW,CAAC;gBAAE,SAAQ;YACpE,IAAI,SAAS,KAAK,MAAM,IAAI,SAAS,KAAK,GAAG,EAAE,CAAC;gBAC9C,MAAM,CAAC,GAAG,CAAC,GAAG,WAAW,IAAI,MAAM,EAAgB,CAAC,CAAA;YACtD,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,CAAC,GAAG,MAAM,CAAC,CAAA;AACpB,CAAC"}
|
|
@@ -12,6 +12,8 @@ export interface AuthServiceDependencies {
|
|
|
12
12
|
getUser: (id: string) => Promise<User | null>;
|
|
13
13
|
getUserByUsername: (username: string) => Promise<User | null>;
|
|
14
14
|
updateUser: (id: string, userData: UpdateUserData) => Promise<User>;
|
|
15
|
+
/** Whether the grant an OAuth2 token was issued under still stands (not revoked, not lapsed) */
|
|
16
|
+
isOAuth2GrantLive?: (user: User, grantId: string) => Promise<boolean>;
|
|
15
17
|
/** Conditional update, present only when the data adapter supports saveUserIf */
|
|
16
18
|
updateUserIf?: (id: string, userData: Partial<UpdateUserData>, condition: {
|
|
17
19
|
passwordHash: string;
|
|
@@ -21,6 +23,8 @@ export interface AuthServiceDependencies {
|
|
|
21
23
|
appToken?: AppToken;
|
|
22
24
|
error?: string;
|
|
23
25
|
}>;
|
|
26
|
+
/** Whether an OAuth2 client is configured as trusted (first-party) */
|
|
27
|
+
isTrustedOAuth2Client?: (clientId: string) => boolean;
|
|
24
28
|
logAuditEvent: (event: AuditEvent) => void;
|
|
25
29
|
checkMFARequired: (userId: string) => Promise<MFARequirement>;
|
|
26
30
|
isDeviceTrusted: (userId: string, deviceId: string) => Promise<boolean>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth-service.d.ts","sourceRoot":"","sources":["../../../src/core/services/auth-service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;
|
|
1
|
+
{"version":3,"file":"auth-service.d.ts","sourceRoot":"","sources":["../../../src/core/services/auth-service.ts"],"names":[],"mappings":"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"}
|