@owlmeans/server-auth 0.1.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 +490 -0
- package/build/.gitkeep +0 -0
- package/build/actions/index.d.ts +2 -0
- package/build/actions/index.d.ts.map +1 -0
- package/build/actions/index.js +2 -0
- package/build/actions/index.js.map +1 -0
- package/build/actions/service.d.ts +4 -0
- package/build/actions/service.d.ts.map +1 -0
- package/build/actions/service.js +7 -0
- package/build/actions/service.js.map +1 -0
- package/build/consts.d.ts +5 -0
- package/build/consts.d.ts.map +1 -0
- package/build/consts.js +5 -0
- package/build/consts.js.map +1 -0
- package/build/index.d.ts +6 -0
- package/build/index.d.ts.map +1 -0
- package/build/index.js +5 -0
- package/build/index.js.map +1 -0
- package/build/manager/actions/index.d.ts +2 -0
- package/build/manager/actions/index.d.ts.map +1 -0
- package/build/manager/actions/index.js +2 -0
- package/build/manager/actions/index.js.map +1 -0
- package/build/manager/actions/manager.d.ts +6 -0
- package/build/manager/actions/manager.d.ts.map +1 -0
- package/build/manager/actions/manager.js +10 -0
- package/build/manager/actions/manager.js.map +1 -0
- package/build/manager/consts.d.ts +3 -0
- package/build/manager/consts.d.ts.map +1 -0
- package/build/manager/consts.js +3 -0
- package/build/manager/consts.js.map +1 -0
- package/build/manager/context.d.ts +3 -0
- package/build/manager/context.d.ts.map +1 -0
- package/build/manager/context.js +26 -0
- package/build/manager/context.js.map +1 -0
- package/build/manager/exports.d.ts +16 -0
- package/build/manager/exports.d.ts.map +1 -0
- package/build/manager/exports.js +13 -0
- package/build/manager/exports.js.map +1 -0
- package/build/manager/index.d.ts +11 -0
- package/build/manager/index.d.ts.map +1 -0
- package/build/manager/index.js +10 -0
- package/build/manager/index.js.map +1 -0
- package/build/manager/main.d.ts +3 -0
- package/build/manager/main.d.ts.map +1 -0
- package/build/manager/main.js +7 -0
- package/build/manager/main.js.map +1 -0
- package/build/manager/model.d.ts +3 -0
- package/build/manager/model.d.ts.map +1 -0
- package/build/manager/model.js +68 -0
- package/build/manager/model.js.map +1 -0
- package/build/manager/modules.d.ts +2 -0
- package/build/manager/modules.d.ts.map +1 -0
- package/build/manager/modules.js +21 -0
- package/build/manager/modules.js.map +1 -0
- package/build/manager/plugins/basic-ed25519.d.ts +4 -0
- package/build/manager/plugins/basic-ed25519.d.ts.map +1 -0
- package/build/manager/plugins/basic-ed25519.js +42 -0
- package/build/manager/plugins/basic-ed25519.js.map +1 -0
- package/build/manager/plugins/basic-rely.d.ts +4 -0
- package/build/manager/plugins/basic-rely.d.ts.map +1 -0
- package/build/manager/plugins/basic-rely.js +152 -0
- package/build/manager/plugins/basic-rely.js.map +1 -0
- package/build/manager/plugins/export.d.ts +6 -0
- package/build/manager/plugins/export.d.ts.map +1 -0
- package/build/manager/plugins/export.js +5 -0
- package/build/manager/plugins/export.js.map +1 -0
- package/build/manager/plugins/index.d.ts +4 -0
- package/build/manager/plugins/index.d.ts.map +1 -0
- package/build/manager/plugins/index.js +9 -0
- package/build/manager/plugins/index.js.map +1 -0
- package/build/manager/plugins/re-captcha.d.ts +4 -0
- package/build/manager/plugins/re-captcha.d.ts.map +1 -0
- package/build/manager/plugins/re-captcha.js +49 -0
- package/build/manager/plugins/re-captcha.js.map +1 -0
- package/build/manager/plugins/types.d.ts +25 -0
- package/build/manager/plugins/types.d.ts.map +1 -0
- package/build/manager/plugins/types.js +2 -0
- package/build/manager/plugins/types.js.map +1 -0
- package/build/manager/plugins/utils.d.ts +8 -0
- package/build/manager/plugins/utils.d.ts.map +1 -0
- package/build/manager/plugins/utils.js +18 -0
- package/build/manager/plugins/utils.js.map +1 -0
- package/build/manager/rely/flow.d.ts +5 -0
- package/build/manager/rely/flow.d.ts.map +1 -0
- package/build/manager/rely/flow.js +127 -0
- package/build/manager/rely/flow.js.map +1 -0
- package/build/manager/rely/index.d.ts +2 -0
- package/build/manager/rely/index.d.ts.map +1 -0
- package/build/manager/rely/index.js +2 -0
- package/build/manager/rely/index.js.map +1 -0
- package/build/manager/rely.d.ts +3 -0
- package/build/manager/rely.d.ts.map +1 -0
- package/build/manager/rely.js +63 -0
- package/build/manager/rely.js.map +1 -0
- package/build/manager/types.d.ts +33 -0
- package/build/manager/types.d.ts.map +1 -0
- package/build/manager/types.js +2 -0
- package/build/manager/types.js.map +1 -0
- package/build/manager/utils/index.d.ts +2 -0
- package/build/manager/utils/index.d.ts.map +1 -0
- package/build/manager/utils/index.js +2 -0
- package/build/manager/utils/index.js.map +1 -0
- package/build/manager/utils/trusted.d.ts +5 -0
- package/build/manager/utils/trusted.d.ts.map +1 -0
- package/build/manager/utils/trusted.js +11 -0
- package/build/manager/utils/trusted.js.map +1 -0
- package/build/model/index.d.ts +2 -0
- package/build/model/index.d.ts.map +1 -0
- package/build/model/index.js +2 -0
- package/build/model/index.js.map +1 -0
- package/build/model/rely/consumer.d.ts +3 -0
- package/build/model/rely/consumer.d.ts.map +1 -0
- package/build/model/rely/consumer.js +9 -0
- package/build/model/rely/consumer.js.map +1 -0
- package/build/model/rely/index.d.ts +5 -0
- package/build/model/rely/index.d.ts.map +1 -0
- package/build/model/rely/index.js +4 -0
- package/build/model/rely/index.js.map +1 -0
- package/build/model/rely/peer.d.ts +5 -0
- package/build/model/rely/peer.d.ts.map +1 -0
- package/build/model/rely/peer.js +36 -0
- package/build/model/rely/peer.js.map +1 -0
- package/build/model/rely/provider.d.ts +3 -0
- package/build/model/rely/provider.d.ts.map +1 -0
- package/build/model/rely/provider.js +6 -0
- package/build/model/rely/provider.js.map +1 -0
- package/build/model/rely/types.d.ts +8 -0
- package/build/model/rely/types.d.ts.map +1 -0
- package/build/model/rely/types.js +2 -0
- package/build/model/rely/types.js.map +1 -0
- package/build/modules.d.ts +3 -0
- package/build/modules.d.ts.map +1 -0
- package/build/modules.js +11 -0
- package/build/modules.js.map +1 -0
- package/build/service.d.ts +7 -0
- package/build/service.d.ts.map +1 -0
- package/build/service.js +90 -0
- package/build/service.js.map +1 -0
- package/build/types.d.ts +13 -0
- package/build/types.d.ts.map +1 -0
- package/build/types.js +2 -0
- package/build/types.js.map +1 -0
- package/package.json +76 -0
- package/src/actions/index.ts +2 -0
- package/src/actions/service.ts +16 -0
- package/src/consts.ts +8 -0
- package/src/index.ts +6 -0
- package/src/manager/README.md +507 -0
- package/src/manager/actions/index.ts +2 -0
- package/src/manager/actions/manager.ts +23 -0
- package/src/manager/consts.ts +4 -0
- package/src/manager/context.ts +33 -0
- package/src/manager/exports.ts +17 -0
- package/src/manager/index.ts +11 -0
- package/src/manager/main.ts +9 -0
- package/src/manager/model.ts +93 -0
- package/src/manager/modules.ts +29 -0
- package/src/manager/plugins/basic-ed25519.ts +56 -0
- package/src/manager/plugins/basic-rely.ts +167 -0
- package/src/manager/plugins/export.ts +6 -0
- package/src/manager/plugins/index.ts +13 -0
- package/src/manager/plugins/re-captcha.ts +62 -0
- package/src/manager/plugins/types.ts +27 -0
- package/src/manager/plugins/utils.ts +21 -0
- package/src/manager/rely/flow.ts +135 -0
- package/src/manager/rely/index.ts +2 -0
- package/src/manager/rely.ts +90 -0
- package/src/manager/types.ts +42 -0
- package/src/manager/utils/index.ts +2 -0
- package/src/manager/utils/trusted.ts +16 -0
- package/src/model/index.ts +2 -0
- package/src/model/rely/consumer.ts +11 -0
- package/src/model/rely/index.ts +5 -0
- package/src/model/rely/peer.ts +43 -0
- package/src/model/rely/provider.ts +9 -0
- package/src/model/rely/types.ts +8 -0
- package/src/modules.ts +17 -0
- package/src/service.ts +126 -0
- package/src/types.ts +15 -0
- package/tsconfig.json +15 -0
- package/tsconfig.tsbuildinfo +1 -0
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { makeServerContext } from '@owlmeans/server-context';
|
|
2
|
+
import { appendApiServer } from '@owlmeans/server-api';
|
|
3
|
+
import { appendApiClient } from '@owlmeans/api';
|
|
4
|
+
import { appendSocketService, createSocketMiddleware } from '@owlmeans/server-socket';
|
|
5
|
+
import { DEFAULT_RELY } from './consts.js';
|
|
6
|
+
import { createRelyService } from './rely.js';
|
|
7
|
+
import { AUTH_CACHE } from '../consts.js';
|
|
8
|
+
import { appendStaticResource } from '@owlmeans/static-resource';
|
|
9
|
+
export const makeContext = (cfg, customize = false) => {
|
|
10
|
+
const context = makeServerContext(cfg);
|
|
11
|
+
appendApiServer(context);
|
|
12
|
+
appendApiClient(context);
|
|
13
|
+
appendSocketService(context);
|
|
14
|
+
context.registerMiddleware(createSocketMiddleware());
|
|
15
|
+
// @TODO figure out rely service via config?
|
|
16
|
+
if (!customize && !context.hasService(DEFAULT_RELY)) {
|
|
17
|
+
context.registerService(createRelyService(DEFAULT_RELY));
|
|
18
|
+
}
|
|
19
|
+
appendStaticResource(context);
|
|
20
|
+
if (!customize && !context.hasResource(AUTH_CACHE)) {
|
|
21
|
+
appendStaticResource(context, AUTH_CACHE);
|
|
22
|
+
}
|
|
23
|
+
context.makeContext = (cfg => makeContext(cfg, customize));
|
|
24
|
+
return context;
|
|
25
|
+
};
|
|
26
|
+
//# sourceMappingURL=context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/manager/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AAE5D,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAC/C,OAAO,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAA;AACrF,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAA;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAA;AAEhE,MAAM,CAAC,MAAM,WAAW,GAAG,CAA+C,GAAM,EAAE,YAAqB,KAAK,EAAK,EAAE;IACjH,MAAM,OAAO,GAAG,iBAAiB,CAAC,GAAG,CAAM,CAAA;IAE3C,eAAe,CAAO,OAAO,CAAC,CAAA;IAC9B,eAAe,CAAO,OAAO,CAAC,CAAA;IAC9B,mBAAmB,CAAO,OAAO,CAAC,CAAA;IAElC,OAAO,CAAC,kBAAkB,CAAC,sBAAsB,EAAE,CAAC,CAAA;IAEpD,4CAA4C;IAC5C,IAAI,CAAC,SAAS,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QACpD,OAAO,CAAC,eAAe,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC,CAAA;IAC1D,CAAC;IAED,oBAAoB,CAAO,OAAO,CAAC,CAAA;IACnC,IAAI,CAAC,SAAS,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,UAAU,CAAC,EAAE,CAAC;QACnD,oBAAoB,CAAO,OAAO,EAAE,UAAU,CAAC,CAAA;IACjD,CAAC;IAED,OAAO,CAAC,WAAW,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE,SAAS,CAAC,CAA+B,CAAA;IAExF,OAAO,OAAY,CAAA;AACrB,CAAC,CAAA"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export { config } from '@owlmeans/server-context';
|
|
2
|
+
export type { TrustedRecord } from '@owlmeans/auth-common';
|
|
3
|
+
export { addWebService } from '@owlmeans/client-config';
|
|
4
|
+
export { service, TRUSTED } from '@owlmeans/config';
|
|
5
|
+
export { AppType, assertContext } from '@owlmeans/context';
|
|
6
|
+
export { klusterize } from '@owlmeans/kluster';
|
|
7
|
+
export { elevate } from '@owlmeans/server-module';
|
|
8
|
+
export { elevate as celevate, stab } from '@owlmeans/client-module';
|
|
9
|
+
export type { RefedModuleHandler } from '@owlmeans/server-module';
|
|
10
|
+
export { handleIntermediate, handleBody, handleRequest, handleParams } from '@owlmeans/server-api';
|
|
11
|
+
export type { AbstractRequest, AbstractResponse } from '@owlmeans/module';
|
|
12
|
+
export { backend } from '@owlmeans/route';
|
|
13
|
+
export { AUTHEN, AUTHEN_AUTHEN, AUTHEN_INIT } from '@owlmeans/auth';
|
|
14
|
+
export { GUARD_ED25519, BED255_CASHE_RESOURCE } from '@owlmeans/auth-common';
|
|
15
|
+
export { filterObject } from '@owlmeans/resource';
|
|
16
|
+
//# sourceMappingURL=exports.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"exports.d.ts","sourceRoot":"","sources":["../../src/manager/exports.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAA;AACjD,YAAY,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAA;AACvD,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAA;AACnD,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAA;AACjD,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAA;AACnE,YAAY,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;AACjE,OAAO,EAAE,kBAAkB,EAAE,UAAU,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAClG,YAAY,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AACzE,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AAEzC,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AACnE,OAAO,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAA;AAC5E,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export { config } from '@owlmeans/server-context';
|
|
2
|
+
export { addWebService } from '@owlmeans/client-config';
|
|
3
|
+
export { service, TRUSTED } from '@owlmeans/config';
|
|
4
|
+
export { AppType, assertContext } from '@owlmeans/context';
|
|
5
|
+
export { klusterize } from '@owlmeans/kluster';
|
|
6
|
+
export { elevate } from '@owlmeans/server-module';
|
|
7
|
+
export { elevate as celevate, stab } from '@owlmeans/client-module';
|
|
8
|
+
export { handleIntermediate, handleBody, handleRequest, handleParams } from '@owlmeans/server-api';
|
|
9
|
+
export { backend } from '@owlmeans/route';
|
|
10
|
+
export { AUTHEN, AUTHEN_AUTHEN, AUTHEN_INIT } from '@owlmeans/auth';
|
|
11
|
+
export { GUARD_ED25519, BED255_CASHE_RESOURCE } from '@owlmeans/auth-common';
|
|
12
|
+
export { filterObject } from '@owlmeans/resource';
|
|
13
|
+
//# sourceMappingURL=exports.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"exports.js","sourceRoot":"","sources":["../../src/manager/exports.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAA;AAEjD,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAA;AACvD,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAA;AACnD,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAA;AACjD,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAA;AAEnE,OAAO,EAAE,kBAAkB,EAAE,UAAU,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAElG,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AAEzC,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AACnE,OAAO,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAA;AAC5E,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export type * from './types.js';
|
|
2
|
+
export * from './modules.js';
|
|
3
|
+
export * from './exports.js';
|
|
4
|
+
export * from './context.js';
|
|
5
|
+
export * from './main.js';
|
|
6
|
+
export * from './rely.js';
|
|
7
|
+
export * from './consts.js';
|
|
8
|
+
export * from './rely/index.js';
|
|
9
|
+
export * from './actions/index.js';
|
|
10
|
+
export * from './plugins/index.js';
|
|
11
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/manager/index.ts"],"names":[],"mappings":"AAAA,mBAAmB,YAAY,CAAA;AAE/B,cAAc,cAAc,CAAA;AAC5B,cAAc,cAAc,CAAA;AAC5B,cAAc,cAAc,CAAA;AAC5B,cAAc,WAAW,CAAA;AACzB,cAAc,WAAW,CAAA;AACzB,cAAc,aAAa,CAAA;AAC3B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,oBAAoB,CAAA;AAClC,cAAc,oBAAoB,CAAA"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export * from './modules.js';
|
|
2
|
+
export * from './exports.js';
|
|
3
|
+
export * from './context.js';
|
|
4
|
+
export * from './main.js';
|
|
5
|
+
export * from './rely.js';
|
|
6
|
+
export * from './consts.js';
|
|
7
|
+
export * from './rely/index.js';
|
|
8
|
+
export * from './actions/index.js';
|
|
9
|
+
export * from './plugins/index.js';
|
|
10
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/manager/index.ts"],"names":[],"mappings":"AAEA,cAAc,cAAc,CAAA;AAC5B,cAAc,cAAc,CAAA;AAC5B,cAAc,cAAc,CAAA;AAC5B,cAAc,WAAW,CAAA;AACzB,cAAc,WAAW,CAAA;AACzB,cAAc,aAAa,CAAA;AAC3B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,oBAAoB,CAAA;AAClC,cAAc,oBAAoB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../src/manager/main.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAEvD,eAAO,MAAM,IAAI,GAAU,CAAC,SAAS,SAAS,EAAE,CAAC,SAAS,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,kBAI9E,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"main.js","sourceRoot":"","sources":["../../src/manager/main.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAGtC,MAAM,CAAC,MAAM,IAAI,GAAG,KAAK,EAAgD,GAAM,EAAE,EAAE;IACjF,GAAG,CAAC,eAAe,CAAC,OAAO,CAAC,CAAA;IAC5B,MAAM,GAAG,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,CAAA;IAC5B,MAAM,GAAG,CAAC,YAAY,EAAE,CAAC,MAAM,EAAE,CAAA;AACnC,CAAC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../src/manager/model.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAgBlE,eAAO,MAAM,aAAa,YAAa,UAAU,CAAC,SAAS,CAAC,KAAG,SA4E9D,CAAA"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { AuthenFailed, AuthenPayloadError } from '@owlmeans/auth';
|
|
2
|
+
import { getPlugin } from './plugins/utils.js';
|
|
3
|
+
import { AUTH_CACHE, AUTHEN_TIMEFRAME } from '../consts.js';
|
|
4
|
+
import { EnvelopeKind, makeEnvelopeModel } from '@owlmeans/basic-envelope';
|
|
5
|
+
import { createRelyFlow } from './rely/flow.js';
|
|
6
|
+
import { trusted } from './utils/trusted.js';
|
|
7
|
+
export const makeAuthModel = (context) => {
|
|
8
|
+
const cache = (context) => context.resource(AUTH_CACHE);
|
|
9
|
+
const model = {
|
|
10
|
+
init: async (request) => {
|
|
11
|
+
const plugin = getPlugin(request.type, context);
|
|
12
|
+
const response = await plugin.init(request);
|
|
13
|
+
const envelope = makeEnvelopeModel(plugin.type);
|
|
14
|
+
/**
|
|
15
|
+
* @TODO It looks like we don't validate sourced challenge by any means
|
|
16
|
+
* So we need to:
|
|
17
|
+
* 1. Remove it cause we process it as a separate property anyway
|
|
18
|
+
* 2. Fix it because it looks like this separate property isn't validated
|
|
19
|
+
*/
|
|
20
|
+
const challengeToken = request.source != null
|
|
21
|
+
? `${request.source}:${response.challenge}` : response.challenge;
|
|
22
|
+
const [, keyPair] = await trusted(context);
|
|
23
|
+
const challenge = await envelope.send(challengeToken, AUTHEN_TIMEFRAME).sign(keyPair, EnvelopeKind.Wrap);
|
|
24
|
+
return { challenge };
|
|
25
|
+
},
|
|
26
|
+
authenticate: async (credential) => {
|
|
27
|
+
const [trustedUser, keyPair] = await trusted(context);
|
|
28
|
+
const envelope = makeEnvelopeModel(credential.challenge, EnvelopeKind.Wrap);
|
|
29
|
+
if (!await envelope.verify(keyPair)) {
|
|
30
|
+
throw new AuthenFailed('challenge');
|
|
31
|
+
}
|
|
32
|
+
const msg = envelope.message(true);
|
|
33
|
+
try {
|
|
34
|
+
await cache(context).create({ id: msg }, { ttl: (envelope.envelope.ttl ?? AUTHEN_TIMEFRAME) / 1000 });
|
|
35
|
+
}
|
|
36
|
+
catch (e) {
|
|
37
|
+
const error = new AuthenFailed('challenge');
|
|
38
|
+
if (e instanceof Error) {
|
|
39
|
+
error.oiriginalStack = `${e} : ${e.stack}`;
|
|
40
|
+
}
|
|
41
|
+
throw error;
|
|
42
|
+
}
|
|
43
|
+
if (credential.userId == null) {
|
|
44
|
+
throw new AuthenPayloadError('userId');
|
|
45
|
+
}
|
|
46
|
+
const plugin = getPlugin(envelope.type(), context);
|
|
47
|
+
// @TODO this token PROBABLY needs to be registered somewhere and rechecked
|
|
48
|
+
// from time to time to make sure that the session is not deleted
|
|
49
|
+
// or permission hasn't changed.
|
|
50
|
+
// Alternative solution is to have permissions cached and cleaned
|
|
51
|
+
// when some broadcast message is sent from authentication system.
|
|
52
|
+
const challenge = credential.challenge;
|
|
53
|
+
const { token } = await plugin.authenticate(Object.assign(credential, { challenge: msg }));
|
|
54
|
+
credential.challenge = token === '' ? challenge : token;
|
|
55
|
+
credential.credential = trustedUser.id;
|
|
56
|
+
return {
|
|
57
|
+
token: await makeEnvelopeModel(credential.type)
|
|
58
|
+
.send(credential, AUTHEN_TIMEFRAME)
|
|
59
|
+
.sign(keyPair, EnvelopeKind.Token)
|
|
60
|
+
};
|
|
61
|
+
},
|
|
62
|
+
rely: async (conn, auth) => {
|
|
63
|
+
conn.authenticate = createRelyFlow(context, conn, auth);
|
|
64
|
+
}
|
|
65
|
+
};
|
|
66
|
+
return model;
|
|
67
|
+
};
|
|
68
|
+
//# sourceMappingURL=model.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model.js","sourceRoot":"","sources":["../../src/manager/model.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"modules.d.ts","sourceRoot":"","sources":["../../src/manager/modules.ts"],"names":[],"mappings":"AAkBA,eAAO,MAAM,OAAO,2CAAO,CAAA"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { AUTHEN, AUTHEN_AUTHEN, AUTHEN_INIT, AUTHEN_RELY, MOD_RECAPTCHA } from '@owlmeans/auth';
|
|
2
|
+
import { modules as list } from '@owlmeans/auth-common';
|
|
3
|
+
import { modules as apiConfig } from '@owlmeans/api-config-server';
|
|
4
|
+
import { elevate, guard } from '@owlmeans/server-module';
|
|
5
|
+
import * as actions from './actions/index.js';
|
|
6
|
+
import { module } from '@owlmeans/client-module';
|
|
7
|
+
import { backend, route, RouteMethod } from '@owlmeans/route';
|
|
8
|
+
import { handleIntermediate } from '@owlmeans/server-api';
|
|
9
|
+
import { DEFAULT_RELY } from './consts.js';
|
|
10
|
+
elevate(list, AUTHEN, handleIntermediate(async (_, context) => await context.updateContext()), { intermediate: true });
|
|
11
|
+
elevate(list, AUTHEN_INIT, actions.authenticationInit);
|
|
12
|
+
elevate(list, AUTHEN_AUTHEN, actions.authenticate);
|
|
13
|
+
elevate(list, AUTHEN_RELY, actions.rely, guard(DEFAULT_RELY));
|
|
14
|
+
export const modules = list;
|
|
15
|
+
list.push(...apiConfig);
|
|
16
|
+
list.push(module(route(MOD_RECAPTCHA, '/api/siteverify', backend({
|
|
17
|
+
host: 'https://www.google.com',
|
|
18
|
+
base: 'recaptcha',
|
|
19
|
+
secure: true,
|
|
20
|
+
}, RouteMethod.POST))));
|
|
21
|
+
//# sourceMappingURL=modules.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"modules.js","sourceRoot":"","sources":["../../src/manager/modules.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAC/F,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,uBAAuB,CAAA;AACvD,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,6BAA6B,CAAA;AAClE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAA;AACxD,OAAO,KAAK,OAAO,MAAM,oBAAoB,CAAA;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAChD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAE1C,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,kBAAkB,CACtC,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,CAAC,MAAM,OAAO,CAAC,aAAa,EAAoB,CACtE,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAA;AAC1B,OAAO,CAAC,IAAI,EAAE,WAAW,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAA;AACtD,OAAO,CAAC,IAAI,EAAE,aAAa,EAAE,OAAO,CAAC,YAAY,CAAC,CAAA;AAClD,OAAO,CAAC,IAAI,EAAE,WAAW,EAAE,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC,CAAA;AAE7D,MAAM,CAAC,MAAM,OAAO,GAAG,IAAI,CAAA;AAC3B,IAAI,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,CAAA;AACvB,IAAI,CAAC,IAAI,CACP,MAAM,CACJ,KAAK,CAAC,aAAa,EAAE,iBAAiB,EAAE,OAAO,CAAC;IAC9C,IAAI,EAAE,wBAAwB;IAC9B,IAAI,EAAE,WAAW;IACjB,MAAM,EAAE,IAAI;CACb,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC,CACtB,CACF,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"basic-ed25519.d.ts","sourceRoot":"","sources":["../../../src/manager/plugins/basic-ed25519.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAK5C,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAIxD,eAAO,MAAM,YAAY,GAAI,CAAC,SAAS,SAAS,EAAE,CAAC,SAAS,UAAU,CAAC,CAAC,CAAC,WAAW,CAAC,KAAG,UA6CvF,CAAA"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { AuthenticationType, AuthenFailed, ALL_SCOPES, AuthRole } from '@owlmeans/auth';
|
|
2
|
+
import { assertType } from './utils.js';
|
|
3
|
+
import { randomBytes } from '@noble/hashes/utils';
|
|
4
|
+
import { base64 } from '@scure/base';
|
|
5
|
+
import { fromPubKey } from '@owlmeans/basic-keys';
|
|
6
|
+
import { TRUSTED } from '@owlmeans/config';
|
|
7
|
+
export const basicEd25519 = (context) => {
|
|
8
|
+
const plugin = {
|
|
9
|
+
type: AuthenticationType.BasicEd25519,
|
|
10
|
+
init: async (request) => {
|
|
11
|
+
assertType(request.type, plugin);
|
|
12
|
+
const challenge = base64.encode(randomBytes(32));
|
|
13
|
+
return { challenge };
|
|
14
|
+
},
|
|
15
|
+
authenticate: async (credential) => {
|
|
16
|
+
/**
|
|
17
|
+
* @TODO We need to find users in some db not just in static
|
|
18
|
+
*/
|
|
19
|
+
const systemUser = await context.getConfigResource(TRUSTED)
|
|
20
|
+
.load(credential.userId);
|
|
21
|
+
if (systemUser == null) {
|
|
22
|
+
throw new AuthenFailed();
|
|
23
|
+
}
|
|
24
|
+
if (systemUser.credential == null) {
|
|
25
|
+
throw new SyntaxError('System user missconfigured');
|
|
26
|
+
}
|
|
27
|
+
const key = fromPubKey(systemUser.credential);
|
|
28
|
+
if (!await key.verify(credential.challenge, credential.credential)) {
|
|
29
|
+
throw new AuthenFailed(`challenge:${plugin.type}`);
|
|
30
|
+
}
|
|
31
|
+
const token = base64.encode(randomBytes(32));
|
|
32
|
+
// @TODO we need to do something with scopes - it's not secure
|
|
33
|
+
credential.scopes = [ALL_SCOPES];
|
|
34
|
+
credential.role = AuthRole.Superuser;
|
|
35
|
+
credential.challenge = token;
|
|
36
|
+
credential.type = AuthenticationType.OneTimeToken;
|
|
37
|
+
return { token };
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
return plugin;
|
|
41
|
+
};
|
|
42
|
+
//# sourceMappingURL=basic-ed25519.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"basic-ed25519.js","sourceRoot":"","sources":["../../../src/manager/plugins/basic-ed25519.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,YAAY,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAEvF,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AACjD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAEjD,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAA;AAG1C,MAAM,CAAC,MAAM,YAAY,GAAG,CAA+C,OAAU,EAAc,EAAE;IACnG,MAAM,MAAM,GAAe;QACzB,IAAI,EAAE,kBAAkB,CAAC,YAAY;QACrC,IAAI,EAAE,KAAK,EAAC,OAAO,EAAC,EAAE;YACpB,UAAU,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;YAEhC,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAA;YAEhD,OAAO,EAAE,SAAS,EAAE,CAAA;QACtB,CAAC;QAED,YAAY,EAAE,KAAK,EAAC,UAAU,EAAC,EAAE;YAC/B;;eAEG;YACH,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,iBAAiB,CAAC,OAAO,CAAC;iBACxD,IAAI,CAAgB,UAAU,CAAC,MAAM,CAAC,CAAA;YAEzC,IAAI,UAAU,IAAI,IAAI,EAAE,CAAC;gBACvB,MAAM,IAAI,YAAY,EAAE,CAAA;YAC1B,CAAC;YAED,IAAI,UAAU,CAAC,UAAU,IAAI,IAAI,EAAE,CAAC;gBAClC,MAAM,IAAI,WAAW,CAAC,4BAA4B,CAAC,CAAA;YACrD,CAAC;YAED,MAAM,GAAG,GAAG,UAAU,CAAC,UAAU,CAAC,UAAU,CAAC,CAAA;YAE7C,IAAI,CAAC,MAAM,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS,EAAE,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;gBACnE,MAAM,IAAI,YAAY,CAAC,aAAa,MAAM,CAAC,IAAI,EAAE,CAAC,CAAA;YACpD,CAAC;YAED,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAA;YAE5C,8DAA8D;YAC9D,UAAU,CAAC,MAAM,GAAG,CAAC,UAAU,CAAC,CAAA;YAChC,UAAU,CAAC,IAAI,GAAG,QAAQ,CAAC,SAAS,CAAA;YACpC,UAAU,CAAC,SAAS,GAAG,KAAK,CAAA;YAC5B,UAAU,CAAC,IAAI,GAAG,kBAAkB,CAAC,YAAY,CAAA;YAEjD,OAAO,EAAE,KAAK,EAAE,CAAA;QAClB,CAAC;KACF,CAAA;IAED,OAAO,MAAM,CAAA;AACf,CAAC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"basic-rely.d.ts","sourceRoot":"","sources":["../../../src/manager/plugins/basic-rely.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAqC,MAAM,aAAa,CAAA;AAChF,OAAO,KAAK,EAAE,UAAU,EAAiC,MAAM,YAAY,CAAA;AAS3E,eAAO,MAAM,SAAS,YAAa,UAAU,SAAS,MAAM,KAAG,UA0J9D,CAAA"}
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
import { AuthenFailed, AuthenPayloadError, AuthenticationType, AuthManagerError, AuthorizationError } from '@owlmeans/auth';
|
|
2
|
+
import { makeConsumerRely, makeProviderRely } from '../../model/index.js';
|
|
3
|
+
import { trusted } from '../utils/trusted.js';
|
|
4
|
+
import { EnvelopeKind, makeEnvelopeModel } from '@owlmeans/basic-envelope';
|
|
5
|
+
import { AUTH_CACHE } from '../../consts.js';
|
|
6
|
+
import { ResourceError } from '@owlmeans/resource';
|
|
7
|
+
import { RELY_CALL_TIMEOUT, RELY_PIN_PERFIX, RELY_TOKEN_PREFIX } from '@owlmeans/auth-common';
|
|
8
|
+
const _subscriptions = {};
|
|
9
|
+
export const basicRely = (context, type) => {
|
|
10
|
+
const plugin = {
|
|
11
|
+
type: type ?? AuthenticationType.RelyHandshake,
|
|
12
|
+
// This method is used by consumer and by provider (wallet)
|
|
13
|
+
// to initialize shared authentication process.
|
|
14
|
+
// The idea is that both subscribe to wait for a handshake value
|
|
15
|
+
// from the peer, that in fact is a subscription to a redis message tunnel.
|
|
16
|
+
init: async (request) => {
|
|
17
|
+
const [, keyPair] = await trusted(context);
|
|
18
|
+
const tunnel = context.resource(AUTH_CACHE);
|
|
19
|
+
let relyMsg;
|
|
20
|
+
do {
|
|
21
|
+
try {
|
|
22
|
+
const rely = request.auth == null ? makeConsumerRely() : makeProviderRely();
|
|
23
|
+
relyMsg = rely.message();
|
|
24
|
+
const pin = relyMsg.pin != null ? `${RELY_PIN_PERFIX}${relyMsg.pin}` : null;
|
|
25
|
+
const token = relyMsg.token != null ? `${RELY_TOKEN_PREFIX}${relyMsg.token}` : null;
|
|
26
|
+
const response = { challenge: await rely.sign(keyPair, EnvelopeKind.Wrap) };
|
|
27
|
+
if (pin != null) {
|
|
28
|
+
await tunnel.create({ ...response, id: pin }, { ttl: RELY_CALL_TIMEOUT });
|
|
29
|
+
}
|
|
30
|
+
if (token != null) {
|
|
31
|
+
await tunnel.create({ ...response, id: token }, { ttl: RELY_CALL_TIMEOUT });
|
|
32
|
+
}
|
|
33
|
+
if (request.provideRely != null) {
|
|
34
|
+
await Promise.all([pin, token].filter(key => key != null).map(async (key) => {
|
|
35
|
+
_subscriptions[key] = await tunnel.subscribe(async (value) => {
|
|
36
|
+
if (value.challenge != null) {
|
|
37
|
+
const rely = makeEnvelopeModel(value.challenge, EnvelopeKind.Wrap);
|
|
38
|
+
if (await rely.verify(keyPair)) {
|
|
39
|
+
[pin, token].filter(key => key != null).forEach(key => {
|
|
40
|
+
_subscriptions[key]?.();
|
|
41
|
+
if (_subscriptions[key] != null) {
|
|
42
|
+
delete _subscriptions[key];
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
await request.provideRely?.(rely.message(), relyMsg, true);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}, { /*ttl: RELY_CALL_TIMEOUT,*/ key, once: true });
|
|
49
|
+
// @TODO they need to be killed on close - but actually live a little bit longer
|
|
50
|
+
// then timeout for them is ok
|
|
51
|
+
setTimeout(() => {
|
|
52
|
+
if (_subscriptions[key] != null) {
|
|
53
|
+
try {
|
|
54
|
+
void _subscriptions[key]();
|
|
55
|
+
delete _subscriptions[key];
|
|
56
|
+
}
|
|
57
|
+
finally {
|
|
58
|
+
void request.conn?.close();
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}, RELY_CALL_TIMEOUT * 1000);
|
|
62
|
+
}));
|
|
63
|
+
}
|
|
64
|
+
return response;
|
|
65
|
+
}
|
|
66
|
+
catch (e) {
|
|
67
|
+
if (e instanceof ResourceError) {
|
|
68
|
+
console.error('COLISION ON TRY TO CREATE RELY PIN\TOKEN...', e);
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
throw e;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
await new Promise(resolve => setTimeout(resolve, 500));
|
|
75
|
+
} while (true);
|
|
76
|
+
},
|
|
77
|
+
// This part of flow is entered by the party that is active (provides peer's code - token or pin)
|
|
78
|
+
authenticate: async (credential) => {
|
|
79
|
+
const [, keyPair] = await trusted(context);
|
|
80
|
+
const tunnel = context.resource(AUTH_CACHE);
|
|
81
|
+
// 1. Just get a peer connection based on provided credential
|
|
82
|
+
// 2. Provision it with provided own data
|
|
83
|
+
// 3. Delete own rely connection seeds
|
|
84
|
+
let rely;
|
|
85
|
+
try {
|
|
86
|
+
let peer;
|
|
87
|
+
if (credential.credential.startsWith(RELY_PIN_PERFIX)) {
|
|
88
|
+
const key = credential.credential.substring(RELY_PIN_PERFIX.length);
|
|
89
|
+
if (key.length > 12) {
|
|
90
|
+
throw new AuthenPayloadError('pin');
|
|
91
|
+
}
|
|
92
|
+
peer = await tunnel.get(credential.credential);
|
|
93
|
+
}
|
|
94
|
+
else if (credential.credential.startsWith(RELY_TOKEN_PREFIX)) {
|
|
95
|
+
const key = credential.credential.substring(RELY_TOKEN_PREFIX.length);
|
|
96
|
+
if (key.length > 16) {
|
|
97
|
+
throw new AuthenPayloadError('token');
|
|
98
|
+
}
|
|
99
|
+
peer = await tunnel.get(credential.credential);
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
throw new AuthenPayloadError('credential');
|
|
103
|
+
}
|
|
104
|
+
const envelop = makeEnvelopeModel(peer.challenge, EnvelopeKind.Wrap);
|
|
105
|
+
if (!envelop.verify(keyPair)) {
|
|
106
|
+
throw new AuthManagerError();
|
|
107
|
+
}
|
|
108
|
+
rely = envelop.message();
|
|
109
|
+
}
|
|
110
|
+
catch (e) {
|
|
111
|
+
if (e instanceof ResourceError) {
|
|
112
|
+
console.error(e);
|
|
113
|
+
throw new AuthorizationError('rely');
|
|
114
|
+
}
|
|
115
|
+
else {
|
|
116
|
+
throw e;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
const myChallenge = makeEnvelopeModel(credential.challenge, EnvelopeKind.Wrap);
|
|
120
|
+
if (!myChallenge.verify(keyPair)) {
|
|
121
|
+
throw new AuthenFailed();
|
|
122
|
+
}
|
|
123
|
+
await tunnel.update({ id: credential.credential, challenge: myChallenge.wrap() });
|
|
124
|
+
const myRely = myChallenge.message();
|
|
125
|
+
[
|
|
126
|
+
myRely.pin != null ? `${RELY_PIN_PERFIX}${myRely.pin}` : null,
|
|
127
|
+
myRely.token != null ? `${RELY_TOKEN_PREFIX}${myRely.token}` : null
|
|
128
|
+
].filter(key => key != null).forEach(key => {
|
|
129
|
+
if (_subscriptions[key] != null) {
|
|
130
|
+
void _subscriptions[key]();
|
|
131
|
+
delete _subscriptions[key];
|
|
132
|
+
}
|
|
133
|
+
});
|
|
134
|
+
const token = makeEnvelopeModel(AuthenticationType.RelyHandshake);
|
|
135
|
+
token.send({ source: myRely, rely });
|
|
136
|
+
credential.type = AuthenticationType.RelyHandshake;
|
|
137
|
+
// @TODO think about it: we create a mixed object here that is credentials and authentication
|
|
138
|
+
// in the same time. Actually it's a bit dirty. And it means that auth service at the end of the
|
|
139
|
+
// day can produce both (authentication token and authentication token "ticket").
|
|
140
|
+
// Why we do it this way here: cause the consumer of authentication is the auth service itself
|
|
141
|
+
// and there is no need to "exchange" the token (what we do when we come via url redirect to another service
|
|
142
|
+
// with the one-time auth token potentially exposed as a result).
|
|
143
|
+
const _auth = credential;
|
|
144
|
+
_auth.createdAt = new Date();
|
|
145
|
+
_auth.token = token.tokenize();
|
|
146
|
+
_auth.isUser = true;
|
|
147
|
+
return { token: _auth.token };
|
|
148
|
+
}
|
|
149
|
+
};
|
|
150
|
+
return plugin;
|
|
151
|
+
};
|
|
152
|
+
//# sourceMappingURL=basic-rely.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"basic-rely.js","sourceRoot":"","sources":["../../../src/manager/plugins/basic-rely.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"export.d.ts","sourceRoot":"","sources":["../../../src/manager/plugins/export.ts"],"names":[],"mappings":"AACA,mBAAmB,YAAY,CAAA;AAC/B,cAAc,oBAAoB,CAAA;AAClC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,YAAY,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"export.js","sourceRoot":"","sources":["../../../src/manager/plugins/export.ts"],"names":[],"mappings":"AAEA,cAAc,oBAAoB,CAAA;AAClC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,YAAY,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/manager/plugins/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAE5C,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAIxD,eAAO,MAAM,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,SAAS,SAAS,EAAE,CAAC,SAAS,UAAU,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,KAAK,UAAU,CAAM,CAAA"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { AuthenticationType } from '@owlmeans/auth';
|
|
2
|
+
import { basicEd25519 } from './basic-ed25519.js';
|
|
3
|
+
import { reCaptcha } from './re-captcha.js';
|
|
4
|
+
import { basicRely } from './basic-rely.js';
|
|
5
|
+
export const plugins = {};
|
|
6
|
+
plugins[AuthenticationType.BasicEd25519] = basicEd25519;
|
|
7
|
+
plugins[AuthenticationType.ReCaptcha] = reCaptcha;
|
|
8
|
+
plugins[AuthenticationType.RelyHandshake] = basicRely;
|
|
9
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/manager/plugins/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAA;AAEnD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAEjD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAE3C,MAAM,CAAC,MAAM,OAAO,GAA6F,EAAE,CAAA;AAEnH,OAAO,CAAC,kBAAkB,CAAC,YAAY,CAAC,GAAG,YAAoD,CAAA;AAC/F,OAAO,CAAC,kBAAkB,CAAC,SAAS,CAAC,GAAG,SAAiD,CAAA;AACzF,OAAO,CAAC,kBAAkB,CAAC,aAAa,CAAC,GAAG,SAAiD,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"re-captcha.d.ts","sourceRoot":"","sources":["../../../src/manager/plugins/re-captcha.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AACxD,OAAO,KAAK,EAAE,UAAU,EAAuC,MAAM,YAAY,CAAA;AAUjF,eAAO,MAAM,SAAS,GAAI,CAAC,SAAS,SAAS,EAAE,CAAC,SAAS,UAAU,CAAC,CAAC,CAAC,WAAW,CAAC,KAAG,UAiDpF,CAAA"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { AuthenFailed, AuthenticationType, AuthPluginError, MOD_RECAPTCHA, AUTH_SCOPE, AuthRole } from '@owlmeans/auth';
|
|
2
|
+
import { PLUGINS } from '@owlmeans/config';
|
|
3
|
+
import { PluginMissconfigured } from '@owlmeans/config';
|
|
4
|
+
import { ModuleOutcome } from '@owlmeans/module';
|
|
5
|
+
import { base64 } from '@scure/base';
|
|
6
|
+
import { randomBytes } from '@noble/hashes/utils';
|
|
7
|
+
import { assertType } from './utils.js';
|
|
8
|
+
export const reCaptcha = (context) => {
|
|
9
|
+
const plugin = {
|
|
10
|
+
type: AuthenticationType.ReCaptcha,
|
|
11
|
+
init: async (request) => {
|
|
12
|
+
assertType(request.type, plugin);
|
|
13
|
+
const challenge = base64.encode(randomBytes(32));
|
|
14
|
+
return { challenge };
|
|
15
|
+
},
|
|
16
|
+
authenticate: async (credential) => {
|
|
17
|
+
const cfg = context.getConfigResource(PLUGINS);
|
|
18
|
+
const config = await cfg.get(MOD_RECAPTCHA);
|
|
19
|
+
if (config.value == null) {
|
|
20
|
+
throw new PluginMissconfigured('value');
|
|
21
|
+
}
|
|
22
|
+
const validateRecaptcha = context.module(MOD_RECAPTCHA);
|
|
23
|
+
const [result, status] = await validateRecaptcha.call({
|
|
24
|
+
body: {
|
|
25
|
+
secret: config.value,
|
|
26
|
+
response: credential.credential
|
|
27
|
+
},
|
|
28
|
+
headers: { 'content-type': 'application/x-www-form-urlencoded' }
|
|
29
|
+
});
|
|
30
|
+
if (status !== ModuleOutcome.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
|
+
}
|
|
44
|
+
return { token: '' };
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
return plugin;
|
|
48
|
+
};
|
|
49
|
+
//# sourceMappingURL=re-captcha.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"re-captcha.js","sourceRoot":"","sources":["../../../src/manager/plugins/re-captcha.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,eAAe,EAAE,aAAa,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAGvH,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAA;AAE1C,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAA;AAEvD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAEvC,MAAM,CAAC,MAAM,SAAS,GAAG,CAA+C,OAAU,EAAc,EAAE;IAChG,MAAM,MAAM,GAAe;QACzB,IAAI,EAAE,kBAAkB,CAAC,SAAS;QAElC,IAAI,EAAE,KAAK,EAAC,OAAO,EAAC,EAAE;YACpB,UAAU,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;YAEhC,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAA;YAEhD,OAAO,EAAE,SAAS,EAAE,CAAA;QACtB,CAAC;QAED,YAAY,EAAE,KAAK,EAAC,UAAU,EAAC,EAAE;YAC/B,MAAM,GAAG,GAAG,OAAO,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAA;YAC9C,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,GAAG,CAAe,aAAa,CAAC,CAAA;YACzD,IAAI,MAAM,CAAC,KAAK,IAAI,IAAI,EAAE,CAAC;gBACzB,MAAM,IAAI,oBAAoB,CAAC,OAAO,CAAC,CAAA;YACzC,CAAC;YACD,MAAM,iBAAiB,GAAG,OAAO,CAAC,MAAM,CAAkC,aAAa,CAAC,CAAA;YACxF,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,iBAAiB,CAAC,IAAI,CAAsC;gBACzF,IAAI,EAAE;oBACJ,MAAM,EAAE,MAAM,CAAC,KAAK;oBACpB,QAAQ,EAAE,UAAU,CAAC,UAAU;iBAChC;gBACD,OAAO,EAAE,EAAE,cAAc,EAAE,mCAAmC,EAAE;aACjE,CAAC,CAAA;YACF,IAAI,MAAM,KAAK,aAAa,CAAC,EAAE,EAAE,CAAC;gBAChC,MAAM,IAAI,eAAe,CAAC,eAAe,CAAC,CAAA;YAC5C,CAAC;YACD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBACpB,MAAM,IAAI,YAAY,CAAC,YAAY,GAAG,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,SAAS,CAAC,CAAC,CAAA;YACxF,CAAC;YAED,UAAU,CAAC,MAAM,GAAG,CAAC,UAAU,CAAC,CAAA;YAChC,UAAU,CAAC,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAA;YAChC,UAAU,CAAC,IAAI,GAAG,kBAAkB,CAAC,SAAS,CAAA;YAE9C,MAAM,CAAC,QAAQ,EAAE,SAAS,CAAC,GAAG,UAAU,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAiC,CAAA;YAC7F,IAAI,SAAS,IAAI,IAAI,EAAE,CAAC;gBACtB,UAAU,CAAC,SAAS,GAAG,QAAQ,CAAA;gBAE/B,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAA;YAC5B,CAAC;YAED,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,CAAA;QACtB,CAAC;KACF,CAAA;IAED,OAAO,MAAM,CAAA;AACf,CAAC,CAAA"}
|