@authrim/setup 0.1.140 → 0.1.142
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/__tests__/keys.test.js +73 -2
- package/dist/__tests__/keys.test.js.map +1 -1
- package/dist/__tests__/migrate.test.js +4 -4
- package/dist/__tests__/migrate.test.js.map +1 -1
- package/dist/__tests__/paths.test.js +163 -1
- package/dist/__tests__/paths.test.js.map +1 -1
- package/dist/__tests__/source-context.test.d.ts +2 -0
- package/dist/__tests__/source-context.test.d.ts.map +1 -0
- package/dist/__tests__/source-context.test.js +72 -0
- package/dist/__tests__/source-context.test.js.map +1 -0
- package/dist/cli/commands/deploy.d.ts.map +1 -1
- package/dist/cli/commands/deploy.js +65 -37
- package/dist/cli/commands/deploy.js.map +1 -1
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +277 -198
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/core/admin.d.ts +6 -1
- package/dist/core/admin.d.ts.map +1 -1
- package/dist/core/admin.js +45 -20
- package/dist/core/admin.js.map +1 -1
- package/dist/core/cloudflare.d.ts +38 -1
- package/dist/core/cloudflare.d.ts.map +1 -1
- package/dist/core/cloudflare.js +729 -115
- package/dist/core/cloudflare.js.map +1 -1
- package/dist/core/config.d.ts +164 -34
- package/dist/core/config.d.ts.map +1 -1
- package/dist/core/config.js +72 -18
- package/dist/core/config.js.map +1 -1
- package/dist/core/deploy.d.ts +18 -0
- package/dist/core/deploy.d.ts.map +1 -1
- package/dist/core/deploy.js +126 -25
- package/dist/core/deploy.js.map +1 -1
- package/dist/core/keys.d.ts +20 -4
- package/dist/core/keys.d.ts.map +1 -1
- package/dist/core/keys.js +77 -17
- package/dist/core/keys.js.map +1 -1
- package/dist/core/login-ui-client.d.ts +42 -0
- package/dist/core/login-ui-client.d.ts.map +1 -0
- package/dist/core/login-ui-client.js +173 -0
- package/dist/core/login-ui-client.js.map +1 -0
- package/dist/core/migrate.d.ts +37 -0
- package/dist/core/migrate.d.ts.map +1 -1
- package/dist/core/migrate.js +92 -2
- package/dist/core/migrate.js.map +1 -1
- package/dist/core/paths.d.ts +78 -13
- package/dist/core/paths.d.ts.map +1 -1
- package/dist/core/paths.js +135 -17
- package/dist/core/paths.js.map +1 -1
- package/dist/core/source-context.d.ts +22 -0
- package/dist/core/source-context.d.ts.map +1 -0
- package/dist/core/source-context.js +46 -0
- package/dist/core/source-context.js.map +1 -0
- package/dist/core/tenant-mode.d.ts +4 -0
- package/dist/core/tenant-mode.d.ts.map +1 -0
- package/dist/core/tenant-mode.js +17 -0
- package/dist/core/tenant-mode.js.map +1 -0
- package/dist/core/ui-deployment.d.ts +21 -0
- package/dist/core/ui-deployment.d.ts.map +1 -0
- package/dist/core/ui-deployment.js +90 -0
- package/dist/core/ui-deployment.js.map +1 -0
- package/dist/core/ui-env.d.ts +28 -0
- package/dist/core/ui-env.d.ts.map +1 -1
- package/dist/core/ui-env.js +16 -0
- package/dist/core/ui-env.js.map +1 -1
- package/dist/core/url-config.d.ts +16 -0
- package/dist/core/url-config.d.ts.map +1 -0
- package/dist/core/url-config.js +46 -0
- package/dist/core/url-config.js.map +1 -0
- package/dist/core/wrangler.d.ts +50 -1
- package/dist/core/wrangler.d.ts.map +1 -1
- package/dist/core/wrangler.js +171 -57
- package/dist/core/wrangler.js.map +1 -1
- package/dist/i18n/locales/de.d.ts.map +1 -1
- package/dist/i18n/locales/de.js +38 -1
- package/dist/i18n/locales/de.js.map +1 -1
- package/dist/i18n/locales/en.d.ts.map +1 -1
- package/dist/i18n/locales/en.js +38 -1
- package/dist/i18n/locales/en.js.map +1 -1
- package/dist/i18n/locales/es.d.ts.map +1 -1
- package/dist/i18n/locales/es.js +38 -1
- package/dist/i18n/locales/es.js.map +1 -1
- package/dist/i18n/locales/fr.d.ts.map +1 -1
- package/dist/i18n/locales/fr.js +38 -1
- package/dist/i18n/locales/fr.js.map +1 -1
- package/dist/i18n/locales/id.d.ts.map +1 -1
- package/dist/i18n/locales/id.js +38 -1
- package/dist/i18n/locales/id.js.map +1 -1
- package/dist/i18n/locales/ja.d.ts.map +1 -1
- package/dist/i18n/locales/ja.js +38 -1
- package/dist/i18n/locales/ja.js.map +1 -1
- package/dist/i18n/locales/ko.d.ts.map +1 -1
- package/dist/i18n/locales/ko.js +38 -1
- package/dist/i18n/locales/ko.js.map +1 -1
- package/dist/i18n/locales/pt.d.ts.map +1 -1
- package/dist/i18n/locales/pt.js +38 -1
- package/dist/i18n/locales/pt.js.map +1 -1
- package/dist/i18n/locales/ru.d.ts.map +1 -1
- package/dist/i18n/locales/ru.js +38 -1
- package/dist/i18n/locales/ru.js.map +1 -1
- package/dist/i18n/locales/zh-CN.d.ts.map +1 -1
- package/dist/i18n/locales/zh-CN.js +38 -1
- package/dist/i18n/locales/zh-CN.js.map +1 -1
- package/dist/i18n/locales/zh-TW.d.ts.map +1 -1
- package/dist/i18n/locales/zh-TW.js +38 -1
- package/dist/i18n/locales/zh-TW.js.map +1 -1
- package/dist/i18n/types.d.ts +8 -0
- package/dist/i18n/types.d.ts.map +1 -1
- package/dist/index.d.ts +8 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +46 -30
- package/dist/index.js.map +1 -1
- package/dist/web/api.d.ts.map +1 -1
- package/dist/web/api.js +243 -116
- package/dist/web/api.js.map +1 -1
- package/dist/web/ui.d.ts.map +1 -1
- package/dist/web/ui.js +513 -115
- package/dist/web/ui.js.map +1 -1
- package/migrations/000_fresh_schema.sql +229 -10
- package/migrations/admin/007_admin_role_inheritance.sql +32 -0
- package/migrations/admin/008_admin_rebac_definitions.sql +117 -0
- package/migrations/admin/009_optimize_admin_audit_indexes.sql +15 -0
- package/package.json +5 -5
package/dist/core/keys.js
CHANGED
|
@@ -4,13 +4,14 @@
|
|
|
4
4
|
* Generates RSA key pairs for JWT signing and other cryptographic secrets.
|
|
5
5
|
* Based on the existing setup-keys.sh script functionality.
|
|
6
6
|
*
|
|
7
|
-
* Supports
|
|
7
|
+
* Supports external (.authrim-keys/{env}/), internal (.authrim/{env}/keys/),
|
|
8
|
+
* and legacy (.keys/{env}/) key storage structures.
|
|
8
9
|
*/
|
|
9
10
|
import { randomBytes, generateKeyPairSync, createPublicKey, createPrivateKey } from 'node:crypto';
|
|
10
|
-
import { writeFile, mkdir, readFile } from 'node:fs/promises';
|
|
11
|
+
import { writeFile, mkdir, readFile, chmod } from 'node:fs/promises';
|
|
11
12
|
import { existsSync } from 'node:fs';
|
|
12
13
|
import { join, resolve } from 'node:path';
|
|
13
|
-
import { getEnvironmentPaths, getLegacyPaths, resolvePaths, } from './paths.js';
|
|
14
|
+
import { getEnvironmentPaths, getExternalKeysDir, getLegacyPaths, findKeysDirectory, resolvePaths, } from './paths.js';
|
|
14
15
|
// =============================================================================
|
|
15
16
|
// Key ID Generation
|
|
16
17
|
// =============================================================================
|
|
@@ -120,8 +121,14 @@ function validateKeysDirectory(keysDir) {
|
|
|
120
121
|
if (/[;&|`$(){}[\]<>!#*?]/.test(keysDir)) {
|
|
121
122
|
throw new Error('Invalid keys directory: shell metacharacters not allowed');
|
|
122
123
|
}
|
|
123
|
-
// Reject absolute paths to system directories (Unix)
|
|
124
124
|
const absolutePath = resolve(keysDir);
|
|
125
|
+
const cwd = process.cwd();
|
|
126
|
+
// Allow paths within the current working directory (project paths are safe)
|
|
127
|
+
// This allows CI environments like GitHub Actions (/home/runner/work/...)
|
|
128
|
+
if (absolutePath.startsWith(cwd + '/') || absolutePath === cwd) {
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
// Reject absolute paths to system directories (Unix)
|
|
125
132
|
const dangerousPaths = ['/etc', '/usr', '/bin', '/sbin', '/var', '/tmp', '/root', '/home'];
|
|
126
133
|
for (const dangerous of dangerousPaths) {
|
|
127
134
|
if (absolutePath.startsWith(dangerous + '/') || absolutePath === dangerous) {
|
|
@@ -139,7 +146,12 @@ function validateKeysDirectory(keysDir) {
|
|
|
139
146
|
/**
|
|
140
147
|
* Get environment-specific keys directory path
|
|
141
148
|
*
|
|
142
|
-
*
|
|
149
|
+
* Search order when keysBaseDir is provided:
|
|
150
|
+
* 1. External: {keysBaseDir}/.authrim-keys/{env}/
|
|
151
|
+
* 2. Internal: {baseDir}/.authrim/{env}/keys/
|
|
152
|
+
* 3. Legacy: {baseDir}/.keys/{env}/
|
|
153
|
+
*
|
|
154
|
+
* @param baseDir - Base directory (usually source dir)
|
|
143
155
|
* @param env - Environment name
|
|
144
156
|
* @param options - Options for path resolution
|
|
145
157
|
* @returns Path to the keys directory
|
|
@@ -148,6 +160,15 @@ export function getKeysDirectory(baseDir, env, options) {
|
|
|
148
160
|
if (options?.legacy) {
|
|
149
161
|
return getLegacyPaths(baseDir, env).keys;
|
|
150
162
|
}
|
|
163
|
+
// If keysBaseDir is provided, use findKeysDirectory for 3-tier fallback
|
|
164
|
+
if (options?.keysBaseDir) {
|
|
165
|
+
const found = findKeysDirectory({ env, sourceDir: baseDir, keysBaseDir: options.keysBaseDir });
|
|
166
|
+
if (found) {
|
|
167
|
+
return found.path;
|
|
168
|
+
}
|
|
169
|
+
// Default to external for new environments
|
|
170
|
+
return getExternalKeysDir(env, options.keysBaseDir);
|
|
171
|
+
}
|
|
151
172
|
// Check if existing structure should be used
|
|
152
173
|
const resolved = resolvePaths({ baseDir, env });
|
|
153
174
|
if (resolved.type === 'legacy') {
|
|
@@ -170,9 +191,20 @@ export function getLegacyKeysDirectory(baseDir, env) {
|
|
|
170
191
|
}
|
|
171
192
|
/**
|
|
172
193
|
* Check if keys already exist for an environment
|
|
173
|
-
* Checks
|
|
194
|
+
* Checks external, internal (new), and legacy structures
|
|
195
|
+
*
|
|
196
|
+
* @param baseDir - Source directory
|
|
197
|
+
* @param env - Environment name
|
|
198
|
+
* @param keysBaseDir - Optional base directory for external keys
|
|
174
199
|
*/
|
|
175
|
-
export function keysExistForEnvironment(baseDir, env) {
|
|
200
|
+
export function keysExistForEnvironment(baseDir, env, keysBaseDir) {
|
|
201
|
+
// Check external structure
|
|
202
|
+
if (keysBaseDir) {
|
|
203
|
+
const externalDir = getExternalKeysDir(env, keysBaseDir);
|
|
204
|
+
if (existsSync(join(externalDir, 'metadata.json'))) {
|
|
205
|
+
return true;
|
|
206
|
+
}
|
|
207
|
+
}
|
|
176
208
|
// Check new structure
|
|
177
209
|
const newPaths = getEnvironmentPaths({ baseDir, env });
|
|
178
210
|
const newMetadataPath = join(newPaths.keys, 'metadata.json');
|
|
@@ -202,12 +234,16 @@ export async function saveKeysToDirectory(secrets, options = {}, legacyEnv) {
|
|
|
202
234
|
targetDir = legacyEnv ? join(options, legacyEnv) : options;
|
|
203
235
|
}
|
|
204
236
|
else {
|
|
205
|
-
const { baseDir = process.cwd(), env, legacy, targetDir: explicitDir } = options;
|
|
237
|
+
const { baseDir = process.cwd(), env, legacy, targetDir: explicitDir, keysBaseDir } = options;
|
|
206
238
|
if (explicitDir) {
|
|
207
239
|
targetDir = explicitDir;
|
|
208
240
|
}
|
|
209
241
|
else if (env) {
|
|
210
|
-
if (
|
|
242
|
+
if (keysBaseDir) {
|
|
243
|
+
// External keys: {keysBaseDir}/.authrim-keys/{env}/
|
|
244
|
+
targetDir = getExternalKeysDir(env, keysBaseDir);
|
|
245
|
+
}
|
|
246
|
+
else if (legacy) {
|
|
211
247
|
targetDir = getLegacyPaths(baseDir, env).keys;
|
|
212
248
|
}
|
|
213
249
|
else {
|
|
@@ -220,9 +256,9 @@ export async function saveKeysToDirectory(secrets, options = {}, legacyEnv) {
|
|
|
220
256
|
}
|
|
221
257
|
// Security: Validate directory path to prevent path traversal
|
|
222
258
|
validateKeysDirectory(targetDir);
|
|
223
|
-
// Ensure directory exists
|
|
259
|
+
// Ensure directory exists with restrictive permissions (owner-only access)
|
|
224
260
|
if (!existsSync(targetDir)) {
|
|
225
|
-
await mkdir(targetDir, { recursive: true });
|
|
261
|
+
await mkdir(targetDir, { recursive: true, mode: 0o700 });
|
|
226
262
|
}
|
|
227
263
|
const paths = {
|
|
228
264
|
privateKey: join(targetDir, 'private.pem'),
|
|
@@ -233,16 +269,24 @@ export async function saveKeysToDirectory(secrets, options = {}, legacyEnv) {
|
|
|
233
269
|
setupToken: join(targetDir, 'setup_token.txt'),
|
|
234
270
|
metadata: join(targetDir, 'metadata.json'),
|
|
235
271
|
};
|
|
272
|
+
// Sensitive file permission: owner read/write only
|
|
273
|
+
const SENSITIVE_FILE_MODE = 0o600;
|
|
236
274
|
// Write private key
|
|
237
275
|
await writeFile(paths.privateKey, secrets.keyPair.privateKeyPem, 'utf-8');
|
|
276
|
+
await chmod(paths.privateKey, SENSITIVE_FILE_MODE);
|
|
238
277
|
// Write public key (JWK)
|
|
239
278
|
await writeFile(paths.publicKey, JSON.stringify(secrets.keyPair.publicKeyJwk, null, 2), 'utf-8');
|
|
279
|
+
await chmod(paths.publicKey, SENSITIVE_FILE_MODE);
|
|
240
280
|
// Write other secrets
|
|
241
281
|
await writeFile(paths.rpTokenEncryptionKey, secrets.rpTokenEncryptionKey, 'utf-8');
|
|
282
|
+
await chmod(paths.rpTokenEncryptionKey, SENSITIVE_FILE_MODE);
|
|
242
283
|
await writeFile(paths.adminApiSecret, secrets.adminApiSecret, 'utf-8');
|
|
284
|
+
await chmod(paths.adminApiSecret, SENSITIVE_FILE_MODE);
|
|
243
285
|
await writeFile(paths.keyManagerSecret, secrets.keyManagerSecret, 'utf-8');
|
|
286
|
+
await chmod(paths.keyManagerSecret, SENSITIVE_FILE_MODE);
|
|
244
287
|
if (secrets.setupToken) {
|
|
245
288
|
await writeFile(paths.setupToken, secrets.setupToken, 'utf-8');
|
|
289
|
+
await chmod(paths.setupToken, SENSITIVE_FILE_MODE);
|
|
246
290
|
}
|
|
247
291
|
// Write metadata
|
|
248
292
|
const metadata = {
|
|
@@ -257,6 +301,7 @@ export async function saveKeysToDirectory(secrets, options = {}, legacyEnv) {
|
|
|
257
301
|
},
|
|
258
302
|
};
|
|
259
303
|
await writeFile(paths.metadata, JSON.stringify(metadata, null, 2), 'utf-8');
|
|
304
|
+
await chmod(paths.metadata, SENSITIVE_FILE_MODE);
|
|
260
305
|
}
|
|
261
306
|
/**
|
|
262
307
|
* Load existing keys from directory
|
|
@@ -273,18 +318,31 @@ export async function loadKeysFromDirectory(options = {}, legacyEnv) {
|
|
|
273
318
|
targetDir = legacyEnv ? join(options, legacyEnv) : options;
|
|
274
319
|
}
|
|
275
320
|
else {
|
|
276
|
-
const { baseDir = process.cwd(), env, targetDir: explicitDir } = options;
|
|
321
|
+
const { baseDir = process.cwd(), env, targetDir: explicitDir, keysBaseDir } = options;
|
|
277
322
|
if (explicitDir) {
|
|
278
323
|
targetDir = explicitDir;
|
|
279
324
|
}
|
|
280
325
|
else if (env) {
|
|
281
|
-
//
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
326
|
+
// Use findKeysDirectory for 3-tier search when keysBaseDir is provided
|
|
327
|
+
if (keysBaseDir) {
|
|
328
|
+
const found = findKeysDirectory({ env, sourceDir: baseDir, keysBaseDir });
|
|
329
|
+
if (found) {
|
|
330
|
+
targetDir = found.path;
|
|
331
|
+
}
|
|
332
|
+
else {
|
|
333
|
+
// No keys found anywhere
|
|
334
|
+
return {};
|
|
335
|
+
}
|
|
285
336
|
}
|
|
286
337
|
else {
|
|
287
|
-
|
|
338
|
+
// Auto-detect which structure to use
|
|
339
|
+
const resolved = resolvePaths({ baseDir, env });
|
|
340
|
+
if (resolved.type === 'legacy') {
|
|
341
|
+
targetDir = resolved.paths.keys;
|
|
342
|
+
}
|
|
343
|
+
else {
|
|
344
|
+
targetDir = resolved.paths.keys;
|
|
345
|
+
}
|
|
288
346
|
}
|
|
289
347
|
}
|
|
290
348
|
else {
|
|
@@ -356,6 +414,8 @@ export function generateWranglerSecretCommands(secrets, keysDir = '.keys', env)
|
|
|
356
414
|
const commands = [];
|
|
357
415
|
// Private key (multiline secret)
|
|
358
416
|
commands.push(`cat ${join(keysDir, 'private.pem')} | wrangler secret put PRIVATE_KEY_PEM${envFlag}`);
|
|
417
|
+
// Public JWK
|
|
418
|
+
commands.push(`cat ${join(keysDir, 'public.jwk.json')} | wrangler secret put PUBLIC_JWK_JSON${envFlag}`);
|
|
359
419
|
// RP Token encryption key
|
|
360
420
|
commands.push(`echo -n "$(cat ${join(keysDir, 'rp_token_encryption_key.txt')})" | wrangler secret put RP_TOKEN_ENCRYPTION_KEY${envFlag}`);
|
|
361
421
|
// Admin API secret
|
package/dist/core/keys.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"keys.js","sourceRoot":"","sources":["../../src/core/keys.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"keys.js","sourceRoot":"","sources":["../../src/core/keys.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Login UI Client Auto-Creation Module
|
|
3
|
+
*
|
|
4
|
+
* Creates an OAuth client for the Login UI during deployment.
|
|
5
|
+
* The Login UI needs its own client_id for SDK integration and
|
|
6
|
+
* OAuth callback handling.
|
|
7
|
+
*
|
|
8
|
+
* Flow:
|
|
9
|
+
* 1. After workers are deployed, Admin API is available
|
|
10
|
+
* 2. Read ADMIN_API_SECRET from keys directory
|
|
11
|
+
* 3. Check if Login UI client already exists
|
|
12
|
+
* 4. Create client via POST /api/admin/clients with Bearer token
|
|
13
|
+
* 5. Return client_id for inclusion in ui.env
|
|
14
|
+
*/
|
|
15
|
+
export interface LoginUiClientConfig {
|
|
16
|
+
/** API base URL (e.g., https://prod-ar-router.workers.dev) */
|
|
17
|
+
apiBaseUrl: string;
|
|
18
|
+
/** Login UI URL (e.g., https://prod-ar-login-ui.pages.dev) */
|
|
19
|
+
loginUiUrl: string;
|
|
20
|
+
/** Path to admin_api_secret.txt */
|
|
21
|
+
adminApiSecretPath: string;
|
|
22
|
+
/** Progress callback */
|
|
23
|
+
onProgress?: (message: string) => void;
|
|
24
|
+
}
|
|
25
|
+
export interface LoginUiClientResult {
|
|
26
|
+
/** Whether the operation succeeded */
|
|
27
|
+
success: boolean;
|
|
28
|
+
/** The client_id of the Login UI client */
|
|
29
|
+
clientId?: string;
|
|
30
|
+
/** Whether the client already existed */
|
|
31
|
+
alreadyExists?: boolean;
|
|
32
|
+
/** Error message if failed */
|
|
33
|
+
error?: string;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Ensure a Login UI OAuth client exists, creating one if necessary.
|
|
37
|
+
*
|
|
38
|
+
* This is idempotent: if a client named "Login UI" with is_trusted=true
|
|
39
|
+
* already exists, its client_id is returned without creating a new one.
|
|
40
|
+
*/
|
|
41
|
+
export declare function ensureLoginUiClient(config: LoginUiClientConfig): Promise<LoginUiClientResult>;
|
|
42
|
+
//# sourceMappingURL=login-ui-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"login-ui-client.d.ts","sourceRoot":"","sources":["../../src/core/login-ui-client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AASH,MAAM,WAAW,mBAAmB;IAClC,8DAA8D;IAC9D,UAAU,EAAE,MAAM,CAAC;IACnB,8DAA8D;IAC9D,UAAU,EAAE,MAAM,CAAC;IACnB,mCAAmC;IACnC,kBAAkB,EAAE,MAAM,CAAC;IAC3B,wBAAwB;IACxB,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACxC;AAED,MAAM,WAAW,mBAAmB;IAClC,sCAAsC;IACtC,OAAO,EAAE,OAAO,CAAC;IACjB,2CAA2C;IAC3C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,yCAAyC;IACzC,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,8BAA8B;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AA8KD;;;;;GAKG;AACH,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,mBAAmB,GAC1B,OAAO,CAAC,mBAAmB,CAAC,CA8C9B"}
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Login UI Client Auto-Creation Module
|
|
3
|
+
*
|
|
4
|
+
* Creates an OAuth client for the Login UI during deployment.
|
|
5
|
+
* The Login UI needs its own client_id for SDK integration and
|
|
6
|
+
* OAuth callback handling.
|
|
7
|
+
*
|
|
8
|
+
* Flow:
|
|
9
|
+
* 1. After workers are deployed, Admin API is available
|
|
10
|
+
* 2. Read ADMIN_API_SECRET from keys directory
|
|
11
|
+
* 3. Check if Login UI client already exists
|
|
12
|
+
* 4. Create client via POST /api/admin/clients with Bearer token
|
|
13
|
+
* 5. Return client_id for inclusion in ui.env
|
|
14
|
+
*/
|
|
15
|
+
import { readFile } from 'node:fs/promises';
|
|
16
|
+
import { existsSync } from 'node:fs';
|
|
17
|
+
// =============================================================================
|
|
18
|
+
// Constants
|
|
19
|
+
// =============================================================================
|
|
20
|
+
/** Client name used for the Login UI */
|
|
21
|
+
const LOGIN_UI_CLIENT_NAME = 'Login UI';
|
|
22
|
+
// =============================================================================
|
|
23
|
+
// Implementation
|
|
24
|
+
// =============================================================================
|
|
25
|
+
/**
|
|
26
|
+
* Build the redirect URIs for the Login UI client
|
|
27
|
+
*/
|
|
28
|
+
function buildRedirectUris(loginUiUrl) {
|
|
29
|
+
// Remove trailing slash
|
|
30
|
+
const baseUrl = loginUiUrl.replace(/\/$/, '');
|
|
31
|
+
return [
|
|
32
|
+
`${baseUrl}/callback`,
|
|
33
|
+
`${baseUrl}/reauth/callback`,
|
|
34
|
+
`${baseUrl}/device/callback`,
|
|
35
|
+
`${baseUrl}/ciba/callback`,
|
|
36
|
+
];
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Read the admin API secret from the keys directory
|
|
40
|
+
*/
|
|
41
|
+
async function readAdminApiSecret(secretPath) {
|
|
42
|
+
if (!existsSync(secretPath)) {
|
|
43
|
+
throw new Error(`Admin API secret not found: ${secretPath}`);
|
|
44
|
+
}
|
|
45
|
+
const secret = await readFile(secretPath, 'utf-8');
|
|
46
|
+
return secret.trim();
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Check if a Login UI client already exists.
|
|
50
|
+
* Returns client_id and whether migration to public client is needed.
|
|
51
|
+
*/
|
|
52
|
+
async function findExistingClient(apiBaseUrl, adminSecret) {
|
|
53
|
+
const response = await fetch(`${apiBaseUrl}/api/admin/clients?search=${encodeURIComponent(LOGIN_UI_CLIENT_NAME)}&limit=10`, {
|
|
54
|
+
method: 'GET',
|
|
55
|
+
headers: {
|
|
56
|
+
Authorization: `Bearer ${adminSecret}`,
|
|
57
|
+
Accept: 'application/json',
|
|
58
|
+
},
|
|
59
|
+
});
|
|
60
|
+
if (!response.ok) {
|
|
61
|
+
return null;
|
|
62
|
+
}
|
|
63
|
+
const data = (await response.json());
|
|
64
|
+
const existing = data.clients?.find((c) => c.client_name === LOGIN_UI_CLIENT_NAME && c.is_trusted === true);
|
|
65
|
+
if (!existing)
|
|
66
|
+
return null;
|
|
67
|
+
return {
|
|
68
|
+
clientId: existing.client_id,
|
|
69
|
+
needsMigration: existing.token_endpoint_auth_method !== 'none' || existing.require_pkce !== true,
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Update an existing Login UI client to use public client configuration.
|
|
74
|
+
* Migrates from client_secret_basic to none + require_pkce.
|
|
75
|
+
*/
|
|
76
|
+
async function updateClientToPublic(apiBaseUrl, adminSecret, clientId) {
|
|
77
|
+
const response = await fetch(`${apiBaseUrl}/api/admin/clients/${clientId}`, {
|
|
78
|
+
method: 'PUT',
|
|
79
|
+
headers: {
|
|
80
|
+
Authorization: `Bearer ${adminSecret}`,
|
|
81
|
+
'Content-Type': 'application/json',
|
|
82
|
+
Accept: 'application/json',
|
|
83
|
+
},
|
|
84
|
+
body: JSON.stringify({
|
|
85
|
+
token_endpoint_auth_method: 'none',
|
|
86
|
+
require_pkce: true,
|
|
87
|
+
}),
|
|
88
|
+
});
|
|
89
|
+
if (!response.ok) {
|
|
90
|
+
const errorBody = await response.text().catch(() => 'Unknown error');
|
|
91
|
+
throw new Error(`Failed to update Login UI client to public client (${response.status}): ${errorBody}`);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Create a new Login UI client via Admin API
|
|
96
|
+
*/
|
|
97
|
+
async function createClient(apiBaseUrl, adminSecret, loginUiUrl) {
|
|
98
|
+
const redirectUris = buildRedirectUris(loginUiUrl);
|
|
99
|
+
const response = await fetch(`${apiBaseUrl}/api/admin/clients`, {
|
|
100
|
+
method: 'POST',
|
|
101
|
+
headers: {
|
|
102
|
+
Authorization: `Bearer ${adminSecret}`,
|
|
103
|
+
'Content-Type': 'application/json',
|
|
104
|
+
Accept: 'application/json',
|
|
105
|
+
},
|
|
106
|
+
body: JSON.stringify({
|
|
107
|
+
client_name: LOGIN_UI_CLIENT_NAME,
|
|
108
|
+
redirect_uris: redirectUris,
|
|
109
|
+
grant_types: ['authorization_code'],
|
|
110
|
+
response_types: ['code'],
|
|
111
|
+
scope: 'openid profile email',
|
|
112
|
+
is_trusted: true,
|
|
113
|
+
skip_consent: true,
|
|
114
|
+
token_endpoint_auth_method: 'none',
|
|
115
|
+
require_pkce: true,
|
|
116
|
+
}),
|
|
117
|
+
});
|
|
118
|
+
if (!response.ok) {
|
|
119
|
+
const errorBody = await response.text().catch(() => 'Unknown error');
|
|
120
|
+
throw new Error(`Failed to create Login UI client (${response.status}): ${errorBody}`);
|
|
121
|
+
}
|
|
122
|
+
const data = (await response.json());
|
|
123
|
+
return data.client.client_id;
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Ensure a Login UI OAuth client exists, creating one if necessary.
|
|
127
|
+
*
|
|
128
|
+
* This is idempotent: if a client named "Login UI" with is_trusted=true
|
|
129
|
+
* already exists, its client_id is returned without creating a new one.
|
|
130
|
+
*/
|
|
131
|
+
export async function ensureLoginUiClient(config) {
|
|
132
|
+
const { apiBaseUrl, loginUiUrl, adminApiSecretPath, onProgress } = config;
|
|
133
|
+
try {
|
|
134
|
+
// Read admin secret
|
|
135
|
+
onProgress?.('Reading admin API secret...');
|
|
136
|
+
const adminSecret = await readAdminApiSecret(adminApiSecretPath);
|
|
137
|
+
// Check for existing client
|
|
138
|
+
onProgress?.('Checking for existing Login UI client...');
|
|
139
|
+
const existingClient = await findExistingClient(apiBaseUrl, adminSecret);
|
|
140
|
+
if (existingClient) {
|
|
141
|
+
if (existingClient.needsMigration) {
|
|
142
|
+
onProgress?.(`Migrating Login UI client to public client: ${existingClient.clientId}`);
|
|
143
|
+
await updateClientToPublic(apiBaseUrl, adminSecret, existingClient.clientId);
|
|
144
|
+
onProgress?.('Login UI client migrated to public client (token_endpoint_auth_method=none, require_pkce=true)');
|
|
145
|
+
}
|
|
146
|
+
else {
|
|
147
|
+
onProgress?.(`Login UI client already exists: ${existingClient.clientId}`);
|
|
148
|
+
}
|
|
149
|
+
return {
|
|
150
|
+
success: true,
|
|
151
|
+
clientId: existingClient.clientId,
|
|
152
|
+
alreadyExists: true,
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
// Create new client
|
|
156
|
+
onProgress?.('Creating Login UI OAuth client...');
|
|
157
|
+
const clientId = await createClient(apiBaseUrl, adminSecret, loginUiUrl);
|
|
158
|
+
onProgress?.(`Login UI client created: ${clientId}`);
|
|
159
|
+
return {
|
|
160
|
+
success: true,
|
|
161
|
+
clientId,
|
|
162
|
+
alreadyExists: false,
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
catch (error) {
|
|
166
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
167
|
+
return {
|
|
168
|
+
success: false,
|
|
169
|
+
error: message,
|
|
170
|
+
};
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
//# sourceMappingURL=login-ui-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"login-ui-client.js","sourceRoot":"","sources":["../../src/core/login-ui-client.ts"],"names":[],"mappings":"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"}
|
package/dist/core/migrate.d.ts
CHANGED
|
@@ -92,4 +92,41 @@ export declare function getMigrationStatus(baseDir?: string): {
|
|
|
92
92
|
environments: string[];
|
|
93
93
|
legacyFiles: string[];
|
|
94
94
|
};
|
|
95
|
+
export interface MigrateKeysToExternalOptions {
|
|
96
|
+
/** Source directory containing .authrim/ or .keys/ */
|
|
97
|
+
sourceDir: string;
|
|
98
|
+
/** Target base directory for external keys (keys go to {keysBaseDir}/.authrim-keys/{env}/) */
|
|
99
|
+
keysBaseDir: string;
|
|
100
|
+
/** Environment name */
|
|
101
|
+
env: string;
|
|
102
|
+
/** Dry run - don't actually copy files */
|
|
103
|
+
dryRun?: boolean;
|
|
104
|
+
/** Progress callback */
|
|
105
|
+
onProgress?: (msg: string) => void;
|
|
106
|
+
}
|
|
107
|
+
export interface MigrateKeysToExternalResult {
|
|
108
|
+
success: boolean;
|
|
109
|
+
/** Source location where keys were found */
|
|
110
|
+
sourceLocation?: 'internal' | 'legacy';
|
|
111
|
+
/** Source path */
|
|
112
|
+
sourcePath?: string;
|
|
113
|
+
/** Destination path */
|
|
114
|
+
destPath?: string;
|
|
115
|
+
/** Files copied */
|
|
116
|
+
files: string[];
|
|
117
|
+
/** Error message if failed */
|
|
118
|
+
error?: string;
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Migrate keys from internal/legacy location to external .authrim-keys/{env}/ directory
|
|
122
|
+
*
|
|
123
|
+
* Copies key files from:
|
|
124
|
+
* - {sourceDir}/.authrim/{env}/keys/ (internal), or
|
|
125
|
+
* - {sourceDir}/.keys/{env}/ (legacy)
|
|
126
|
+
*
|
|
127
|
+
* To: {keysBaseDir}/.authrim-keys/{env}/
|
|
128
|
+
*
|
|
129
|
+
* After copy, updates config.json with new secretsPath and storageType.
|
|
130
|
+
*/
|
|
131
|
+
export declare function migrateKeysToExternal(options: MigrateKeysToExternalOptions): Promise<MigrateKeysToExternalResult>;
|
|
95
132
|
//# sourceMappingURL=migrate.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"migrate.d.ts","sourceRoot":"","sources":["../../src/core/migrate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;
|
|
1
|
+
{"version":3,"file":"migrate.d.ts","sourceRoot":"","sources":["../../src/core/migrate.ts"],"names":[],"mappings":"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"}
|
package/dist/core/migrate.js
CHANGED
|
@@ -21,9 +21,9 @@
|
|
|
21
21
|
*/
|
|
22
22
|
import { existsSync } from 'node:fs';
|
|
23
23
|
import { mkdir, copyFile, readFile, writeFile, readdir, rm, chmod } from 'node:fs/promises';
|
|
24
|
-
import { join } from 'node:path';
|
|
24
|
+
import { join, resolve } from 'node:path';
|
|
25
25
|
import { createRequire } from 'node:module';
|
|
26
|
-
import { LEGACY_CONFIG_FILE, LEGACY_LOCK_FILE, LEGACY_KEYS_DIR, getEnvironmentPaths, getLegacyPaths, detectStructure, listEnvironments, validateEnvName, } from './paths.js';
|
|
26
|
+
import { LEGACY_CONFIG_FILE, LEGACY_LOCK_FILE, LEGACY_KEYS_DIR, getEnvironmentPaths, getExternalKeysDir, findKeysDirectory, getLegacyPaths, detectStructure, listEnvironments, validateEnvName, } from './paths.js';
|
|
27
27
|
import { AuthrimConfigSchema } from './config.js';
|
|
28
28
|
import { AuthrimLockSchema } from './lock.js';
|
|
29
29
|
import { saveMasterWranglerConfigs } from './wrangler-sync.js';
|
|
@@ -546,4 +546,94 @@ export function getMigrationStatus(baseDir = process.cwd()) {
|
|
|
546
546
|
legacyFiles,
|
|
547
547
|
};
|
|
548
548
|
}
|
|
549
|
+
/**
|
|
550
|
+
* Migrate keys from internal/legacy location to external .authrim-keys/{env}/ directory
|
|
551
|
+
*
|
|
552
|
+
* Copies key files from:
|
|
553
|
+
* - {sourceDir}/.authrim/{env}/keys/ (internal), or
|
|
554
|
+
* - {sourceDir}/.keys/{env}/ (legacy)
|
|
555
|
+
*
|
|
556
|
+
* To: {keysBaseDir}/.authrim-keys/{env}/
|
|
557
|
+
*
|
|
558
|
+
* After copy, updates config.json with new secretsPath and storageType.
|
|
559
|
+
*/
|
|
560
|
+
export async function migrateKeysToExternal(options) {
|
|
561
|
+
const { sourceDir, keysBaseDir, env, dryRun = false, onProgress } = options;
|
|
562
|
+
// Security: Validate environment name
|
|
563
|
+
if (!validateEnvName(env)) {
|
|
564
|
+
return {
|
|
565
|
+
success: false,
|
|
566
|
+
files: [],
|
|
567
|
+
error: `Invalid environment name: ${env}`,
|
|
568
|
+
};
|
|
569
|
+
}
|
|
570
|
+
// Security: Validate keysBaseDir to prevent path traversal
|
|
571
|
+
if (keysBaseDir.includes('\0')) {
|
|
572
|
+
return {
|
|
573
|
+
success: false,
|
|
574
|
+
files: [],
|
|
575
|
+
error: 'Invalid keysBaseDir: null bytes not allowed',
|
|
576
|
+
};
|
|
577
|
+
}
|
|
578
|
+
// Find existing keys
|
|
579
|
+
const found = findKeysDirectory({ env, sourceDir });
|
|
580
|
+
if (!found) {
|
|
581
|
+
return {
|
|
582
|
+
success: false,
|
|
583
|
+
files: [],
|
|
584
|
+
error: `No keys found for environment "${env}" in ${sourceDir}`,
|
|
585
|
+
};
|
|
586
|
+
}
|
|
587
|
+
const destDir = getExternalKeysDir(env, keysBaseDir);
|
|
588
|
+
const files = [];
|
|
589
|
+
onProgress?.(`Migrating keys from ${found.path} to ${destDir}`);
|
|
590
|
+
if (!dryRun) {
|
|
591
|
+
// Create destination directory with secure permissions
|
|
592
|
+
await mkdir(destDir, { recursive: true, mode: DIRECTORY_MODE });
|
|
593
|
+
// Copy all key files
|
|
594
|
+
const entries = await readdir(found.path, { withFileTypes: true });
|
|
595
|
+
for (const entry of entries) {
|
|
596
|
+
// Skip symbolic links and directories
|
|
597
|
+
if (entry.isSymbolicLink() || entry.isDirectory()) {
|
|
598
|
+
continue;
|
|
599
|
+
}
|
|
600
|
+
const srcPath = join(found.path, entry.name);
|
|
601
|
+
const destPath = join(destDir, entry.name);
|
|
602
|
+
await copyFile(srcPath, destPath);
|
|
603
|
+
// Set restrictive permissions on sensitive files
|
|
604
|
+
if (isSensitiveFile(entry.name)) {
|
|
605
|
+
await chmod(destPath, SENSITIVE_FILE_MODE);
|
|
606
|
+
}
|
|
607
|
+
files.push(entry.name);
|
|
608
|
+
}
|
|
609
|
+
onProgress?.(` Copied ${files.length} key files`);
|
|
610
|
+
// Update config.json if it exists
|
|
611
|
+
const configPath = getEnvironmentPaths({ baseDir: sourceDir, env }).config;
|
|
612
|
+
if (existsSync(configPath)) {
|
|
613
|
+
try {
|
|
614
|
+
const content = await readFile(configPath, 'utf-8');
|
|
615
|
+
const config = JSON.parse(content);
|
|
616
|
+
if (config.keys) {
|
|
617
|
+
config.keys.secretsPath = resolve(keysBaseDir, '.authrim-keys', env) + '/';
|
|
618
|
+
config.keys.storageType = 'external';
|
|
619
|
+
}
|
|
620
|
+
await writeFile(configPath, JSON.stringify(config, null, 2));
|
|
621
|
+
onProgress?.(' Updated config.json with external keys path');
|
|
622
|
+
}
|
|
623
|
+
catch (error) {
|
|
624
|
+
onProgress?.(` Warning: Could not update config.json: ${error instanceof Error ? error.message : String(error)}`);
|
|
625
|
+
}
|
|
626
|
+
}
|
|
627
|
+
}
|
|
628
|
+
else {
|
|
629
|
+
onProgress?.(` Would copy keys from ${found.path} to ${destDir}`);
|
|
630
|
+
}
|
|
631
|
+
return {
|
|
632
|
+
success: true,
|
|
633
|
+
sourceLocation: found.location === 'legacy' ? 'legacy' : 'internal',
|
|
634
|
+
sourcePath: found.path,
|
|
635
|
+
destPath: destDir,
|
|
636
|
+
files,
|
|
637
|
+
};
|
|
638
|
+
}
|
|
549
639
|
//# sourceMappingURL=migrate.js.map
|