@owlmeans/server-auth 0.1.18-rc.6 → 0.1.18-rc.60
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/README.md +216 -38
- package/agent-meta/manifest.json +10 -3
- package/agent-meta/skills/server-auth/SKILL.md +161 -22
- package/agent-meta/skills/supervisor-auth/SKILL.md +128 -0
- package/build/actions/service.d.ts +6 -2
- package/build/actions/service.d.ts.map +1 -1
- package/build/actions/service.js +5 -4
- package/build/actions/service.js.map +1 -1
- package/build/actions/types.local.d.ts +6 -0
- package/build/actions/types.local.d.ts.map +1 -0
- package/build/actions/types.local.js +2 -0
- package/build/actions/types.local.js.map +1 -0
- package/build/entrypoints.d.ts +5 -0
- package/build/entrypoints.d.ts.map +1 -0
- package/build/entrypoints.js +9 -0
- package/build/entrypoints.js.map +1 -0
- package/build/index.d.ts +2 -1
- package/build/index.d.ts.map +1 -1
- package/build/index.js +2 -1
- package/build/index.js.map +1 -1
- package/build/manager/actions/authenticate.d.ts +8 -0
- package/build/manager/actions/authenticate.d.ts.map +1 -0
- package/build/manager/actions/authenticate.js +5 -0
- package/build/manager/actions/authenticate.js.map +1 -0
- package/build/manager/actions/index.d.ts +3 -1
- package/build/manager/actions/index.d.ts.map +1 -1
- package/build/manager/actions/index.js +3 -1
- package/build/manager/actions/index.js.map +1 -1
- package/build/manager/actions/init.d.ts +8 -0
- package/build/manager/actions/init.d.ts.map +1 -0
- package/build/manager/actions/init.js +5 -0
- package/build/manager/actions/init.js.map +1 -0
- package/build/manager/actions/manager.d.ts +17 -5
- package/build/manager/actions/manager.d.ts.map +1 -1
- package/build/manager/actions/manager.js +7 -6
- package/build/manager/actions/manager.js.map +1 -1
- package/build/manager/actions/rely.d.ts +8 -0
- package/build/manager/actions/rely.d.ts.map +1 -0
- package/build/manager/actions/rely.js +7 -0
- package/build/manager/actions/rely.js.map +1 -0
- package/build/manager/consts.local.d.ts +2 -0
- package/build/manager/consts.local.d.ts.map +1 -0
- package/build/manager/consts.local.js +2 -0
- package/build/manager/consts.local.js.map +1 -0
- package/build/manager/context.d.ts.map +1 -1
- package/build/manager/context.js +0 -1
- package/build/manager/context.js.map +1 -1
- package/build/manager/entrypoints.d.ts +9 -0
- package/build/manager/entrypoints.d.ts.map +1 -0
- package/build/manager/entrypoints.js +16 -0
- package/build/manager/entrypoints.js.map +1 -0
- package/build/manager/exports.d.ts +1 -2
- package/build/manager/exports.d.ts.map +1 -1
- package/build/manager/exports.js +1 -2
- package/build/manager/exports.js.map +1 -1
- package/build/manager/index.d.ts +1 -1
- package/build/manager/index.d.ts.map +1 -1
- package/build/manager/index.js +1 -1
- package/build/manager/index.js.map +1 -1
- package/build/manager/main.js +2 -2
- package/build/manager/main.js.map +1 -1
- package/build/manager/model.d.ts.map +1 -1
- package/build/manager/model.js +71 -32
- package/build/manager/model.js.map +1 -1
- package/build/manager/plugins/basic-ed25519.d.ts +1 -1
- package/build/manager/plugins/basic-ed25519.d.ts.map +1 -1
- package/build/manager/plugins/basic-ed25519.js +6 -6
- package/build/manager/plugins/basic-ed25519.js.map +1 -1
- package/build/manager/plugins/basic-rely.d.ts +1 -1
- package/build/manager/plugins/basic-rely.d.ts.map +1 -1
- package/build/manager/plugins/basic-rely.js +11 -8
- package/build/manager/plugins/basic-rely.js.map +1 -1
- package/build/manager/plugins/consts.d.ts +8 -0
- package/build/manager/plugins/consts.d.ts.map +1 -0
- package/build/manager/plugins/consts.js +9 -0
- package/build/manager/plugins/consts.js.map +1 -0
- package/build/manager/plugins/export.d.ts +5 -0
- package/build/manager/plugins/export.d.ts.map +1 -1
- package/build/manager/plugins/export.js +4 -0
- package/build/manager/plugins/export.js.map +1 -1
- package/build/manager/plugins/index.d.ts +3 -4
- package/build/manager/plugins/index.d.ts.map +1 -1
- package/build/manager/plugins/index.js +6 -6
- package/build/manager/plugins/index.js.map +1 -1
- package/build/manager/plugins/re-captcha/consts.d.ts +7 -0
- package/build/manager/plugins/re-captcha/consts.d.ts.map +1 -0
- package/build/manager/plugins/re-captcha/consts.js +7 -0
- package/build/manager/plugins/re-captcha/consts.js.map +1 -0
- package/build/manager/plugins/re-captcha/consts.local.d.ts +7 -0
- package/build/manager/plugins/re-captcha/consts.local.d.ts.map +1 -0
- package/build/manager/plugins/re-captcha/consts.local.js +9 -0
- package/build/manager/plugins/re-captcha/consts.local.js.map +1 -0
- package/build/manager/plugins/re-captcha/policy.d.ts +3 -0
- package/build/manager/plugins/re-captcha/policy.d.ts.map +1 -0
- package/build/manager/plugins/re-captcha/policy.js +44 -0
- package/build/manager/plugins/re-captcha/policy.js.map +1 -0
- package/build/manager/plugins/re-captcha/types.d.ts +79 -0
- package/build/manager/plugins/re-captcha/types.d.ts.map +1 -0
- package/build/manager/plugins/re-captcha/types.js +2 -0
- package/build/manager/plugins/re-captcha/types.js.map +1 -0
- package/build/manager/plugins/re-captcha/verifier.d.ts +12 -0
- package/build/manager/plugins/re-captcha/verifier.d.ts.map +1 -0
- package/build/manager/plugins/re-captcha/verifier.js +62 -0
- package/build/manager/plugins/re-captcha/verifier.js.map +1 -0
- package/build/manager/plugins/re-captcha.d.ts +10 -1
- package/build/manager/plugins/re-captcha.d.ts.map +1 -1
- package/build/manager/plugins/re-captcha.js +50 -37
- package/build/manager/plugins/re-captcha.js.map +1 -1
- package/build/manager/plugins/replay-policy.d.ts +8 -0
- package/build/manager/plugins/replay-policy.d.ts.map +1 -0
- package/build/manager/plugins/replay-policy.js +9 -0
- package/build/manager/plugins/replay-policy.js.map +1 -0
- package/build/manager/plugins/supervisor.d.ts +1 -2
- package/build/manager/plugins/supervisor.d.ts.map +1 -1
- package/build/manager/plugins/supervisor.js +6 -6
- package/build/manager/plugins/supervisor.js.map +1 -1
- package/build/manager/plugins/types.d.ts +22 -14
- package/build/manager/plugins/types.d.ts.map +1 -1
- package/build/manager/plugins/utils.d.ts +5 -4
- package/build/manager/plugins/utils.d.ts.map +1 -1
- package/build/manager/plugins/utils.js +20 -15
- package/build/manager/plugins/utils.js.map +1 -1
- package/build/manager/rely/flow.d.ts.map +1 -1
- package/build/manager/rely/flow.js +13 -11
- package/build/manager/rely/flow.js.map +1 -1
- package/build/manager/rely.d.ts.map +1 -1
- package/build/manager/rely.js.map +1 -1
- package/build/manager/supervisor.d.ts +4 -45
- package/build/manager/supervisor.d.ts.map +1 -1
- package/build/manager/supervisor.js +5 -5
- package/build/manager/supervisor.js.map +1 -1
- package/build/manager/types.d.ts +41 -1
- package/build/manager/types.d.ts.map +1 -1
- package/build/manager/types.local.d.ts +4 -0
- package/build/manager/types.local.d.ts.map +1 -0
- package/build/manager/types.local.js +2 -0
- package/build/manager/types.local.js.map +1 -0
- package/build/model/rely/consumer.d.ts +3 -1
- package/build/model/rely/consumer.d.ts.map +1 -1
- package/build/model/rely/consumer.js.map +1 -1
- package/build/model/rely/peer.d.ts.map +1 -1
- package/build/model/rely/peer.js +7 -7
- package/build/model/rely/peer.js.map +1 -1
- package/build/model/rely/provider.d.ts +3 -1
- package/build/model/rely/provider.d.ts.map +1 -1
- package/build/model/rely/provider.js.map +1 -1
- package/build/re-captcha/guard.d.ts +12 -0
- package/build/re-captcha/guard.d.ts.map +1 -0
- package/build/re-captcha/guard.js +43 -0
- package/build/re-captcha/guard.js.map +1 -0
- package/build/re-captcha/index.d.ts +4 -0
- package/build/re-captcha/index.d.ts.map +1 -0
- package/build/re-captcha/index.js +3 -0
- package/build/re-captcha/index.js.map +1 -0
- package/build/re-captcha/token.d.ts +6 -0
- package/build/re-captcha/token.d.ts.map +1 -0
- package/build/re-captcha/token.js +74 -0
- package/build/re-captcha/token.js.map +1 -0
- package/build/re-captcha/types.d.ts +44 -0
- package/build/re-captcha/types.d.ts.map +1 -0
- package/build/re-captcha/types.js +2 -0
- package/build/re-captcha/types.js.map +1 -0
- package/build/service.d.ts +2 -3
- package/build/service.d.ts.map +1 -1
- package/build/service.js +136 -13
- package/build/service.js.map +1 -1
- package/build/types.local.d.ts +4 -0
- package/build/types.local.d.ts.map +1 -0
- package/build/types.local.js +2 -0
- package/build/types.local.js.map +1 -0
- package/package.json +32 -29
- package/src/actions/service.ts +10 -12
- package/src/actions/types.local.ts +6 -0
- package/src/entrypoints.ts +12 -0
- package/src/index.ts +2 -2
- package/src/manager/README.md +14 -18
- package/src/manager/actions/authenticate.ts +12 -0
- package/src/manager/actions/index.ts +3 -1
- package/src/manager/actions/init.ts +12 -0
- package/src/manager/actions/rely.ts +12 -0
- package/src/manager/consts.local.ts +1 -0
- package/src/manager/context.ts +0 -2
- package/src/manager/entrypoints.ts +17 -0
- package/src/manager/exports.ts +1 -2
- package/src/manager/index.ts +1 -1
- package/src/manager/main.ts +2 -2
- package/src/manager/model.ts +82 -41
- package/src/manager/plugins/basic-ed25519.ts +8 -8
- package/src/manager/plugins/basic-rely.ts +14 -9
- package/src/manager/plugins/consts.ts +7 -0
- package/src/manager/plugins/export.ts +5 -0
- package/src/manager/plugins/index.ts +10 -12
- package/src/manager/plugins/re-captcha/consts.local.ts +8 -0
- package/src/manager/plugins/re-captcha/consts.ts +8 -0
- package/src/manager/plugins/re-captcha/policy.ts +56 -0
- package/src/manager/plugins/re-captcha/types.ts +85 -0
- package/src/manager/plugins/re-captcha/verifier.ts +74 -0
- package/src/manager/plugins/re-captcha.ts +58 -43
- package/src/manager/plugins/supervisor.ts +9 -11
- package/src/manager/plugins/types.ts +23 -14
- package/src/manager/plugins/utils.ts +24 -14
- package/src/manager/rely/flow.ts +14 -11
- package/src/manager/rely.ts +2 -5
- package/src/manager/supervisor.ts +8 -54
- package/src/manager/types.local.ts +5 -0
- package/src/manager/types.ts +46 -1
- package/src/model/rely/consumer.ts +3 -1
- package/src/model/rely/peer.ts +8 -8
- package/src/model/rely/provider.ts +3 -1
- package/src/re-captcha/guard.ts +52 -0
- package/src/re-captcha/index.ts +3 -0
- package/src/re-captcha/token.ts +89 -0
- package/src/re-captcha/types.ts +45 -0
- package/src/service.ts +133 -19
- package/src/types.local.ts +5 -0
- package/tests/context.ts +3 -2
- package/tests/re-captcha.spec.ts +298 -0
- package/tests/replay-policy.spec.ts +36 -0
- package/tests/supervisor.spec.ts +6 -4
- package/build/.gitkeep +0 -0
- package/build/manager/modules.d.ts +0 -2
- package/build/manager/modules.d.ts.map +0 -1
- package/build/manager/modules.js +0 -21
- package/build/manager/modules.js.map +0 -1
- package/build/modules.d.ts +0 -3
- package/build/modules.d.ts.map +0 -1
- package/build/modules.js +0 -11
- package/build/modules.js.map +0 -1
- package/src/manager/actions/manager.ts +0 -23
- package/src/manager/modules.ts +0 -29
- package/src/modules.ts +0 -17
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/manager/plugins/re-captcha/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AACpD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAE3D,mFAAmF;AACnF,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAA;IAChB,iEAAiE;IACjE,YAAY,EAAE,MAAM,CAAA;IACpB,oDAAoD;IACpD,QAAQ,EAAE,MAAM,CAAA;IAChB,2DAA2D;IAC3D,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,oFAAoF;IACpF,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,aAAa,CAAC,EAAE,MAAM,EAAE,CAAA;CACzB;AAED,qGAAqG;AACrG,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED;;;GAGG;AACH,MAAM,WAAW,wBAAyB,SAAQ,kBAAkB;IAClE;;;;OAIG;IACH,MAAM,EAAE,CAAC,OAAO,EAAE,gBAAgB,KAAK,OAAO,CAAC,iBAAiB,CAAC,CAAA;CAClE;AAED,uFAAuF;AACvF,MAAM,WAAW,cAAc;IAC7B,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAA;CACpD;AAED,MAAM,WAAW,wBAAwB;IACvC,iFAAiF;IACjF,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,mCAAmC;IACnC,KAAK,CAAC,EAAE,cAAc,CAAA;IACtB,qFAAqF;IACrF,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED;;;GAGG;AACH,MAAM,WAAW,qBAAsB,SAAQ,YAAY;IACzD,iGAAiG;IACjG,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,kGAAkG;IAClG,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IAC1B,mGAAmG;IACnG,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,gFAAgF;AAChF,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,MAAM,EAAE,qBAAqB,CAAA;IACtC,uDAAuD;IACvD,SAAS,EAAE,MAAM,MAAM,EAAE,CAAA;IACzB;;;;OAIG;IACH,QAAQ,EAAE,MAAM,MAAM,GAAG,IAAI,CAAA;IAC7B,+CAA+C;IAC/C,OAAO,EAAE,MAAM,MAAM,EAAE,CAAA;IACvB;;;;;OAKG;IACH,MAAM,EAAE,CAAC,QAAQ,EAAE,iBAAiB,KAAK,IAAI,CAAA;CAC9C"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/manager/plugins/re-captcha/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { BasicConfig, BasicContext } from '@owlmeans/context';
|
|
2
|
+
import type { ReCaptchaVerifierOptions, ReCaptchaVerifierService } from './types.js';
|
|
3
|
+
/**
|
|
4
|
+
* The default verifier: one form POST to Google's siteverify. It holds no state and never touches
|
|
5
|
+
* its context, so the plugin may also run it unregistered.
|
|
6
|
+
*
|
|
7
|
+
* @throws {SyntaxError} for a siteverify address that is not https.
|
|
8
|
+
*/
|
|
9
|
+
export declare const createReCaptchaVerifierService: (alias?: string, options?: ReCaptchaVerifierOptions) => ReCaptchaVerifierService;
|
|
10
|
+
/** Register a verifier (the default siteverify call unless `options` say otherwise). */
|
|
11
|
+
export declare const appendReCaptchaVerifierService: <C extends BasicConfig, T extends BasicContext<C>>(context: T, alias?: string, options?: ReCaptchaVerifierOptions) => T;
|
|
12
|
+
//# sourceMappingURL=verifier.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verifier.d.ts","sourceRoot":"","sources":["../../../../src/manager/plugins/re-captcha/verifier.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAGlE,OAAO,KAAK,EAAqB,wBAAwB,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAA;AAIvG;;;;;GAKG;AACH,eAAO,MAAM,8BAA8B,WAClC,MAAM,YAAgC,wBAAwB,KACpE,wBA+CF,CAAA;AAED,wFAAwF;AACxF,eAAO,MAAM,8BAA8B,GAAI,CAAC,SAAS,WAAW,EAAE,CAAC,SAAS,YAAY,CAAC,CAAC,CAAC,WACpF,CAAC,UAAS,MAAM,YAAiC,wBAAwB,KACjF,CAIF,CAAA"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { AuthUnavailable } from '@owlmeans/auth';
|
|
2
|
+
import { createService } from '@owlmeans/context';
|
|
3
|
+
import { logger } from '@owlmeans/log';
|
|
4
|
+
import { RECAPTCHA_SITEVERIFY_URL, RECAPTCHA_VERIFIER, RECAPTCHA_VERIFY_TIMEOUT } from './consts.js';
|
|
5
|
+
const log = logger('server-auth:re-captcha');
|
|
6
|
+
/**
|
|
7
|
+
* The default verifier: one form POST to Google's siteverify. It holds no state and never touches
|
|
8
|
+
* its context, so the plugin may also run it unregistered.
|
|
9
|
+
*
|
|
10
|
+
* @throws {SyntaxError} for a siteverify address that is not https.
|
|
11
|
+
*/
|
|
12
|
+
export const createReCaptchaVerifierService = (alias = RECAPTCHA_VERIFIER, options = {}) => {
|
|
13
|
+
const url = options.url ?? RECAPTCHA_SITEVERIFY_URL;
|
|
14
|
+
if (!url.startsWith('https://')) {
|
|
15
|
+
throw new SyntaxError(`reCAPTCHA siteverify must be https: ${url}`);
|
|
16
|
+
}
|
|
17
|
+
const timeout = options.timeout ?? RECAPTCHA_VERIFY_TIMEOUT;
|
|
18
|
+
/** The answer, when it has the shape of one. */
|
|
19
|
+
const readAnswer = async (response) => {
|
|
20
|
+
try {
|
|
21
|
+
const answer = await response.json();
|
|
22
|
+
return answer != null && typeof answer === 'object' && typeof answer.success === 'boolean' ? answer : null;
|
|
23
|
+
}
|
|
24
|
+
catch {
|
|
25
|
+
return null;
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
return createService(alias, {
|
|
29
|
+
verify: async (request) => {
|
|
30
|
+
const body = new URLSearchParams({ secret: request.secret, response: request.response });
|
|
31
|
+
if (request.remoteip != null && request.remoteip !== '') {
|
|
32
|
+
body.set('remoteip', request.remoteip);
|
|
33
|
+
}
|
|
34
|
+
const send = options.fetch ?? fetch;
|
|
35
|
+
let response;
|
|
36
|
+
try {
|
|
37
|
+
response = await send(url, {
|
|
38
|
+
method: 'POST',
|
|
39
|
+
headers: { 'content-type': 'application/x-www-form-urlencoded' },
|
|
40
|
+
body,
|
|
41
|
+
signal: AbortSignal.timeout(timeout),
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
catch (error) {
|
|
45
|
+
log.warn('reCAPTCHA siteverify unreachable', { error }, { event: 'auth.recaptcha.unavailable' });
|
|
46
|
+
throw new AuthUnavailable('recaptcha');
|
|
47
|
+
}
|
|
48
|
+
const answer = response.ok ? await readAnswer(response) : null;
|
|
49
|
+
if (answer == null) {
|
|
50
|
+
log.warn('reCAPTCHA siteverify answered unusably', { status: response.status }, { event: 'auth.recaptcha.unavailable' });
|
|
51
|
+
throw new AuthUnavailable('recaptcha');
|
|
52
|
+
}
|
|
53
|
+
return answer;
|
|
54
|
+
},
|
|
55
|
+
});
|
|
56
|
+
};
|
|
57
|
+
/** Register a verifier (the default siteverify call unless `options` say otherwise). */
|
|
58
|
+
export const appendReCaptchaVerifierService = (context, alias = RECAPTCHA_VERIFIER, options) => {
|
|
59
|
+
context.registerService(createReCaptchaVerifierService(alias, options));
|
|
60
|
+
return context;
|
|
61
|
+
};
|
|
62
|
+
//# sourceMappingURL=verifier.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verifier.js","sourceRoot":"","sources":["../../../../src/manager/plugins/re-captcha/verifier.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,13 @@
|
|
|
1
1
|
import type { AppContext, AppConfig } from '../types.js';
|
|
2
2
|
import type { AuthPlugin } from './types.js';
|
|
3
|
-
|
|
3
|
+
/**
|
|
4
|
+
* The reCAPTCHA sign-in: proves that a person solved a challenge, and nothing about who they are.
|
|
5
|
+
*
|
|
6
|
+
* The token the manager signs for it is a GUEST credential — `GUEST_ID`, role Guest, `[AUTH_SCOPE]`,
|
|
7
|
+
* type ReCaptcha — whatever identity the caller posted: a profile, an organization, permissions,
|
|
8
|
+
* groups, an expiry and a `source` are dropped before it is signed. Its single-use key is the
|
|
9
|
+
* server-issued challenge it carries. A route accepts it only through `makeReCaptchaGuard`; the
|
|
10
|
+
* bearer exchange refuses it.
|
|
11
|
+
*/
|
|
12
|
+
export declare const makeReCaptchaPlugin: <C extends AppConfig, T extends AppContext<C>>(context: T) => AuthPlugin;
|
|
4
13
|
//# sourceMappingURL=re-captcha.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"re-captcha.d.ts","sourceRoot":"","sources":["../../../src/manager/plugins/re-captcha.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"re-captcha.d.ts","sourceRoot":"","sources":["../../../src/manager/plugins/re-captcha.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AACxD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAQ5C;;;;;;;;GAQG;AACH,eAAO,MAAM,mBAAmB,GAAI,CAAC,SAAS,SAAS,EAAE,CAAC,SAAS,UAAU,CAAC,CAAC,CAAC,WAAW,CAAC,KAAG,UAqD9F,CAAA"}
|
|
@@ -1,46 +1,59 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { PLUGINS } from '@owlmeans/config';
|
|
3
|
-
import { PluginMissconfigured } from '@owlmeans/config';
|
|
4
|
-
import { EntrypointOutcome } from '@owlmeans/entrypoint';
|
|
1
|
+
import { AUTH_SCOPE, AuthenticationType, AuthRole, GUEST_ID, MOD_RECAPTCHA } from '@owlmeans/auth';
|
|
2
|
+
import { PLUGINS, PluginMissconfigured } from '@owlmeans/config';
|
|
5
3
|
import { base64 } from '@scure/base';
|
|
6
|
-
import { randomBytes } from '@noble/hashes/utils';
|
|
7
|
-
import {
|
|
8
|
-
|
|
4
|
+
import { randomBytes } from '@noble/hashes/utils.js';
|
|
5
|
+
import { authPluginHelper } from './utils.js';
|
|
6
|
+
import { RECAPTCHA_VERIFIER } from './re-captcha/consts.js';
|
|
7
|
+
import { RECAPTCHA_CREDENTIAL_FIELDS } from './re-captcha/consts.local.js';
|
|
8
|
+
import { makeReCaptchaPolicyModel } from './re-captcha/policy.js';
|
|
9
|
+
import { createReCaptchaVerifierService } from './re-captcha/verifier.js';
|
|
10
|
+
/**
|
|
11
|
+
* The reCAPTCHA sign-in: proves that a person solved a challenge, and nothing about who they are.
|
|
12
|
+
*
|
|
13
|
+
* The token the manager signs for it is a GUEST credential — `GUEST_ID`, role Guest, `[AUTH_SCOPE]`,
|
|
14
|
+
* type ReCaptcha — whatever identity the caller posted: a profile, an organization, permissions,
|
|
15
|
+
* groups, an expiry and a `source` are dropped before it is signed. Its single-use key is the
|
|
16
|
+
* server-issued challenge it carries. A route accepts it only through `makeReCaptchaGuard`; the
|
|
17
|
+
* bearer exchange refuses it.
|
|
18
|
+
*/
|
|
19
|
+
export const makeReCaptchaPlugin = (context) => {
|
|
20
|
+
const verifier = () => context.hasService(RECAPTCHA_VERIFIER)
|
|
21
|
+
? context.service(RECAPTCHA_VERIFIER)
|
|
22
|
+
: createReCaptchaVerifierService();
|
|
23
|
+
/** The secret and the policy of the `MOD_RECAPTCHA` record; no secret = no reCAPTCHA sign-in. */
|
|
24
|
+
const configured = async () => {
|
|
25
|
+
const record = await context.getConfigResource(PLUGINS).load(MOD_RECAPTCHA);
|
|
26
|
+
if (record == null || typeof record.value !== 'string' || record.value === '') {
|
|
27
|
+
throw new PluginMissconfigured('value');
|
|
28
|
+
}
|
|
29
|
+
return [record.value, makeReCaptchaPolicyModel(record)];
|
|
30
|
+
};
|
|
31
|
+
const resetIdentity = (credential) => {
|
|
32
|
+
const fields = credential;
|
|
33
|
+
for (const field of Object.keys(fields)) {
|
|
34
|
+
if (!RECAPTCHA_CREDENTIAL_FIELDS.includes(field)) {
|
|
35
|
+
delete fields[field];
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
credential.type = AuthenticationType.ReCaptcha;
|
|
39
|
+
credential.role = AuthRole.Guest;
|
|
40
|
+
credential.userId = GUEST_ID;
|
|
41
|
+
credential.scopes = [AUTH_SCOPE];
|
|
42
|
+
};
|
|
9
43
|
const plugin = {
|
|
10
44
|
type: AuthenticationType.ReCaptcha,
|
|
11
45
|
init: async (request) => {
|
|
12
|
-
assertType(request.type, plugin);
|
|
13
|
-
|
|
14
|
-
return { challenge };
|
|
46
|
+
authPluginHelper.assertType(request.type, plugin);
|
|
47
|
+
return { challenge: base64.encode(randomBytes(32)) };
|
|
15
48
|
},
|
|
16
49
|
authenticate: async (credential) => {
|
|
17
|
-
const
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
body: {
|
|
25
|
-
secret: config.value,
|
|
26
|
-
response: credential.credential
|
|
27
|
-
},
|
|
28
|
-
headers: { 'content-type': 'application/x-www-form-urlencoded' }
|
|
29
|
-
});
|
|
30
|
-
if (status !== EntrypointOutcome.Ok) {
|
|
31
|
-
throw new AuthPluginError('recaptcha:api');
|
|
32
|
-
}
|
|
33
|
-
if (!result.success) {
|
|
34
|
-
throw new AuthenFailed('recaptcha:' + (result['error-codes']?.join(',') ?? 'unknown'));
|
|
35
|
-
}
|
|
36
|
-
credential.scopes = [AUTH_SCOPE];
|
|
37
|
-
credential.role = AuthRole.Guest;
|
|
38
|
-
credential.type = AuthenticationType.ReCaptcha;
|
|
39
|
-
const [previous, challenge] = credential.challenge.split(':');
|
|
40
|
-
if (challenge != null) {
|
|
41
|
-
credential.challenge = previous;
|
|
42
|
-
return { token: previous };
|
|
43
|
-
}
|
|
50
|
+
const [secret, policy] = await configured();
|
|
51
|
+
// Read before the policy is judged: a misconfigured record fails before Google is asked.
|
|
52
|
+
policy.minScore();
|
|
53
|
+
const answer = await verifier().verify({ secret, response: credential.credential });
|
|
54
|
+
policy.assert(answer);
|
|
55
|
+
resetIdentity(credential);
|
|
56
|
+
// '' keeps the manager's own server-issued challenge on the token: that is its spend key.
|
|
44
57
|
return { token: '' };
|
|
45
58
|
}
|
|
46
59
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"re-captcha.js","sourceRoot":"","sources":["../../../src/manager/plugins/re-captcha.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"re-captcha.js","sourceRoot":"","sources":["../../../src/manager/plugins/re-captcha.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/** Ownership of atomic replay protection for a verified authentication challenge. */
|
|
2
|
+
export declare enum AuthChallengeReplayPolicy {
|
|
3
|
+
/** Default: the auth manager consumes the challenge before plugin authentication. */
|
|
4
|
+
Manager = "manager",
|
|
5
|
+
/** The plugin owns bounded attempts and atomic success consumption. */
|
|
6
|
+
Plugin = "plugin"
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=replay-policy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"replay-policy.d.ts","sourceRoot":"","sources":["../../../src/manager/plugins/replay-policy.ts"],"names":[],"mappings":"AAAA,qFAAqF;AACrF,oBAAY,yBAAyB;IACnC,qFAAqF;IACrF,OAAO,YAAY;IACnB,uEAAuE;IACvE,MAAM,WAAW;CAClB"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/** Ownership of atomic replay protection for a verified authentication challenge. */
|
|
2
|
+
export var AuthChallengeReplayPolicy;
|
|
3
|
+
(function (AuthChallengeReplayPolicy) {
|
|
4
|
+
/** Default: the auth manager consumes the challenge before plugin authentication. */
|
|
5
|
+
AuthChallengeReplayPolicy["Manager"] = "manager";
|
|
6
|
+
/** The plugin owns bounded attempts and atomic success consumption. */
|
|
7
|
+
AuthChallengeReplayPolicy["Plugin"] = "plugin";
|
|
8
|
+
})(AuthChallengeReplayPolicy || (AuthChallengeReplayPolicy = {}));
|
|
9
|
+
//# sourceMappingURL=replay-policy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"replay-policy.js","sourceRoot":"","sources":["../../../src/manager/plugins/replay-policy.ts"],"names":[],"mappings":"AAAA,qFAAqF;AACrF,MAAM,CAAN,IAAY,yBAKX;AALD,WAAY,yBAAyB;IACnC,qFAAqF;IACrF,gDAAmB,CAAA;IACnB,uEAAuE;IACvE,8CAAiB,CAAA;AACnB,CAAC,EALW,yBAAyB,KAAzB,yBAAyB,QAKpC"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import type { AuthPlugin } from './types.js';
|
|
2
|
-
import type { AppConfig, AppContext } from '../types.js';
|
|
3
|
-
import type { SupervisorPluginOptions } from '../supervisor.js';
|
|
2
|
+
import type { AppConfig, AppContext, SupervisorPluginOptions } from '../types.js';
|
|
4
3
|
/**
|
|
5
4
|
* PK-based supervisor authentication plugin. A privileged operator (or an e2e
|
|
6
5
|
* test) holds one of the project's trusted private keys (the allowlisted
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"supervisor.d.ts","sourceRoot":"","sources":["../../../src/manager/plugins/supervisor.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"supervisor.d.ts","sourceRoot":"","sources":["../../../src/manager/plugins/supervisor.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAM5C,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAA;AAEjF;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,oBAAoB,YACtB,UAAU,CAAC,SAAS,CAAC,QAAQ,uBAAuB,KAC5D,UA8DF,CAAA"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { AuthenticationType, AuthenFailed, AuthRole, ALL_SCOPES, buildSupervisorPayload } from '@owlmeans/auth';
|
|
2
2
|
import { base64 } from '@scure/base';
|
|
3
|
-
import { randomBytes } from '@noble/hashes/utils';
|
|
4
|
-
import {
|
|
3
|
+
import { randomBytes } from '@noble/hashes/utils.js';
|
|
4
|
+
import { keyHelper } from '@owlmeans/basic-keys';
|
|
5
5
|
import { TRUSTED } from '@owlmeans/config';
|
|
6
6
|
/**
|
|
7
7
|
* PK-based supervisor authentication plugin. A privileged operator (or an e2e
|
|
@@ -38,11 +38,11 @@ export const makeSupervisorPlugin = (context, opts) => {
|
|
|
38
38
|
for (const alias of opts.supervisors) {
|
|
39
39
|
try {
|
|
40
40
|
const record = await context.getConfigResource(TRUSTED)
|
|
41
|
-
.load(alias
|
|
41
|
+
.load({ name: alias });
|
|
42
42
|
if (record?.credential == null) {
|
|
43
43
|
continue;
|
|
44
44
|
}
|
|
45
|
-
if (await fromPubKey(record.credential).verify(payload, parsed.signature)) {
|
|
45
|
+
if (await keyHelper.fromPubKey(record.credential).verify(payload, parsed.signature)) {
|
|
46
46
|
matched = alias;
|
|
47
47
|
break;
|
|
48
48
|
}
|
|
@@ -59,8 +59,8 @@ export const makeSupervisorPlugin = (context, opts) => {
|
|
|
59
59
|
: { userId: credential.userId };
|
|
60
60
|
credential.userId = resolution.userId;
|
|
61
61
|
credential.profileId = resolution.profileId ?? resolution.userId;
|
|
62
|
-
if (resolution.
|
|
63
|
-
credential.
|
|
62
|
+
if (resolution.entitySlug != null) {
|
|
63
|
+
credential.entitySlug = resolution.entitySlug;
|
|
64
64
|
}
|
|
65
65
|
credential.scopes = resolution.scopes ?? credential.scopes ?? [ALL_SCOPES];
|
|
66
66
|
credential.role = resolution.role ?? AuthRole.User;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"supervisor.js","sourceRoot":"","sources":["../../../src/manager/plugins/supervisor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,YAAY,EAAE,QAAQ,EAAE,UAAU,EAAE,sBAAsB,
|
|
1
|
+
{"version":3,"file":"supervisor.js","sourceRoot":"","sources":["../../../src/manager/plugins/supervisor.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,25 +1,33 @@
|
|
|
1
1
|
import type { AllowanceResponse } from '@owlmeans/auth';
|
|
2
|
-
import type { AuthModel } from '../types.js';
|
|
3
|
-
import type { AbstractRequest } from '@owlmeans/entrypoint';
|
|
2
|
+
import type { AppConfig, AppContext, AuthModel } from '../types.js';
|
|
4
3
|
import type { RedisResource } from '@owlmeans/redis-resource';
|
|
5
4
|
import type { ResourceRecord } from '@owlmeans/resource';
|
|
5
|
+
import type { AuthChallengeReplayPolicy } from './consts.js';
|
|
6
6
|
export interface AuthPlugin extends Omit<AuthModel, "rely"> {
|
|
7
7
|
type: string;
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
'error-codes'?: string[];
|
|
14
|
-
}
|
|
15
|
-
export interface RecaptchaRequest extends AbstractRequest<{
|
|
16
|
-
secret: string;
|
|
17
|
-
response: string;
|
|
18
|
-
remoteip?: string;
|
|
19
|
-
}> {
|
|
8
|
+
/**
|
|
9
|
+
* Who atomically consumes a verified challenge. The manager remains the default; a plugin may
|
|
10
|
+
* opt in only when its own credential protocol needs a bounded retry budget before consumption.
|
|
11
|
+
*/
|
|
12
|
+
challengeReplayPolicy?: AuthChallengeReplayPolicy;
|
|
20
13
|
}
|
|
21
14
|
export interface RelyRecord extends ResourceRecord, AllowanceResponse {
|
|
22
15
|
}
|
|
23
16
|
export interface AuthRedisResource extends RedisResource<RelyRecord> {
|
|
24
17
|
}
|
|
18
|
+
/** Builds the plugin of one authentication type over the context it serves. */
|
|
19
|
+
export interface AuthPluginFactory {
|
|
20
|
+
<C extends AppConfig, T extends AppContext<C>>(context: T): AuthPlugin;
|
|
21
|
+
}
|
|
22
|
+
/** Resolution of the registered plugins, and the check every plugin runs on what it is handed. */
|
|
23
|
+
export interface AuthPluginHelper {
|
|
24
|
+
/** @throws {TypeMissmatchError} when a request names another plugin's type */
|
|
25
|
+
assertType: (type: string, plugin: AuthPlugin) => void;
|
|
26
|
+
/**
|
|
27
|
+
* The registered plugin of a type, built over the context.
|
|
28
|
+
*
|
|
29
|
+
* @throws {AuthUnknown}
|
|
30
|
+
*/
|
|
31
|
+
getPlugin: (type: string, context: AppContext<AppConfig>) => Promise<AuthPlugin>;
|
|
32
|
+
}
|
|
25
33
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/manager/plugins/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AACvD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/manager/plugins/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AACvD,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AACnE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAA;AAC7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AACxD,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAA;AAE5D,MAAM,WAAW,UAAW,SAAQ,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC;IACzD,IAAI,EAAE,MAAM,CAAA;IACZ;;;OAGG;IACH,qBAAqB,CAAC,EAAE,yBAAyB,CAAA;CAClD;AAED,MAAM,WAAW,UAAW,SAAQ,cAAc,EAAE,iBAAiB;CACpE;AAED,MAAM,WAAW,iBAAkB,SAAQ,aAAa,CAAC,UAAU,CAAC;CAAG;AAEvE,+EAA+E;AAC/E,MAAM,WAAW,iBAAiB;IAChC,CAAC,CAAC,SAAS,SAAS,EAAE,CAAC,SAAS,UAAU,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,GAAG,UAAU,CAAA;CACvE;AAED,kGAAkG;AAClG,MAAM,WAAW,gBAAgB;IAC/B,8EAA8E;IAC9E,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,KAAK,IAAI,CAAA;IACtD;;;;OAIG;IACH,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,CAAC,SAAS,CAAC,KAAK,OAAO,CAAC,UAAU,CAAC,CAAA;CACjF"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import type { AuthPlugin } from './types.js';
|
|
1
|
+
import type { AuthPlugin, AuthPluginHelper } from './types.js';
|
|
2
2
|
import type { AppContext, AppConfig } from '../types.js';
|
|
3
|
+
export declare const createAuthPluginHelper: () => AuthPluginHelper;
|
|
4
|
+
export declare const authPluginHelper: AuthPluginHelper;
|
|
5
|
+
/** @deprecated compat:factory-refactor — use `authPluginHelper.assertType(…)` */
|
|
3
6
|
export declare const assertType: (type: string, plugin: AuthPlugin) => void;
|
|
4
|
-
/**
|
|
5
|
-
* @throws {AuthUnknown}
|
|
6
|
-
*/
|
|
7
|
+
/** @deprecated compat:factory-refactor — use `authPluginHelper.getPlugin(…)` */
|
|
7
8
|
export declare const getPlugin: (type: string, context: AppContext<AppConfig>) => Promise<AuthPlugin>;
|
|
8
9
|
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/manager/plugins/utils.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/manager/plugins/utils.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAC9D,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAExD,eAAO,MAAM,sBAAsB,QAAO,gBAiBzC,CAAA;AAED,eAAO,MAAM,gBAAgB,kBAA2B,CAAA;AAExD,iFAAiF;AACjF,eAAO,MAAM,UAAU,SAAU,MAAM,UAAU,UAAU,KAAG,IAAiD,CAAA;AAE/G,gFAAgF;AAChF,eAAO,MAAM,SAAS,SAAgB,MAAM,WAAW,UAAU,CAAC,SAAS,CAAC,KAAG,OAAO,CAAC,UAAU,CAChD,CAAA"}
|
|
@@ -1,18 +1,23 @@
|
|
|
1
1
|
import { AuthUnknown, TypeMissmatchError } from '@owlmeans/auth';
|
|
2
|
-
export const
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
}
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
}
|
|
16
|
-
return
|
|
2
|
+
export const createAuthPluginHelper = () => {
|
|
3
|
+
const assertType = (type, plugin) => {
|
|
4
|
+
if (type !== plugin.type) {
|
|
5
|
+
throw new TypeMissmatchError(plugin.type);
|
|
6
|
+
}
|
|
7
|
+
};
|
|
8
|
+
const getPlugin = async (type, context) => {
|
|
9
|
+
const { plugins } = await import('./index.js');
|
|
10
|
+
const plugin = plugins[type];
|
|
11
|
+
if (plugin == null) {
|
|
12
|
+
throw new AuthUnknown(type);
|
|
13
|
+
}
|
|
14
|
+
return plugins[type](context);
|
|
15
|
+
};
|
|
16
|
+
return { assertType, getPlugin };
|
|
17
17
|
};
|
|
18
|
+
export const authPluginHelper = createAuthPluginHelper();
|
|
19
|
+
/** @deprecated compat:factory-refactor — use `authPluginHelper.assertType(…)` */
|
|
20
|
+
export const assertType = (type, plugin) => authPluginHelper.assertType(type, plugin);
|
|
21
|
+
/** @deprecated compat:factory-refactor — use `authPluginHelper.getPlugin(…)` */
|
|
22
|
+
export const getPlugin = async (type, context) => await authPluginHelper.getPlugin(type, context);
|
|
18
23
|
//# sourceMappingURL=utils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/manager/plugins/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAA;AAIhE,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,IAAY,EAAE,MAAkB,
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/manager/plugins/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAA;AAIhE,MAAM,CAAC,MAAM,sBAAsB,GAAG,GAAqB,EAAE;IAC3D,MAAM,UAAU,GAAG,CAAC,IAAY,EAAE,MAAkB,EAAQ,EAAE;QAC5D,IAAI,IAAI,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC;YACzB,MAAM,IAAI,kBAAkB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;QAC3C,CAAC;IACH,CAAC,CAAA;IAED,MAAM,SAAS,GAAG,KAAK,EAAE,IAAY,EAAE,OAA8B,EAAuB,EAAE;QAC5F,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,CAAA;QAC9C,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;QAC5B,IAAI,MAAM,IAAI,IAAI,EAAE,CAAC;YACnB,MAAM,IAAI,WAAW,CAAC,IAAI,CAAC,CAAA;QAC7B,CAAC;QACD,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAA;IAC/B,CAAC,CAAA;IAED,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,CAAA;AAClC,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAG,sBAAsB,EAAE,CAAA;AAExD,iFAAiF;AACjF,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,IAAY,EAAE,MAAkB,EAAQ,EAAE,CAAC,gBAAgB,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;AAE/G,gFAAgF;AAChF,MAAM,CAAC,MAAM,SAAS,GAAG,KAAK,EAAE,IAAY,EAAE,OAA8B,EAAuB,EAAE,CACnG,MAAM,gBAAgB,CAAC,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"flow.d.ts","sourceRoot":"","sources":["../../../src/manager/rely/flow.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAoB,IAAI,EAA8B,MAAM,gBAAgB,CAAA;AAExF,OAAO,KAAK,EAAE,kBAAkB,EAAE,UAAU,EAAyB,MAAM,kBAAkB,CAAA;
|
|
1
|
+
{"version":3,"file":"flow.d.ts","sourceRoot":"","sources":["../../../src/manager/rely/flow.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAoB,IAAI,EAA8B,MAAM,gBAAgB,CAAA;AAExF,OAAO,KAAK,EAAE,kBAAkB,EAAE,UAAU,EAAyB,MAAM,kBAAkB,CAAA;AAC7F,OAAO,KAAK,EAAE,UAAU,EAAiD,MAAM,aAAa,CAAA;AAsB5F,eAAO,MAAM,cAAc,YAAa,UAAU,QAAQ,UAAU,SAAS,IAAI,GAAG,IAAI,KAAG,kBAgH1F,CAAA"}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { AUTH_SCOPE, AuthenticationStage, AuthenticationType, AuthPluginError, AuthRole, RELY_3RD } from '@owlmeans/auth';
|
|
2
|
-
import { isEventMessage, isMessage } from '@owlmeans/socket';
|
|
3
2
|
import { makeAuthModel } from '../model.js';
|
|
4
3
|
import { EnvelopeKind, makeEnvelopeModel } from '@owlmeans/basic-envelope';
|
|
5
4
|
import { trusted } from '../utils/trusted.js';
|
|
6
5
|
import { RELY_TUNNEL } from '../consts.js';
|
|
7
6
|
import { RELY_ACTION_TIMEOUT } from '@owlmeans/auth-common';
|
|
7
|
+
import { logger } from '@owlmeans/log';
|
|
8
|
+
import { socketMessageHelper } from '@owlmeans/socket';
|
|
8
9
|
// 1. There is a difference between privileged (provider)
|
|
9
10
|
// and non-privileged (consumer) request
|
|
10
11
|
// 2. Source allows to distinguish between provider and consumer
|
|
@@ -14,6 +15,7 @@ import { RELY_ACTION_TIMEOUT } from '@owlmeans/auth-common';
|
|
|
14
15
|
// 3. General idea is that: when you are connected, the auth
|
|
15
16
|
// process can be started from scratch following same stages
|
|
16
17
|
// and using the same plugins but via socket
|
|
18
|
+
const log = logger('server-auth:rely');
|
|
17
19
|
export const createRelyFlow = (context, conn, auth) => {
|
|
18
20
|
const auhtenticate = conn.authenticate;
|
|
19
21
|
const model = makeAuthModel(context);
|
|
@@ -21,31 +23,31 @@ export const createRelyFlow = (context, conn, auth) => {
|
|
|
21
23
|
const linker = async (rely, source, notify) => {
|
|
22
24
|
const tunnel = context.resource(RELY_TUNNEL);
|
|
23
25
|
const closeReceiver = await tunnel.subscribe(async (message) => {
|
|
24
|
-
if (isMessage(message, true)) {
|
|
26
|
+
if (socketMessageHelper.isMessage(message, true)) {
|
|
25
27
|
await conn.send(message);
|
|
26
28
|
}
|
|
27
|
-
else if (isEventMessage(message, true)) {
|
|
29
|
+
else if (socketMessageHelper.isEventMessage(message, true)) {
|
|
28
30
|
if (message.event === 'close') {
|
|
29
31
|
await conn.close();
|
|
30
32
|
closeSender();
|
|
31
33
|
await closeReceiver();
|
|
32
34
|
}
|
|
33
35
|
}
|
|
34
|
-
}, source.nonce);
|
|
36
|
+
}, { channel: source.nonce });
|
|
35
37
|
// We allow to just forward call messages back and forth
|
|
36
|
-
conn._receiveCall = async (msg) => {
|
|
37
|
-
conn._receiveResult = async (msg) => {
|
|
38
|
-
conn._receiveError = async (msg) => {
|
|
38
|
+
conn._receiveCall = async (msg) => { log.debug('Forward call', { nonce: source.nonce, method: msg.method, id: msg.id }); };
|
|
39
|
+
conn._receiveResult = async (msg) => { log.debug('Forward result', { nonce: source.nonce, id: msg.id }); };
|
|
40
|
+
conn._receiveError = async (msg) => { log.debug('Forward error', { nonce: source.nonce, id: msg.id }); };
|
|
39
41
|
conn.defaultCallTimeout = RELY_ACTION_TIMEOUT * 1000;
|
|
40
42
|
const closeSender = conn.listen(async (message) => {
|
|
41
|
-
if (isMessage(message, true)) {
|
|
43
|
+
if (socketMessageHelper.isMessage(message, true)) {
|
|
42
44
|
const forward = { ...message };
|
|
43
45
|
if (forward.rawData != null) {
|
|
44
46
|
delete forward.rawData;
|
|
45
47
|
}
|
|
46
48
|
await tunnel.publish(forward, rely.nonce);
|
|
47
49
|
}
|
|
48
|
-
else if (isEventMessage(message, true)) {
|
|
50
|
+
else if (socketMessageHelper.isEventMessage(message, true)) {
|
|
49
51
|
if (message.event === 'close') {
|
|
50
52
|
const forward = { ...message };
|
|
51
53
|
if (forward.rawData != null) {
|
|
@@ -88,7 +90,7 @@ export const createRelyFlow = (context, conn, auth) => {
|
|
|
88
90
|
return [stage, await model.init(_payload)];
|
|
89
91
|
}
|
|
90
92
|
catch (e) {
|
|
91
|
-
|
|
93
|
+
log.warn('Rely init failed; connection closed', e);
|
|
92
94
|
await conn.close();
|
|
93
95
|
}
|
|
94
96
|
break;
|
|
@@ -110,7 +112,7 @@ export const createRelyFlow = (context, conn, auth) => {
|
|
|
110
112
|
return [AuthenticationStage.Authenticated, internalAuth];
|
|
111
113
|
}
|
|
112
114
|
catch (e) {
|
|
113
|
-
|
|
115
|
+
log.warn('Rely authentication failed; connection closed', e);
|
|
114
116
|
await conn.close();
|
|
115
117
|
}
|
|
116
118
|
break;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"flow.js","sourceRoot":"","sources":["../../../src/manager/rely/flow.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,eAAe,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;
|
|
1
|
+
{"version":3,"file":"flow.js","sourceRoot":"","sources":["../../../src/manager/rely/flow.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rely.d.ts","sourceRoot":"","sources":["../../src/manager/rely.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAc,WAAW,EAAE,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"rely.d.ts","sourceRoot":"","sources":["../../src/manager/rely.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAc,WAAW,EAAE,MAAM,YAAY,CAAA;AAWzD,eAAO,MAAM,iBAAiB,WAAW,MAAM,KAAkB,WAyEhE,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rely.js","sourceRoot":"","sources":["../../src/manager/rely.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAChE,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAE1C,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,kBAAkB,
|
|
1
|
+
{"version":3,"file":"rely.js","sourceRoot":"","sources":["../../src/manager/rely.ts"],"names":[],"mappings":"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"}
|