@dudousxd/adonis-authkit-server 0.1.1 → 0.3.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/build/host/views/admin/client_form.edge +83 -0
- package/build/host/views/admin/clients.edge +68 -3
- package/build/index.d.ts +3 -2
- package/build/index.js +2 -1
- package/build/src/accounts/account_store.d.ts +74 -17
- package/build/src/accounts/account_store.js +12 -1
- package/build/src/accounts/lucid_account_store.d.ts +12 -27
- package/build/src/accounts/lucid_account_store.js +38 -365
- package/build/src/accounts/lucid_store/core.d.ts +8 -0
- package/build/src/accounts/lucid_store/core.js +108 -0
- package/build/src/accounts/lucid_store/mfa.d.ts +8 -0
- package/build/src/accounts/lucid_store/mfa.js +77 -0
- package/build/src/accounts/lucid_store/provider_identity.d.ts +8 -0
- package/build/src/accounts/lucid_store/provider_identity.js +41 -0
- package/build/src/accounts/lucid_store/shared.d.ts +48 -0
- package/build/src/accounts/lucid_store/shared.js +15 -0
- package/build/src/accounts/lucid_store/webauthn.d.ts +8 -0
- package/build/src/accounts/lucid_store/webauthn.js +135 -0
- package/build/src/adapters/adapter_contract.d.ts +12 -0
- package/build/src/adapters/database_adapter.d.ts +8 -1
- package/build/src/adapters/database_adapter.js +17 -0
- package/build/src/adapters/redis_adapter.d.ts +8 -1
- package/build/src/adapters/redis_adapter.js +26 -0
- package/build/src/audit/audit_sink.d.ts +1 -1
- package/build/src/define_config.d.ts +6 -0
- package/build/src/define_config.js +20 -5
- package/build/src/host/admin_clients_service.d.ts +65 -0
- package/build/src/host/admin_clients_service.js +136 -0
- package/build/src/host/controllers/account_mfa_controller.js +2 -1
- package/build/src/host/controllers/account_session_controller.js +10 -18
- package/build/src/host/controllers/admin/admin_clients_controller.d.ts +17 -3
- package/build/src/host/controllers/admin/admin_clients_controller.js +158 -4
- package/build/src/host/controllers/interaction_controller.js +13 -32
- package/build/src/host/controllers/social_controller.js +7 -0
- package/build/src/host/i18n.d.ts +27 -0
- package/build/src/host/i18n.js +28 -1
- package/build/src/host/login_attempt.d.ts +39 -0
- package/build/src/host/login_attempt.js +37 -0
- package/build/src/host/register_auth_host.d.ts +13 -0
- package/build/src/host/register_auth_host.js +17 -2
- package/build/src/mixins/json_column.d.ts +38 -0
- package/build/src/mixins/json_column.js +31 -0
- package/build/src/mixins/with_audit_log.js +2 -4
- package/build/src/mixins/with_auth_user.js +2 -4
- package/build/src/mixins/with_mfa.js +2 -6
- package/build/src/mixins/with_personal_access_token.js +2 -4
- package/build/src/mixins/with_webauthn_credential.js +6 -8
- package/build/src/provider/oidc_service.d.ts +15 -0
- package/build/src/provider/oidc_service.js +27 -0
- package/package.json +1 -1
|
@@ -5,6 +5,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
5
5
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
6
|
};
|
|
7
7
|
import { column } from '@adonisjs/lucid/orm';
|
|
8
|
+
import { jsonColumn } from './json_column.js';
|
|
8
9
|
/**
|
|
9
10
|
* Mixin de MFA/TOTP. Adiciona as colunas `totp_secret`, `mfa_enabled_at` e
|
|
10
11
|
* `recovery_codes` ao model de credenciais. Mantido separado de
|
|
@@ -26,12 +27,7 @@ export function withMfa() {
|
|
|
26
27
|
__decorate([
|
|
27
28
|
column({
|
|
28
29
|
serializeAs: null,
|
|
29
|
-
|
|
30
|
-
consume: (value) => {
|
|
31
|
-
if (value === null || value === undefined)
|
|
32
|
-
return null;
|
|
33
|
-
return Array.isArray(value) ? value : JSON.parse(value);
|
|
34
|
-
},
|
|
30
|
+
...jsonColumn({ fallback: null, passthroughParsed: true }),
|
|
35
31
|
})
|
|
36
32
|
], MfaMixin.prototype, "recoveryCodes", void 0);
|
|
37
33
|
return MfaMixin;
|
|
@@ -5,6 +5,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
5
5
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
6
|
};
|
|
7
7
|
import { column } from '@adonisjs/lucid/orm';
|
|
8
|
+
import { jsonColumn } from './json_column.js';
|
|
8
9
|
export function withPersonalAccessToken() {
|
|
9
10
|
return (superclass) => {
|
|
10
11
|
class PatMixin extends superclass {
|
|
@@ -19,10 +20,7 @@ export function withPersonalAccessToken() {
|
|
|
19
20
|
column({ serializeAs: null })
|
|
20
21
|
], PatMixin.prototype, "tokenHash", void 0);
|
|
21
22
|
__decorate([
|
|
22
|
-
column({
|
|
23
|
-
prepare: (value) => (value ? JSON.stringify(value) : null),
|
|
24
|
-
consume: (value) => (value ? JSON.parse(value) : []),
|
|
25
|
-
})
|
|
23
|
+
column(jsonColumn({ fallback: [] }))
|
|
26
24
|
], PatMixin.prototype, "scopes", void 0);
|
|
27
25
|
__decorate([
|
|
28
26
|
column()
|
|
@@ -5,6 +5,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
5
5
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
6
|
};
|
|
7
7
|
import { column } from '@adonisjs/lucid/orm';
|
|
8
|
+
import { jsonColumn } from './json_column.js';
|
|
8
9
|
/**
|
|
9
10
|
* Mixin de credenciais WebAuthn / passkey. Adiciona as colunas
|
|
10
11
|
* `account_id`, `public_key`, `counter`, `transports`, `label` + timestamps ao
|
|
@@ -26,14 +27,11 @@ export function withWebauthnCredential() {
|
|
|
26
27
|
column()
|
|
27
28
|
], WebauthnCredentialMixin.prototype, "counter", void 0);
|
|
28
29
|
__decorate([
|
|
29
|
-
column({
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
return Array.isArray(value) ? value : JSON.parse(value);
|
|
35
|
-
},
|
|
36
|
-
})
|
|
30
|
+
column(jsonColumn({
|
|
31
|
+
fallback: null,
|
|
32
|
+
treatEmptyArrayAsEmpty: true,
|
|
33
|
+
passthroughParsed: true,
|
|
34
|
+
}))
|
|
37
35
|
], WebauthnCredentialMixin.prototype, "transports", void 0);
|
|
38
36
|
__decorate([
|
|
39
37
|
column()
|
|
@@ -12,6 +12,21 @@ export declare class OidcService {
|
|
|
12
12
|
readonly interactions: InteractionActions;
|
|
13
13
|
get config(): ResolvedServerConfig;
|
|
14
14
|
constructor(config: ResolvedServerConfig, appKey: string, recorder?: MetricsRecorder);
|
|
15
|
+
/**
|
|
16
|
+
* Invalida o cache de clients DINÂMICOS do oidc-provider (a `dynamicClients`
|
|
17
|
+
* QuickLRU em `instance(provider)`). DEVE ser chamado após qualquer escrita
|
|
18
|
+
* (create/update/delete) no model `Client` via adapter, pelo console admin.
|
|
19
|
+
*
|
|
20
|
+
* NOTA sobre o porquê: o oidc-provider v9 cacheia clients carregados do adapter
|
|
21
|
+
* numa LRU CUJA CHAVE É O HASH (sha256) DO PAYLOAD persistido — não o client_id.
|
|
22
|
+
* Por isso uma alteração de metadata já é "auto-invalidante": `Client.find` relê o
|
|
23
|
+
* adapter, hasheia o payload NOVO, dá cache-miss e reconstrói o client. Mesmo assim
|
|
24
|
+
* limpamos a LRU explicitamente para (a) tornar o efeito imediato e determinístico
|
|
25
|
+
* (sem depender de pressão de LRU para expulsar a entrada antiga, agora inalcançável)
|
|
26
|
+
* e (b) liberar a entrada órfã na hora. É o caminho de invalidação suportado: a LRU
|
|
27
|
+
* é um detalhe interno acessível via o helper `weak_cache` do próprio provider.
|
|
28
|
+
*/
|
|
29
|
+
evictDynamicClientCache(): Promise<void>;
|
|
15
30
|
/** Verifica client_id + client_secret contra os clients da config (p/ endpoints custom como introspecção de PAT). */
|
|
16
31
|
verifyClientCredentials(clientId: string, clientSecret: string): boolean;
|
|
17
32
|
}
|
|
@@ -72,6 +72,33 @@ export class OidcService {
|
|
|
72
72
|
}
|
|
73
73
|
this.interactions = createInteractionActions(this.provider, { verifyCredentials: config.verifyCredentials });
|
|
74
74
|
}
|
|
75
|
+
/**
|
|
76
|
+
* Invalida o cache de clients DINÂMICOS do oidc-provider (a `dynamicClients`
|
|
77
|
+
* QuickLRU em `instance(provider)`). DEVE ser chamado após qualquer escrita
|
|
78
|
+
* (create/update/delete) no model `Client` via adapter, pelo console admin.
|
|
79
|
+
*
|
|
80
|
+
* NOTA sobre o porquê: o oidc-provider v9 cacheia clients carregados do adapter
|
|
81
|
+
* numa LRU CUJA CHAVE É O HASH (sha256) DO PAYLOAD persistido — não o client_id.
|
|
82
|
+
* Por isso uma alteração de metadata já é "auto-invalidante": `Client.find` relê o
|
|
83
|
+
* adapter, hasheia o payload NOVO, dá cache-miss e reconstrói o client. Mesmo assim
|
|
84
|
+
* limpamos a LRU explicitamente para (a) tornar o efeito imediato e determinístico
|
|
85
|
+
* (sem depender de pressão de LRU para expulsar a entrada antiga, agora inalcançável)
|
|
86
|
+
* e (b) liberar a entrada órfã na hora. É o caminho de invalidação suportado: a LRU
|
|
87
|
+
* é um detalhe interno acessível via o helper `weak_cache` do próprio provider.
|
|
88
|
+
*/
|
|
89
|
+
async evictDynamicClientCache() {
|
|
90
|
+
try {
|
|
91
|
+
const wc = await import('oidc-provider/lib/helpers/weak_cache.js');
|
|
92
|
+
const get = wc.default ?? wc.get;
|
|
93
|
+
const int = get(this.provider);
|
|
94
|
+
int?.dynamicClients?.clear?.();
|
|
95
|
+
}
|
|
96
|
+
catch {
|
|
97
|
+
// Estrutura interna mudou numa versão futura do oidc-provider: a invalidação por
|
|
98
|
+
// hash-de-conteúdo (acima) continua garantindo correção; só perdemos a expulsão
|
|
99
|
+
// imediata da entrada órfã. Best-effort — não propaga erro pro caminho da request.
|
|
100
|
+
}
|
|
101
|
+
}
|
|
75
102
|
/** Verifica client_id + client_secret contra os clients da config (p/ endpoints custom como introspecção de PAT). */
|
|
76
103
|
verifyClientCredentials(clientId, clientSecret) {
|
|
77
104
|
const client = this.#clients.find((c) => c.clientId === clientId);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dudousxd/adonis-authkit-server",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"description": "AdonisJS OIDC/OAuth2 provider (Identity Provider) toolkit: ejectable auth server with sessions, rate-limiting, MFA/TOTP, audit log, federated logout and OpenTelemetry metrics.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "dudousxd",
|