@c9up/warden 0.1.9 → 0.1.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/AuthManager.d.ts +5 -0
- package/dist/AuthManager.d.ts.map +1 -1
- package/dist/AuthManager.js +7 -0
- package/dist/AuthManager.js.map +1 -1
- package/dist/middleware.d.ts +54 -6
- package/dist/middleware.d.ts.map +1 -1
- package/dist/middleware.js +73 -3
- package/dist/middleware.js.map +1 -1
- package/dist/silent-auth.d.ts +18 -0
- package/dist/silent-auth.d.ts.map +1 -0
- package/dist/silent-auth.js +20 -0
- package/dist/silent-auth.js.map +1 -0
- package/index.darwin-arm64.node +0 -0
- package/index.darwin-x64.node +0 -0
- package/index.linux-arm64-gnu.node +0 -0
- package/index.linux-x64-gnu.node +0 -0
- package/index.win32-x64-msvc.node +0 -0
- package/package.json +5 -1
- package/src/AuthManager.ts +8 -0
- package/src/middleware.ts +112 -9
- package/src/silent-auth.ts +21 -0
package/dist/AuthManager.d.ts
CHANGED
|
@@ -94,6 +94,11 @@ export declare class AuthManager {
|
|
|
94
94
|
hasAllPermissions(user: UserPayload, permissions: string[], scope?: Scope): Promise<boolean>;
|
|
95
95
|
/** Get a registered strategy by name. */
|
|
96
96
|
getStrategy(name?: string): AuthStrategy;
|
|
97
|
+
/**
|
|
98
|
+
* Name of the default strategy (Adonis's "default guard"). Used by
|
|
99
|
+
* `silentAuth` to pick which strategy to attempt when a route declares none.
|
|
100
|
+
*/
|
|
101
|
+
get defaultStrategyName(): string;
|
|
97
102
|
/** Register a new strategy at runtime. */
|
|
98
103
|
registerStrategy(name: string, strategy: AuthStrategy): void;
|
|
99
104
|
/** Get all registered strategy names. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AuthManager.d.ts","sourceRoot":"","sources":["../src/AuthManager.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"AuthManager.d.ts","sourceRoot":"","sources":["../src/AuthManager.ts"],"names":[],"mappings":"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"}
|
package/dist/AuthManager.js
CHANGED
|
@@ -149,6 +149,13 @@ export class AuthManager {
|
|
|
149
149
|
}
|
|
150
150
|
return strategy;
|
|
151
151
|
}
|
|
152
|
+
/**
|
|
153
|
+
* Name of the default strategy (Adonis's "default guard"). Used by
|
|
154
|
+
* `silentAuth` to pick which strategy to attempt when a route declares none.
|
|
155
|
+
*/
|
|
156
|
+
get defaultStrategyName() {
|
|
157
|
+
return this.defaultStrategy;
|
|
158
|
+
}
|
|
152
159
|
/** Register a new strategy at runtime. */
|
|
153
160
|
registerStrategy(name, strategy) {
|
|
154
161
|
this.strategies.set(name, strategy);
|
package/dist/AuthManager.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AuthManager.js","sourceRoot":"","sources":["../src/AuthManager.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"AuthManager.js","sourceRoot":"","sources":["../src/AuthManager.ts"],"names":[],"mappings":"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"}
|
package/dist/middleware.d.ts
CHANGED
|
@@ -17,7 +17,6 @@
|
|
|
17
17
|
*/
|
|
18
18
|
import { type AuthResult } from "./AuthManager.js";
|
|
19
19
|
import type { BasePolicy } from "./bouncer/BasePolicy.js";
|
|
20
|
-
import { Bouncer } from "./bouncer/Bouncer.js";
|
|
21
20
|
import type { Ability } from "./bouncer/types.js";
|
|
22
21
|
import type { ScopeRequestContext } from "./config.js";
|
|
23
22
|
import type { Scope } from "./rights/types.js";
|
|
@@ -38,6 +37,19 @@ type ResolvableToken = string | symbol | (abstract new (...args: never[]) => unk
|
|
|
38
37
|
interface ContainerResolver {
|
|
39
38
|
make(token: ResolvableToken): unknown;
|
|
40
39
|
}
|
|
40
|
+
/**
|
|
41
|
+
* Agnostic authorization slot — structurally Ream's `Authorizer` interface (and
|
|
42
|
+
* Adonis's bouncer contract): `allows` / `denies` / `authorize`. Typed as the
|
|
43
|
+
* interface, NOT the concrete `Bouncer`, so a real Ream `HttpContext` — whose
|
|
44
|
+
* `bouncer` is this same agnostic shape — is assignable to `WardenContext`
|
|
45
|
+
* without warden importing `@c9up/ream`. `initializeBouncer` fills the slot with
|
|
46
|
+
* a concrete `Bouncer`, which satisfies this contract.
|
|
47
|
+
*/
|
|
48
|
+
interface Authorizer {
|
|
49
|
+
allows(ability: string, ...args: unknown[]): Promise<boolean>;
|
|
50
|
+
denies(ability: string, ...args: unknown[]): Promise<boolean>;
|
|
51
|
+
authorize(ability: string, ...args: unknown[]): Promise<void>;
|
|
52
|
+
}
|
|
41
53
|
export interface WardenContext {
|
|
42
54
|
request: {
|
|
43
55
|
/** Ream's `HttpContext` exposes headers as a METHOD, not a property. */
|
|
@@ -54,9 +66,19 @@ export interface WardenContext {
|
|
|
54
66
|
json: (data: unknown) => void;
|
|
55
67
|
};
|
|
56
68
|
/**
|
|
57
|
-
*
|
|
58
|
-
*
|
|
59
|
-
*
|
|
69
|
+
* Matched-route info — Ream (like Adonis) exposes the controller class +
|
|
70
|
+
* method under `ctx.route` (`ctx.route.controller` / `ctx.route.action`),
|
|
71
|
+
* NOT top-level. This is the primary source the guard-metadata lookup reads.
|
|
72
|
+
* Absent for inline-function routes. (context7 `/adonisjs/v7-docs`: "access
|
|
73
|
+
* the currently matched route via `ctx.route`".)
|
|
74
|
+
*/
|
|
75
|
+
route?: {
|
|
76
|
+
controller?: object;
|
|
77
|
+
action?: string | symbol;
|
|
78
|
+
};
|
|
79
|
+
/**
|
|
80
|
+
* Top-level controller/action — kept only as a FALLBACK for hosts that
|
|
81
|
+
* expose them flat. Ream uses `ctx.route` (above); the lookup prefers it.
|
|
60
82
|
*/
|
|
61
83
|
controller?: object;
|
|
62
84
|
action?: string | symbol;
|
|
@@ -64,8 +86,12 @@ export interface WardenContext {
|
|
|
64
86
|
session?: SessionStore;
|
|
65
87
|
/** Set by the middleware after successful auth (Ream's `auth` slot). */
|
|
66
88
|
auth?: AuthResult;
|
|
67
|
-
/**
|
|
68
|
-
|
|
89
|
+
/**
|
|
90
|
+
* Per-request authorization entry point — set by `initializeBouncer`. Typed
|
|
91
|
+
* as the agnostic {@link Authorizer} contract (Ream's `ctx.bouncer` slot),
|
|
92
|
+
* filled with a concrete `Bouncer` at runtime.
|
|
93
|
+
*/
|
|
94
|
+
bouncer?: Authorizer;
|
|
69
95
|
}
|
|
70
96
|
type WardenNext = () => Promise<void> | void;
|
|
71
97
|
/**
|
|
@@ -74,6 +100,28 @@ type WardenNext = () => Promise<void> | void;
|
|
|
74
100
|
* and authenticates + authorizes the request.
|
|
75
101
|
*/
|
|
76
102
|
export declare function wardenMiddleware(ctx: WardenContext, next: WardenNext): Promise<void>;
|
|
103
|
+
/**
|
|
104
|
+
* Silent auth middleware (AdonisJS `silent_auth` parity) — a GLOBAL middleware
|
|
105
|
+
* that populates `ctx.auth` from the request's credentials when they're valid,
|
|
106
|
+
* and NEVER throws / 401s when they're absent or invalid. Register it for every
|
|
107
|
+
* route, BEFORE `wardenMiddleware` and any tenant middleware that reads
|
|
108
|
+
* `ctx.auth.user`.
|
|
109
|
+
*
|
|
110
|
+
* Why it exists: `wardenMiddleware` only authenticates routes carrying `@Guard`
|
|
111
|
+
* decorator metadata (`ctx.route.controller/action`). Inline routes — a
|
|
112
|
+
* `router.post('/rpc', handler)`, relay frames, any `RouteBuilder.guard()`
|
|
113
|
+
* route — expose no controller/action, so warden never populates `ctx.auth` for
|
|
114
|
+
* them and a downstream enforcement (Ream's route-level guard check, or the
|
|
115
|
+
* RpcRouter's per-method `.guard()`) rejects every call even with a valid token.
|
|
116
|
+
* silentAuth fills `ctx.auth` so that downstream enforcement can do its job; it
|
|
117
|
+
* decides nothing itself — exactly Adonis (`silent_auth` populates, the `auth`
|
|
118
|
+
* middleware / route guard enforces).
|
|
119
|
+
*
|
|
120
|
+
* Uses the AuthManager's DEFAULT strategy (Adonis's "default guard"). A missing
|
|
121
|
+
* AuthManager, absent credentials, or a failed/crashed verify all leave the
|
|
122
|
+
* request as a guest (`ctx.auth` unset) — silent auth is non-enforcing.
|
|
123
|
+
*/
|
|
124
|
+
export declare function silentAuth(ctx: WardenContext, next: WardenNext): Promise<void>;
|
|
77
125
|
/**
|
|
78
126
|
* The abilities/policies/scope-resolver a per-request Bouncer is built from.
|
|
79
127
|
* Registered once by `WardenProvider` (from `config.auth`) under the container
|
package/dist/middleware.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../src/middleware.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAEN,KAAK,UAAU,EAGf,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../src/middleware.ts"],"names":[],"mappings":"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"}
|
package/dist/middleware.js
CHANGED
|
@@ -61,9 +61,12 @@ export async function wardenMiddleware(ctx, next) {
|
|
|
61
61
|
}
|
|
62
62
|
const auth = resolvedAuth;
|
|
63
63
|
// Read guard metadata from the route handler (if declared via decorators).
|
|
64
|
-
// Ream
|
|
65
|
-
|
|
66
|
-
|
|
64
|
+
// Ream (like Adonis) exposes the controller/method under `ctx.route`; fall
|
|
65
|
+
// back to top-level only for hosts that expose them flat. Reading the wrong
|
|
66
|
+
// place silently yields `[]` guards → guarded routes treated as public
|
|
67
|
+
// (fail-open) — the exact bug this precedence prevents.
|
|
68
|
+
const controller = ctx.route?.controller ?? ctx.controller;
|
|
69
|
+
const action = ctx.route?.action ?? ctx.action;
|
|
67
70
|
const strategies = controller && action ? getGuardMetadata(controller, action) : [];
|
|
68
71
|
// No guard on this route — pass through (public endpoint).
|
|
69
72
|
if (strategies.length === 0) {
|
|
@@ -160,6 +163,73 @@ export async function wardenMiddleware(ctx, next) {
|
|
|
160
163
|
ctx.auth = result;
|
|
161
164
|
await next();
|
|
162
165
|
}
|
|
166
|
+
/**
|
|
167
|
+
* Silent auth middleware (AdonisJS `silent_auth` parity) — a GLOBAL middleware
|
|
168
|
+
* that populates `ctx.auth` from the request's credentials when they're valid,
|
|
169
|
+
* and NEVER throws / 401s when they're absent or invalid. Register it for every
|
|
170
|
+
* route, BEFORE `wardenMiddleware` and any tenant middleware that reads
|
|
171
|
+
* `ctx.auth.user`.
|
|
172
|
+
*
|
|
173
|
+
* Why it exists: `wardenMiddleware` only authenticates routes carrying `@Guard`
|
|
174
|
+
* decorator metadata (`ctx.route.controller/action`). Inline routes — a
|
|
175
|
+
* `router.post('/rpc', handler)`, relay frames, any `RouteBuilder.guard()`
|
|
176
|
+
* route — expose no controller/action, so warden never populates `ctx.auth` for
|
|
177
|
+
* them and a downstream enforcement (Ream's route-level guard check, or the
|
|
178
|
+
* RpcRouter's per-method `.guard()`) rejects every call even with a valid token.
|
|
179
|
+
* silentAuth fills `ctx.auth` so that downstream enforcement can do its job; it
|
|
180
|
+
* decides nothing itself — exactly Adonis (`silent_auth` populates, the `auth`
|
|
181
|
+
* middleware / route guard enforces).
|
|
182
|
+
*
|
|
183
|
+
* Uses the AuthManager's DEFAULT strategy (Adonis's "default guard"). A missing
|
|
184
|
+
* AuthManager, absent credentials, or a failed/crashed verify all leave the
|
|
185
|
+
* request as a guest (`ctx.auth` unset) — silent auth is non-enforcing.
|
|
186
|
+
*/
|
|
187
|
+
export async function silentAuth(ctx, next) {
|
|
188
|
+
const resolvedAuth = resolveFromCtx(ctx, AuthManager);
|
|
189
|
+
// Non-enforcing: a host without warden wired runs as guest. (Enforcement
|
|
190
|
+
// middlewares fail CLOSED on a missing AuthManager; silent auth does not.)
|
|
191
|
+
if (!(resolvedAuth instanceof AuthManager)) {
|
|
192
|
+
await next();
|
|
193
|
+
return;
|
|
194
|
+
}
|
|
195
|
+
const auth = resolvedAuth;
|
|
196
|
+
const headers = ctx.request.headers();
|
|
197
|
+
const authHeader = headers.authorization ?? "";
|
|
198
|
+
const bearerToken = authHeader.startsWith("Bearer ")
|
|
199
|
+
? authHeader.slice(7)
|
|
200
|
+
: "";
|
|
201
|
+
const apiKeyHeader = (() => {
|
|
202
|
+
try {
|
|
203
|
+
const s = auth.getStrategy("api-key");
|
|
204
|
+
const name = "headerName" in s ? s.headerName : undefined;
|
|
205
|
+
return typeof name === "string" ? name : "x-api-key";
|
|
206
|
+
}
|
|
207
|
+
catch {
|
|
208
|
+
return "x-api-key";
|
|
209
|
+
}
|
|
210
|
+
})();
|
|
211
|
+
const apiKey = headers[apiKeyHeader.toLowerCase()] ?? "";
|
|
212
|
+
const strategy = auth.defaultStrategyName;
|
|
213
|
+
const hasSessionStrategy = strategy === "session";
|
|
214
|
+
// No credentials on the wire (and not a session strategy) → guest, no-op.
|
|
215
|
+
if (!bearerToken && !apiKey && !hasSessionStrategy) {
|
|
216
|
+
await next();
|
|
217
|
+
return;
|
|
218
|
+
}
|
|
219
|
+
// Reuse the same per-strategy verification `wardenMiddleware` uses, but only
|
|
220
|
+
// for the default strategy, and swallow the outcome: a failed/crashed attempt
|
|
221
|
+
// must NOT surface as 401/500 here — silent auth only ever populates or skips.
|
|
222
|
+
const { result } = await tryAuthenticate(auth, [strategy], {
|
|
223
|
+
bearerToken,
|
|
224
|
+
apiKey,
|
|
225
|
+
session: ctx.session,
|
|
226
|
+
hasSessionStrategy,
|
|
227
|
+
});
|
|
228
|
+
if (result?.authenticated && result.user) {
|
|
229
|
+
ctx.auth = result;
|
|
230
|
+
}
|
|
231
|
+
await next();
|
|
232
|
+
}
|
|
163
233
|
/**
|
|
164
234
|
* Bouncer initializer (Epic 56.6) — a GLOBAL middleware (register it for every
|
|
165
235
|
* route, after `wardenMiddleware`). It builds the per-request {@link Bouncer}
|
package/dist/middleware.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"middleware.js","sourceRoot":"","sources":["../src/middleware.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EACN,WAAW,EAGX,eAAe,GACf,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAG/C,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EACN,gBAAgB,EAChB,qBAAqB,EACrB,qBAAqB,EACrB,eAAe,GACf,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAQ5D,SAAS,oBAAoB,CAC5B,QAAsB;IAEtB,OAAO,CACN,OAAQ,QAAgC,CAAC,iBAAiB,KAAK,UAAU,CACzE,CAAC;AACH,CAAC;
|
|
1
|
+
{"version":3,"file":"middleware.js","sourceRoot":"","sources":["../src/middleware.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `@c9up/warden/silent-auth` — the lazy default-class entry for the silent auth
|
|
3
|
+
* middleware, so apps register it AdonisJS-style:
|
|
4
|
+
*
|
|
5
|
+
* // start/kernel.ts — BEFORE the enforcing `@c9up/warden/middleware`
|
|
6
|
+
* server.use([() => import('@c9up/warden/silent-auth')])
|
|
7
|
+
*
|
|
8
|
+
* Ream's lazy middleware resolver does `new mod.default().handle(ctx, next)`.
|
|
9
|
+
* The logic lives in `./middleware` (alongside `wardenMiddleware`, sharing the
|
|
10
|
+
* same strategy-verification path); this is the thin default-class wrapper, the
|
|
11
|
+
* same shape `./middleware` exposes for `WardenMiddleware`.
|
|
12
|
+
*/
|
|
13
|
+
import { silentAuth, type WardenContext } from "./middleware.js";
|
|
14
|
+
export { silentAuth };
|
|
15
|
+
export default class SilentAuthMiddleware {
|
|
16
|
+
handle(ctx: WardenContext, next: () => Promise<void> | void): Promise<void>;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=silent-auth.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"silent-auth.d.ts","sourceRoot":"","sources":["../src/silent-auth.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,EAAE,UAAU,EAAE,KAAK,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEjE,OAAO,EAAE,UAAU,EAAE,CAAC;AAEtB,MAAM,CAAC,OAAO,OAAO,oBAAoB;IACxC,MAAM,CAAC,GAAG,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;CAG3E"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `@c9up/warden/silent-auth` — the lazy default-class entry for the silent auth
|
|
3
|
+
* middleware, so apps register it AdonisJS-style:
|
|
4
|
+
*
|
|
5
|
+
* // start/kernel.ts — BEFORE the enforcing `@c9up/warden/middleware`
|
|
6
|
+
* server.use([() => import('@c9up/warden/silent-auth')])
|
|
7
|
+
*
|
|
8
|
+
* Ream's lazy middleware resolver does `new mod.default().handle(ctx, next)`.
|
|
9
|
+
* The logic lives in `./middleware` (alongside `wardenMiddleware`, sharing the
|
|
10
|
+
* same strategy-verification path); this is the thin default-class wrapper, the
|
|
11
|
+
* same shape `./middleware` exposes for `WardenMiddleware`.
|
|
12
|
+
*/
|
|
13
|
+
import { silentAuth } from "./middleware.js";
|
|
14
|
+
export { silentAuth };
|
|
15
|
+
export default class SilentAuthMiddleware {
|
|
16
|
+
handle(ctx, next) {
|
|
17
|
+
return silentAuth(ctx, next);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=silent-auth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"silent-auth.js","sourceRoot":"","sources":["../src/silent-auth.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,EAAE,UAAU,EAAsB,MAAM,iBAAiB,CAAC;AAEjE,OAAO,EAAE,UAAU,EAAE,CAAC;AAEtB,MAAM,CAAC,OAAO,OAAO,oBAAoB;IACxC,MAAM,CAAC,GAAkB,EAAE,IAAgC;QAC1D,OAAO,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IAC9B,CAAC;CACD"}
|
package/index.darwin-arm64.node
CHANGED
|
Binary file
|
package/index.darwin-x64.node
CHANGED
|
Binary file
|
|
Binary file
|
package/index.linux-x64-gnu.node
CHANGED
|
Binary file
|
|
Binary file
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@c9up/warden",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.11",
|
|
4
4
|
"description": "Warden — Authentication & authorization for the Ream framework",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -31,6 +31,10 @@
|
|
|
31
31
|
"types": "./dist/middleware.d.ts",
|
|
32
32
|
"import": "./dist/middleware.js"
|
|
33
33
|
},
|
|
34
|
+
"./silent-auth": {
|
|
35
|
+
"types": "./dist/silent-auth.d.ts",
|
|
36
|
+
"import": "./dist/silent-auth.js"
|
|
37
|
+
},
|
|
34
38
|
"./config": {
|
|
35
39
|
"types": "./dist/config.d.ts",
|
|
36
40
|
"import": "./dist/config.js"
|
package/src/AuthManager.ts
CHANGED
|
@@ -242,6 +242,14 @@ export class AuthManager {
|
|
|
242
242
|
return strategy;
|
|
243
243
|
}
|
|
244
244
|
|
|
245
|
+
/**
|
|
246
|
+
* Name of the default strategy (Adonis's "default guard"). Used by
|
|
247
|
+
* `silentAuth` to pick which strategy to attempt when a route declares none.
|
|
248
|
+
*/
|
|
249
|
+
get defaultStrategyName(): string {
|
|
250
|
+
return this.defaultStrategy;
|
|
251
|
+
}
|
|
252
|
+
|
|
245
253
|
/** Register a new strategy at runtime. */
|
|
246
254
|
registerStrategy(name: string, strategy: AuthStrategy): void {
|
|
247
255
|
this.strategies.set(name, strategy);
|
package/src/middleware.ts
CHANGED
|
@@ -57,7 +57,9 @@ function hasVerifyWithContext(
|
|
|
57
57
|
type ResolvableToken =
|
|
58
58
|
| string
|
|
59
59
|
| symbol
|
|
60
|
-
| (abstract new (
|
|
60
|
+
| (abstract new (
|
|
61
|
+
...args: never[]
|
|
62
|
+
) => unknown);
|
|
61
63
|
|
|
62
64
|
/**
|
|
63
65
|
* Per-request IoC resolver Ream exposes as `ctx.containerResolver` (Adonis
|
|
@@ -70,6 +72,20 @@ interface ContainerResolver {
|
|
|
70
72
|
make(token: ResolvableToken): unknown;
|
|
71
73
|
}
|
|
72
74
|
|
|
75
|
+
/**
|
|
76
|
+
* Agnostic authorization slot — structurally Ream's `Authorizer` interface (and
|
|
77
|
+
* Adonis's bouncer contract): `allows` / `denies` / `authorize`. Typed as the
|
|
78
|
+
* interface, NOT the concrete `Bouncer`, so a real Ream `HttpContext` — whose
|
|
79
|
+
* `bouncer` is this same agnostic shape — is assignable to `WardenContext`
|
|
80
|
+
* without warden importing `@c9up/ream`. `initializeBouncer` fills the slot with
|
|
81
|
+
* a concrete `Bouncer`, which satisfies this contract.
|
|
82
|
+
*/
|
|
83
|
+
interface Authorizer {
|
|
84
|
+
allows(ability: string, ...args: unknown[]): Promise<boolean>;
|
|
85
|
+
denies(ability: string, ...args: unknown[]): Promise<boolean>;
|
|
86
|
+
authorize(ability: string, ...args: unknown[]): Promise<void>;
|
|
87
|
+
}
|
|
88
|
+
|
|
73
89
|
export interface WardenContext {
|
|
74
90
|
request: {
|
|
75
91
|
/** Ream's `HttpContext` exposes headers as a METHOD, not a property. */
|
|
@@ -86,9 +102,19 @@ export interface WardenContext {
|
|
|
86
102
|
json: (data: unknown) => void;
|
|
87
103
|
};
|
|
88
104
|
/**
|
|
89
|
-
*
|
|
90
|
-
*
|
|
91
|
-
*
|
|
105
|
+
* Matched-route info — Ream (like Adonis) exposes the controller class +
|
|
106
|
+
* method under `ctx.route` (`ctx.route.controller` / `ctx.route.action`),
|
|
107
|
+
* NOT top-level. This is the primary source the guard-metadata lookup reads.
|
|
108
|
+
* Absent for inline-function routes. (context7 `/adonisjs/v7-docs`: "access
|
|
109
|
+
* the currently matched route via `ctx.route`".)
|
|
110
|
+
*/
|
|
111
|
+
route?: {
|
|
112
|
+
controller?: object;
|
|
113
|
+
action?: string | symbol;
|
|
114
|
+
};
|
|
115
|
+
/**
|
|
116
|
+
* Top-level controller/action — kept only as a FALLBACK for hosts that
|
|
117
|
+
* expose them flat. Ream uses `ctx.route` (above); the lookup prefers it.
|
|
92
118
|
*/
|
|
93
119
|
controller?: object;
|
|
94
120
|
action?: string | symbol;
|
|
@@ -96,8 +122,12 @@ export interface WardenContext {
|
|
|
96
122
|
session?: SessionStore;
|
|
97
123
|
/** Set by the middleware after successful auth (Ream's `auth` slot). */
|
|
98
124
|
auth?: AuthResult;
|
|
99
|
-
/**
|
|
100
|
-
|
|
125
|
+
/**
|
|
126
|
+
* Per-request authorization entry point — set by `initializeBouncer`. Typed
|
|
127
|
+
* as the agnostic {@link Authorizer} contract (Ream's `ctx.bouncer` slot),
|
|
128
|
+
* filled with a concrete `Bouncer` at runtime.
|
|
129
|
+
*/
|
|
130
|
+
bouncer?: Authorizer;
|
|
101
131
|
}
|
|
102
132
|
|
|
103
133
|
/**
|
|
@@ -145,9 +175,12 @@ export async function wardenMiddleware(ctx: WardenContext, next: WardenNext) {
|
|
|
145
175
|
const auth = resolvedAuth;
|
|
146
176
|
|
|
147
177
|
// Read guard metadata from the route handler (if declared via decorators).
|
|
148
|
-
// Ream
|
|
149
|
-
|
|
150
|
-
|
|
178
|
+
// Ream (like Adonis) exposes the controller/method under `ctx.route`; fall
|
|
179
|
+
// back to top-level only for hosts that expose them flat. Reading the wrong
|
|
180
|
+
// place silently yields `[]` guards → guarded routes treated as public
|
|
181
|
+
// (fail-open) — the exact bug this precedence prevents.
|
|
182
|
+
const controller = ctx.route?.controller ?? ctx.controller;
|
|
183
|
+
const action = ctx.route?.action ?? ctx.action;
|
|
151
184
|
const strategies =
|
|
152
185
|
controller && action ? getGuardMetadata(controller, action) : [];
|
|
153
186
|
|
|
@@ -265,6 +298,76 @@ export async function wardenMiddleware(ctx: WardenContext, next: WardenNext) {
|
|
|
265
298
|
await next();
|
|
266
299
|
}
|
|
267
300
|
|
|
301
|
+
/**
|
|
302
|
+
* Silent auth middleware (AdonisJS `silent_auth` parity) — a GLOBAL middleware
|
|
303
|
+
* that populates `ctx.auth` from the request's credentials when they're valid,
|
|
304
|
+
* and NEVER throws / 401s when they're absent or invalid. Register it for every
|
|
305
|
+
* route, BEFORE `wardenMiddleware` and any tenant middleware that reads
|
|
306
|
+
* `ctx.auth.user`.
|
|
307
|
+
*
|
|
308
|
+
* Why it exists: `wardenMiddleware` only authenticates routes carrying `@Guard`
|
|
309
|
+
* decorator metadata (`ctx.route.controller/action`). Inline routes — a
|
|
310
|
+
* `router.post('/rpc', handler)`, relay frames, any `RouteBuilder.guard()`
|
|
311
|
+
* route — expose no controller/action, so warden never populates `ctx.auth` for
|
|
312
|
+
* them and a downstream enforcement (Ream's route-level guard check, or the
|
|
313
|
+
* RpcRouter's per-method `.guard()`) rejects every call even with a valid token.
|
|
314
|
+
* silentAuth fills `ctx.auth` so that downstream enforcement can do its job; it
|
|
315
|
+
* decides nothing itself — exactly Adonis (`silent_auth` populates, the `auth`
|
|
316
|
+
* middleware / route guard enforces).
|
|
317
|
+
*
|
|
318
|
+
* Uses the AuthManager's DEFAULT strategy (Adonis's "default guard"). A missing
|
|
319
|
+
* AuthManager, absent credentials, or a failed/crashed verify all leave the
|
|
320
|
+
* request as a guest (`ctx.auth` unset) — silent auth is non-enforcing.
|
|
321
|
+
*/
|
|
322
|
+
export async function silentAuth(ctx: WardenContext, next: WardenNext) {
|
|
323
|
+
const resolvedAuth = resolveFromCtx(ctx, AuthManager);
|
|
324
|
+
// Non-enforcing: a host without warden wired runs as guest. (Enforcement
|
|
325
|
+
// middlewares fail CLOSED on a missing AuthManager; silent auth does not.)
|
|
326
|
+
if (!(resolvedAuth instanceof AuthManager)) {
|
|
327
|
+
await next();
|
|
328
|
+
return;
|
|
329
|
+
}
|
|
330
|
+
const auth = resolvedAuth;
|
|
331
|
+
|
|
332
|
+
const headers = ctx.request.headers();
|
|
333
|
+
const authHeader = headers.authorization ?? "";
|
|
334
|
+
const bearerToken = authHeader.startsWith("Bearer ")
|
|
335
|
+
? authHeader.slice(7)
|
|
336
|
+
: "";
|
|
337
|
+
const apiKeyHeader = (() => {
|
|
338
|
+
try {
|
|
339
|
+
const s = auth.getStrategy("api-key");
|
|
340
|
+
const name = "headerName" in s ? s.headerName : undefined;
|
|
341
|
+
return typeof name === "string" ? name : "x-api-key";
|
|
342
|
+
} catch {
|
|
343
|
+
return "x-api-key";
|
|
344
|
+
}
|
|
345
|
+
})();
|
|
346
|
+
const apiKey = headers[apiKeyHeader.toLowerCase()] ?? "";
|
|
347
|
+
|
|
348
|
+
const strategy = auth.defaultStrategyName;
|
|
349
|
+
const hasSessionStrategy = strategy === "session";
|
|
350
|
+
// No credentials on the wire (and not a session strategy) → guest, no-op.
|
|
351
|
+
if (!bearerToken && !apiKey && !hasSessionStrategy) {
|
|
352
|
+
await next();
|
|
353
|
+
return;
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
// Reuse the same per-strategy verification `wardenMiddleware` uses, but only
|
|
357
|
+
// for the default strategy, and swallow the outcome: a failed/crashed attempt
|
|
358
|
+
// must NOT surface as 401/500 here — silent auth only ever populates or skips.
|
|
359
|
+
const { result } = await tryAuthenticate(auth, [strategy], {
|
|
360
|
+
bearerToken,
|
|
361
|
+
apiKey,
|
|
362
|
+
session: ctx.session,
|
|
363
|
+
hasSessionStrategy,
|
|
364
|
+
});
|
|
365
|
+
if (result?.authenticated && result.user) {
|
|
366
|
+
ctx.auth = result;
|
|
367
|
+
}
|
|
368
|
+
await next();
|
|
369
|
+
}
|
|
370
|
+
|
|
268
371
|
/**
|
|
269
372
|
* The abilities/policies/scope-resolver a per-request Bouncer is built from.
|
|
270
373
|
* Registered once by `WardenProvider` (from `config.auth`) under the container
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `@c9up/warden/silent-auth` — the lazy default-class entry for the silent auth
|
|
3
|
+
* middleware, so apps register it AdonisJS-style:
|
|
4
|
+
*
|
|
5
|
+
* // start/kernel.ts — BEFORE the enforcing `@c9up/warden/middleware`
|
|
6
|
+
* server.use([() => import('@c9up/warden/silent-auth')])
|
|
7
|
+
*
|
|
8
|
+
* Ream's lazy middleware resolver does `new mod.default().handle(ctx, next)`.
|
|
9
|
+
* The logic lives in `./middleware` (alongside `wardenMiddleware`, sharing the
|
|
10
|
+
* same strategy-verification path); this is the thin default-class wrapper, the
|
|
11
|
+
* same shape `./middleware` exposes for `WardenMiddleware`.
|
|
12
|
+
*/
|
|
13
|
+
import { silentAuth, type WardenContext } from "./middleware.js";
|
|
14
|
+
|
|
15
|
+
export { silentAuth };
|
|
16
|
+
|
|
17
|
+
export default class SilentAuthMiddleware {
|
|
18
|
+
handle(ctx: WardenContext, next: () => Promise<void> | void): Promise<void> {
|
|
19
|
+
return silentAuth(ctx, next);
|
|
20
|
+
}
|
|
21
|
+
}
|