@portaidentity/server 1.7.0
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/CHANGELOG.md +11 -0
- package/LICENSE +21 -0
- package/README.md +33 -0
- package/dist/applications/cache.d.ts +64 -0
- package/dist/applications/cache.d.ts.map +1 -0
- package/dist/applications/cache.js +161 -0
- package/dist/applications/cache.js.map +1 -0
- package/dist/applications/errors.d.ts +25 -0
- package/dist/applications/errors.d.ts.map +1 -0
- package/dist/applications/errors.js +31 -0
- package/dist/applications/errors.js.map +1 -0
- package/dist/applications/index.d.ts +17 -0
- package/dist/applications/index.d.ts.map +1 -0
- package/dist/applications/index.js +19 -0
- package/dist/applications/index.js.map +1 -0
- package/dist/applications/repository.d.ts +184 -0
- package/dist/applications/repository.d.ts.map +1 -0
- package/dist/applications/repository.js +367 -0
- package/dist/applications/repository.js.map +1 -0
- package/dist/applications/service.d.ts +160 -0
- package/dist/applications/service.d.ts.map +1 -0
- package/dist/applications/service.js +388 -0
- package/dist/applications/service.js.map +1 -0
- package/dist/applications/slugs.d.ts +61 -0
- package/dist/applications/slugs.d.ts.map +1 -0
- package/dist/applications/slugs.js +115 -0
- package/dist/applications/slugs.js.map +1 -0
- package/dist/applications/types.d.ts +129 -0
- package/dist/applications/types.d.ts.map +1 -0
- package/dist/applications/types.js +62 -0
- package/dist/applications/types.js.map +1 -0
- package/dist/auth/csrf.d.ts +71 -0
- package/dist/auth/csrf.d.ts.map +1 -0
- package/dist/auth/csrf.js +112 -0
- package/dist/auth/csrf.js.map +1 -0
- package/dist/auth/email-renderer.d.ts +37 -0
- package/dist/auth/email-renderer.d.ts.map +1 -0
- package/dist/auth/email-renderer.js +116 -0
- package/dist/auth/email-renderer.js.map +1 -0
- package/dist/auth/email-service.d.ts +154 -0
- package/dist/auth/email-service.d.ts.map +1 -0
- package/dist/auth/email-service.js +415 -0
- package/dist/auth/email-service.js.map +1 -0
- package/dist/auth/email-transport.d.ts +65 -0
- package/dist/auth/email-transport.d.ts.map +1 -0
- package/dist/auth/email-transport.js +82 -0
- package/dist/auth/email-transport.js.map +1 -0
- package/dist/auth/i18n.d.ts +81 -0
- package/dist/auth/i18n.d.ts.map +1 -0
- package/dist/auth/i18n.js +395 -0
- package/dist/auth/i18n.js.map +1 -0
- package/dist/auth/index.d.ts +28 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +31 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/auth/interaction-authority.d.ts +39 -0
- package/dist/auth/interaction-authority.d.ts.map +1 -0
- package/dist/auth/interaction-authority.js +30 -0
- package/dist/auth/interaction-authority.js.map +1 -0
- package/dist/auth/magic-link-session.d.ts +81 -0
- package/dist/auth/magic-link-session.d.ts.map +1 -0
- package/dist/auth/magic-link-session.js +183 -0
- package/dist/auth/magic-link-session.js.map +1 -0
- package/dist/auth/rate-limiter.d.ts +143 -0
- package/dist/auth/rate-limiter.d.ts.map +1 -0
- package/dist/auth/rate-limiter.js +220 -0
- package/dist/auth/rate-limiter.js.map +1 -0
- package/dist/auth/recovery-crypto.d.ts +34 -0
- package/dist/auth/recovery-crypto.d.ts.map +1 -0
- package/dist/auth/recovery-crypto.js +103 -0
- package/dist/auth/recovery-crypto.js.map +1 -0
- package/dist/auth/recovery-job-processor.d.ts +24 -0
- package/dist/auth/recovery-job-processor.d.ts.map +1 -0
- package/dist/auth/recovery-job-processor.js +123 -0
- package/dist/auth/recovery-job-processor.js.map +1 -0
- package/dist/auth/recovery-job-repository.d.ts +219 -0
- package/dist/auth/recovery-job-repository.d.ts.map +1 -0
- package/dist/auth/recovery-job-repository.js +340 -0
- package/dist/auth/recovery-job-repository.js.map +1 -0
- package/dist/auth/recovery-service.d.ts +27 -0
- package/dist/auth/recovery-service.d.ts.map +1 -0
- package/dist/auth/recovery-service.js +53 -0
- package/dist/auth/recovery-service.js.map +1 -0
- package/dist/auth/recovery-worker.d.ts +158 -0
- package/dist/auth/recovery-worker.d.ts.map +1 -0
- package/dist/auth/recovery-worker.js +306 -0
- package/dist/auth/recovery-worker.js.map +1 -0
- package/dist/auth/template-engine.d.ts +134 -0
- package/dist/auth/template-engine.d.ts.map +1 -0
- package/dist/auth/template-engine.js +225 -0
- package/dist/auth/template-engine.js.map +1 -0
- package/dist/auth/token-repository.d.ts +238 -0
- package/dist/auth/token-repository.d.ts.map +1 -0
- package/dist/auth/token-repository.js +475 -0
- package/dist/auth/token-repository.js.map +1 -0
- package/dist/auth/tokens.d.ts +45 -0
- package/dist/auth/tokens.d.ts.map +1 -0
- package/dist/auth/tokens.js +51 -0
- package/dist/auth/tokens.js.map +1 -0
- package/dist/cli/bootstrap.d.ts +55 -0
- package/dist/cli/bootstrap.d.ts.map +1 -0
- package/dist/cli/bootstrap.js +90 -0
- package/dist/cli/bootstrap.js.map +1 -0
- package/dist/cli/commands/health.d.ts +20 -0
- package/dist/cli/commands/health.d.ts.map +1 -0
- package/dist/cli/commands/health.js +80 -0
- package/dist/cli/commands/health.js.map +1 -0
- package/dist/cli/commands/init.d.ts +48 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +349 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/migrate.d.ts +19 -0
- package/dist/cli/commands/migrate.d.ts.map +1 -0
- package/dist/cli/commands/migrate.js +88 -0
- package/dist/cli/commands/migrate.js.map +1 -0
- package/dist/cli/commands/seed.d.ts +19 -0
- package/dist/cli/commands/seed.d.ts.map +1 -0
- package/dist/cli/commands/seed.js +71 -0
- package/dist/cli/commands/seed.js.map +1 -0
- package/dist/cli/commands/user-2fa.d.ts +29 -0
- package/dist/cli/commands/user-2fa.d.ts.map +1 -0
- package/dist/cli/commands/user-2fa.js +113 -0
- package/dist/cli/commands/user-2fa.js.map +1 -0
- package/dist/cli/error-handler.d.ts +31 -0
- package/dist/cli/error-handler.d.ts.map +1 -0
- package/dist/cli/error-handler.js +65 -0
- package/dist/cli/error-handler.js.map +1 -0
- package/dist/cli/index.d.ts +48 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +99 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/output.d.ts +94 -0
- package/dist/cli/output.d.ts.map +1 -0
- package/dist/cli/output.js +124 -0
- package/dist/cli/output.js.map +1 -0
- package/dist/cli/prompt.d.ts +48 -0
- package/dist/cli/prompt.d.ts.map +1 -0
- package/dist/cli/prompt.js +96 -0
- package/dist/cli/prompt.js.map +1 -0
- package/dist/clients/cache.d.ts +63 -0
- package/dist/clients/cache.d.ts.map +1 -0
- package/dist/clients/cache.js +160 -0
- package/dist/clients/cache.js.map +1 -0
- package/dist/clients/crypto.d.ts +69 -0
- package/dist/clients/crypto.d.ts.map +1 -0
- package/dist/clients/crypto.js +83 -0
- package/dist/clients/crypto.js.map +1 -0
- package/dist/clients/errors.d.ts +27 -0
- package/dist/clients/errors.d.ts.map +1 -0
- package/dist/clients/errors.js +33 -0
- package/dist/clients/errors.js.map +1 -0
- package/dist/clients/index.d.ts +19 -0
- package/dist/clients/index.d.ts.map +1 -0
- package/dist/clients/index.js +23 -0
- package/dist/clients/index.js.map +1 -0
- package/dist/clients/repository.d.ts +161 -0
- package/dist/clients/repository.d.ts.map +1 -0
- package/dist/clients/repository.js +318 -0
- package/dist/clients/repository.js.map +1 -0
- package/dist/clients/resolve-login-methods.d.ts +74 -0
- package/dist/clients/resolve-login-methods.d.ts.map +1 -0
- package/dist/clients/resolve-login-methods.js +68 -0
- package/dist/clients/resolve-login-methods.js.map +1 -0
- package/dist/clients/secret-repository.d.ts +109 -0
- package/dist/clients/secret-repository.d.ts.map +1 -0
- package/dist/clients/secret-repository.js +166 -0
- package/dist/clients/secret-repository.js.map +1 -0
- package/dist/clients/secret-service.d.ts +87 -0
- package/dist/clients/secret-service.d.ts.map +1 -0
- package/dist/clients/secret-service.js +204 -0
- package/dist/clients/secret-service.js.map +1 -0
- package/dist/clients/service.d.ts +158 -0
- package/dist/clients/service.d.ts.map +1 -0
- package/dist/clients/service.js +523 -0
- package/dist/clients/service.js.map +1 -0
- package/dist/clients/types.d.ts +214 -0
- package/dist/clients/types.d.ts.map +1 -0
- package/dist/clients/types.js +77 -0
- package/dist/clients/types.js.map +1 -0
- package/dist/clients/validators.d.ts +87 -0
- package/dist/clients/validators.d.ts.map +1 -0
- package/dist/clients/validators.js +164 -0
- package/dist/clients/validators.js.map +1 -0
- package/dist/config/index.d.ts +23 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +52 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/schema.d.ts +35 -0
- package/dist/config/schema.d.ts.map +1 -0
- package/dist/config/schema.js +167 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/custom-claims/cache.d.ts +48 -0
- package/dist/custom-claims/cache.d.ts.map +1 -0
- package/dist/custom-claims/cache.js +122 -0
- package/dist/custom-claims/cache.js.map +1 -0
- package/dist/custom-claims/errors.d.ts +25 -0
- package/dist/custom-claims/errors.d.ts.map +1 -0
- package/dist/custom-claims/errors.js +31 -0
- package/dist/custom-claims/errors.js.map +1 -0
- package/dist/custom-claims/index.d.ts +14 -0
- package/dist/custom-claims/index.d.ts.map +1 -0
- package/dist/custom-claims/index.js +17 -0
- package/dist/custom-claims/index.js.map +1 -0
- package/dist/custom-claims/repository.d.ts +147 -0
- package/dist/custom-claims/repository.d.ts.map +1 -0
- package/dist/custom-claims/repository.js +338 -0
- package/dist/custom-claims/repository.js.map +1 -0
- package/dist/custom-claims/service.d.ts +129 -0
- package/dist/custom-claims/service.d.ts.map +1 -0
- package/dist/custom-claims/service.js +296 -0
- package/dist/custom-claims/service.js.map +1 -0
- package/dist/custom-claims/types.d.ts +132 -0
- package/dist/custom-claims/types.d.ts.map +1 -0
- package/dist/custom-claims/types.js +61 -0
- package/dist/custom-claims/types.js.map +1 -0
- package/dist/custom-claims/validators.d.ts +61 -0
- package/dist/custom-claims/validators.d.ts.map +1 -0
- package/dist/custom-claims/validators.js +136 -0
- package/dist/custom-claims/validators.js.map +1 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +91 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/admin-permissions.d.ts +147 -0
- package/dist/lib/admin-permissions.d.ts.map +1 -0
- package/dist/lib/admin-permissions.js +261 -0
- package/dist/lib/admin-permissions.js.map +1 -0
- package/dist/lib/audit-log.d.ts +45 -0
- package/dist/lib/audit-log.d.ts.map +1 -0
- package/dist/lib/audit-log.js +79 -0
- package/dist/lib/audit-log.js.map +1 -0
- package/dist/lib/branding-assets.d.ts +47 -0
- package/dist/lib/branding-assets.d.ts.map +1 -0
- package/dist/lib/branding-assets.js +93 -0
- package/dist/lib/branding-assets.js.map +1 -0
- package/dist/lib/bulk-operations.d.ts +54 -0
- package/dist/lib/bulk-operations.d.ts.map +1 -0
- package/dist/lib/bulk-operations.js +201 -0
- package/dist/lib/bulk-operations.js.map +1 -0
- package/dist/lib/cursor.d.ts +110 -0
- package/dist/lib/cursor.d.ts.map +1 -0
- package/dist/lib/cursor.js +115 -0
- package/dist/lib/cursor.js.map +1 -0
- package/dist/lib/data-export.d.ts +67 -0
- package/dist/lib/data-export.d.ts.map +1 -0
- package/dist/lib/data-export.js +272 -0
- package/dist/lib/data-export.js.map +1 -0
- package/dist/lib/data-import-plan.d.ts +50 -0
- package/dist/lib/data-import-plan.d.ts.map +1 -0
- package/dist/lib/data-import-plan.js +235 -0
- package/dist/lib/data-import-plan.js.map +1 -0
- package/dist/lib/data-import.d.ts +276 -0
- package/dist/lib/data-import.d.ts.map +1 -0
- package/dist/lib/data-import.js +1694 -0
- package/dist/lib/data-import.js.map +1 -0
- package/dist/lib/database.d.ts +22 -0
- package/dist/lib/database.d.ts.map +1 -0
- package/dist/lib/database.js +103 -0
- package/dist/lib/database.js.map +1 -0
- package/dist/lib/entity-history.d.ts +52 -0
- package/dist/lib/entity-history.d.ts.map +1 -0
- package/dist/lib/entity-history.js +121 -0
- package/dist/lib/entity-history.js.map +1 -0
- package/dist/lib/etag.d.ts +92 -0
- package/dist/lib/etag.d.ts.map +1 -0
- package/dist/lib/etag.js +155 -0
- package/dist/lib/etag.js.map +1 -0
- package/dist/lib/image-validator.d.ts +44 -0
- package/dist/lib/image-validator.d.ts.map +1 -0
- package/dist/lib/image-validator.js +204 -0
- package/dist/lib/image-validator.js.map +1 -0
- package/dist/lib/logger.d.ts +15 -0
- package/dist/lib/logger.d.ts.map +1 -0
- package/dist/lib/logger.js +84 -0
- package/dist/lib/logger.js.map +1 -0
- package/dist/lib/migrator.d.ts +14 -0
- package/dist/lib/migrator.d.ts.map +1 -0
- package/dist/lib/migrator.js +34 -0
- package/dist/lib/migrator.js.map +1 -0
- package/dist/lib/redis.d.ts +5 -0
- package/dist/lib/redis.d.ts.map +1 -0
- package/dist/lib/redis.js +29 -0
- package/dist/lib/redis.js.map +1 -0
- package/dist/lib/runtime-paths.d.ts +38 -0
- package/dist/lib/runtime-paths.d.ts.map +1 -0
- package/dist/lib/runtime-paths.js +50 -0
- package/dist/lib/runtime-paths.js.map +1 -0
- package/dist/lib/session-tracking.d.ts +81 -0
- package/dist/lib/session-tracking.d.ts.map +1 -0
- package/dist/lib/session-tracking.js +145 -0
- package/dist/lib/session-tracking.js.map +1 -0
- package/dist/lib/signing-key-crypto.d.ts +53 -0
- package/dist/lib/signing-key-crypto.d.ts.map +1 -0
- package/dist/lib/signing-key-crypto.js +108 -0
- package/dist/lib/signing-key-crypto.js.map +1 -0
- package/dist/lib/signing-keys.d.ts +141 -0
- package/dist/lib/signing-keys.d.ts.map +1 -0
- package/dist/lib/signing-keys.js +206 -0
- package/dist/lib/signing-keys.js.map +1 -0
- package/dist/lib/stats.d.ts +83 -0
- package/dist/lib/stats.d.ts.map +1 -0
- package/dist/lib/stats.js +187 -0
- package/dist/lib/stats.js.map +1 -0
- package/dist/lib/super-admin-protection.d.ts +69 -0
- package/dist/lib/super-admin-protection.d.ts.map +1 -0
- package/dist/lib/super-admin-protection.js +102 -0
- package/dist/lib/super-admin-protection.js.map +1 -0
- package/dist/lib/system-config.d.ts +79 -0
- package/dist/lib/system-config.d.ts.map +1 -0
- package/dist/lib/system-config.js +159 -0
- package/dist/lib/system-config.js.map +1 -0
- package/dist/middleware/admin-auth.d.ts +100 -0
- package/dist/middleware/admin-auth.d.ts.map +1 -0
- package/dist/middleware/admin-auth.js +241 -0
- package/dist/middleware/admin-auth.js.map +1 -0
- package/dist/middleware/admin-cors.d.ts +41 -0
- package/dist/middleware/admin-cors.d.ts.map +1 -0
- package/dist/middleware/admin-cors.js +83 -0
- package/dist/middleware/admin-cors.js.map +1 -0
- package/dist/middleware/admin-mutation-audit.d.ts +9 -0
- package/dist/middleware/admin-mutation-audit.d.ts.map +1 -0
- package/dist/middleware/admin-mutation-audit.js +76 -0
- package/dist/middleware/admin-mutation-audit.js.map +1 -0
- package/dist/middleware/admin-rate-limiter.d.ts +56 -0
- package/dist/middleware/admin-rate-limiter.d.ts.map +1 -0
- package/dist/middleware/admin-rate-limiter.js +97 -0
- package/dist/middleware/admin-rate-limiter.js.map +1 -0
- package/dist/middleware/client-secret-hash.d.ts +34 -0
- package/dist/middleware/client-secret-hash.d.ts.map +1 -0
- package/dist/middleware/client-secret-hash.js +74 -0
- package/dist/middleware/client-secret-hash.js.map +1 -0
- package/dist/middleware/error-handler.d.ts +3 -0
- package/dist/middleware/error-handler.d.ts.map +1 -0
- package/dist/middleware/error-handler.js +93 -0
- package/dist/middleware/error-handler.js.map +1 -0
- package/dist/middleware/health.d.ts +3 -0
- package/dist/middleware/health.d.ts.map +1 -0
- package/dist/middleware/health.js +35 -0
- package/dist/middleware/health.js.map +1 -0
- package/dist/middleware/metrics.d.ts +40 -0
- package/dist/middleware/metrics.d.ts.map +1 -0
- package/dist/middleware/metrics.js +75 -0
- package/dist/middleware/metrics.js.map +1 -0
- package/dist/middleware/oidc-client-tenant.d.ts +37 -0
- package/dist/middleware/oidc-client-tenant.d.ts.map +1 -0
- package/dist/middleware/oidc-client-tenant.js +156 -0
- package/dist/middleware/oidc-client-tenant.js.map +1 -0
- package/dist/middleware/oidc-cors.d.ts +33 -0
- package/dist/middleware/oidc-cors.d.ts.map +1 -0
- package/dist/middleware/oidc-cors.js +68 -0
- package/dist/middleware/oidc-cors.js.map +1 -0
- package/dist/middleware/oidc-preflight-cors.d.ts +54 -0
- package/dist/middleware/oidc-preflight-cors.d.ts.map +1 -0
- package/dist/middleware/oidc-preflight-cors.js +267 -0
- package/dist/middleware/oidc-preflight-cors.js.map +1 -0
- package/dist/middleware/prompt-login-reset.d.ts +103 -0
- package/dist/middleware/prompt-login-reset.d.ts.map +1 -0
- package/dist/middleware/prompt-login-reset.js +204 -0
- package/dist/middleware/prompt-login-reset.js.map +1 -0
- package/dist/middleware/ready.d.ts +23 -0
- package/dist/middleware/ready.d.ts.map +1 -0
- package/dist/middleware/ready.js +60 -0
- package/dist/middleware/ready.js.map +1 -0
- package/dist/middleware/request-logger.d.ts +27 -0
- package/dist/middleware/request-logger.d.ts.map +1 -0
- package/dist/middleware/request-logger.js +46 -0
- package/dist/middleware/request-logger.js.map +1 -0
- package/dist/middleware/require-permission.d.ts +28 -0
- package/dist/middleware/require-permission.d.ts.map +1 -0
- package/dist/middleware/require-permission.js +63 -0
- package/dist/middleware/require-permission.js.map +1 -0
- package/dist/middleware/require-user-organization.d.ts +18 -0
- package/dist/middleware/require-user-organization.d.ts.map +1 -0
- package/dist/middleware/require-user-organization.js +53 -0
- package/dist/middleware/require-user-organization.js.map +1 -0
- package/dist/middleware/root-page.d.ts +62 -0
- package/dist/middleware/root-page.d.ts.map +1 -0
- package/dist/middleware/root-page.js +134 -0
- package/dist/middleware/root-page.js.map +1 -0
- package/dist/middleware/security-headers.d.ts +98 -0
- package/dist/middleware/security-headers.d.ts.map +1 -0
- package/dist/middleware/security-headers.js +159 -0
- package/dist/middleware/security-headers.js.map +1 -0
- package/dist/middleware/tenant-resolver.d.ts +37 -0
- package/dist/middleware/tenant-resolver.d.ts.map +1 -0
- package/dist/middleware/tenant-resolver.js +71 -0
- package/dist/middleware/tenant-resolver.js.map +1 -0
- package/dist/middleware/token-rate-limiter.d.ts +89 -0
- package/dist/middleware/token-rate-limiter.d.ts.map +1 -0
- package/dist/middleware/token-rate-limiter.js +189 -0
- package/dist/middleware/token-rate-limiter.js.map +1 -0
- package/dist/oidc/account-finder.d.ts +52 -0
- package/dist/oidc/account-finder.d.ts.map +1 -0
- package/dist/oidc/account-finder.js +134 -0
- package/dist/oidc/account-finder.js.map +1 -0
- package/dist/oidc/adapter-factory.d.ts +90 -0
- package/dist/oidc/adapter-factory.d.ts.map +1 -0
- package/dist/oidc/adapter-factory.js +165 -0
- package/dist/oidc/adapter-factory.js.map +1 -0
- package/dist/oidc/configuration.d.ts +155 -0
- package/dist/oidc/configuration.d.ts.map +1 -0
- package/dist/oidc/configuration.js +531 -0
- package/dist/oidc/configuration.js.map +1 -0
- package/dist/oidc/postgres-adapter.d.ts +159 -0
- package/dist/oidc/postgres-adapter.d.ts.map +1 -0
- package/dist/oidc/postgres-adapter.js +222 -0
- package/dist/oidc/postgres-adapter.js.map +1 -0
- package/dist/oidc/protocol-security-observer.d.ts +38 -0
- package/dist/oidc/protocol-security-observer.d.ts.map +1 -0
- package/dist/oidc/protocol-security-observer.js +93 -0
- package/dist/oidc/protocol-security-observer.js.map +1 -0
- package/dist/oidc/provider.d.ts +37 -0
- package/dist/oidc/provider.d.ts.map +1 -0
- package/dist/oidc/provider.js +71 -0
- package/dist/oidc/provider.js.map +1 -0
- package/dist/oidc/redis-adapter.d.ts +140 -0
- package/dist/oidc/redis-adapter.d.ts.map +1 -0
- package/dist/oidc/redis-adapter.js +344 -0
- package/dist/oidc/redis-adapter.js.map +1 -0
- package/dist/organizations/cache.d.ts +60 -0
- package/dist/organizations/cache.d.ts.map +1 -0
- package/dist/organizations/cache.js +157 -0
- package/dist/organizations/cache.js.map +1 -0
- package/dist/organizations/errors.d.ts +25 -0
- package/dist/organizations/errors.d.ts.map +1 -0
- package/dist/organizations/errors.js +31 -0
- package/dist/organizations/errors.js.map +1 -0
- package/dist/organizations/index.d.ts +15 -0
- package/dist/organizations/index.d.ts.map +1 -0
- package/dist/organizations/index.js +15 -0
- package/dist/organizations/index.js.map +1 -0
- package/dist/organizations/repository.d.ts +183 -0
- package/dist/organizations/repository.d.ts.map +1 -0
- package/dist/organizations/repository.js +354 -0
- package/dist/organizations/repository.js.map +1 -0
- package/dist/organizations/service.d.ts +168 -0
- package/dist/organizations/service.d.ts.map +1 -0
- package/dist/organizations/service.js +511 -0
- package/dist/organizations/service.js.map +1 -0
- package/dist/organizations/slugs.d.ts +57 -0
- package/dist/organizations/slugs.d.ts.map +1 -0
- package/dist/organizations/slugs.js +130 -0
- package/dist/organizations/slugs.js.map +1 -0
- package/dist/organizations/types.d.ts +146 -0
- package/dist/organizations/types.d.ts.map +1 -0
- package/dist/organizations/types.js +49 -0
- package/dist/organizations/types.js.map +1 -0
- package/dist/rbac/cache.d.ts +110 -0
- package/dist/rbac/cache.d.ts.map +1 -0
- package/dist/rbac/cache.js +271 -0
- package/dist/rbac/cache.js.map +1 -0
- package/dist/rbac/errors.d.ts +34 -0
- package/dist/rbac/errors.d.ts.map +1 -0
- package/dist/rbac/errors.js +43 -0
- package/dist/rbac/errors.js.map +1 -0
- package/dist/rbac/index.d.ts +17 -0
- package/dist/rbac/index.d.ts.map +1 -0
- package/dist/rbac/index.js +21 -0
- package/dist/rbac/index.js.map +1 -0
- package/dist/rbac/mapping-repository.d.ts +121 -0
- package/dist/rbac/mapping-repository.d.ts.map +1 -0
- package/dist/rbac/mapping-repository.js +224 -0
- package/dist/rbac/mapping-repository.js.map +1 -0
- package/dist/rbac/permission-repository.d.ts +100 -0
- package/dist/rbac/permission-repository.d.ts.map +1 -0
- package/dist/rbac/permission-repository.js +190 -0
- package/dist/rbac/permission-repository.js.map +1 -0
- package/dist/rbac/permission-service.d.ts +85 -0
- package/dist/rbac/permission-service.d.ts.map +1 -0
- package/dist/rbac/permission-service.js +179 -0
- package/dist/rbac/permission-service.js.map +1 -0
- package/dist/rbac/role-repository.d.ts +104 -0
- package/dist/rbac/role-repository.d.ts.map +1 -0
- package/dist/rbac/role-repository.js +202 -0
- package/dist/rbac/role-repository.js.map +1 -0
- package/dist/rbac/role-service.d.ts +111 -0
- package/dist/rbac/role-service.d.ts.map +1 -0
- package/dist/rbac/role-service.js +256 -0
- package/dist/rbac/role-service.js.map +1 -0
- package/dist/rbac/slugs.d.ts +116 -0
- package/dist/rbac/slugs.d.ts.map +1 -0
- package/dist/rbac/slugs.js +178 -0
- package/dist/rbac/slugs.js.map +1 -0
- package/dist/rbac/types.d.ts +187 -0
- package/dist/rbac/types.d.ts.map +1 -0
- package/dist/rbac/types.js +75 -0
- package/dist/rbac/types.js.map +1 -0
- package/dist/rbac/user-role-service.d.ts +101 -0
- package/dist/rbac/user-role-service.d.ts.map +1 -0
- package/dist/rbac/user-role-service.js +166 -0
- package/dist/rbac/user-role-service.js.map +1 -0
- package/dist/routes/applications.d.ts +40 -0
- package/dist/routes/applications.d.ts.map +1 -0
- package/dist/routes/applications.js +284 -0
- package/dist/routes/applications.js.map +1 -0
- package/dist/routes/audit.d.ts +31 -0
- package/dist/routes/audit.d.ts.map +1 -0
- package/dist/routes/audit.js +140 -0
- package/dist/routes/audit.js.map +1 -0
- package/dist/routes/branding.d.ts +17 -0
- package/dist/routes/branding.d.ts.map +1 -0
- package/dist/routes/branding.js +104 -0
- package/dist/routes/branding.js.map +1 -0
- package/dist/routes/bulk.d.ts +37 -0
- package/dist/routes/bulk.d.ts.map +1 -0
- package/dist/routes/bulk.js +94 -0
- package/dist/routes/bulk.js.map +1 -0
- package/dist/routes/clients.d.ts +44 -0
- package/dist/routes/clients.d.ts.map +1 -0
- package/dist/routes/clients.js +353 -0
- package/dist/routes/clients.js.map +1 -0
- package/dist/routes/config.d.ts +35 -0
- package/dist/routes/config.d.ts.map +1 -0
- package/dist/routes/config.js +115 -0
- package/dist/routes/config.js.map +1 -0
- package/dist/routes/custom-claims.d.ts +38 -0
- package/dist/routes/custom-claims.d.ts.map +1 -0
- package/dist/routes/custom-claims.js +208 -0
- package/dist/routes/custom-claims.js.map +1 -0
- package/dist/routes/exports.d.ts +21 -0
- package/dist/routes/exports.d.ts.map +1 -0
- package/dist/routes/exports.js +98 -0
- package/dist/routes/exports.js.map +1 -0
- package/dist/routes/imports.d.ts +18 -0
- package/dist/routes/imports.d.ts.map +1 -0
- package/dist/routes/imports.js +72 -0
- package/dist/routes/imports.js.map +1 -0
- package/dist/routes/interactions.d.ts +111 -0
- package/dist/routes/interactions.d.ts.map +1 -0
- package/dist/routes/interactions.js +1074 -0
- package/dist/routes/interactions.js.map +1 -0
- package/dist/routes/invitation.d.ts +31 -0
- package/dist/routes/invitation.d.ts.map +1 -0
- package/dist/routes/invitation.js +342 -0
- package/dist/routes/invitation.js.map +1 -0
- package/dist/routes/keys.d.ts +28 -0
- package/dist/routes/keys.d.ts.map +1 -0
- package/dist/routes/keys.js +91 -0
- package/dist/routes/keys.js.map +1 -0
- package/dist/routes/magic-link.d.ts +43 -0
- package/dist/routes/magic-link.d.ts.map +1 -0
- package/dist/routes/magic-link.js +264 -0
- package/dist/routes/magic-link.js.map +1 -0
- package/dist/routes/organizations.d.ts +38 -0
- package/dist/routes/organizations.d.ts.map +1 -0
- package/dist/routes/organizations.js +347 -0
- package/dist/routes/organizations.js.map +1 -0
- package/dist/routes/password-reset.d.ts +65 -0
- package/dist/routes/password-reset.d.ts.map +1 -0
- package/dist/routes/password-reset.js +493 -0
- package/dist/routes/password-reset.js.map +1 -0
- package/dist/routes/permissions.d.ts +33 -0
- package/dist/routes/permissions.d.ts.map +1 -0
- package/dist/routes/permissions.js +166 -0
- package/dist/routes/permissions.js.map +1 -0
- package/dist/routes/roles.d.ts +37 -0
- package/dist/routes/roles.d.ts.map +1 -0
- package/dist/routes/roles.js +222 -0
- package/dist/routes/roles.js.map +1 -0
- package/dist/routes/sessions.d.ts +37 -0
- package/dist/routes/sessions.d.ts.map +1 -0
- package/dist/routes/sessions.js +121 -0
- package/dist/routes/sessions.js.map +1 -0
- package/dist/routes/stats.d.ts +28 -0
- package/dist/routes/stats.d.ts.map +1 -0
- package/dist/routes/stats.js +65 -0
- package/dist/routes/stats.js.map +1 -0
- package/dist/routes/two-factor-admin.d.ts +54 -0
- package/dist/routes/two-factor-admin.d.ts.map +1 -0
- package/dist/routes/two-factor-admin.js +344 -0
- package/dist/routes/two-factor-admin.js.map +1 -0
- package/dist/routes/two-factor.d.ts +31 -0
- package/dist/routes/two-factor.d.ts.map +1 -0
- package/dist/routes/two-factor.js +595 -0
- package/dist/routes/two-factor.js.map +1 -0
- package/dist/routes/user-roles.d.ts +33 -0
- package/dist/routes/user-roles.d.ts.map +1 -0
- package/dist/routes/user-roles.js +129 -0
- package/dist/routes/user-roles.js.map +1 -0
- package/dist/routes/users.d.ts +61 -0
- package/dist/routes/users.d.ts.map +1 -0
- package/dist/routes/users.js +868 -0
- package/dist/routes/users.js.map +1 -0
- package/dist/security/decision-context.d.ts +52 -0
- package/dist/security/decision-context.d.ts.map +1 -0
- package/dist/security/decision-context.js +150 -0
- package/dist/security/decision-context.js.map +1 -0
- package/dist/security/decision-event.d.ts +128 -0
- package/dist/security/decision-event.d.ts.map +1 -0
- package/dist/security/decision-event.js +225 -0
- package/dist/security/decision-event.js.map +1 -0
- package/dist/security/transport-decision.d.ts +6 -0
- package/dist/security/transport-decision.d.ts.map +1 -0
- package/dist/security/transport-decision.js +37 -0
- package/dist/security/transport-decision.js.map +1 -0
- package/dist/server.d.ts +50 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +491 -0
- package/dist/server.js.map +1 -0
- package/dist/two-factor/cache.d.ts +47 -0
- package/dist/two-factor/cache.d.ts.map +1 -0
- package/dist/two-factor/cache.js +122 -0
- package/dist/two-factor/cache.js.map +1 -0
- package/dist/two-factor/crypto.d.ts +41 -0
- package/dist/two-factor/crypto.d.ts.map +1 -0
- package/dist/two-factor/crypto.js +94 -0
- package/dist/two-factor/crypto.js.map +1 -0
- package/dist/two-factor/errors.d.ts +82 -0
- package/dist/two-factor/errors.d.ts.map +1 -0
- package/dist/two-factor/errors.js +112 -0
- package/dist/two-factor/errors.js.map +1 -0
- package/dist/two-factor/index.d.ts +18 -0
- package/dist/two-factor/index.d.ts.map +1 -0
- package/dist/two-factor/index.js +25 -0
- package/dist/two-factor/index.js.map +1 -0
- package/dist/two-factor/otp.d.ts +43 -0
- package/dist/two-factor/otp.d.ts.map +1 -0
- package/dist/two-factor/otp.js +57 -0
- package/dist/two-factor/otp.js.map +1 -0
- package/dist/two-factor/recovery.d.ts +45 -0
- package/dist/two-factor/recovery.d.ts.map +1 -0
- package/dist/two-factor/recovery.js +104 -0
- package/dist/two-factor/recovery.js.map +1 -0
- package/dist/two-factor/repository.d.ts +156 -0
- package/dist/two-factor/repository.d.ts.map +1 -0
- package/dist/two-factor/repository.js +251 -0
- package/dist/two-factor/repository.js.map +1 -0
- package/dist/two-factor/service.d.ts +232 -0
- package/dist/two-factor/service.d.ts.map +1 -0
- package/dist/two-factor/service.js +599 -0
- package/dist/two-factor/service.js.map +1 -0
- package/dist/two-factor/totp.d.ts +57 -0
- package/dist/two-factor/totp.d.ts.map +1 -0
- package/dist/two-factor/totp.js +96 -0
- package/dist/two-factor/totp.js.map +1 -0
- package/dist/two-factor/types.d.ts +152 -0
- package/dist/two-factor/types.d.ts.map +1 -0
- package/dist/two-factor/types.js +64 -0
- package/dist/two-factor/types.js.map +1 -0
- package/dist/users/cache.d.ts +49 -0
- package/dist/users/cache.d.ts.map +1 -0
- package/dist/users/cache.js +140 -0
- package/dist/users/cache.js.map +1 -0
- package/dist/users/claims.d.ts +67 -0
- package/dist/users/claims.d.ts.map +1 -0
- package/dist/users/claims.js +104 -0
- package/dist/users/claims.js.map +1 -0
- package/dist/users/errors.d.ts +25 -0
- package/dist/users/errors.d.ts.map +1 -0
- package/dist/users/errors.js +31 -0
- package/dist/users/errors.js.map +1 -0
- package/dist/users/gdpr.d.ts +110 -0
- package/dist/users/gdpr.d.ts.map +1 -0
- package/dist/users/gdpr.js +211 -0
- package/dist/users/gdpr.js.map +1 -0
- package/dist/users/index.d.ts +20 -0
- package/dist/users/index.d.ts.map +1 -0
- package/dist/users/index.js +19 -0
- package/dist/users/index.js.map +1 -0
- package/dist/users/password.d.ts +85 -0
- package/dist/users/password.d.ts.map +1 -0
- package/dist/users/password.js +138 -0
- package/dist/users/password.js.map +1 -0
- package/dist/users/repository.d.ts +263 -0
- package/dist/users/repository.d.ts.map +1 -0
- package/dist/users/repository.js +499 -0
- package/dist/users/repository.js.map +1 -0
- package/dist/users/service.d.ts +299 -0
- package/dist/users/service.d.ts.map +1 -0
- package/dist/users/service.js +698 -0
- package/dist/users/service.js.map +1 -0
- package/dist/users/types.d.ts +220 -0
- package/dist/users/types.d.ts.map +1 -0
- package/dist/users/types.js +77 -0
- package/dist/users/types.js.map +1 -0
- package/locales/default/en/common.json +10 -0
- package/locales/default/en/consent.json +13 -0
- package/locales/default/en/emails.json +17 -0
- package/locales/default/en/errors.json +21 -0
- package/locales/default/en/forgot-password.json +11 -0
- package/locales/default/en/invitation.json +18 -0
- package/locales/default/en/login.json +17 -0
- package/locales/default/en/logout.json +9 -0
- package/locales/default/en/magic-link.json +12 -0
- package/locales/default/en/reset-password.json +16 -0
- package/locales/default/en/two-factor.json +29 -0
- package/migrations/.gitkeep +0 -0
- package/migrations/001_extensions.sql +22 -0
- package/migrations/002_organizations.sql +43 -0
- package/migrations/003_applications.sql +50 -0
- package/migrations/004_clients.sql +74 -0
- package/migrations/005_users.sql +119 -0
- package/migrations/006_roles_permissions.sql +80 -0
- package/migrations/007_custom_claims.sql +55 -0
- package/migrations/008_config.sql +51 -0
- package/migrations/009_audit_log.sql +31 -0
- package/migrations/010_oidc_adapter.sql +34 -0
- package/migrations/011_seed.sql +53 -0
- package/migrations/012_two_factor.sql +88 -0
- package/migrations/013_client_secret_sha256.sql +22 -0
- package/migrations/014_login_methods.sql +34 -0
- package/migrations/015_signing_key_encryption.sql +20 -0
- package/migrations/016_failed_login_count.sql +27 -0
- package/migrations/017_audit_retention.sql +11 -0
- package/migrations/018_admin_api_enhancements.sql +78 -0
- package/migrations/019_invitation_details.sql +27 -0
- package/migrations/020_two_factor_admin_permission.sql +108 -0
- package/migrations/021_auth_recovery_jobs.sql +74 -0
- package/migrations/022_recovery_artifact_ownership.sql +25 -0
- package/migrations/023_magic_link_authority.sql +39 -0
- package/package.json +106 -0
- package/templates/default/emails/invitation.hbs +39 -0
- package/templates/default/emails/invitation.txt.hbs +18 -0
- package/templates/default/emails/magic-link.hbs +30 -0
- package/templates/default/emails/magic-link.txt.hbs +11 -0
- package/templates/default/emails/otp-code.hbs +31 -0
- package/templates/default/emails/otp-code.txt.hbs +15 -0
- package/templates/default/emails/password-changed.hbs +24 -0
- package/templates/default/emails/password-changed.txt.hbs +7 -0
- package/templates/default/emails/password-reset.hbs +30 -0
- package/templates/default/emails/password-reset.txt.hbs +11 -0
- package/templates/default/emails/welcome.hbs +25 -0
- package/templates/default/emails/welcome.txt.hbs +9 -0
- package/templates/default/layouts/main.hbs +49 -0
- package/templates/default/pages/accept-invite.hbs +25 -0
- package/templates/default/pages/consent.hbs +27 -0
- package/templates/default/pages/error.hbs +15 -0
- package/templates/default/pages/forgot-password.hbs +21 -0
- package/templates/default/pages/invite-expired.hbs +6 -0
- package/templates/default/pages/invite-success.hbs +9 -0
- package/templates/default/pages/login.hbs +108 -0
- package/templates/default/pages/logout-success.hbs +5 -0
- package/templates/default/pages/logout.hbs +24 -0
- package/templates/default/pages/magic-link-sent.hbs +10 -0
- package/templates/default/pages/magic-link-success.hbs +17 -0
- package/templates/default/pages/reset-password.hbs +20 -0
- package/templates/default/pages/reset-success.hbs +9 -0
- package/templates/default/pages/two-factor-setup.hbs +65 -0
- package/templates/default/pages/two-factor-verify.hbs +77 -0
- package/templates/default/partials/flash-messages.hbs +10 -0
- package/templates/default/partials/footer.hbs +4 -0
- package/templates/default/partials/header.hbs +8 -0
|
@@ -0,0 +1,531 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OIDC provider configuration builder.
|
|
3
|
+
*
|
|
4
|
+
* Builds the complete node-oidc-provider configuration object from external
|
|
5
|
+
* dependencies (TTLs, keys, adapter factory, finders). This is a pure function
|
|
6
|
+
* with no side effects — all dependencies are injected as parameters.
|
|
7
|
+
*
|
|
8
|
+
* The configuration enables:
|
|
9
|
+
* - Hybrid adapter (Postgres/Redis) for OIDC artifact storage
|
|
10
|
+
* - ES256 signing keys loaded from the database
|
|
11
|
+
* - Client lookup via adapter pattern (adapter.find('Client', id) → findForOidc())
|
|
12
|
+
* - PKCE required for all authorization code flows (S256 only)
|
|
13
|
+
* - Token introspection, revocation, and client credentials
|
|
14
|
+
* - Standard OIDC scopes and claims mapping
|
|
15
|
+
* - Refresh token rotation
|
|
16
|
+
* - Cookie signing with rotation support
|
|
17
|
+
*/
|
|
18
|
+
import { config } from '../config/index.js';
|
|
19
|
+
import { HTML_CSP } from '../middleware/security-headers.js';
|
|
20
|
+
import { renderPage } from '../auth/template-engine.js';
|
|
21
|
+
import { resolveLocale, getTranslationFunction } from '../auth/i18n.js';
|
|
22
|
+
import { logger } from '../lib/logger.js';
|
|
23
|
+
import { getUserById } from '../users/service.js';
|
|
24
|
+
import { getOrganizationById } from '../organizations/service.js';
|
|
25
|
+
import { clearSessionCookies } from '../middleware/prompt-login-reset.js';
|
|
26
|
+
// ---------------------------------------------------------------------------
|
|
27
|
+
// Rendering hook helpers
|
|
28
|
+
// ---------------------------------------------------------------------------
|
|
29
|
+
/**
|
|
30
|
+
* Build default branding when org resolution is not possible.
|
|
31
|
+
* Used by rendering hooks when the session is destroyed or org lookup fails.
|
|
32
|
+
*
|
|
33
|
+
* @returns Default branding with Porta's standard blue primary color
|
|
34
|
+
*/
|
|
35
|
+
export function buildDefaultBranding() {
|
|
36
|
+
return {
|
|
37
|
+
logoUrl: null,
|
|
38
|
+
faviconUrl: null,
|
|
39
|
+
primaryColor: '#3B82F6',
|
|
40
|
+
companyName: '',
|
|
41
|
+
customCss: null,
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Build branding context from a resolved organization.
|
|
46
|
+
* Maps Organization entity fields to the TemplateContext branding shape.
|
|
47
|
+
*
|
|
48
|
+
* @param org - The resolved organization
|
|
49
|
+
* @returns Branding object for TemplateContext
|
|
50
|
+
*/
|
|
51
|
+
function buildBrandingFromOrg(org) {
|
|
52
|
+
return {
|
|
53
|
+
logoUrl: org.brandingLogoUrl,
|
|
54
|
+
faviconUrl: org.brandingFaviconUrl,
|
|
55
|
+
primaryColor: org.brandingPrimaryColor ?? '#3B82F6',
|
|
56
|
+
companyName: org.brandingCompanyName ?? org.name,
|
|
57
|
+
customCss: org.brandingCustomCss,
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Best-effort organization resolution for oidc-provider rendering hooks.
|
|
62
|
+
*
|
|
63
|
+
* Tries multiple strategies in order:
|
|
64
|
+
* 1. Session accountId → user lookup → org lookup
|
|
65
|
+
* 2. Client metadata → organizationId → org lookup
|
|
66
|
+
* 3. Returns undefined (caller uses default branding)
|
|
67
|
+
*
|
|
68
|
+
* All errors are caught and logged — never throws.
|
|
69
|
+
*
|
|
70
|
+
* @param ctx - oidc-provider's enhanced Koa context (KoaContextWithOIDC)
|
|
71
|
+
* @returns The resolved Organization, or undefined if resolution fails
|
|
72
|
+
*/
|
|
73
|
+
export async function resolveOrgForProviderHook(ctx) {
|
|
74
|
+
try {
|
|
75
|
+
// Access oidc-provider's internal context extensions.
|
|
76
|
+
// Using `any` because KoaContextWithOIDC is an internal provider type
|
|
77
|
+
// that we don't want to import directly.
|
|
78
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
79
|
+
const oidcCtx = ctx;
|
|
80
|
+
// Strategy 1: Session accountId → user lookup → org lookup
|
|
81
|
+
const accountId = oidcCtx?.oidc?.session?.accountId;
|
|
82
|
+
if (accountId) {
|
|
83
|
+
const user = await getUserById(accountId);
|
|
84
|
+
if (user) {
|
|
85
|
+
const org = await getOrganizationById(user.organizationId);
|
|
86
|
+
if (org)
|
|
87
|
+
return org;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
// Strategy 2: Client metadata → organizationId → org lookup
|
|
91
|
+
const orgId = oidcCtx?.oidc?.client?.organizationId;
|
|
92
|
+
if (orgId) {
|
|
93
|
+
const org = await getOrganizationById(orgId);
|
|
94
|
+
if (org)
|
|
95
|
+
return org;
|
|
96
|
+
}
|
|
97
|
+
return undefined;
|
|
98
|
+
}
|
|
99
|
+
catch (err) {
|
|
100
|
+
logger.warn({ err }, 'Failed to resolve org for provider rendering hook');
|
|
101
|
+
return undefined;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
// ---------------------------------------------------------------------------
|
|
105
|
+
// Rendering hook functions
|
|
106
|
+
// ---------------------------------------------------------------------------
|
|
107
|
+
/**
|
|
108
|
+
* Custom logoutSource hook for node-oidc-provider.
|
|
109
|
+
*
|
|
110
|
+
* Replaces the provider's default bare HTML logout confirmation page with
|
|
111
|
+
* Porta's styled Handlebars template. Injects a styled submit button into
|
|
112
|
+
* the provider's pre-built form (which contains the correct action URL and
|
|
113
|
+
* xsrf hidden field).
|
|
114
|
+
*
|
|
115
|
+
* Falls back to minimal inline HTML if the template engine fails, ensuring
|
|
116
|
+
* the user can still sign out even if templating breaks.
|
|
117
|
+
*
|
|
118
|
+
* @param ctx - oidc-provider's enhanced Koa context
|
|
119
|
+
* @param form - Pre-built HTML form from the provider (contains action + xsrf)
|
|
120
|
+
*/
|
|
121
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
122
|
+
export async function logoutSourceHook(ctx, form) {
|
|
123
|
+
try {
|
|
124
|
+
// Resolve org for branding (best-effort, defaults on failure)
|
|
125
|
+
const org = await resolveOrgForProviderHook(ctx);
|
|
126
|
+
const branding = org ? buildBrandingFromOrg(org) : buildDefaultBranding();
|
|
127
|
+
// Resolve locale and translation function
|
|
128
|
+
const locale = await resolveLocale(undefined, undefined, org?.defaultLocale ?? '');
|
|
129
|
+
const t = getTranslationFunction(locale, org?.slug);
|
|
130
|
+
// Inject the "logout=yes" hidden field and a styled submit button into
|
|
131
|
+
// the provider's form. The provider's form contains the action URL and
|
|
132
|
+
// xsrf token but lacks both the logout flag and a submit button.
|
|
133
|
+
//
|
|
134
|
+
// The "logout" field is CRITICAL: without it, oidc-provider takes the
|
|
135
|
+
// single-client RP-initiated path (Path 2 in end_session.js) which does
|
|
136
|
+
// NOT call session.destroy() — the session survives and the user stays
|
|
137
|
+
// logged in. With logout=yes, it takes Path 1: full session destruction.
|
|
138
|
+
const styledForm = form.replace('</form>', `<input type="hidden" name="logout" value="yes"/><button type="submit" class="btn-primary">${t('logout.confirm')}</button></form>`);
|
|
139
|
+
// Extract client name and post_logout_redirect_uri from the OIDC context.
|
|
140
|
+
// These are available on the oidc-provider's ctx.oidc during the end_session flow.
|
|
141
|
+
// Used by the template to show which app triggered logout and offer a "cancel" link.
|
|
142
|
+
const clientName = ctx.oidc?.client?.metadata()?.client_name;
|
|
143
|
+
const returnUrl = ctx.oidc?.params?.post_logout_redirect_uri;
|
|
144
|
+
// Render through the template engine (Handlebars + layout)
|
|
145
|
+
const html = await renderPage('logout', {
|
|
146
|
+
branding,
|
|
147
|
+
locale,
|
|
148
|
+
t,
|
|
149
|
+
csrfToken: '', // Provider handles CSRF via xsrf field in the form
|
|
150
|
+
orgSlug: org?.slug ?? '',
|
|
151
|
+
logoutForm: styledForm,
|
|
152
|
+
clientName: clientName ?? null,
|
|
153
|
+
returnUrl: returnUrl ?? null,
|
|
154
|
+
});
|
|
155
|
+
ctx.type = 'text/html';
|
|
156
|
+
ctx.set('Content-Security-Policy', HTML_CSP);
|
|
157
|
+
ctx.body = html;
|
|
158
|
+
}
|
|
159
|
+
catch (err) {
|
|
160
|
+
// Fallback: render minimal HTML if template engine fails.
|
|
161
|
+
// Ensures the user can still sign out even if templating breaks.
|
|
162
|
+
logger.error({ err }, 'Failed to render custom logout page');
|
|
163
|
+
ctx.type = 'text/html';
|
|
164
|
+
ctx.set('Content-Security-Policy', HTML_CSP);
|
|
165
|
+
ctx.body = `<!DOCTYPE html><html><body>${form}<script>document.querySelector('form').insertAdjacentHTML('beforeend','<input type="hidden" name="logout" value="yes"/><button type="submit">Sign out</button>')</script></body></html>`;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Custom postLogoutSuccessSource hook for node-oidc-provider.
|
|
170
|
+
*
|
|
171
|
+
* Replaces the provider's default bare HTML post-logout page with
|
|
172
|
+
* Porta's styled Handlebars template. At this point the session is
|
|
173
|
+
* already destroyed, so org resolution is not possible — default
|
|
174
|
+
* branding is always used.
|
|
175
|
+
*
|
|
176
|
+
* Falls back to minimal inline HTML if the template engine fails.
|
|
177
|
+
*
|
|
178
|
+
* @param ctx - oidc-provider's enhanced Koa context
|
|
179
|
+
*/
|
|
180
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
181
|
+
export async function postLogoutSuccessSourceHook(ctx) {
|
|
182
|
+
try {
|
|
183
|
+
// Session is destroyed at this point — can't resolve org.
|
|
184
|
+
// Always use default branding for the post-logout page.
|
|
185
|
+
const branding = buildDefaultBranding();
|
|
186
|
+
const locale = await resolveLocale(undefined, undefined, '');
|
|
187
|
+
const t = getTranslationFunction(locale);
|
|
188
|
+
const html = await renderPage('logout-success', {
|
|
189
|
+
branding,
|
|
190
|
+
locale,
|
|
191
|
+
t,
|
|
192
|
+
csrfToken: '',
|
|
193
|
+
orgSlug: '',
|
|
194
|
+
});
|
|
195
|
+
ctx.type = 'text/html';
|
|
196
|
+
ctx.set('Content-Security-Policy', HTML_CSP);
|
|
197
|
+
ctx.body = html;
|
|
198
|
+
}
|
|
199
|
+
catch (err) {
|
|
200
|
+
logger.error({ err }, 'Failed to render custom post-logout page');
|
|
201
|
+
ctx.type = 'text/html';
|
|
202
|
+
ctx.set('Content-Security-Policy', HTML_CSP);
|
|
203
|
+
ctx.body = '<!DOCTYPE html><html><body><h1>Signed out</h1><p>You have been signed out successfully.</p></body></html>';
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Detect a node-oidc-provider `SessionNotFound` error.
|
|
208
|
+
*
|
|
209
|
+
* `SessionNotFound` extends `InvalidRequest`, so its OIDC `error` code is
|
|
210
|
+
* `invalid_request`. We match on the original error's class name (most precise)
|
|
211
|
+
* and, defensively, on the characteristic `error_description` strings raised by
|
|
212
|
+
* the provider's resume action ("interaction session not found",
|
|
213
|
+
* "...session mismatch", "authorization request has expired").
|
|
214
|
+
*
|
|
215
|
+
* @param out - OIDC error details
|
|
216
|
+
* @param error - Original Error object thrown by the provider
|
|
217
|
+
* @returns true if this is a SessionNotFound error
|
|
218
|
+
*/
|
|
219
|
+
function isSessionNotFoundError(out, error) {
|
|
220
|
+
if (error?.name === 'SessionNotFound')
|
|
221
|
+
return true;
|
|
222
|
+
if (out.error !== 'invalid_request')
|
|
223
|
+
return false;
|
|
224
|
+
const desc = (out.error_description ?? '').toLowerCase();
|
|
225
|
+
return (desc.includes('interaction session not found') ||
|
|
226
|
+
desc.includes('session and authentication session mismatch') ||
|
|
227
|
+
desc.includes('authorization request has expired') ||
|
|
228
|
+
desc.includes('authorization session and cookie identifier mismatch'));
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* Clear the provider's session cookie pair from within a provider ctx.
|
|
232
|
+
*
|
|
233
|
+
* Resolves the session cookie name from the provider (defaulting to
|
|
234
|
+
* `_session`) and delegates to the shared, signing-free `clearSessionCookies`
|
|
235
|
+
* helper so the middleware and this hook use one tested code path (PF-002).
|
|
236
|
+
*
|
|
237
|
+
* @param ctx - oidc-provider's enhanced Koa context
|
|
238
|
+
*/
|
|
239
|
+
function clearProviderSessionCookies(
|
|
240
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
241
|
+
ctx) {
|
|
242
|
+
const cookieNameFn = ctx?.oidc?.provider?.cookieName;
|
|
243
|
+
const sessionCookieName = typeof cookieNameFn === 'function' ? cookieNameFn.call(ctx.oidc.provider, 'session') : '_session';
|
|
244
|
+
clearSessionCookies(ctx, sessionCookieName);
|
|
245
|
+
}
|
|
246
|
+
/**
|
|
247
|
+
* Custom renderError hook for node-oidc-provider.
|
|
248
|
+
*
|
|
249
|
+
* Replaces the provider's default bare HTML error page with Porta's styled
|
|
250
|
+
* Handlebars template. The OIDC error code (e.g., 'invalid_client') is shown
|
|
251
|
+
* to the user, but the raw error_description is intentionally suppressed to
|
|
252
|
+
* prevent information leakage — a generic i18n error message is shown instead.
|
|
253
|
+
*
|
|
254
|
+
* SECURITY: error_description may contain internal details like "client not
|
|
255
|
+
* found", "grant not found", etc. Only the standardized OIDC error code is
|
|
256
|
+
* safe to display.
|
|
257
|
+
*
|
|
258
|
+
* @param ctx - oidc-provider's enhanced Koa context
|
|
259
|
+
* @param out - OIDC error details (error code + optional description)
|
|
260
|
+
* @param _error - Original Error object (used to detect SessionNotFound)
|
|
261
|
+
*/
|
|
262
|
+
export async function renderErrorHook(
|
|
263
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
264
|
+
ctx, out, _error) {
|
|
265
|
+
try {
|
|
266
|
+
// Resolve org from client context for branding (best-effort)
|
|
267
|
+
const org = await resolveOrgForProviderHook(ctx);
|
|
268
|
+
const branding = org ? buildBrandingFromOrg(org) : buildDefaultBranding();
|
|
269
|
+
// Resolve locale and translation function
|
|
270
|
+
const locale = await resolveLocale(undefined, undefined, org?.defaultLocale ?? '');
|
|
271
|
+
const t = getTranslationFunction(locale, org?.slug);
|
|
272
|
+
// ---------------------------------------------------------------------
|
|
273
|
+
// Graceful SessionNotFound recovery (Bug #1, AR-4).
|
|
274
|
+
//
|
|
275
|
+
// node-oidc-provider throws `SessionNotFound` during authorize/resume when
|
|
276
|
+
// the interaction's recorded session uid no longer matches the live session
|
|
277
|
+
// (e.g. a stale `_session` cookie carried into the flow), or when the
|
|
278
|
+
// interaction record is missing. Without recovery the user sees a terminal
|
|
279
|
+
// "Something went wrong" and must manually clear storage.
|
|
280
|
+
//
|
|
281
|
+
// Here we clear the stale `_session`/`_session.sig` cookie pair (signing-free)
|
|
282
|
+
// and show a recovery message that invites the user to start sign-in again.
|
|
283
|
+
// The next request then has no stale cookie, so a fresh session is minted.
|
|
284
|
+
//
|
|
285
|
+
// SECURITY: this only clears a provably-dead cookie and re-renders — it does
|
|
286
|
+
// NOT accept or revive any session. The provider's SessionNotFound guard
|
|
287
|
+
// still fully rejects the mismatched session.
|
|
288
|
+
// ---------------------------------------------------------------------
|
|
289
|
+
const isSessionNotFound = isSessionNotFoundError(out, _error);
|
|
290
|
+
if (isSessionNotFound) {
|
|
291
|
+
clearProviderSessionCookies(ctx);
|
|
292
|
+
}
|
|
293
|
+
const errorMessage = isSessionNotFound
|
|
294
|
+
? t('errors.session_expired')
|
|
295
|
+
: t('errors.generic');
|
|
296
|
+
// SECURITY: Never expose raw error_description to the user — it may
|
|
297
|
+
// contain internal details. Use generic i18n message instead.
|
|
298
|
+
// OIDC error codes (e.g., 'invalid_client') are safe standard strings.
|
|
299
|
+
const html = await renderPage('error', {
|
|
300
|
+
branding,
|
|
301
|
+
locale,
|
|
302
|
+
t,
|
|
303
|
+
csrfToken: '',
|
|
304
|
+
orgSlug: org?.slug ?? '',
|
|
305
|
+
errorMessage,
|
|
306
|
+
errorCode: out.error,
|
|
307
|
+
});
|
|
308
|
+
ctx.type = 'text/html';
|
|
309
|
+
ctx.set('Content-Security-Policy', HTML_CSP);
|
|
310
|
+
ctx.body = html;
|
|
311
|
+
}
|
|
312
|
+
catch (err) {
|
|
313
|
+
logger.error({ err }, 'Failed to render custom error page');
|
|
314
|
+
ctx.type = 'text/html';
|
|
315
|
+
ctx.set('Content-Security-Policy', HTML_CSP);
|
|
316
|
+
ctx.body = '<!DOCTYPE html><html><body><h1>Error</h1><p>An error occurred.</p></body></html>';
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
// ---------------------------------------------------------------------------
|
|
320
|
+
// loadExistingGrant hook
|
|
321
|
+
// ---------------------------------------------------------------------------
|
|
322
|
+
/**
|
|
323
|
+
* Custom `loadExistingGrant` for node-oidc-provider.
|
|
324
|
+
*
|
|
325
|
+
* Mirrors the provider default (resolve the grant from the consent result or
|
|
326
|
+
* the session's grant id), then conditionally **upgrades** an existing grant to
|
|
327
|
+
* include `offline_access`.
|
|
328
|
+
*
|
|
329
|
+
* Why this exists (Bug #2): with `prompt=login` and a pre-existing Grant that
|
|
330
|
+
* lacks `offline_access`, the provider does not route through the consent
|
|
331
|
+
* interaction, so the consent handlers' `offline_access`-adding code never runs.
|
|
332
|
+
* The authorization code is then issued WITHOUT `offline_access` in its granted
|
|
333
|
+
* scopes, and `issueRefreshToken` returns false — so no refresh token is minted.
|
|
334
|
+
* This is exactly the CLI failure ("no refresh_token available" ~1h later).
|
|
335
|
+
*
|
|
336
|
+
* The upgrade is strictly gated (AR-6 / AR-7): only when the request asked for
|
|
337
|
+
* `offline_access`, the client allows the `refresh_token` grant, AND the grant
|
|
338
|
+
* does not already include `offline_access`. In every other case the grant is
|
|
339
|
+
* returned unchanged — identical to the provider default — so no other client
|
|
340
|
+
* or flow is affected.
|
|
341
|
+
*
|
|
342
|
+
* @param ctx - node-oidc-provider's enhanced Koa context
|
|
343
|
+
* @returns the existing Grant (possibly upgraded) or undefined
|
|
344
|
+
*/
|
|
345
|
+
export async function loadExistingGrant(
|
|
346
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
347
|
+
ctx) {
|
|
348
|
+
const grantId = ctx.oidc.result?.consent?.grantId ||
|
|
349
|
+
ctx.oidc.session.grantIdFor(ctx.oidc.client.clientId);
|
|
350
|
+
if (!grantId)
|
|
351
|
+
return undefined;
|
|
352
|
+
const grant = await ctx.oidc.provider.Grant.find(grantId);
|
|
353
|
+
if (!grant)
|
|
354
|
+
return undefined;
|
|
355
|
+
// AR-6/AR-7: upgrade an existing grant to include offline_access when the
|
|
356
|
+
// request asked for it, the client allows refresh_token, and it's missing.
|
|
357
|
+
const requestedScopes = String(ctx.oidc.params?.scope ?? '')
|
|
358
|
+
.split(' ')
|
|
359
|
+
.filter(Boolean);
|
|
360
|
+
const wantsOffline = requestedScopes.includes('offline_access');
|
|
361
|
+
const clientAllowsRefresh = typeof ctx.oidc.client?.grantTypeAllowed === 'function' &&
|
|
362
|
+
ctx.oidc.client.grantTypeAllowed('refresh_token');
|
|
363
|
+
const grantHasOffline = String(grant.getOIDCScope() ?? '')
|
|
364
|
+
.split(' ')
|
|
365
|
+
.filter(Boolean)
|
|
366
|
+
.includes('offline_access');
|
|
367
|
+
if (wantsOffline && clientAllowsRefresh && !grantHasOffline) {
|
|
368
|
+
grant.addOIDCScope('offline_access');
|
|
369
|
+
await grant.save();
|
|
370
|
+
}
|
|
371
|
+
return grant;
|
|
372
|
+
}
|
|
373
|
+
// ---------------------------------------------------------------------------
|
|
374
|
+
// Provider configuration builder
|
|
375
|
+
// ---------------------------------------------------------------------------
|
|
376
|
+
/**
|
|
377
|
+
* Build the complete node-oidc-provider configuration object.
|
|
378
|
+
*
|
|
379
|
+
* Takes all external dependencies as parameters to keep this function
|
|
380
|
+
* pure and testable. The resulting configuration covers all OIDC features
|
|
381
|
+
* needed by Porta.
|
|
382
|
+
*
|
|
383
|
+
* @param params - All dependencies for the provider configuration
|
|
384
|
+
* @returns Complete Configuration object for node-oidc-provider
|
|
385
|
+
*/
|
|
386
|
+
export function buildProviderConfiguration(params) {
|
|
387
|
+
const { ttl, jwks, cookieKeys, findAccount, adapterFactory, interactionUrl, clientBasedCORS } = params;
|
|
388
|
+
return {
|
|
389
|
+
// Adapter — hybrid Postgres/Redis via factory
|
|
390
|
+
adapter: adapterFactory,
|
|
391
|
+
// Account finder — looks up users for ID token claims and userinfo
|
|
392
|
+
findAccount,
|
|
393
|
+
// Custom grant loader — upgrades an existing grant to include
|
|
394
|
+
// offline_access when requested (Bug #2 fix). See loadExistingGrant above.
|
|
395
|
+
loadExistingGrant,
|
|
396
|
+
// OIDC features
|
|
397
|
+
features: {
|
|
398
|
+
// Disable devInteractions — we provide our own login/consent UI
|
|
399
|
+
devInteractions: { enabled: false },
|
|
400
|
+
// Enable token introspection (RFC 7662)
|
|
401
|
+
introspection: { enabled: true },
|
|
402
|
+
// Enable token revocation (RFC 7009)
|
|
403
|
+
revocation: { enabled: true },
|
|
404
|
+
// Enable resource indicators (RFC 8707)
|
|
405
|
+
resourceIndicators: {
|
|
406
|
+
enabled: true,
|
|
407
|
+
// Only audience-restrict tokens when the client explicitly requests a resource.
|
|
408
|
+
// When oneOf is undefined (no `resource` param in auth request), returning
|
|
409
|
+
// undefined produces a standard, unrestricted token that works with /me (userinfo).
|
|
410
|
+
// Previously this unconditionally returned 'urn:porta:default', which audience-
|
|
411
|
+
// restricted EVERY token and caused the userinfo endpoint to reject them all.
|
|
412
|
+
defaultResource: async (_ctx, _client, oneOf) => oneOf ?? undefined,
|
|
413
|
+
getResourceServerInfo: () => ({
|
|
414
|
+
scope: 'openid profile email',
|
|
415
|
+
audience: 'urn:porta:default',
|
|
416
|
+
accessTokenFormat: 'opaque',
|
|
417
|
+
accessTokenTTL: ttl.accessToken,
|
|
418
|
+
}),
|
|
419
|
+
useGrantedResource: () => true,
|
|
420
|
+
},
|
|
421
|
+
// Enable client credentials grant (RFC 6749 §4.4)
|
|
422
|
+
clientCredentials: { enabled: true },
|
|
423
|
+
// Enable RP-initiated logout (OpenID Connect RP-Initiated Logout 1.0)
|
|
424
|
+
rpInitiatedLogout: {
|
|
425
|
+
enabled: true,
|
|
426
|
+
logoutSource: logoutSourceHook,
|
|
427
|
+
postLogoutSuccessSource: postLogoutSuccessSourceHook,
|
|
428
|
+
},
|
|
429
|
+
},
|
|
430
|
+
// Token formats — opaque access tokens, JWT ID tokens (default)
|
|
431
|
+
formats: {
|
|
432
|
+
AccessToken: 'opaque',
|
|
433
|
+
ClientCredentials: 'opaque',
|
|
434
|
+
},
|
|
435
|
+
// PKCE — required for all authorization code flows, S256 only.
|
|
436
|
+
// This is a security best practice that prevents authorization code interception.
|
|
437
|
+
pkce: {
|
|
438
|
+
required: () => true,
|
|
439
|
+
methods: ['S256'],
|
|
440
|
+
},
|
|
441
|
+
// Token TTLs from system_config table
|
|
442
|
+
ttl: {
|
|
443
|
+
AccessToken: ttl.accessToken,
|
|
444
|
+
AuthorizationCode: ttl.authorizationCode,
|
|
445
|
+
IdToken: ttl.idToken,
|
|
446
|
+
RefreshToken: ttl.refreshToken,
|
|
447
|
+
Interaction: ttl.interaction,
|
|
448
|
+
Session: ttl.session,
|
|
449
|
+
Grant: ttl.grant,
|
|
450
|
+
},
|
|
451
|
+
// Issue refresh tokens for clients that support them.
|
|
452
|
+
// The default oidc-provider implementation only checks code.scopes.has('offline_access'),
|
|
453
|
+
// but offline_access may not propagate to the code scopes in all consent flows.
|
|
454
|
+
// This explicit function ensures refresh tokens are issued whenever the client
|
|
455
|
+
// lists 'refresh_token' in its grant_types AND the auth request included offline_access.
|
|
456
|
+
issueRefreshToken: async (_ctx, client, code) => {
|
|
457
|
+
return client.grantTypeAllowed('refresh_token') && (code.scopes.has('offline_access') ||
|
|
458
|
+
// Fallback: also issue for confidential web clients (web + auth method != none)
|
|
459
|
+
(client.applicationType === 'web' &&
|
|
460
|
+
client.tokenEndpointAuthMethod !== 'none'));
|
|
461
|
+
},
|
|
462
|
+
// Enable refresh token rotation — each refresh generates a new token
|
|
463
|
+
rotateRefreshToken: true,
|
|
464
|
+
// Standard OIDC scopes
|
|
465
|
+
scopes: ['openid', 'profile', 'email', 'address', 'phone', 'offline_access'],
|
|
466
|
+
// OIDC claims mapping per scope.
|
|
467
|
+
// Standard claims follow OpenID Connect Core §5.4.
|
|
468
|
+
// Custom claims (roles, permissions, ERP attributes) are mapped to
|
|
469
|
+
// 'openid' so they are always included when the openid scope is granted.
|
|
470
|
+
// This follows the Auth0/Okta/Azure AD pattern of always-include custom claims.
|
|
471
|
+
claims: {
|
|
472
|
+
openid: [
|
|
473
|
+
'sub',
|
|
474
|
+
// RBAC claims — always included
|
|
475
|
+
'roles', 'permissions',
|
|
476
|
+
// Custom ERP claims — always included
|
|
477
|
+
'department', 'employee_id', 'cost_center', 'job_title',
|
|
478
|
+
],
|
|
479
|
+
profile: [
|
|
480
|
+
'name', 'given_name', 'family_name', 'middle_name', 'nickname',
|
|
481
|
+
'preferred_username', 'profile', 'picture', 'website',
|
|
482
|
+
'gender', 'birthdate', 'zoneinfo', 'locale', 'updated_at',
|
|
483
|
+
],
|
|
484
|
+
email: ['email', 'email_verified'],
|
|
485
|
+
address: ['address'],
|
|
486
|
+
phone: ['phone_number', 'phone_number_verified'],
|
|
487
|
+
},
|
|
488
|
+
// Supported response types and grant types
|
|
489
|
+
responseTypes: ['code'],
|
|
490
|
+
grantTypes: ['authorization_code', 'client_credentials', 'refresh_token'],
|
|
491
|
+
// Interaction URL — where users are redirected for login/consent.
|
|
492
|
+
// Placeholder for RD-03; real login UI implemented in RD-07.
|
|
493
|
+
interactions: {
|
|
494
|
+
url: interactionUrl,
|
|
495
|
+
},
|
|
496
|
+
// Signing keys in JWK format
|
|
497
|
+
jwks,
|
|
498
|
+
// Cookie configuration with signing key rotation support.
|
|
499
|
+
// The `secure` flag is derived from the configured issuer URL:
|
|
500
|
+
// - HTTPS issuer → secure: true (cookies only sent over TLS)
|
|
501
|
+
// - HTTP issuer → secure: false (allows local dev on localhost)
|
|
502
|
+
// This is the same check used by the HSTS header in security-headers.ts.
|
|
503
|
+
cookies: {
|
|
504
|
+
keys: cookieKeys,
|
|
505
|
+
long: { signed: true, httpOnly: true, sameSite: 'lax', secure: config.issuerBaseUrl.startsWith('https://') },
|
|
506
|
+
short: { signed: true, httpOnly: true, sameSite: 'lax', secure: config.issuerBaseUrl.startsWith('https://') },
|
|
507
|
+
},
|
|
508
|
+
// CORS handler — checks client's allowed_origins
|
|
509
|
+
clientBasedCORS,
|
|
510
|
+
// Rendering hooks — render styled pages instead of provider defaults.
|
|
511
|
+
// See logoutSourceHook, postLogoutSuccessSourceHook, renderErrorHook above.
|
|
512
|
+
renderError: renderErrorHook,
|
|
513
|
+
// Extra client metadata properties — tell the provider to preserve
|
|
514
|
+
// these custom fields from the adapter's findClient response.
|
|
515
|
+
// Without this, node-oidc-provider strips all unknown properties.
|
|
516
|
+
extraClientMetadata: {
|
|
517
|
+
properties: [
|
|
518
|
+
'organizationId',
|
|
519
|
+
'client_name',
|
|
520
|
+
'urn:porta:allowed_origins',
|
|
521
|
+
'urn:porta:client_type',
|
|
522
|
+
// Per-client login method override. Raw value from findForOidc():
|
|
523
|
+
// null → inherit organization.defaultLoginMethods
|
|
524
|
+
// string[] → explicit override (subset of ['password','magic_link'])
|
|
525
|
+
// Resolved to effective methods inside the interaction route handlers.
|
|
526
|
+
'urn:porta:login_methods',
|
|
527
|
+
],
|
|
528
|
+
},
|
|
529
|
+
};
|
|
530
|
+
}
|
|
531
|
+
//# sourceMappingURL=configuration.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"configuration.js","sourceRoot":"","sources":["../../src/oidc/configuration.ts"],"names":[],"mappings":"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"}
|