@adonis-agora/authkit-server 0.34.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/LICENSE +21 -0
- package/README.md +158 -0
- package/build/assets/grafana/authkit-dashboard.json +118 -0
- package/build/commands/clients_create.d.ts +27 -0
- package/build/commands/clients_create.js +121 -0
- package/build/commands/commands.json +292 -0
- package/build/commands/configure.d.ts +2 -0
- package/build/commands/configure.js +45 -0
- package/build/commands/doctor.d.ts +10 -0
- package/build/commands/doctor.js +113 -0
- package/build/commands/eject.d.ts +11 -0
- package/build/commands/eject.js +96 -0
- package/build/commands/expire_scan.d.ts +28 -0
- package/build/commands/expire_scan.js +92 -0
- package/build/commands/import_users.d.ts +17 -0
- package/build/commands/import_users.js +80 -0
- package/build/commands/keys_rotate.d.ts +21 -0
- package/build/commands/keys_rotate.js +126 -0
- package/build/commands/main.d.ts +12 -0
- package/build/commands/main.js +38 -0
- package/build/commands/settings_get.d.ts +18 -0
- package/build/commands/settings_get.js +43 -0
- package/build/commands/settings_list.d.ts +17 -0
- package/build/commands/settings_list.js +39 -0
- package/build/commands/settings_set.d.ts +20 -0
- package/build/commands/settings_set.js +55 -0
- package/build/commands/settings_unset.d.ts +18 -0
- package/build/commands/settings_unset.js +46 -0
- package/build/commands/ui_preset.d.ts +4 -0
- package/build/commands/ui_preset.js +32 -0
- package/build/database/migrations/make_authkit_oidc_table.d.ts +6 -0
- package/build/database/migrations/make_authkit_oidc_table.js +19 -0
- package/build/host/ui/admin.html +29 -0
- package/build/host/views/account/apps.edge +59 -0
- package/build/host/views/account/confirm.edge +70 -0
- package/build/host/views/account/email-confirmed.edge +16 -0
- package/build/host/views/account/login.edge +33 -0
- package/build/host/views/account/mfa.edge +152 -0
- package/build/host/views/account/orgs.edge +58 -0
- package/build/host/views/account/security.edge +215 -0
- package/build/host/views/account/tokens.edge +75 -0
- package/build/host/views/consent.edge +20 -0
- package/build/host/views/forgot.edge +43 -0
- package/build/host/views/login.edge +251 -0
- package/build/host/views/maintenance.edge +32 -0
- package/build/host/views/mfa-challenge.edge +107 -0
- package/build/host/views/otp-unlock.edge +40 -0
- package/build/host/views/partials/styles.edge +2 -0
- package/build/host/views/reset.edge +30 -0
- package/build/host/views/signup.edge +62 -0
- package/build/host/views/verify-email.edge +17 -0
- package/build/index.d.ts +115 -0
- package/build/index.js +76 -0
- package/build/password/common_passwords.txt +10000 -0
- package/build/providers/authkit_server_provider.d.ts +27 -0
- package/build/providers/authkit_server_provider.js +242 -0
- package/build/src/accounts/account_store.d.ts +578 -0
- package/build/src/accounts/account_store.js +60 -0
- package/build/src/accounts/lucid_account_store.d.ts +156 -0
- package/build/src/accounts/lucid_account_store.js +294 -0
- package/build/src/accounts/lucid_store/core.d.ts +9 -0
- package/build/src/accounts/lucid_store/core.js +306 -0
- package/build/src/accounts/lucid_store/mfa.d.ts +15 -0
- package/build/src/accounts/lucid_store/mfa.js +108 -0
- package/build/src/accounts/lucid_store/organizations.d.ts +13 -0
- package/build/src/accounts/lucid_store/organizations.js +294 -0
- package/build/src/accounts/lucid_store/password_hygiene.d.ts +20 -0
- package/build/src/accounts/lucid_store/password_hygiene.js +130 -0
- package/build/src/accounts/lucid_store/provider_identity.d.ts +8 -0
- package/build/src/accounts/lucid_store/provider_identity.js +59 -0
- package/build/src/accounts/lucid_store/shared.d.ts +113 -0
- package/build/src/accounts/lucid_store/shared.js +130 -0
- package/build/src/accounts/lucid_store/status_profile.d.ts +34 -0
- package/build/src/accounts/lucid_store/status_profile.js +100 -0
- package/build/src/accounts/lucid_store/webauthn.d.ts +8 -0
- package/build/src/accounts/lucid_store/webauthn.js +140 -0
- package/build/src/accounts/lucid_stores.d.ts +45 -0
- package/build/src/accounts/lucid_stores.js +30 -0
- package/build/src/adapters/adapter_contract.d.ts +37 -0
- package/build/src/adapters/adapter_contract.js +1 -0
- package/build/src/adapters/database_adapter.d.ts +21 -0
- package/build/src/adapters/database_adapter.js +79 -0
- package/build/src/adapters/factory.d.ts +30 -0
- package/build/src/adapters/factory.js +43 -0
- package/build/src/adapters/redis_adapter.d.ts +24 -0
- package/build/src/adapters/redis_adapter.js +122 -0
- package/build/src/audit/audit_sink.d.ts +63 -0
- package/build/src/audit/audit_sink.js +1 -0
- package/build/src/audit/lucid_audit_sink.d.ts +10 -0
- package/build/src/audit/lucid_audit_sink.js +99 -0
- package/build/src/commands/expire_scan_command.d.ts +60 -0
- package/build/src/commands/expire_scan_command.js +229 -0
- package/build/src/commands/import_clients.d.ts +40 -0
- package/build/src/commands/import_clients.js +79 -0
- package/build/src/commands/import_users.d.ts +51 -0
- package/build/src/commands/import_users.js +94 -0
- package/build/src/commands/resolve_config.d.ts +13 -0
- package/build/src/commands/resolve_config.js +18 -0
- package/build/src/commands/settings_commands.d.ts +47 -0
- package/build/src/commands/settings_commands.js +270 -0
- package/build/src/controllers/oidc_callback_controller.d.ts +22 -0
- package/build/src/controllers/oidc_callback_controller.js +33 -0
- package/build/src/define_config.d.ts +772 -0
- package/build/src/define_config.js +351 -0
- package/build/src/doctor/checks.d.ts +197 -0
- package/build/src/doctor/checks.js +858 -0
- package/build/src/events/dispatcher.d.ts +45 -0
- package/build/src/events/dispatcher.js +117 -0
- package/build/src/host/account_api/account_api_controller.d.ts +245 -0
- package/build/src/host/account_api/account_api_controller.js +827 -0
- package/build/src/host/account_deletion_ops.d.ts +80 -0
- package/build/src/host/account_deletion_ops.js +118 -0
- package/build/src/host/account_deletion_service.d.ts +63 -0
- package/build/src/host/account_deletion_service.js +133 -0
- package/build/src/host/account_export_service.d.ts +76 -0
- package/build/src/host/account_export_service.js +140 -0
- package/build/src/host/account_home.d.ts +11 -0
- package/build/src/host/account_home.js +11 -0
- package/build/src/host/account_lockout.d.ts +86 -0
- package/build/src/host/account_lockout.js +185 -0
- package/build/src/host/active_org_cookie.d.ts +28 -0
- package/build/src/host/active_org_cookie.js +47 -0
- package/build/src/host/admin_api/admin_api_guard.d.ts +16 -0
- package/build/src/host/admin_api/admin_api_guard.js +59 -0
- package/build/src/host/admin_api/admin_orgs_service.d.ts +125 -0
- package/build/src/host/admin_api/admin_orgs_service.js +324 -0
- package/build/src/host/admin_api/admin_users_service.d.ts +163 -0
- package/build/src/host/admin_api/admin_users_service.js +308 -0
- package/build/src/host/admin_api/api_clients_controller.d.ts +54 -0
- package/build/src/host/admin_api/api_clients_controller.js +89 -0
- package/build/src/host/admin_api/api_keys_controller.d.ts +19 -0
- package/build/src/host/admin_api/api_keys_controller.js +36 -0
- package/build/src/host/admin_api/api_misc_controller.d.ts +19 -0
- package/build/src/host/admin_api/api_misc_controller.js +44 -0
- package/build/src/host/admin_api/api_orgs_controller.d.ts +108 -0
- package/build/src/host/admin_api/api_orgs_controller.js +189 -0
- package/build/src/host/admin_api/api_settings_controller.d.ts +55 -0
- package/build/src/host/admin_api/api_settings_controller.js +134 -0
- package/build/src/host/admin_api/api_users_controller.d.ts +108 -0
- package/build/src/host/admin_api/api_users_controller.js +187 -0
- package/build/src/host/admin_api/dto.d.ts +131 -0
- package/build/src/host/admin_api/dto.js +122 -0
- package/build/src/host/admin_api/token_verify_service.d.ts +34 -0
- package/build/src/host/admin_api/token_verify_service.js +74 -0
- package/build/src/host/admin_clients_service.d.ts +88 -0
- package/build/src/host/admin_clients_service.js +181 -0
- package/build/src/host/admin_console/admin_shell_controller.d.ts +27 -0
- package/build/src/host/admin_console/admin_shell_controller.js +167 -0
- package/build/src/host/admin_console/console_audit_controller.d.ts +17 -0
- package/build/src/host/admin_console/console_audit_controller.js +25 -0
- package/build/src/host/admin_console/console_clients_controller.d.ts +53 -0
- package/build/src/host/admin_console/console_clients_controller.js +102 -0
- package/build/src/host/admin_console/console_impersonation_controller.d.ts +23 -0
- package/build/src/host/admin_console/console_impersonation_controller.js +45 -0
- package/build/src/host/admin_console/console_keys_controller.d.ts +24 -0
- package/build/src/host/admin_console/console_keys_controller.js +41 -0
- package/build/src/host/admin_console/console_orgs_controller.d.ts +96 -0
- package/build/src/host/admin_console/console_orgs_controller.js +238 -0
- package/build/src/host/admin_console/console_overview_controller.d.ts +27 -0
- package/build/src/host/admin_console/console_overview_controller.js +44 -0
- package/build/src/host/admin_console/console_roles_controller.d.ts +31 -0
- package/build/src/host/admin_console/console_roles_controller.js +108 -0
- package/build/src/host/admin_console/console_sessions_controller.d.ts +91 -0
- package/build/src/host/admin_console/console_sessions_controller.js +125 -0
- package/build/src/host/admin_console/console_settings_controller.d.ts +47 -0
- package/build/src/host/admin_console/console_settings_controller.js +115 -0
- package/build/src/host/admin_console/console_users_controller.d.ts +110 -0
- package/build/src/host/admin_console/console_users_controller.js +212 -0
- package/build/src/host/admin_prefix.d.ts +50 -0
- package/build/src/host/admin_prefix.js +77 -0
- package/build/src/host/admin_sessions_service.d.ts +119 -0
- package/build/src/host/admin_sessions_service.js +284 -0
- package/build/src/host/admin_stats_service.d.ts +44 -0
- package/build/src/host/admin_stats_service.js +130 -0
- package/build/src/host/admin_validators.d.ts +247 -0
- package/build/src/host/admin_validators.js +197 -0
- package/build/src/host/augmentations.d.ts +12 -0
- package/build/src/host/augmentations.js +1 -0
- package/build/src/host/auth_host_config.d.ts +22 -0
- package/build/src/host/auth_host_config.js +13 -0
- package/build/src/host/avatar_storage.d.ts +68 -0
- package/build/src/host/avatar_storage.js +166 -0
- package/build/src/host/bot_protection.d.ts +187 -0
- package/build/src/host/bot_protection.js +132 -0
- package/build/src/host/branding.d.ts +19 -0
- package/build/src/host/branding.js +8 -0
- package/build/src/host/config_locks.d.ts +38 -0
- package/build/src/host/config_locks.js +70 -0
- package/build/src/host/console_session.d.ts +27 -0
- package/build/src/host/console_session.js +36 -0
- package/build/src/host/controllers/account_apps_controller.d.ts +15 -0
- package/build/src/host/controllers/account_apps_controller.js +61 -0
- package/build/src/host/controllers/account_confirm_controller.d.ts +24 -0
- package/build/src/host/controllers/account_confirm_controller.js +144 -0
- package/build/src/host/controllers/account_mfa_controller.d.ts +28 -0
- package/build/src/host/controllers/account_mfa_controller.js +208 -0
- package/build/src/host/controllers/account_orgs_controller.d.ts +80 -0
- package/build/src/host/controllers/account_orgs_controller.js +401 -0
- package/build/src/host/controllers/account_security_controller.d.ts +43 -0
- package/build/src/host/controllers/account_security_controller.js +546 -0
- package/build/src/host/controllers/account_session_controller.d.ts +21 -0
- package/build/src/host/controllers/account_session_controller.js +113 -0
- package/build/src/host/controllers/account_tokens_controller.d.ts +7 -0
- package/build/src/host/controllers/account_tokens_controller.js +67 -0
- package/build/src/host/controllers/interaction_controller.d.ts +125 -0
- package/build/src/host/controllers/interaction_controller.js +981 -0
- package/build/src/host/controllers/pat_introspection_controller.d.ts +22 -0
- package/build/src/host/controllers/pat_introspection_controller.js +46 -0
- package/build/src/host/controllers/registration_controller.d.ts +18 -0
- package/build/src/host/controllers/registration_controller.js +382 -0
- package/build/src/host/controllers/social_controller.d.ts +8 -0
- package/build/src/host/controllers/social_controller.js +89 -0
- package/build/src/host/csrf.d.ts +29 -0
- package/build/src/host/csrf.js +14 -0
- package/build/src/host/default_mailer.d.ts +112 -0
- package/build/src/host/default_mailer.js +417 -0
- package/build/src/host/durable/account_deletion_workflow.d.ts +48 -0
- package/build/src/host/durable/account_deletion_workflow.js +86 -0
- package/build/src/host/durable/account_export_workflow.d.ts +68 -0
- package/build/src/host/durable/account_export_workflow.js +93 -0
- package/build/src/host/durable/index.d.ts +68 -0
- package/build/src/host/durable/index.js +77 -0
- package/build/src/host/email_templates.d.ts +39 -0
- package/build/src/host/email_templates.js +69 -0
- package/build/src/host/geo.d.ts +22 -0
- package/build/src/host/geo.js +39 -0
- package/build/src/host/i18n.d.ts +1416 -0
- package/build/src/host/i18n.js +1583 -0
- package/build/src/host/impersonation.d.ts +25 -0
- package/build/src/host/impersonation.js +31 -0
- package/build/src/host/key_rotation.d.ts +14 -0
- package/build/src/host/key_rotation.js +27 -0
- package/build/src/host/key_rotation_actions.d.ts +42 -0
- package/build/src/host/key_rotation_actions.js +27 -0
- package/build/src/host/login_attempt.d.ts +98 -0
- package/build/src/host/login_attempt.js +211 -0
- package/build/src/host/login_notify.d.ts +27 -0
- package/build/src/host/login_notify.js +142 -0
- package/build/src/host/middleware/account_auth.d.ts +7 -0
- package/build/src/host/middleware/account_auth.js +11 -0
- package/build/src/host/otp_lockout.d.ts +103 -0
- package/build/src/host/otp_lockout.js +221 -0
- package/build/src/host/rate_limit.d.ts +39 -0
- package/build/src/host/rate_limit.js +94 -0
- package/build/src/host/register_auth_host.d.ts +97 -0
- package/build/src/host/register_auth_host.js +466 -0
- package/build/src/host/renderers/edge_renderer.d.ts +12 -0
- package/build/src/host/renderers/edge_renderer.js +38 -0
- package/build/src/host/renderers/inertia_renderer.d.ts +70 -0
- package/build/src/host/renderers/inertia_renderer.js +54 -0
- package/build/src/host/runtime_settings.d.ts +181 -0
- package/build/src/host/runtime_settings.js +307 -0
- package/build/src/host/runtime_toggles.d.ts +807 -0
- package/build/src/host/runtime_toggles.js +784 -0
- package/build/src/host/security_notice_service.d.ts +36 -0
- package/build/src/host/security_notice_service.js +87 -0
- package/build/src/host/session_context.d.ts +23 -0
- package/build/src/host/session_context.js +89 -0
- package/build/src/host/sudo_mode.d.ts +56 -0
- package/build/src/host/sudo_mode.js +99 -0
- package/build/src/host/svg_chart.d.ts +15 -0
- package/build/src/host/svg_chart.js +45 -0
- package/build/src/host/trusted_device.d.ts +61 -0
- package/build/src/host/trusted_device.js +65 -0
- package/build/src/host/ui-dist/assets/index-CRWcmsex.js +137 -0
- package/build/src/host/ui-dist/assets/index-DTSmD4RU.css +1 -0
- package/build/src/host/ui-dist/index.html +17 -0
- package/build/src/host/user_agent.d.ts +18 -0
- package/build/src/host/user_agent.js +50 -0
- package/build/src/host/validators.d.ts +127 -0
- package/build/src/host/validators.js +53 -0
- package/build/src/keys/jwks_manager.d.ts +6 -0
- package/build/src/keys/jwks_manager.js +11 -0
- package/build/src/keys/keystore.d.ts +52 -0
- package/build/src/keys/keystore.js +68 -0
- package/build/src/keys/keystore_codec.d.ts +20 -0
- package/build/src/keys/keystore_codec.js +42 -0
- package/build/src/keys/keystore_crypto.d.ts +9 -0
- package/build/src/keys/keystore_crypto.js +27 -0
- package/build/src/keys/keystore_manager.d.ts +43 -0
- package/build/src/keys/keystore_manager.js +104 -0
- package/build/src/keys/keystore_vault.d.ts +113 -0
- package/build/src/keys/keystore_vault.js +265 -0
- package/build/src/mixins/json_column.d.ts +33 -0
- package/build/src/mixins/json_column.js +38 -0
- package/build/src/mixins/with_audit_log.d.ts +19 -0
- package/build/src/mixins/with_audit_log.js +39 -0
- package/build/src/mixins/with_auth_user.d.ts +24 -0
- package/build/src/mixins/with_auth_user.js +46 -0
- package/build/src/mixins/with_credentials.d.ts +20 -0
- package/build/src/mixins/with_credentials.js +29 -0
- package/build/src/mixins/with_mfa.d.ts +35 -0
- package/build/src/mixins/with_mfa.js +21 -0
- package/build/src/mixins/with_personal_access_token.d.ts +19 -0
- package/build/src/mixins/with_personal_access_token.js +42 -0
- package/build/src/mixins/with_provider_identity.d.ts +20 -0
- package/build/src/mixins/with_provider_identity.js +32 -0
- package/build/src/mixins/with_webauthn_credential.d.ts +37 -0
- package/build/src/mixins/with_webauthn_credential.js +46 -0
- package/build/src/observability/diagnostics_bridge.d.ts +6 -0
- package/build/src/observability/diagnostics_bridge.js +27 -0
- package/build/src/observability/metrics_controller.d.ts +5 -0
- package/build/src/observability/metrics_controller.js +24 -0
- package/build/src/observability/metrics_service.d.ts +2 -0
- package/build/src/observability/metrics_service.js +7 -0
- package/build/src/observability/otel_recorder.d.ts +10 -0
- package/build/src/observability/otel_recorder.js +59 -0
- package/build/src/observability/telescope/data_providers.d.ts +24 -0
- package/build/src/observability/telescope/data_providers.js +235 -0
- package/build/src/observability/telescope/extension.d.ts +29 -0
- package/build/src/observability/telescope/extension.js +167 -0
- package/build/src/observability/telescope/index.d.ts +8 -0
- package/build/src/observability/telescope/index.js +8 -0
- package/build/src/observability/wire_provider_events.d.ts +12 -0
- package/build/src/observability/wire_provider_events.js +30 -0
- package/build/src/password/common_passwords.d.ts +31 -0
- package/build/src/password/common_passwords.js +73 -0
- package/build/src/password/password_manager.d.ts +163 -0
- package/build/src/password/password_manager.js +191 -0
- package/build/src/password/policy.d.ts +71 -0
- package/build/src/password/policy.js +55 -0
- package/build/src/password/pwned.d.ts +36 -0
- package/build/src/password/pwned.js +52 -0
- package/build/src/pat/lucid_pat_store.d.ts +6 -0
- package/build/src/pat/lucid_pat_store.js +62 -0
- package/build/src/pat/pat_store.d.ts +31 -0
- package/build/src/pat/pat_store.js +1 -0
- package/build/src/pat/pat_tokens.d.ts +4 -0
- package/build/src/pat/pat_tokens.js +9 -0
- package/build/src/provider/build_provider.d.ts +45 -0
- package/build/src/provider/build_provider.js +219 -0
- package/build/src/provider/device_sources.d.ts +6 -0
- package/build/src/provider/device_sources.js +65 -0
- package/build/src/provider/interaction_actions.d.ts +36 -0
- package/build/src/provider/interaction_actions.js +55 -0
- package/build/src/provider/key_rotation_scheduler.d.ts +28 -0
- package/build/src/provider/key_rotation_scheduler.js +40 -0
- package/build/src/provider/keystore_reload.d.ts +21 -0
- package/build/src/provider/keystore_reload.js +39 -0
- package/build/src/provider/logout_sources.d.ts +13 -0
- package/build/src/provider/logout_sources.js +64 -0
- package/build/src/provider/oidc_service.d.ts +81 -0
- package/build/src/provider/oidc_service.js +254 -0
- package/build/src/provider/single_flight_lock.d.ts +18 -0
- package/build/src/provider/single_flight_lock.js +31 -0
- package/build/src/provider/token_exchange.d.ts +21 -0
- package/build/src/provider/token_exchange.js +124 -0
- package/build/src/register_routes.d.ts +16 -0
- package/build/src/register_routes.js +21 -0
- package/build/src/schema/ensure.d.ts +41 -0
- package/build/src/schema/ensure.js +262 -0
- package/build/stubs/config/authkit.stub +20 -0
- package/build/stubs/config/authkit_react.stub +52 -0
- package/build/stubs/main.d.ts +1 -0
- package/build/stubs/main.js +2 -0
- package/build/stubs/models/auth_user.stub +22 -0
- package/build/stubs/ui/edge/views/consent.edge +13 -0
- package/build/stubs/ui/edge/views/login.edge +19 -0
- package/build/stubs/ui/react/components/auth_shell.tsx +67 -0
- package/build/stubs/ui/react/pages/account/login.tsx +56 -0
- package/build/stubs/ui/react/pages/account/mfa.tsx +132 -0
- package/build/stubs/ui/react/pages/account/tokens.tsx +88 -0
- package/build/stubs/ui/react/pages/consent.tsx +39 -0
- package/build/stubs/ui/react/pages/forgot.tsx +44 -0
- package/build/stubs/ui/react/pages/login.tsx +171 -0
- package/build/stubs/ui/react/pages/mfa-challenge.tsx +72 -0
- package/build/stubs/ui/react/pages/reset.tsx +58 -0
- package/build/stubs/ui/react/pages/signup.tsx +78 -0
- package/build/stubs/ui/react/pages/verify-email.tsx +24 -0
- package/build/types.d.ts +7 -0
- package/build/types.js +1 -0
- package/package.json +147 -0
- package/stubs/config/authkit.stub +20 -0
- package/stubs/config/authkit_react.stub +52 -0
- package/stubs/main.ts +2 -0
- package/stubs/models/auth_user.stub +22 -0
- package/stubs/ui/edge/views/consent.edge +13 -0
- package/stubs/ui/edge/views/login.edge +19 -0
- package/stubs/ui/react/components/auth_shell.tsx +67 -0
- package/stubs/ui/react/pages/account/login.tsx +56 -0
- package/stubs/ui/react/pages/account/mfa.tsx +132 -0
- package/stubs/ui/react/pages/account/tokens.tsx +88 -0
- package/stubs/ui/react/pages/consent.tsx +39 -0
- package/stubs/ui/react/pages/forgot.tsx +44 -0
- package/stubs/ui/react/pages/login.tsx +171 -0
- package/stubs/ui/react/pages/mfa-challenge.tsx +72 -0
- package/stubs/ui/react/pages/reset.tsx +58 -0
- package/stubs/ui/react/pages/signup.tsx +78 -0
- package/stubs/ui/react/pages/verify-email.tsx +24 -0
|
@@ -0,0 +1,292 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 1,
|
|
3
|
+
"commands": [
|
|
4
|
+
{
|
|
5
|
+
"commandName": "authkit:eject",
|
|
6
|
+
"description": "Ejeta views Edge ou um controller do host-kit do @adonis-agora/authkit-server para customização local",
|
|
7
|
+
"namespace": "authkit",
|
|
8
|
+
"aliases": [],
|
|
9
|
+
"flags": [
|
|
10
|
+
{
|
|
11
|
+
"name": "views",
|
|
12
|
+
"flagName": "views",
|
|
13
|
+
"required": false,
|
|
14
|
+
"type": "boolean",
|
|
15
|
+
"description": "Copia as views Edge da lib para resources/views/authkit/"
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"name": "controller",
|
|
19
|
+
"flagName": "controller",
|
|
20
|
+
"required": false,
|
|
21
|
+
"type": "string",
|
|
22
|
+
"description": "Copia um controller do host-kit (ex.: interaction) para app/controllers/authkit/"
|
|
23
|
+
}
|
|
24
|
+
],
|
|
25
|
+
"args": [],
|
|
26
|
+
"options": {},
|
|
27
|
+
"filePath": "eject.js"
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
"commandName": "authkit:doctor",
|
|
31
|
+
"description": "Valida a configuração do AuthKit no host e imprime achados (✅/⚠️/❌). Sai com código !=0 se houver erros.",
|
|
32
|
+
"namespace": "authkit",
|
|
33
|
+
"aliases": [],
|
|
34
|
+
"flags": [],
|
|
35
|
+
"args": [],
|
|
36
|
+
"options": { "startApp": true },
|
|
37
|
+
"filePath": "doctor.js"
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
"commandName": "authkit:keys:rotate",
|
|
41
|
+
"description": "Rotaciona as chaves de assinatura JWKS managed: gera uma nova chave (novo kid) que passa a assinar e mantém as anteriores no JWKS por um período de graça (--retire remove de imediato; --dry-run só mostra o plano).",
|
|
42
|
+
"namespace": "authkit",
|
|
43
|
+
"aliases": [],
|
|
44
|
+
"flags": [
|
|
45
|
+
{
|
|
46
|
+
"name": "keep",
|
|
47
|
+
"flagName": "keep",
|
|
48
|
+
"required": false,
|
|
49
|
+
"type": "number",
|
|
50
|
+
"description": "Quantas chaves manter no JWKS (default 2)."
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
"name": "dryRun",
|
|
54
|
+
"flagName": "dry-run",
|
|
55
|
+
"required": false,
|
|
56
|
+
"type": "boolean",
|
|
57
|
+
"description": "Apenas mostra o plano da rotação; NÃO altera o keystore."
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
"name": "retire",
|
|
61
|
+
"flagName": "retire",
|
|
62
|
+
"required": false,
|
|
63
|
+
"type": "boolean",
|
|
64
|
+
"description": "Remove TODAS as chaves antigas de imediato (sem período de graça)."
|
|
65
|
+
}
|
|
66
|
+
],
|
|
67
|
+
"args": [],
|
|
68
|
+
"options": { "startApp": true },
|
|
69
|
+
"filePath": "keys_rotate.js"
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
"commandName": "authkit:clients:create",
|
|
73
|
+
"description": "Cria um client OIDC no adapter/DB em runtime (sem redeploy). O secret é impresso uma vez.",
|
|
74
|
+
"namespace": "authkit",
|
|
75
|
+
"aliases": [],
|
|
76
|
+
"flags": [
|
|
77
|
+
{
|
|
78
|
+
"name": "clientId",
|
|
79
|
+
"flagName": "client-id",
|
|
80
|
+
"required": false,
|
|
81
|
+
"type": "string",
|
|
82
|
+
"description": "client_id desejado. Omitir gera um UUID aleatório."
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
"name": "redirectUri",
|
|
86
|
+
"flagName": "redirect-uri",
|
|
87
|
+
"required": false,
|
|
88
|
+
"type": "array",
|
|
89
|
+
"description": "redirect_uri(s) permitidas (repetível). Obrigatório."
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
"name": "postLogoutUri",
|
|
93
|
+
"flagName": "post-logout-uri",
|
|
94
|
+
"required": false,
|
|
95
|
+
"type": "array",
|
|
96
|
+
"description": "post_logout_redirect_uri(s) permitidas (repetível)."
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
"name": "grant",
|
|
100
|
+
"flagName": "grant",
|
|
101
|
+
"required": false,
|
|
102
|
+
"type": "array",
|
|
103
|
+
"description": "Grant types (repetível). Default: authorization_code + refresh_token."
|
|
104
|
+
},
|
|
105
|
+
{
|
|
106
|
+
"name": "public",
|
|
107
|
+
"flagName": "public",
|
|
108
|
+
"required": false,
|
|
109
|
+
"type": "boolean",
|
|
110
|
+
"description": "Cria um client público (sem secret; token_endpoint_auth_method=none)."
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
"name": "backchannelLogoutUri",
|
|
114
|
+
"flagName": "backchannel-logout-uri",
|
|
115
|
+
"required": false,
|
|
116
|
+
"type": "string",
|
|
117
|
+
"description": "Endpoint de OIDC Back-Channel Logout do RP."
|
|
118
|
+
},
|
|
119
|
+
{
|
|
120
|
+
"name": "json",
|
|
121
|
+
"flagName": "json",
|
|
122
|
+
"required": false,
|
|
123
|
+
"type": "boolean",
|
|
124
|
+
"description": "Output em JSON machine-readable."
|
|
125
|
+
}
|
|
126
|
+
],
|
|
127
|
+
"args": [],
|
|
128
|
+
"options": { "startApp": true },
|
|
129
|
+
"filePath": "clients_create.js"
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
"commandName": "authkit:users:import",
|
|
133
|
+
"description": "Importa usuários de um arquivo JSON/NDJSON pelo account store (hashes entram como estão; lazy rehash no login).",
|
|
134
|
+
"namespace": "authkit",
|
|
135
|
+
"aliases": [],
|
|
136
|
+
"flags": [
|
|
137
|
+
{
|
|
138
|
+
"name": "file",
|
|
139
|
+
"flagName": "file",
|
|
140
|
+
"required": false,
|
|
141
|
+
"type": "string",
|
|
142
|
+
"description": "Caminho do arquivo JSON/NDJSON com os usuários."
|
|
143
|
+
},
|
|
144
|
+
{
|
|
145
|
+
"name": "dryRun",
|
|
146
|
+
"flagName": "dry-run",
|
|
147
|
+
"required": false,
|
|
148
|
+
"type": "boolean",
|
|
149
|
+
"description": "Valida e relata SEM persistir nada."
|
|
150
|
+
}
|
|
151
|
+
],
|
|
152
|
+
"args": [],
|
|
153
|
+
"options": { "startApp": true },
|
|
154
|
+
"filePath": "import_users.js"
|
|
155
|
+
},
|
|
156
|
+
{
|
|
157
|
+
"commandName": "authkit:settings:list",
|
|
158
|
+
"description": "Lista todas as runtime settings presentes em `auth_settings`.",
|
|
159
|
+
"namespace": "authkit",
|
|
160
|
+
"aliases": [],
|
|
161
|
+
"flags": [
|
|
162
|
+
{
|
|
163
|
+
"name": "json",
|
|
164
|
+
"flagName": "json",
|
|
165
|
+
"required": false,
|
|
166
|
+
"type": "boolean",
|
|
167
|
+
"description": "Output em JSON machine-readable."
|
|
168
|
+
}
|
|
169
|
+
],
|
|
170
|
+
"args": [],
|
|
171
|
+
"options": { "startApp": true },
|
|
172
|
+
"filePath": "settings_list.js"
|
|
173
|
+
},
|
|
174
|
+
{
|
|
175
|
+
"commandName": "authkit:settings:get",
|
|
176
|
+
"description": "Obtém uma runtime setting por key de `auth_settings`.",
|
|
177
|
+
"namespace": "authkit",
|
|
178
|
+
"aliases": [],
|
|
179
|
+
"flags": [
|
|
180
|
+
{
|
|
181
|
+
"name": "json",
|
|
182
|
+
"flagName": "json",
|
|
183
|
+
"required": false,
|
|
184
|
+
"type": "boolean",
|
|
185
|
+
"description": "Output em JSON machine-readable."
|
|
186
|
+
}
|
|
187
|
+
],
|
|
188
|
+
"args": [
|
|
189
|
+
{
|
|
190
|
+
"name": "key",
|
|
191
|
+
"argumentName": "key",
|
|
192
|
+
"required": true,
|
|
193
|
+
"type": "string",
|
|
194
|
+
"description": "Nome da setting (ex.: lockout, session_policy)."
|
|
195
|
+
}
|
|
196
|
+
],
|
|
197
|
+
"options": { "startApp": true },
|
|
198
|
+
"filePath": "settings_get.js"
|
|
199
|
+
},
|
|
200
|
+
{
|
|
201
|
+
"commandName": "authkit:settings:set",
|
|
202
|
+
"description": "Grava (upsert) uma runtime setting em `auth_settings`. Valida shape para keys conhecidas.",
|
|
203
|
+
"namespace": "authkit",
|
|
204
|
+
"aliases": [],
|
|
205
|
+
"flags": [
|
|
206
|
+
{
|
|
207
|
+
"name": "json",
|
|
208
|
+
"flagName": "json",
|
|
209
|
+
"required": false,
|
|
210
|
+
"type": "boolean",
|
|
211
|
+
"description": "Output em JSON machine-readable."
|
|
212
|
+
}
|
|
213
|
+
],
|
|
214
|
+
"args": [
|
|
215
|
+
{
|
|
216
|
+
"name": "key",
|
|
217
|
+
"argumentName": "key",
|
|
218
|
+
"required": true,
|
|
219
|
+
"type": "string",
|
|
220
|
+
"description": "Nome da setting (ex.: lockout, session_policy, token_ttl)."
|
|
221
|
+
},
|
|
222
|
+
{
|
|
223
|
+
"name": "value",
|
|
224
|
+
"argumentName": "value",
|
|
225
|
+
"required": true,
|
|
226
|
+
"type": "string",
|
|
227
|
+
"description": "Valor JSON da setting (deve ser um objeto JSON válido)."
|
|
228
|
+
}
|
|
229
|
+
],
|
|
230
|
+
"options": { "startApp": true },
|
|
231
|
+
"filePath": "settings_set.js"
|
|
232
|
+
},
|
|
233
|
+
{
|
|
234
|
+
"commandName": "authkit:settings:unset",
|
|
235
|
+
"description": "Remove uma runtime setting de `auth_settings` (reset ao config/default).",
|
|
236
|
+
"namespace": "authkit",
|
|
237
|
+
"aliases": [],
|
|
238
|
+
"flags": [
|
|
239
|
+
{
|
|
240
|
+
"name": "json",
|
|
241
|
+
"flagName": "json",
|
|
242
|
+
"required": false,
|
|
243
|
+
"type": "boolean",
|
|
244
|
+
"description": "Output em JSON machine-readable."
|
|
245
|
+
}
|
|
246
|
+
],
|
|
247
|
+
"args": [
|
|
248
|
+
{
|
|
249
|
+
"name": "key",
|
|
250
|
+
"argumentName": "key",
|
|
251
|
+
"required": true,
|
|
252
|
+
"type": "string",
|
|
253
|
+
"description": "Nome da setting a remover (ex.: lockout, session_policy)."
|
|
254
|
+
}
|
|
255
|
+
],
|
|
256
|
+
"options": { "startApp": true },
|
|
257
|
+
"filePath": "settings_unset.js"
|
|
258
|
+
},
|
|
259
|
+
{
|
|
260
|
+
"commandName": "authkit:accounts:expire-scan",
|
|
261
|
+
"description": "Varre contas inativas (account_expiration setting) e reporta expiradas/a expirar. Com --warn envia e-mail de aviso. Pensado para cron do host.",
|
|
262
|
+
"namespace": "authkit",
|
|
263
|
+
"aliases": [],
|
|
264
|
+
"flags": [
|
|
265
|
+
{
|
|
266
|
+
"name": "dryRun",
|
|
267
|
+
"flagName": "dry-run",
|
|
268
|
+
"required": false,
|
|
269
|
+
"type": "boolean",
|
|
270
|
+
"description": "Reporta sem enviar e-mails nem auditar."
|
|
271
|
+
},
|
|
272
|
+
{
|
|
273
|
+
"name": "warn",
|
|
274
|
+
"flagName": "warn",
|
|
275
|
+
"required": false,
|
|
276
|
+
"type": "boolean",
|
|
277
|
+
"description": "Envia e-mail de aviso às contas a expirar em breve (deduplicado via audit)."
|
|
278
|
+
},
|
|
279
|
+
{
|
|
280
|
+
"name": "json",
|
|
281
|
+
"flagName": "json",
|
|
282
|
+
"required": false,
|
|
283
|
+
"type": "boolean",
|
|
284
|
+
"description": "Output em JSON machine-readable."
|
|
285
|
+
}
|
|
286
|
+
],
|
|
287
|
+
"args": [],
|
|
288
|
+
"options": { "startApp": true },
|
|
289
|
+
"filePath": "expire_scan.js"
|
|
290
|
+
}
|
|
291
|
+
]
|
|
292
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { existsSync, readFileSync } from 'node:fs';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
import { stubsRoot } from '../stubs/main.js';
|
|
4
|
+
import { resolveUiPreset, uiStubPaths } from './ui_preset.js';
|
|
5
|
+
function assertPresetPrereqs(preset, appRoot) {
|
|
6
|
+
if (preset !== 'react')
|
|
7
|
+
return;
|
|
8
|
+
const pkgPath = join(appRoot, 'package.json');
|
|
9
|
+
const pkg = existsSync(pkgPath) ? JSON.parse(readFileSync(pkgPath, 'utf8')) : {};
|
|
10
|
+
const deps = { ...pkg.dependencies, ...pkg.devDependencies };
|
|
11
|
+
const hasInertia = !!deps['@adonisjs/inertia'];
|
|
12
|
+
const hasReact = !!deps['react'];
|
|
13
|
+
const hasVite = existsSync(join(appRoot, 'vite.config.ts')) || existsSync(join(appRoot, 'vite.config.js'));
|
|
14
|
+
if (!hasInertia || !hasReact || !hasVite) {
|
|
15
|
+
throw new Error('authkit --ui=react requer @adonisjs/inertia + react + Vite no app. ' +
|
|
16
|
+
'Rode `node ace add @adonisjs/inertia` (com React) antes, ou use --ui=edge|headless.');
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
export async function configure(command) {
|
|
20
|
+
const flag = command.parsedFlags?.ui;
|
|
21
|
+
const chosen = flag ?? (await command.prompt.choice('UI das telas de login/consent', ['edge', 'react', 'headless']));
|
|
22
|
+
const preset = resolveUiPreset(chosen);
|
|
23
|
+
assertPresetPrereqs(preset, command.app.makePath());
|
|
24
|
+
const codemods = await command.createCodemods();
|
|
25
|
+
// O preset react usa um stub de config dedicado que inclui `inertiaRenderer` com
|
|
26
|
+
// o allowlist `views` já preenchido — evitando SSR crash por páginas inexistentes.
|
|
27
|
+
const configStub = preset === 'react' ? 'config/authkit_react.stub' : 'config/authkit.stub';
|
|
28
|
+
await codemods.makeUsingStub(stubsRoot, configStub, {});
|
|
29
|
+
await codemods.makeUsingStub(stubsRoot, 'models/auth_user.stub', {});
|
|
30
|
+
for (const path of uiStubPaths(preset)) {
|
|
31
|
+
await codemods.makeUsingStub(stubsRoot, path, {});
|
|
32
|
+
}
|
|
33
|
+
await codemods.updateRcFile((rcFile) => {
|
|
34
|
+
rcFile.addProvider('@adonis-agora/authkit-server/authkit_server_provider');
|
|
35
|
+
});
|
|
36
|
+
await codemods.defineEnvValidations({
|
|
37
|
+
leadingComment: 'Variáveis do @adonis-agora/authkit-server (Authorization Server OIDC)',
|
|
38
|
+
variables: {
|
|
39
|
+
AUTHKIT_ISSUER: `Env.schema.string({ format: 'url', tld: false })`,
|
|
40
|
+
},
|
|
41
|
+
});
|
|
42
|
+
await codemods.defineEnvVariables({
|
|
43
|
+
AUTHKIT_ISSUER: 'http://localhost:3333/oidc',
|
|
44
|
+
});
|
|
45
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { BaseCommand } from '@adonisjs/core/ace';
|
|
2
|
+
import type { CommandOptions } from '@adonisjs/core/types/ace';
|
|
3
|
+
export default class AuthkitDoctor extends BaseCommand {
|
|
4
|
+
static commandName: string;
|
|
5
|
+
static description: string;
|
|
6
|
+
static help: string[];
|
|
7
|
+
static options: CommandOptions;
|
|
8
|
+
run(): Promise<void>;
|
|
9
|
+
private print;
|
|
10
|
+
}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
var __rewriteRelativeImportExtension = (this && this.__rewriteRelativeImportExtension) || function (path, preserveJsx) {
|
|
2
|
+
if (typeof path === "string" && /^\.\.?\//.test(path)) {
|
|
3
|
+
return path.replace(/\.(tsx)$|((?:\.d)?)((?:\.[^./]+?)?)\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {
|
|
4
|
+
return tsx ? preserveJsx ? ".jsx" : ".js" : d && (!ext || !cm) ? m : (d + ext + "." + cm.toLowerCase() + "js");
|
|
5
|
+
});
|
|
6
|
+
}
|
|
7
|
+
return path;
|
|
8
|
+
};
|
|
9
|
+
import { BaseCommand } from '@adonisjs/core/ace';
|
|
10
|
+
import { runAllChecks, hasErrors, signingKeyAgeFinding } from '../src/doctor/checks.js';
|
|
11
|
+
import { DatabaseAdapter } from '../src/adapters/database_adapter.js';
|
|
12
|
+
import { resolveAuthkitConfig } from '../src/commands/resolve_config.js';
|
|
13
|
+
import { KeystoreManager, resolveKeystoreVault } from '../src/keys/keystore_manager.js';
|
|
14
|
+
import { KeystoreCodec } from '../src/keys/keystore_codec.js';
|
|
15
|
+
import { signingKeyAgeDays } from '../src/keys/keystore.js';
|
|
16
|
+
import { defaultEncryptForStore } from '../src/define_config.js';
|
|
17
|
+
import { loadEncryptionService } from '../src/keys/keystore_crypto.js';
|
|
18
|
+
/**
|
|
19
|
+
* Tenta importar um peer; `true` se importável.
|
|
20
|
+
*
|
|
21
|
+
* Distingue "não instalado" de "instalado mas quebrado": só um erro de
|
|
22
|
+
* módulo-não-encontrado (`ERR_MODULE_NOT_FOUND`/`MODULE_NOT_FOUND`) é tratado como
|
|
23
|
+
* peer ausente (silencioso — é o caso esperado). Qualquer outro erro significa que
|
|
24
|
+
* o peer ESTÁ presente mas falhou ao carregar (import circular, erro de sintaxe,
|
|
25
|
+
* config inválida) — isso o doctor precisa gritar, senão um peer quebrado aparece
|
|
26
|
+
* como "ausente" e o diagnóstico mente.
|
|
27
|
+
*/
|
|
28
|
+
async function canImport(specifier, logger) {
|
|
29
|
+
try {
|
|
30
|
+
await import(__rewriteRelativeImportExtension(specifier));
|
|
31
|
+
return true;
|
|
32
|
+
}
|
|
33
|
+
catch (err) {
|
|
34
|
+
const code = err?.code;
|
|
35
|
+
if (code !== 'ERR_MODULE_NOT_FOUND' && code !== 'MODULE_NOT_FOUND') {
|
|
36
|
+
logger?.warning(`⚠️ ${specifier} está instalado mas falhou ao carregar: ${err.message}`);
|
|
37
|
+
}
|
|
38
|
+
return false;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
export default class AuthkitDoctor extends BaseCommand {
|
|
42
|
+
static commandName = 'authkit:doctor';
|
|
43
|
+
static description = 'Valida a configuração do AuthKit no host e imprime achados (✅/⚠️/❌). Sai com código !=0 se houver erros.';
|
|
44
|
+
static help = [
|
|
45
|
+
'Roda uma bateria de checagens sobre a config `authkit` do host:',
|
|
46
|
+
'issuer/mountPath, clients, accountStore + capacidades, session, shield,',
|
|
47
|
+
'ally (social), rate-limit, admin, webauthn e jwks.',
|
|
48
|
+
];
|
|
49
|
+
static options = { startApp: true };
|
|
50
|
+
async run() {
|
|
51
|
+
const config = await this.app.container.make('config');
|
|
52
|
+
// `defineConfig` exporta um config provider — resolve antes de inspecionar,
|
|
53
|
+
// senão todo campo aparece como "ausente" (provider cru não tem issuer etc.).
|
|
54
|
+
let authkitConfig = null;
|
|
55
|
+
try {
|
|
56
|
+
authkitConfig = await resolveAuthkitConfig(this.app, config.get('authkit', null));
|
|
57
|
+
}
|
|
58
|
+
catch (error) {
|
|
59
|
+
this.logger.logError(`❌ config/authkit.ts falhou ao resolver: ${error.message}`);
|
|
60
|
+
this.exitCode = 1;
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
const sessionConfig = config.get('session', null) ?? null;
|
|
64
|
+
const input = {
|
|
65
|
+
authkitConfig,
|
|
66
|
+
sessionConfig,
|
|
67
|
+
peers: {
|
|
68
|
+
session: await canImport('@adonisjs/session', this.logger),
|
|
69
|
+
shield: await canImport('@adonisjs/shield', this.logger),
|
|
70
|
+
ally: await canImport('@adonisjs/ally', this.logger),
|
|
71
|
+
limiter: await canImport('@adonisjs/limiter', this.logger),
|
|
72
|
+
},
|
|
73
|
+
__adapterClasses: { DatabaseAdapter },
|
|
74
|
+
};
|
|
75
|
+
const findings = runAllChecks(input);
|
|
76
|
+
// Adiciona o finding de idade da chave de assinatura managed (best-effort).
|
|
77
|
+
const jwksInput = (authkitConfig?.jwksConfig ?? authkitConfig?.jwks);
|
|
78
|
+
if (jwksInput?.source === 'managed' && jwksInput?.store) {
|
|
79
|
+
try {
|
|
80
|
+
const vault = resolveKeystoreVault(jwksInput.store, { makePath: (p) => this.app.makePath(p), container: this.app.container });
|
|
81
|
+
const encrypt = jwksInput.encrypt ?? defaultEncryptForStore(jwksInput.store);
|
|
82
|
+
const enc = encrypt ? await loadEncryptionService().catch(() => undefined) : undefined;
|
|
83
|
+
const mgr = new KeystoreManager(vault, new KeystoreCodec({ encrypt, enc }), jwksInput.algorithm ?? 'RS256');
|
|
84
|
+
const store = await mgr.read().catch(() => null);
|
|
85
|
+
const maxAge = jwksInput.rotationDays ?? 90;
|
|
86
|
+
findings.push(signingKeyAgeFinding(signingKeyAgeDays(store), maxAge));
|
|
87
|
+
}
|
|
88
|
+
catch {
|
|
89
|
+
/* idade é best-effort no doctor */
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
this.print(findings);
|
|
93
|
+
if (hasErrors(findings)) {
|
|
94
|
+
this.exitCode = 1;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
print(findings) {
|
|
98
|
+
const icon = (l) => (l === 'ok' ? '✅' : l === 'warn' ? '⚠️ ' : '❌');
|
|
99
|
+
this.logger.info('AuthKit doctor — checagem da configuração do host\n');
|
|
100
|
+
for (const f of findings) {
|
|
101
|
+
const line = `${icon(f.level)} ${f.message}`;
|
|
102
|
+
if (f.level === 'error')
|
|
103
|
+
this.logger.logError(line);
|
|
104
|
+
else if (f.level === 'warn')
|
|
105
|
+
this.logger.warning(line);
|
|
106
|
+
else
|
|
107
|
+
this.logger.success(line);
|
|
108
|
+
}
|
|
109
|
+
const errors = findings.filter((f) => f.level === 'error').length;
|
|
110
|
+
const warns = findings.filter((f) => f.level === 'warn').length;
|
|
111
|
+
this.logger.info(`\nResumo: ${errors} erro(s), ${warns} aviso(s).`);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { BaseCommand } from '@adonisjs/core/ace';
|
|
2
|
+
import type { CommandOptions } from '@adonisjs/core/types/ace';
|
|
3
|
+
export default class AuthkitEject extends BaseCommand {
|
|
4
|
+
static commandName: string;
|
|
5
|
+
static description: string;
|
|
6
|
+
static help: string[];
|
|
7
|
+
static options: CommandOptions;
|
|
8
|
+
views: boolean;
|
|
9
|
+
controller?: string;
|
|
10
|
+
run(): Promise<void>;
|
|
11
|
+
}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
import { BaseCommand, flags } from '@adonisjs/core/ace';
|
|
8
|
+
const KNOWN_CONTROLLERS = [
|
|
9
|
+
'interaction',
|
|
10
|
+
'registration',
|
|
11
|
+
'social',
|
|
12
|
+
'account_session',
|
|
13
|
+
'account_tokens',
|
|
14
|
+
'pat_introspection',
|
|
15
|
+
];
|
|
16
|
+
export default class AuthkitEject extends BaseCommand {
|
|
17
|
+
static commandName = 'authkit:eject';
|
|
18
|
+
static description = 'Ejeta views Edge ou um controller do host-kit do @adonis-agora/authkit-server para customização local';
|
|
19
|
+
static help = [
|
|
20
|
+
'Use --views para copiar as views Edge da lib para resources/views/authkit/.',
|
|
21
|
+
'Depois de ejetar as views, o app as servirá pelo ViewPath padrão',
|
|
22
|
+
'(sem o disco authkit::) — renomeie as chamadas view() nos controllers.',
|
|
23
|
+
'',
|
|
24
|
+
'Use --controller=<nome> para copiar um controller do host-kit para',
|
|
25
|
+
'app/controllers/authkit/<nome>_controller.ts e customizá-lo livremente.',
|
|
26
|
+
'',
|
|
27
|
+
`Controllers disponíveis: ${KNOWN_CONTROLLERS.join(', ')}`,
|
|
28
|
+
];
|
|
29
|
+
static options = {};
|
|
30
|
+
async run() {
|
|
31
|
+
const fs = await import('node:fs');
|
|
32
|
+
const { fileURLToPath } = await import('node:url');
|
|
33
|
+
/**
|
|
34
|
+
* Resolve o diretório dentro de `host/` — prefere o build compilado,
|
|
35
|
+
* cai de volta para o src quando rodando no contexto de dev da lib.
|
|
36
|
+
*/
|
|
37
|
+
const pickDir = (rel) => {
|
|
38
|
+
const built = new URL(`../build/host/${rel}`, import.meta.url);
|
|
39
|
+
const src = new URL(`../src/host/${rel}`, import.meta.url);
|
|
40
|
+
return fs.existsSync(fileURLToPath(built)) ? built : src;
|
|
41
|
+
};
|
|
42
|
+
if (this.views) {
|
|
43
|
+
const fromPath = fileURLToPath(pickDir('views'));
|
|
44
|
+
if (!fs.existsSync(fromPath)) {
|
|
45
|
+
this.logger.error('Diretório de views não encontrado. Execute `pnpm build` no pacote primeiro.');
|
|
46
|
+
this.exitCode = 1;
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
const toPath = this.app.makePath('resources/views/authkit');
|
|
50
|
+
fs.mkdirSync(toPath, { recursive: true });
|
|
51
|
+
fs.cpSync(fromPath, toPath, { recursive: true });
|
|
52
|
+
this.logger.success(`Views Edge ejetadas → ${toPath}`);
|
|
53
|
+
this.logger.info('Lembre-se de ajustar as chamadas view() nos controllers para usar o caminho local ao invés do disco authkit::.');
|
|
54
|
+
}
|
|
55
|
+
if (this.controller) {
|
|
56
|
+
const knownList = KNOWN_CONTROLLERS;
|
|
57
|
+
if (!knownList.includes(this.controller)) {
|
|
58
|
+
this.logger.error(`Controller desconhecido: "${this.controller}". Disponíveis: ${KNOWN_CONTROLLERS.join(', ')}`);
|
|
59
|
+
this.exitCode = 1;
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
const file = `${this.controller}_controller`;
|
|
63
|
+
const fromDirPath = fileURLToPath(pickDir('controllers'));
|
|
64
|
+
// Prefere .js (build) com fallback para .ts (src)
|
|
65
|
+
const jsPath = `${fromDirPath}/${file}.js`;
|
|
66
|
+
const tsPath = `${fromDirPath}/${file}.ts`;
|
|
67
|
+
const fromFilePath = fs.existsSync(jsPath) ? jsPath : tsPath;
|
|
68
|
+
const ext = fs.existsSync(jsPath) ? 'js' : 'ts';
|
|
69
|
+
if (!fs.existsSync(fromFilePath)) {
|
|
70
|
+
this.logger.error(`Arquivo do controller não encontrado: ${fromFilePath}. Execute \`pnpm build\` no pacote primeiro.`);
|
|
71
|
+
this.exitCode = 1;
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
const toDirPath = this.app.makePath('app/controllers/authkit');
|
|
75
|
+
fs.mkdirSync(toDirPath, { recursive: true });
|
|
76
|
+
const toFilePath = `${toDirPath}/${file}.${ext}`;
|
|
77
|
+
fs.copyFileSync(fromFilePath, toFilePath);
|
|
78
|
+
this.logger.success(`Controller "${this.controller}" ejetado → ${toFilePath}`);
|
|
79
|
+
this.logger.info(`Atualize as rotas do host para apontar para app/controllers/authkit/${file}.`);
|
|
80
|
+
}
|
|
81
|
+
if (!this.views && !this.controller) {
|
|
82
|
+
this.logger.info('Nenhuma opção especificada. Use --views ou --controller=<nome>.');
|
|
83
|
+
this.logger.info(`Controllers disponíveis: ${KNOWN_CONTROLLERS.join(', ')}`);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
__decorate([
|
|
88
|
+
flags.boolean({
|
|
89
|
+
description: 'Copia as views Edge da lib para resources/views/authkit/',
|
|
90
|
+
})
|
|
91
|
+
], AuthkitEject.prototype, "views", void 0);
|
|
92
|
+
__decorate([
|
|
93
|
+
flags.string({
|
|
94
|
+
description: `Copia um controller do host-kit (ex.: interaction) para app/controllers/authkit/`,
|
|
95
|
+
})
|
|
96
|
+
], AuthkitEject.prototype, "controller", void 0);
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { BaseCommand } from '@adonisjs/core/ace';
|
|
2
|
+
import type { CommandOptions } from '@adonisjs/core/types/ace';
|
|
3
|
+
/**
|
|
4
|
+
* Varre contas inativas e reporta expiradas/a expirar.
|
|
5
|
+
*
|
|
6
|
+
* Mecânica:
|
|
7
|
+
* - "Última atividade" = último `login.success` da conta no audit (list capability).
|
|
8
|
+
* - Sem audit queryável → aborta com aviso.
|
|
9
|
+
* - --warn: envia e-mail de aviso às contas a expirar em breve (deduplicado via audit).
|
|
10
|
+
* - --dry-run: reporta sem enviar e-mails nem auditar.
|
|
11
|
+
* - --json: output machine-readable (estrutura ExpireScanResult).
|
|
12
|
+
*
|
|
13
|
+
* Exemplos:
|
|
14
|
+
* node ace authkit:accounts:expire-scan
|
|
15
|
+
* node ace authkit:accounts:expire-scan --dry-run
|
|
16
|
+
* node ace authkit:accounts:expire-scan --warn
|
|
17
|
+
* node ace authkit:accounts:expire-scan --warn --json
|
|
18
|
+
*/
|
|
19
|
+
export default class AuthkitExpireScan extends BaseCommand {
|
|
20
|
+
static commandName: string;
|
|
21
|
+
static description: string;
|
|
22
|
+
static help: string[];
|
|
23
|
+
static options: CommandOptions;
|
|
24
|
+
dryRun?: boolean;
|
|
25
|
+
warn?: boolean;
|
|
26
|
+
json?: boolean;
|
|
27
|
+
run(): Promise<void>;
|
|
28
|
+
}
|