|
| 1 | +import * as execa from 'execa' |
| 2 | +import type { ModuleOptions } from './module' |
| 3 | + |
| 4 | +export async function getEdgeDbCredentials( |
| 5 | + cwd: string, |
| 6 | + processInject: boolean = true, |
| 7 | +) { |
| 8 | + // http://localhost:10702/db/edgedb/ext/auth/ |
| 9 | + let dbCredentials: any | undefined |
| 10 | + try { |
| 11 | + dbCredentials = await execa.execaCommand(`edgedb instance credentials --json`, { cwd }) |
| 12 | + } |
| 13 | + catch (e) { |
| 14 | + // Silently fail, the EdgeDB instance credentials command failed. |
| 15 | + } |
| 16 | + if (dbCredentials) { |
| 17 | + const { host, port, database, user, password, tls_ca, tls_security } = JSON.parse(dbCredentials.stdout) |
| 18 | + |
| 19 | + if (processInject) { |
| 20 | + if (!process.env.NUXT_EDGEDB_HOST) |
| 21 | + process.env.NUXT_EDGEDB_HOST = host |
| 22 | + if (!process.env.NUXT_EDGEDB_PORT) |
| 23 | + process.env.NUXT_EDGEDB_PORT = port |
| 24 | + if (!process.env.NUXT_EDGEDB_DATABASE) |
| 25 | + process.env.NUXT_EDGEDB_DATABASE = database |
| 26 | + if (!process.env.NUXT_EDGEDB_USER) |
| 27 | + process.env.NUXT_EDGEDB_USER = user |
| 28 | + if (!process.env.NUXT_EDGEDB_PASS) |
| 29 | + process.env.NUXT_EDGEDB_PASS = password |
| 30 | + if (!process.env.NUXT_EDGEDB_TLS_CA) |
| 31 | + process.env.NUXT_EDGEDB_TLS_CA = tls_ca |
| 32 | + if (!process.env.NUXT_EDGEDB_TLS_SECURITY) |
| 33 | + process.env.NUXT_EDGEDB_TLS_SECURITY = tls_security |
| 34 | + if (!process.env.NUXT_EDGEDB_AUTH_BASE_URL) |
| 35 | + process.env.NUXT_EDGEDB_AUTH_BASE_URL = `http://${host}:${port}/db/${database}/ext/auth/` |
| 36 | + } |
| 37 | + |
| 38 | + return { host, port, database, user, password, tls_ca, tls_security } |
| 39 | + } |
| 40 | +} |
| 41 | + |
| 42 | +export async function getEdgeDbConfiguration( |
| 43 | + appUrl: string, |
| 44 | + options: Partial<ModuleOptions> = {}, |
| 45 | + cwd: string = process.cwd(), |
| 46 | + processInject: boolean = true, |
| 47 | +) { |
| 48 | + await getEdgeDbCredentials(cwd, processInject) |
| 49 | + |
| 50 | + const { |
| 51 | + // EdgeDB DSN settings |
| 52 | + NUXT_EDGEDB_HOST: host, |
| 53 | + NUXT_EDGEDB_PORT: port, |
| 54 | + NUXT_EDGEDB_USER: user, |
| 55 | + NUXT_EDGEDB_PASS: pass, |
| 56 | + NUXT_EDGEDB_DATABASE: database, |
| 57 | + NUXT_EDGEDB_TLS_CA: tlsCA, |
| 58 | + NUXT_EDGEDB_TLS_SECURITY: tlsSecurity, |
| 59 | + |
| 60 | + // EdgeDB Auth settings |
| 61 | + NUXT_EDGEDB_IDENTITY_MODEL: identityModel = options?.identityModel || 'User', |
| 62 | + |
| 63 | + // EdgeDB Auth URls |
| 64 | + NUXT_EDGEDB_AUTH_BASE_URL: authBaseUrl = `http://${host}:${port}/db/${database}/ext/auth/`, |
| 65 | + NUXT_EDGEDB_OAUTH_CALLBACK: oAuthCallbackUrl = `http://${host}:${port}/db/${database}/ext/auth/callback`, |
| 66 | + |
| 67 | + // EdgeDB Nuxt Auth URLs |
| 68 | + NUXT_EDGEDB_AUTH_VERIFY_REDIRECT_URL: verifyRedirectUrl = `${appUrl}/auth/verify`, |
| 69 | + NUXT_EDGEDB_AUTH_RESET_PASSWORD_URL: resetPasswordUrl = `${appUrl}/auth/reset-password`, |
| 70 | + NUXT_EDGEDB_OAUTH_REDIRECT_URL: oAuthRedirectUrl = `${appUrl}/auth/callback`, |
| 71 | + } = process.env |
| 72 | + |
| 73 | + const dsn = { |
| 74 | + host, |
| 75 | + port, |
| 76 | + user, |
| 77 | + pass, |
| 78 | + database, |
| 79 | + tlsCA, |
| 80 | + tlsSecurity: tlsSecurity as 'insecure' | 'no_host_verification' | 'strict' | 'default' | undefined, |
| 81 | + full: `edgedb://${user}:${pass}@${host}:${port}/${database}`, |
| 82 | + } |
| 83 | + |
| 84 | + const urls = { |
| 85 | + // EdgeDB Nuxt Auth URLs |
| 86 | + appUrl, |
| 87 | + resetPasswordUrl, |
| 88 | + verifyRedirectUrl, |
| 89 | + oAuthRedirectUrl, |
| 90 | + |
| 91 | + // EdgeDB Auth URls |
| 92 | + authBaseUrl, |
| 93 | + oAuthCallbackUrl, |
| 94 | + } |
| 95 | + |
| 96 | + const auth = { |
| 97 | + enabled: options?.auth || false, |
| 98 | + oauth: options?.oauth || false, |
| 99 | + identityModel, |
| 100 | + } |
| 101 | + |
| 102 | + return { |
| 103 | + auth, |
| 104 | + dsn, |
| 105 | + urls, |
| 106 | + } |
| 107 | +} |
0 commit comments