alp-node-auth 6.1.2 → 7.0.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/CHANGELOG.md +22 -0
- package/dist/{MongoUsersManager.d.ts → definitions/MongoUsersManager.d.ts} +0 -0
- package/dist/definitions/MongoUsersManager.d.ts.map +1 -0
- package/dist/{authApolloContext.d.ts → definitions/authApolloContext.d.ts} +0 -0
- package/dist/definitions/authApolloContext.d.ts.map +1 -0
- package/dist/{authSocketIO.d.ts → definitions/authSocketIO.d.ts} +0 -0
- package/dist/definitions/authSocketIO.d.ts.map +1 -0
- package/dist/{createAuthController.d.ts → definitions/createAuthController.d.ts} +2 -2
- package/dist/definitions/createAuthController.d.ts.map +1 -0
- package/dist/{createRoutes.d.ts → definitions/createRoutes.d.ts} +0 -0
- package/dist/definitions/createRoutes.d.ts.map +1 -0
- package/dist/{index.d.ts → definitions/index.d.ts} +2 -2
- package/dist/definitions/index.d.ts.map +1 -0
- package/dist/{services → definitions/services}/authentification/AuthenticationService.d.ts +1 -1
- package/dist/definitions/services/authentification/AuthenticationService.d.ts.map +1 -0
- package/dist/{services → definitions/services}/authentification/types.d.ts +1 -1
- package/dist/definitions/services/authentification/types.d.ts.map +1 -0
- package/dist/{services → definitions/services}/user/UserAccountGoogleService.d.ts +0 -0
- package/dist/definitions/services/user/UserAccountGoogleService.d.ts.map +1 -0
- package/dist/{services → definitions/services}/user/UserAccountSlackService.d.ts +0 -0
- package/dist/definitions/services/user/UserAccountSlackService.d.ts.map +1 -0
- package/dist/{services → definitions/services}/user/UserAccountsService.d.ts +0 -0
- package/dist/definitions/services/user/UserAccountsService.d.ts.map +1 -0
- package/dist/{services → definitions/services}/user/types.d.ts +0 -0
- package/dist/definitions/services/user/types.d.ts.map +1 -0
- package/dist/{utils → definitions/utils}/cookies.d.ts +0 -0
- package/dist/definitions/utils/cookies.d.ts.map +1 -0
- package/dist/{utils → definitions/utils}/createFindConnectedAndUser.d.ts +1 -1
- package/dist/definitions/utils/createFindConnectedAndUser.d.ts.map +1 -0
- package/dist/{utils → definitions/utils}/generators.d.ts +0 -0
- package/dist/definitions/utils/generators.d.ts.map +1 -0
- package/dist/{index-node14.mjs → index-node16.mjs} +10 -10
- package/dist/index-node16.mjs.map +1 -0
- package/package.json +14 -18
- package/src/.eslintrc.json +1 -1
- package/src/createAuthController.ts +7 -8
- package/src/createRoutes.ts +2 -2
- package/src/services/authentification/AuthenticationService.ts +3 -1
- package/dist/MongoUsersManager.d.ts.map +0 -1
- package/dist/authApolloContext.d.ts.map +0 -1
- package/dist/authSocketIO.d.ts.map +0 -1
- package/dist/createAuthController.d.ts.map +0 -1
- package/dist/createRoutes.d.ts.map +0 -1
- package/dist/index-node14.mjs.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/services/authentification/AuthenticationService.d.ts.map +0 -1
- package/dist/services/authentification/types.d.ts.map +0 -1
- package/dist/services/user/UserAccountGoogleService.d.ts.map +0 -1
- package/dist/services/user/UserAccountSlackService.d.ts.map +0 -1
- package/dist/services/user/UserAccountsService.d.ts.map +0 -1
- package/dist/services/user/types.d.ts.map +0 -1
- package/dist/utils/cookies.d.ts.map +0 -1
- package/dist/utils/createFindConnectedAndUser.d.ts.map +0 -1
- package/dist/utils/generators.d.ts.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,28 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
# [7.0.0](https://github.com/christophehurpeau/alp/compare/alp-node-auth@6.1.2...alp-node-auth@7.0.0) (2022-11-27)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
### Bug Fixes
|
|
10
|
+
|
|
11
|
+
* addScope requires to be connected ([f353e03](https://github.com/christophehurpeau/alp/commit/f353e03531de2139eaaeb224b430fcb0c77b226a))
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
### Features
|
|
15
|
+
|
|
16
|
+
* drop node 14 ([5d5f90b](https://github.com/christophehurpeau/alp/commit/5d5f90b09d8532278aba75a97f10ea90bbb27919))
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
### BREAKING CHANGES
|
|
20
|
+
|
|
21
|
+
* drop node 14
|
|
22
|
+
* route name loginResponse changed to authResponse
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
|
|
6
28
|
## [6.1.2](https://github.com/christophehurpeau/alp/compare/alp-node-auth@6.1.1...alp-node-auth@6.1.2) (2022-10-29)
|
|
7
29
|
|
|
8
30
|
**Note:** Version bump only for package alp-node-auth
|
|
File without changes
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MongoUsersManager.d.ts","sourceRoot":"","sources":["../../src/MongoUsersManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,UAAU,EAAU,MAAM,YAAY,CAAC;AACtE,OAAO,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE/D,MAAM,CAAC,OAAO,OAAO,iBAAiB,CACpC,CAAC,SAAS,IAAI,GAAG,IAAI,EACrB,UAAU,SAAS,aAAa,GAAG,aAAa;IAEhD,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;gBAET,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC;IAIhC,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAIxD,SAAS,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC;IAIjD,UAAU,CAAC,IAAI,EAAE,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC;IAIjC,QAAQ,CAAC,IAAI,EAAE,CAAC,GAAG,UAAU;IAI7B,wBAAwB,CAAC,EACvB,SAAS,EACT,MAAM,EACN,QAAQ,GACT,EAAE;QACD,SAAS,EAAE,MAAM,GAAG,MAAM,CAAC;QAC3B,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;QAClB,QAAQ,EAAE,MAAM,CAAC;KAClB,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAqB1B,aAAa,CAAC,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC;IAapD,SAAS,CAAC,gBAAgB,CAAC,IAAI,EAAE,CAAC,GAAG,aAAa;CAmBnD"}
|
|
File without changes
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"authApolloContext.d.ts","sourceRoot":"","sources":["../../src/authApolloContext.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAE5C,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,KAAK,iBAAiB,MAAM,qBAAqB,CAAC;AAiBzD,eAAO,MAAM,uBAAuB,kCAC1B,UAAU,6EAEjB,GA2BF,CAAC"}
|
|
File without changes
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"authSocketIO.d.ts","sourceRoot":"","sources":["../../src/authSocketIO.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AACjD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAEtC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,KAAK,iBAAiB,MAAM,qBAAqB,CAAC;AAMzD,eAAO,MAAM,YAAY,+BAClB,eAAe,8EAGhB,GAAG,YACG,KAAK,MAAM,EAAE,QAAQ,MAAM,MAAM,EAAE,QAAQ,CAAC,CAAC,KACtD,IAgCF,CAAC"}
|
|
@@ -15,10 +15,10 @@ export interface CreateAuthControllerParams<StrategyKeys extends AllowedStrategy
|
|
|
15
15
|
export interface AuthController {
|
|
16
16
|
login: (ctx: Context) => Promise<void>;
|
|
17
17
|
addScope: (ctx: Context) => Promise<void>;
|
|
18
|
-
|
|
18
|
+
response: (ctx: Context) => Promise<void>;
|
|
19
19
|
logout: (ctx: Context) => Promise<void>;
|
|
20
20
|
}
|
|
21
|
-
|
|
21
|
+
type OptionalRecord<K extends keyof any, T> = {
|
|
22
22
|
[P in K]?: T;
|
|
23
23
|
};
|
|
24
24
|
export interface AuthHooks<StrategyKeys extends AllowedStrategyKeys> extends AccessResponseHooks<StrategyKeys> {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createAuthController.d.ts","sourceRoot":"","sources":["../../src/createAuthController.ts"],"names":[],"mappings":";AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AACxC,OAAO,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AACtD,OAAO,KAAK,iBAAiB,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EACV,qBAAqB,EACrB,mBAAmB,EACpB,MAAM,mDAAmD,CAAC;AAC3D,OAAO,KAAK,EACV,mBAAmB,EACnB,wBAAwB,EACzB,MAAM,mCAAmC,CAAC;AAE3C,MAAM,WAAW,0BAA0B,CACzC,YAAY,SAAS,mBAAmB,EACxC,CAAC,SAAS,IAAI,GAAG,IAAI,EACrB,UAAU,SAAS,aAAa,GAAG,aAAa;IAEhD,qBAAqB,EAAE,qBAAqB,CAAC,YAAY,EAAE,CAAC,EAAE,aAAa,CAAC,CAAC;IAC7E,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,iBAAiB,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;IAC/C,eAAe,CAAC,EAAE,YAAY,CAAC;IAC/B,SAAS,CAAC,EAAE,SAAS,CAAC,YAAY,CAAC,CAAC;CACrC;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACvC,QAAQ,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1C,QAAQ,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1C,MAAM,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACzC;AAED,KAAK,cAAc,CAAC,CAAC,SAAS,MAAM,GAAG,EAAE,CAAC,IAAI;KAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;CAAE,CAAC;AAE/D,MAAM,WAAW,SAAS,CAAC,YAAY,SAAS,mBAAmB,CACjE,SAAQ,mBAAmB,CAAC,YAAY,CAAC;IACzC,cAAc,CAAC,EAAE,CAAC,WAAW,SAAS,YAAY,EAChD,QAAQ,EAAE,WAAW,EACrB,GAAG,EAAE,OAAO,KAEZ,IAAI,GACF,OAAO,CAAC,IAAI,CAAC,GACb,cAAc,CAAC,wBAAwB,CAAC,WAAW,CAAC,EAAE,GAAG,CAAC,GAC1D,OAAO,CAAC,cAAc,CAAC,wBAAwB,CAAC,WAAW,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;CACzE;AAED,wBAAgB,oBAAoB,CAClC,YAAY,SAAS,mBAAmB,EACxC,CAAC,SAAS,IAAI,GAAG,IAAI,EACrB,UAAU,SAAS,aAAa,GAAG,aAAa,EAChD,EACA,YAAY,EACZ,qBAAqB,EACrB,aAAmB,EACnB,eAAe,EACf,SAAc,GACf,EAAE,0BAA0B,CAAC,YAAY,EAAE,CAAC,EAAE,UAAU,CAAC,GAAG,cAAc,CAsD1E"}
|
|
File without changes
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createRoutes.d.ts","sourceRoot":"","sources":["../../src/createRoutes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAE7D,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,GAAG,KAAK,IAAI,CAAC,CAAC;IACxC,QAAQ,EAAE,CAAC,MAAM,EAAE,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC;IAC/C,MAAM,EAAE,CAAC,MAAM,EAAE,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC;CAC5C;AAED,eAAO,MAAM,YAAY,eAAgB,cAAc,KAAG,UAUxD,CAAC"}
|
|
@@ -28,8 +28,8 @@ declare module 'alp-types' {
|
|
|
28
28
|
logout: () => void;
|
|
29
29
|
}
|
|
30
30
|
}
|
|
31
|
-
export
|
|
32
|
-
export
|
|
31
|
+
export type AuthController = AuthControllerType;
|
|
32
|
+
export type AuthRoutes = AuthRoutesType;
|
|
33
33
|
export { AuthenticationService } from './services/authentification/AuthenticationService';
|
|
34
34
|
export default function init<StrategyKeys extends AllowedStrategyKeys = 'google', U extends User = User, USanitized extends UserSanitized = UserSanitized>({ homeRouterKey, usersManager, strategies, defaultStrategy, strategyToService, authHooks, jwtAudience, }: {
|
|
35
35
|
homeRouterKey?: string;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -26,7 +26,7 @@ export interface Strategy {
|
|
|
26
26
|
export interface Oauth2Strategy<Params extends string> extends Strategy {
|
|
27
27
|
oauth2: OAuthClient<Params>;
|
|
28
28
|
}
|
|
29
|
-
export
|
|
29
|
+
export type Strategies<StrategyKeys extends AllowedStrategyKeys> = Record<StrategyKeys, Oauth2Strategy<any>>;
|
|
30
30
|
export interface AccessResponseHooks<StrategyKeys, U extends User = User> {
|
|
31
31
|
afterLoginSuccess?: <StrategyKey extends StrategyKeys>(strategy: StrategyKey, connectedUser: U) => void | Promise<void>;
|
|
32
32
|
afterScopeUpdate?: <StrategyKey extends StrategyKeys>(strategy: StrategyKey, scopeKey: string, account: Account, user: U) => void | Promise<void>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AuthenticationService.d.ts","sourceRoot":"","sources":["../../../../src/services/authentification/AuthenticationService.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { GoogleParams, SlackParams } from 'alp-types';
|
|
2
|
-
export
|
|
2
|
+
export type AllowedStrategyKeys = 'google' | 'slack';
|
|
3
3
|
export interface AllowedMapParamsStrategy {
|
|
4
4
|
google: GoogleParams;
|
|
5
5
|
slack: SlackParams;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/services/authentification/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAE3D,MAAM,MAAM,mBAAmB,GAAG,QAAQ,GAAG,OAAO,CAAC;AAErD,MAAM,WAAW,wBAAwB;IACvC,MAAM,EAAE,YAAY,CAAC;IACrB,KAAK,EAAE,WAAW,CAAC;CACpB;AAED,MAAM,WAAW,MAAM;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,IAAI,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB"}
|
|
File without changes
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UserAccountGoogleService.d.ts","sourceRoot":"","sources":["../../../../src/services/user/UserAccountGoogleService.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAExD,MAAM,CAAC,OAAO,OAAO,wBAAwB,CAAC,SAAS,SAAS,OAAO,CACrE,YAAW,cAAc,CAAC,SAAS,CAAC;IAEpC,eAAe,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;gBAE/B,eAAe,EAAE,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAOxE,WAAW,SAAY;IAEvB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAMxC,KAAK,CAAC,OAAO,EAAE,GAAG,GAAG,GAAG;IAIxB,cAAc,CAAC,OAAO,EAAE,GAAG,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS;IAIvD,SAAS,CAAC,OAAO,EAAE,GAAG,GAAG,MAAM,EAAE;IAUjC,cAAc,CAAC,OAAO,EAAE,GAAG,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS;IAIvD,WAAW,CAAC,OAAO,EAAE,GAAG,GAAG,QAAQ;IAOnC,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE;IAI3C,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,SAAS,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE;CAOrE"}
|
|
File without changes
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UserAccountSlackService.d.ts","sourceRoot":"","sources":["../../../../src/services/user/UserAccountSlackService.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAIxD,MAAM,CAAC,OAAO,OAAO,uBAAuB,CAAC,SAAS,SAAS,OAAO,CACpE,YAAW,cAAc,CAAC,SAAS,CAAC;IAEpC,eAAe,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;gBAE/B,eAAe,EAAE,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAOxE,WAAW,SAAY;IAEvB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAMxC,KAAK,CAAC,OAAO,EAAE,GAAG,GAAG,MAAM,GAAG,IAAI;IAelC,cAAc,CAAC,OAAO,EAAE,GAAG,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS;IAIvD,SAAS,CAAC,OAAO,EAAE,GAAG,GAAG,MAAM,EAAE;IAIjC,cAAc,CAAC,OAAO,EAAE,GAAG,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS;IAIvD,WAAW,CAAC,OAAO,EAAE,GAAG,GAAG,QAAQ,GAAG,IAAI;IAI1C,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE;IAI3C,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,SAAS,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE;CAOrE"}
|
|
File without changes
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UserAccountsService.d.ts","sourceRoot":"","sources":["../../../../src/services/user/UserAccountsService.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAEtC,OAAO,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAChF,OAAO,KAAK,iBAAiB,MAAM,yBAAyB,CAAC;AAC7D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AACrE,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAI5D,eAAO,MAAM,QAAQ;;;CAGpB,CAAC;AAEF,MAAM,CAAC,OAAO,OAAO,mBAAmB,CACtC,YAAY,SAAS,mBAAmB,EACxC,CAAC,SAAS,IAAI,GAAG,IAAI,EACrB,UAAU,SAAS,aAAa,GAAG,aAAa,CAChD,SAAQ,YAAY;IACpB,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAA4C;IAE9E,YAAY,EAAE,iBAAiB,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;gBAG7C,YAAY,EAAE,iBAAiB,CAAC,CAAC,EAAE,UAAU,CAAC,EAC9C,iBAAiB,EAAE,MAAM,CAAC,YAAY,EAAE,cAAc,CAAC,GAAG,CAAC,CAAC;IAO9D,QAAQ,CACN,QAAQ,EAAE,YAAY,EACtB,QAAQ,EAAE,MAAM,EAChB,IAAI,CAAC,EAAE,CAAC,EACR,SAAS,CAAC,EAAE,SAAS,GACpB,MAAM;IAsBH,MAAM,CACV,IAAI,EAAE,CAAC,EACP,QAAQ,EAAE,YAAY,EACtB,MAAM,EAAE,YAAY,EACpB,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC;QAAE,IAAI,EAAE,CAAC,CAAC;QAAC,OAAO,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAA;KAAE,CAAC;IA+BjD,wBAAwB,CAC5B,QAAQ,EAAE,YAAY,EACtB,MAAM,EAAE,YAAY,EACpB,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,CAAC,CAAC;IAuFP,aAAa,CAAC,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC;CAI3D"}
|
|
File without changes
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/services/user/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,QAAQ;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,IAAI,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,cAAc,CAAC,SAAS,SAAS,OAAO;IACvD,eAAe,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IAC3C,WAAW,EAAE,MAAM,CAAC;IAEpB,UAAU,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;IACnD,KAAK,EAAE,CAAC,OAAO,EAAE,GAAG,KAAK,GAAG,CAAC;IAC7B,cAAc,EAAE,CAAC,OAAO,EAAE,GAAG,KAAK,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAC5D,SAAS,EAAE,CAAC,OAAO,EAAE,GAAG,KAAK,MAAM,EAAE,CAAC;IACtC,cAAc,EAAE,CAAC,OAAO,EAAE,GAAG,KAAK,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAC5D,WAAW,EAAE,CAAC,OAAO,EAAE,GAAG,KAAK,QAAQ,GAAG,IAAI,CAAC;IAC/C,eAAe,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM,EAAE,CAAC;IAChD,QAAQ,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,SAAS,EAAE,QAAQ,EAAE,MAAM,KAAK,MAAM,EAAE,CAAC;CAC1E"}
|
|
File without changes
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cookies.d.ts","sourceRoot":"","sources":["../../../src/utils/cookies.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,MAAM,CAAC;AAC5C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAGtC,eAAO,MAAM,WAAW,kBAAkB,CAAC;AAE3C,eAAO,MAAM,mBAAmB,QACzB,eAAe,YACV,KAAK,MAAM,EAAE,QAAQ,MAAM,MAAM,EAAE,QAAQ,CAAC,CAAC,KACtD,MAAM,GAAG,SAQX,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { Logger } from 'nightingale-logger';
|
|
2
2
|
import type { User, UserSanitized } from '../../types.d';
|
|
3
3
|
import type MongoUsersManager from '../MongoUsersManager';
|
|
4
|
-
export
|
|
4
|
+
export type FindConnectedAndUser<U extends User> = (jwtAudience?: string, token?: string) => Promise<[null | undefined | U['_id'], null | undefined | U]>;
|
|
5
5
|
export declare const createFindConnectedAndUser: <U extends User, USanitized extends UserSanitized>(secretKey: string, usersManager: MongoUsersManager<U, USanitized>, logger: Logger) => FindConnectedAndUser<U>;
|
|
6
6
|
//# sourceMappingURL=createFindConnectedAndUser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createFindConnectedAndUser.d.ts","sourceRoot":"","sources":["../../../src/utils/createFindConnectedAndUser.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,KAAK,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACzD,OAAO,KAAK,iBAAiB,MAAM,sBAAsB,CAAC;AA0B1D,MAAM,MAAM,oBAAoB,CAAC,CAAC,SAAS,IAAI,IAAI,CACjD,WAAW,CAAC,EAAE,MAAM,EACpB,KAAK,CAAC,EAAE,MAAM,KACX,OAAO,CAAC,CAAC,IAAI,GAAG,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,EAAE,IAAI,GAAG,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC;AAElE,eAAO,MAAM,0BAA0B,gEAI1B,MAAM,0DAET,MAAM,4BAyBf,CAAC"}
|
|
File without changes
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generators.d.ts","sourceRoot":"","sources":["../../../src/utils/generators.ts"],"names":[],"mappings":"AAKA,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAGhE;AAED,wBAAsB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAG7D"}
|
|
@@ -21,8 +21,12 @@ function createAuthController({
|
|
|
21
21
|
const params = authHooks.paramsForLogin && (await authHooks.paramsForLogin(strategy, ctx)) || {};
|
|
22
22
|
await authenticationService.redirectAuthUrl(ctx, strategy, {}, params);
|
|
23
23
|
},
|
|
24
|
+
/**
|
|
25
|
+
* Add scope in existing
|
|
26
|
+
* The user must already be connected
|
|
27
|
+
*/
|
|
24
28
|
async addScope(ctx) {
|
|
25
|
-
if (ctx.state.connected) {
|
|
29
|
+
if (!ctx.state.connected) {
|
|
26
30
|
await ctx.redirectTo(homeRouterKey);
|
|
27
31
|
return;
|
|
28
32
|
}
|
|
@@ -34,11 +38,7 @@ function createAuthController({
|
|
|
34
38
|
scopeKey
|
|
35
39
|
});
|
|
36
40
|
},
|
|
37
|
-
async
|
|
38
|
-
if (ctx.state.connected) {
|
|
39
|
-
await ctx.redirectTo(homeRouterKey);
|
|
40
|
-
return;
|
|
41
|
-
}
|
|
41
|
+
async response(ctx) {
|
|
42
42
|
const strategy = ctx.namedParam('strategy');
|
|
43
43
|
ctx.assert(strategy);
|
|
44
44
|
const connectedUser = await authenticationService.accessResponse(ctx, strategy, ctx.state.connected, {
|
|
@@ -58,10 +58,10 @@ function createAuthController({
|
|
|
58
58
|
|
|
59
59
|
const createRoutes = controller => ({
|
|
60
60
|
login: ['/login/:strategy?', segment => {
|
|
61
|
-
segment.add('/response', controller.
|
|
61
|
+
segment.add('/response', controller.response, 'authResponse');
|
|
62
62
|
segment.defaultRoute(controller.login, 'login');
|
|
63
63
|
}],
|
|
64
|
-
addScope: ['/
|
|
64
|
+
addScope: ['/add-scope/:strategy/:scopeKey', controller.addScope],
|
|
65
65
|
logout: ['/logout', controller.logout]
|
|
66
66
|
});
|
|
67
67
|
|
|
@@ -160,7 +160,7 @@ class AuthenticationService extends EventEmitter {
|
|
|
160
160
|
}
|
|
161
161
|
redirectUri(ctx, strategy) {
|
|
162
162
|
const host = `http${this.config.get('allowHttps') ? 's' : ''}://${ctx.request.host}`;
|
|
163
|
-
return `${host}${ctx.urlGenerator('
|
|
163
|
+
return `${host}${ctx.urlGenerator('authResponse', {
|
|
164
164
|
strategy
|
|
165
165
|
})}`;
|
|
166
166
|
}
|
|
@@ -735,4 +735,4 @@ function init({
|
|
|
735
735
|
}
|
|
736
736
|
|
|
737
737
|
export { AuthenticationService, MongoUsersManager, STATUSES, UserAccountGoogleService, UserAccountSlackService, authSocketIO, createAuthApolloContext, init as default };
|
|
738
|
-
//# sourceMappingURL=index-
|
|
738
|
+
//# sourceMappingURL=index-node16.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-node16.mjs","sources":["../src/createAuthController.ts","../src/createRoutes.ts","../src/utils/generators.ts","../src/services/authentification/AuthenticationService.ts","../src/services/user/UserAccountsService.ts","../src/utils/cookies.ts","../src/utils/createFindConnectedAndUser.ts","../src/MongoUsersManager.ts","../src/services/user/UserAccountGoogleService.ts","../src/services/user/UserAccountSlackService.ts","../src/authSocketIO.ts","../src/authApolloContext.ts","../src/index.ts"],"sourcesContent":["import type { Context } from 'alp-node';\nimport 'alp-router';\nimport type { User, UserSanitized } from '../types.d';\nimport type MongoUsersManager from './MongoUsersManager';\nimport type {\n AuthenticationService,\n AccessResponseHooks,\n} from './services/authentification/AuthenticationService';\nimport type {\n AllowedStrategyKeys,\n AllowedMapParamsStrategy,\n} from './services/authentification/types';\n\nexport interface CreateAuthControllerParams<\n StrategyKeys extends AllowedStrategyKeys,\n U extends User = User,\n USanitized extends UserSanitized = UserSanitized,\n> {\n authenticationService: AuthenticationService<StrategyKeys, U, UserSanitized>;\n homeRouterKey?: string;\n usersManager: MongoUsersManager<U, USanitized>;\n defaultStrategy?: StrategyKeys;\n authHooks?: AuthHooks<StrategyKeys>;\n}\n\nexport interface AuthController {\n login: (ctx: Context) => Promise<void>;\n addScope: (ctx: Context) => Promise<void>;\n response: (ctx: Context) => Promise<void>;\n logout: (ctx: Context) => Promise<void>;\n}\n\ntype OptionalRecord<K extends keyof any, T> = { [P in K]?: T };\n\nexport interface AuthHooks<StrategyKeys extends AllowedStrategyKeys>\n extends AccessResponseHooks<StrategyKeys> {\n paramsForLogin?: <StrategyKey extends StrategyKeys>(\n strategy: StrategyKey,\n ctx: Context,\n ) => // eslint-disable-next-line @typescript-eslint/no-invalid-void-type\n | void\n | Promise<void>\n | OptionalRecord<AllowedMapParamsStrategy[StrategyKey], any>\n | Promise<OptionalRecord<AllowedMapParamsStrategy[StrategyKey], any>>;\n}\n\nexport function createAuthController<\n StrategyKeys extends AllowedStrategyKeys,\n U extends User = User,\n USanitized extends UserSanitized = UserSanitized,\n>({\n usersManager,\n authenticationService,\n homeRouterKey = '/',\n defaultStrategy,\n authHooks = {},\n}: CreateAuthControllerParams<StrategyKeys, U, USanitized>): AuthController {\n return {\n async login(ctx: Context): Promise<void> {\n const strategy: StrategyKeys = (ctx.namedParam('strategy') ||\n defaultStrategy) as StrategyKeys;\n if (!strategy) throw new Error('Strategy missing');\n const params =\n (authHooks.paramsForLogin &&\n (await authHooks.paramsForLogin(strategy, ctx))) ||\n {};\n await authenticationService.redirectAuthUrl(ctx, strategy, {}, params);\n },\n\n /**\n * Add scope in existing\n * The user must already be connected\n */\n async addScope(ctx: Context): Promise<void> {\n if (!ctx.state.connected) {\n await ctx.redirectTo(homeRouterKey);\n return;\n }\n\n const strategy: StrategyKeys = (ctx.namedParam('strategy') ||\n defaultStrategy) as StrategyKeys;\n if (!strategy) throw new Error('Strategy missing');\n const scopeKey = ctx.namedParam('scopeKey');\n if (!scopeKey) throw new Error('Scope missing');\n await authenticationService.redirectAuthUrl(ctx, strategy, { scopeKey });\n },\n\n async response(ctx: Context): Promise<void> {\n const strategy: StrategyKeys = ctx.namedParam('strategy') as StrategyKeys;\n ctx.assert(strategy);\n\n const connectedUser = await authenticationService.accessResponse(\n ctx,\n strategy,\n ctx.state.connected as boolean | undefined,\n {\n afterLoginSuccess: authHooks.afterLoginSuccess,\n afterScopeUpdate: authHooks.afterScopeUpdate,\n },\n );\n const keyPath = usersManager.store.keyPath;\n await ctx.setConnected(connectedUser[keyPath], connectedUser);\n await ctx.redirectTo(homeRouterKey);\n },\n\n async logout(ctx: Context): Promise<void> {\n ctx.logout();\n await ctx.redirectTo(homeRouterKey);\n },\n };\n}\n","import type { AuthController } from './createAuthController';\n\nexport interface AuthRoutes {\n login: [string, (segment: any) => void];\n addScope: [string, AuthController['addScope']];\n logout: [string, AuthController['logout']];\n}\n\nexport const createRoutes = (controller: AuthController): AuthRoutes => ({\n login: [\n '/login/:strategy?',\n (segment: any) => {\n segment.add('/response', controller.response, 'authResponse');\n segment.defaultRoute(controller.login, 'login');\n },\n ],\n addScope: ['/add-scope/:strategy/:scopeKey', controller.addScope],\n logout: ['/logout', controller.logout],\n});\n","import { randomBytes } from 'crypto';\nimport { promisify } from 'util';\n\nconst randomBytesPromisified = promisify(randomBytes);\n\nexport async function randomBase64(size: number): Promise<string> {\n const buffer = await randomBytesPromisified(size);\n return buffer.toString('base64');\n}\n\nexport async function randomHex(size: number): Promise<string> {\n const buffer = await randomBytesPromisified(size);\n return buffer.toString('hex');\n}\n","/* eslint-disable @typescript-eslint/no-unsafe-argument */\n/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\n/* eslint-disable @typescript-eslint/no-unsafe-assignment */\n/* eslint-disable camelcase, max-lines */\nimport { EventEmitter } from 'events';\nimport 'alp-router';\nimport type { Context, NodeConfig } from 'alp-types';\nimport { Logger } from 'nightingale-logger';\nimport type { OAuthClient } from 'simple-oauth2';\nimport type { AccountId, User, Account, UserSanitized } from '../../../types.d';\nimport { randomHex } from '../../utils/generators';\nimport type UserAccountsService from '../user/UserAccountsService';\nimport type { AllowedStrategyKeys, Tokens } from './types';\n\nconst logger = new Logger('alp:auth:authentication');\n\nexport interface GenerateAuthUrlOptions {\n accessType?: string;\n grantType?: string;\n includeGrantedScopes?: boolean;\n loginHint?: string;\n prompt?: string;\n redirectUri?: string;\n scope?: string;\n state?: string;\n}\n\nexport interface GetTokensOptions {\n code: string;\n redirectUri: string;\n}\n\nexport interface Strategy {\n type: string;\n}\n\nexport interface Oauth2Strategy<Params extends string> extends Strategy {\n oauth2: OAuthClient<Params>;\n}\n\nexport type Strategies<StrategyKeys extends AllowedStrategyKeys> = Record<\n StrategyKeys,\n Oauth2Strategy<any>\n>;\n\nexport interface AccessResponseHooks<StrategyKeys, U extends User = User> {\n afterLoginSuccess?: <StrategyKey extends StrategyKeys>(\n strategy: StrategyKey,\n connectedUser: U,\n ) => void | Promise<void>;\n\n afterScopeUpdate?: <StrategyKey extends StrategyKeys>(\n strategy: StrategyKey,\n scopeKey: string,\n account: Account,\n user: U,\n ) => void | Promise<void>;\n}\n\nexport class AuthenticationService<\n StrategyKeys extends AllowedStrategyKeys,\n U extends User = User,\n USanitized extends UserSanitized = UserSanitized,\n> extends EventEmitter {\n config: NodeConfig;\n\n strategies: Strategies<StrategyKeys>;\n\n userAccountsService: UserAccountsService<StrategyKeys, U, USanitized>;\n\n constructor(\n config: NodeConfig,\n strategies: Strategies<StrategyKeys>,\n userAccountsService: UserAccountsService<StrategyKeys, U, USanitized>,\n ) {\n super();\n this.config = config;\n this.strategies = strategies;\n this.userAccountsService = userAccountsService;\n }\n\n generateAuthUrl<T extends StrategyKeys>(strategy: T, params: any): string {\n logger.debug('generateAuthUrl', { strategy, params });\n const strategyInstance = this.strategies[strategy];\n switch (strategyInstance.type) {\n case 'oauth2':\n return strategyInstance.oauth2.authorizationCode.authorizeURL(params);\n default:\n throw new Error('Invalid strategy');\n }\n }\n\n async getTokens(\n strategy: StrategyKeys,\n options: GetTokensOptions,\n ): Promise<Tokens> {\n logger.debug('getTokens', { strategy, options });\n const strategyInstance = this.strategies[strategy];\n switch (strategyInstance.type) {\n case 'oauth2': {\n const result = await strategyInstance.oauth2.authorizationCode.getToken(\n {\n code: options.code,\n redirect_uri: options.redirectUri,\n },\n );\n if (!result) return result;\n return {\n accessToken: result.access_token,\n refreshToken: result.refresh_token,\n tokenType: result.token_type,\n expiresIn: result.expires_in,\n expireDate: (() => {\n const d = new Date();\n d.setTime(d.getTime() + result.expires_in * 1000);\n return d;\n })(),\n idToken: result.id_token,\n };\n // return strategyInstance.accessToken.create(result);\n }\n\n default:\n throw new Error('Invalid stategy');\n }\n }\n\n async refreshToken(\n strategy: StrategyKeys,\n tokensParam: { refreshToken: string },\n ): Promise<Tokens> {\n logger.debug('refreshToken', { strategy });\n if (!tokensParam.refreshToken) {\n throw new Error('Missing refresh token');\n }\n const strategyInstance = this.strategies[strategy];\n switch (strategyInstance.type) {\n case 'oauth2': {\n const token = strategyInstance.oauth2.accessToken.create({\n refresh_token: tokensParam.refreshToken,\n });\n const result = await token.refresh();\n const tokens = result.token;\n return {\n accessToken: tokens.access_token,\n tokenType: tokens.token_type,\n expiresIn: tokens.expires_in,\n expireDate: (() => {\n const d = new Date();\n d.setTime(d.getTime() + tokens.expires_in * 1000);\n return d;\n })(),\n idToken: tokens.id_token,\n };\n }\n\n default:\n throw new Error('Invalid stategy');\n }\n }\n\n redirectUri(ctx: Context, strategy: string): string {\n const host = `http${this.config.get('allowHttps') ? 's' : ''}://${\n ctx.request.host\n }`;\n return `${host}${ctx.urlGenerator('authResponse', {\n strategy,\n })}`;\n }\n\n async redirectAuthUrl(\n ctx: Context,\n strategy: StrategyKeys,\n {\n refreshToken,\n scopeKey,\n user,\n accountId,\n }: {\n refreshToken?: string | undefined;\n scopeKey?: string | undefined;\n user?: U;\n accountId?: AccountId;\n },\n params?: any,\n ): Promise<void> {\n logger.debug('redirectAuthUrl', { strategy, scopeKey, refreshToken });\n const state = await randomHex(8);\n const isLoginAccess = !scopeKey || scopeKey === 'login';\n const scope = this.userAccountsService.getScope(\n strategy,\n scopeKey || 'login',\n user,\n accountId,\n );\n\n if (!scope) {\n throw new Error('Invalid empty scope');\n }\n\n ctx.cookies.set(\n `auth_${strategy}_${state}`,\n JSON.stringify({\n scopeKey,\n scope,\n isLoginAccess,\n }),\n {\n maxAge: 10 * 60 * 1000,\n httpOnly: true,\n secure: this.config.get('allowHttps'),\n },\n );\n const redirectUri = this.generateAuthUrl(strategy, {\n redirect_uri: this.redirectUri(ctx, strategy),\n scope,\n state,\n access_type: refreshToken ? 'offline' : 'online',\n ...params,\n });\n\n return ctx.redirect(redirectUri);\n }\n\n async accessResponse<StrategyKey extends StrategyKeys>(\n ctx: any,\n strategy: StrategyKey,\n isConnected: undefined | boolean,\n hooks: AccessResponseHooks<StrategyKeys, U>,\n ): Promise<U> {\n if (ctx.query.error) {\n const error: any = new Error(ctx.query.error);\n error.status = 403;\n error.expose = true;\n throw error;\n }\n\n const code = ctx.query.code;\n const state = ctx.query.state;\n const cookieName = `auth_${strategy}_${state as string}`;\n let cookie = ctx.cookies.get(cookieName);\n ctx.cookies.set(cookieName, '', { expires: new Date(1) });\n if (!cookie) {\n throw new Error('No cookie for this state');\n }\n\n cookie = JSON.parse(cookie);\n if (!cookie || !cookie.scope) {\n throw new Error('Unexpected cookie value');\n }\n\n if (!cookie.isLoginAccess) {\n if (!isConnected) {\n throw new Error('You are not connected');\n }\n }\n\n const tokens: Tokens = await this.getTokens(strategy, {\n code,\n redirectUri: this.redirectUri(ctx, strategy),\n });\n\n if (cookie.isLoginAccess) {\n const user = await this.userAccountsService.findOrCreateFromStrategy(\n strategy,\n tokens,\n cookie.scope,\n cookie.scopeKey,\n );\n\n if (hooks.afterLoginSuccess) {\n await hooks.afterLoginSuccess(strategy, user);\n }\n\n return user;\n }\n\n const connectedUser = ctx.state.user;\n const { account, user } = await this.userAccountsService.update(\n connectedUser,\n strategy,\n tokens,\n cookie.scope,\n cookie.scopeKey,\n );\n\n if (hooks.afterScopeUpdate) {\n await hooks.afterScopeUpdate(strategy, cookie.scopeKey, account, user);\n }\n\n return connectedUser;\n }\n\n refreshAccountTokens(user: U, account: Account): Promise<boolean> {\n if (\n account.tokenExpireDate &&\n account.tokenExpireDate.getTime() > Date.now()\n ) {\n return Promise.resolve(false);\n }\n return this.refreshToken(account.provider as StrategyKeys, {\n // accessToken: account.accessToken,\n refreshToken: account.refreshToken!,\n }).then((tokens: Tokens) => {\n if (!tokens) {\n // serviceGoogle.updateFields({ accessToken:null, refreshToken:null, status: .OUTDATED });\n return false;\n }\n account.accessToken = tokens.accessToken;\n account.tokenExpireDate = tokens.expireDate;\n return this.userAccountsService\n .updateAccount(user, account)\n .then(() => true);\n });\n }\n}\n","/* eslint-disable @typescript-eslint/no-shadow */\nimport { EventEmitter } from 'events';\nimport { Logger } from 'nightingale-logger';\nimport type { AccountId, User, Account, UserSanitized } from '../../../types.d';\nimport type MongoUsersManager from '../../MongoUsersManager';\nimport type { AllowedStrategyKeys } from '../authentification/types';\nimport type { AccountService, TokensObject } from './types';\n\nconst logger = new Logger('alp:auth:userAccounts');\n\nexport const STATUSES = {\n VALIDATED: 'validated',\n DELETED: 'deleted',\n};\n\nexport default class UserAccountsService<\n StrategyKeys extends AllowedStrategyKeys,\n U extends User = User,\n USanitized extends UserSanitized = UserSanitized,\n> extends EventEmitter {\n private readonly strategyToService: Record<StrategyKeys, AccountService<any>>;\n\n usersManager: MongoUsersManager<U, USanitized>;\n\n constructor(\n usersManager: MongoUsersManager<U, USanitized>,\n strategyToService: Record<StrategyKeys, AccountService<any>>,\n ) {\n super();\n this.usersManager = usersManager;\n this.strategyToService = strategyToService;\n }\n\n getScope(\n strategy: StrategyKeys,\n scopeKey: string,\n user?: U,\n accountId?: AccountId,\n ): string {\n logger.debug('getScope', { strategy, userId: user?._id });\n const service = this.strategyToService[strategy];\n if (!service) {\n throw new Error('Strategy not supported');\n }\n\n const newScope = service.scopeKeyToScope[scopeKey];\n if (!user || !accountId) {\n return newScope;\n }\n const account = user.accounts.find(\n (account) =>\n account.provider === strategy && account.accountId === accountId,\n );\n\n if (!account) {\n throw new Error('Could not found associated account');\n }\n return service.getScope(account.scope, newScope).join(' ');\n }\n\n async update(\n user: U,\n strategy: StrategyKeys,\n tokens: TokensObject,\n scope: string,\n subservice: string,\n ): Promise<{ user: U; account: U['accounts'][number] }> {\n const service = this.strategyToService[strategy];\n const profile = await service.getProfile(tokens);\n const accountId = service.getId(profile);\n const account = user.accounts.find(\n (account) =>\n account.provider === strategy && account.accountId === accountId,\n );\n if (!account) {\n // TODO check if already exists in other user => merge\n // TODO else add a new account in this user\n throw new Error('Could not found associated account');\n }\n account.status = 'valid';\n account.accessToken = tokens.accessToken;\n if (tokens.refreshToken) {\n account.refreshToken = tokens.refreshToken;\n }\n if (tokens.expireDate) {\n account.tokenExpireDate = tokens.expireDate;\n }\n account.scope = service.getScope(account.scope, scope);\n account.subservices = account.subservices || [];\n if (subservice && !account.subservices.includes(subservice)) {\n account.subservices.push(subservice);\n }\n\n await this.usersManager.replaceOne(user);\n return { user, account };\n }\n\n async findOrCreateFromStrategy(\n strategy: StrategyKeys,\n tokens: TokensObject,\n scope: string,\n subservice: string,\n ): Promise<U> {\n const service = this.strategyToService[strategy];\n if (!service) throw new Error('Strategy not supported');\n\n const profile = await service.getProfile(tokens);\n const accountId = service.getId(profile);\n if (!accountId) throw new Error('Invalid profile: no id found');\n\n const emails = service.getEmails(profile);\n\n let user: Partial<U> | undefined =\n await this.usersManager.findOneByAccountOrEmails({\n provider: service.providerKey,\n accountId,\n emails,\n });\n\n logger.info(!user ? 'create user' : 'existing user', { emails, user });\n\n if (!user) {\n user = {};\n }\n\n Object.assign(user, {\n displayName: service.getDisplayName(profile),\n fullName: service.getFullName(profile),\n status: STATUSES.VALIDATED,\n });\n\n if (!user.accounts) user.accounts = [];\n\n let account: Partial<Account> | undefined = user.accounts.find(\n (account: Account) =>\n account.provider === strategy && account.accountId === accountId,\n );\n\n if (!account) {\n account = { provider: strategy, accountId };\n // @ts-expect-error well...\n user.accounts.push(account);\n }\n\n account.name = service.getAccountName(profile);\n account.status = 'valid';\n account.profile = profile;\n account.accessToken = tokens.accessToken;\n if (tokens.refreshToken) {\n account.refreshToken = tokens.refreshToken;\n }\n if (tokens.expireDate) {\n account.tokenExpireDate = tokens.expireDate;\n }\n account.scope = service.getScope(account.scope, scope);\n\n if (!account.subservices) account.subservices = [];\n if (subservice && !account.subservices.includes(subservice)) {\n account.subservices.push(subservice);\n }\n\n if (!user.emails) user.emails = [];\n const userEmails = user.emails;\n emails.forEach((email: string) => {\n if (!userEmails.includes(email)) {\n userEmails.push(email);\n }\n });\n\n user.emailDomains = [\n // eslint-disable-next-line unicorn/no-array-reduce\n ...user.emails.reduce(\n (domains: Set<string>, email: string) =>\n domains.add(email.split('@', 2)[1]),\n new Set<string>(),\n ),\n ];\n\n const keyPath = this.usersManager.store.keyPath;\n\n if (user[keyPath]) {\n await this.usersManager.replaceOne(user as U);\n } else {\n await this.usersManager.insertOne(user as U);\n }\n\n return user as U;\n }\n\n async updateAccount(user: U, account: Account): Promise<U> {\n await this.usersManager.updateAccount(user, account);\n return user;\n }\n}\n","import type { IncomingMessage } from 'http';\nimport type { Option } from 'cookies';\nimport Cookies from 'cookies';\n\nexport const COOKIE_NAME = 'connectedUser';\n\nexport const getTokenFromRequest = (\n req: IncomingMessage,\n options?: Pick<Option, Exclude<keyof Option, 'secure'>>,\n): string | undefined => {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n const cookies = new Cookies(req, null as unknown as any, {\n ...options,\n secure: true,\n });\n\n return cookies.get(COOKIE_NAME);\n};\n","import { promisify } from 'util';\nimport type {\n GetPublicKeyOrSecret,\n Secret,\n VerifyCallback,\n VerifyOptions,\n} from 'jsonwebtoken';\nimport jsonwebtoken from 'jsonwebtoken';\nimport type { Logger } from 'nightingale-logger';\nimport type { User, UserSanitized } from '../../types.d';\nimport type MongoUsersManager from '../MongoUsersManager';\n\ntype Verify = (\n token: string,\n secretOrPublicKey: Secret | GetPublicKeyOrSecret,\n options?: VerifyOptions,\n callback?: VerifyCallback,\n) => void;\n\nconst verifyPromisified = promisify<\n Parameters<Verify>[0],\n Parameters<Verify>[1],\n Parameters<Verify>[2],\n Parameters<VerifyCallback>[1]\n>(jsonwebtoken.verify as Verify);\n\nconst createDecodeJWT =\n (secretKey: string) =>\n async (token: string, jwtAudience: string): Promise<string | undefined> => {\n const result = await verifyPromisified(token, secretKey, {\n algorithms: ['HS512'],\n audience: jwtAudience,\n });\n return (result as any)?.connected as string | undefined;\n };\n\nexport type FindConnectedAndUser<U extends User> = (\n jwtAudience?: string,\n token?: string,\n) => Promise<[null | undefined | U['_id'], null | undefined | U]>;\n\nexport const createFindConnectedAndUser = <\n U extends User,\n USanitized extends UserSanitized,\n>(\n secretKey: string,\n usersManager: MongoUsersManager<U, USanitized>,\n logger: Logger,\n): FindConnectedAndUser<U> => {\n const decodeJwt = createDecodeJWT(secretKey);\n\n const findConnectedAndUser: FindConnectedAndUser<U> = async (\n jwtAudience,\n token,\n ) => {\n if (!token || !jwtAudience) return [null, null];\n\n let connected;\n try {\n connected = await decodeJwt(token, jwtAudience);\n } catch (err: unknown) {\n logger.debug('failed to verify authentification', { err });\n }\n\n if (connected == null) return [null, null];\n\n const user = await usersManager.findConnected(connected);\n\n return [connected, user];\n };\n\n return findConnectedAndUser;\n};\n","import type { MongoInsertType, MongoStore, Update } from 'liwi-mongo';\nimport type { User, Account, UserSanitized } from '../types.d';\n\nexport default class MongoUsersManager<\n U extends User = User,\n USanitized extends UserSanitized = UserSanitized,\n> {\n store: MongoStore<U>;\n\n constructor(store: MongoStore<U>) {\n this.store = store;\n }\n\n findConnected(connected: string): Promise<U | undefined> {\n return this.store.findByKey(connected);\n }\n\n insertOne(user: MongoInsertType<U>): Promise<any> {\n return this.store.insertOne(user);\n }\n\n replaceOne(user: U): Promise<any> {\n return this.store.replaceOne(user);\n }\n\n sanitize(user: U): USanitized {\n return this.sanitizeBaseUser(user) as USanitized;\n }\n\n findOneByAccountOrEmails({\n accountId,\n emails,\n provider,\n }: {\n accountId: string | number;\n emails?: string[];\n provider: string;\n }): Promise<U | undefined> {\n let query: any = {\n 'accounts.provider': provider,\n 'accounts.accountId': accountId,\n };\n\n if (emails && emails.length > 0) {\n query = {\n $or: [\n query,\n {\n emails: { $in: emails },\n },\n ],\n };\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n return this.store.findOne(query);\n }\n\n updateAccount(user: U, account: Account): Promise<U> {\n const accountIndex = user.accounts.indexOf(account);\n if (accountIndex === -1) {\n throw new Error('Invalid account');\n }\n\n return this.store.partialUpdateOne(user, {\n $set: {\n [`accounts.${accountIndex}`]: account,\n },\n } as Update<U>);\n }\n\n protected sanitizeBaseUser(user: U): UserSanitized {\n return {\n _id: user._id,\n created: user.created,\n updated: user.updated,\n displayName: user.displayName,\n fullName: user.fullName,\n status: user.status,\n emails: user.emails,\n emailDomains: user.emailDomains,\n accounts: user.accounts.map((account: Account) => ({\n provider: account.provider,\n accountId: account.accountId,\n name: account.name,\n status: account.status,\n profile: account.profile,\n })),\n };\n }\n}\n","/* eslint-disable @typescript-eslint/no-unsafe-argument */\n/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\nimport { fetch } from 'alp-node';\nimport type { Tokens } from '../authentification/types';\nimport type { AccountService, FullName } from './types';\n\nexport default class UserAccountGoogleService<ScopeKeys extends 'login'>\n implements AccountService<ScopeKeys>\n{\n scopeKeyToScope: Record<ScopeKeys, string>;\n\n constructor(scopeKeyToScope: Record<Exclude<'login', ScopeKeys>, string>) {\n this.scopeKeyToScope = {\n ...scopeKeyToScope,\n login: 'openid profile email',\n };\n }\n\n providerKey = 'google';\n\n getProfile(tokens: Tokens): Promise<any> {\n return fetch(\n `https://www.googleapis.com/oauth2/v1/userinfo?access_token=${tokens.accessToken}`,\n ).then((response) => response.json());\n }\n\n getId(profile: any): any {\n return profile.id;\n }\n\n getAccountName(profile: any): string | null | undefined {\n return profile.email;\n }\n\n getEmails(profile: any): string[] {\n const emails: string[] = [];\n\n if (profile.email) {\n emails.push(profile.email);\n }\n\n return emails;\n }\n\n getDisplayName(profile: any): string | null | undefined {\n return profile.name;\n }\n\n getFullName(profile: any): FullName {\n return {\n givenName: profile.given_name,\n familyName: profile.family_name,\n };\n }\n\n getDefaultScope(newScope: string): string[] {\n return this.getScope(undefined, newScope);\n }\n\n getScope(oldScope: string[] | undefined, newScope: string): string[] {\n return !oldScope\n ? newScope.split(' ')\n : [...oldScope, ...newScope.split(' ')].filter(\n (item, i, ar) => ar.indexOf(item) === i,\n );\n }\n}\n","/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\nimport { fetch } from 'alp-node';\nimport type { Tokens } from '../authentification/types';\nimport type { AccountService, FullName } from './types';\n\n// https://api.slack.com/methods/users.identity\n\nexport default class UserAccountSlackService<ScopeKeys extends 'login'>\n implements AccountService<ScopeKeys>\n{\n scopeKeyToScope: Record<ScopeKeys, string>;\n\n constructor(scopeKeyToScope: Record<Exclude<'login', ScopeKeys>, string>) {\n this.scopeKeyToScope = {\n ...scopeKeyToScope,\n login: 'identity.basic identity.email identity.avatar',\n };\n }\n\n providerKey = 'google';\n\n getProfile(tokens: Tokens): Promise<any> {\n return fetch(\n `https://slack.com/api/users.identity?token=${tokens.accessToken}`,\n ).then((response) => response.json());\n }\n\n getId(profile: any): string | null {\n if (\n !profile ||\n !profile.team ||\n !profile.team.id ||\n !profile.user ||\n !profile.user.id\n ) {\n return null;\n }\n return `team:${profile.team.id as string};user:${\n profile.user.id as string\n }`;\n }\n\n getAccountName(profile: any): string | null | undefined {\n return profile.user.email;\n }\n\n getEmails(profile: any): string[] {\n return profile.user.email ? [profile.user.email] : [];\n }\n\n getDisplayName(profile: any): string | null | undefined {\n return profile.user.name;\n }\n\n getFullName(profile: any): FullName | null {\n return null;\n }\n\n getDefaultScope(newScope: string): string[] {\n return this.getScope(undefined, newScope);\n }\n\n getScope(oldScope: string[] | undefined, newScope: string): string[] {\n return !oldScope\n ? newScope.split(' ')\n : [...oldScope, ...newScope.split(' ')].filter(\n (item, i, ar) => ar.indexOf(item) === i,\n );\n }\n}\n","import type { NodeApplication } from 'alp-types';\nimport type { Option } from 'cookies';\nimport { Logger } from 'nightingale-logger';\nimport type { User } from '../types.d';\nimport type MongoUsersManager from './MongoUsersManager';\nimport { getTokenFromRequest } from './utils/cookies';\nimport { createFindConnectedAndUser } from './utils/createFindConnectedAndUser';\n\nconst logger = new Logger('alp:auth');\n\nexport const authSocketIO = <U extends User = User>(\n app: NodeApplication,\n usersManager: MongoUsersManager<U>,\n // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\n io: any,\n options?: Pick<Option, Exclude<keyof Option, 'secure'>>,\n): void => {\n const findConnectedAndUser = createFindConnectedAndUser(\n app.config.get<Map<string, string>>('authentication').get('secretKey')!,\n usersManager,\n logger,\n );\n\n const users = new Map();\n io.users = users;\n\n io.use(async (socket: any, next: any) => {\n const handshakeData = socket.request;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n const token = getTokenFromRequest(handshakeData);\n\n if (!token) return next();\n\n const [connected, user] = await findConnectedAndUser(\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n handshakeData.headers['user-agent'],\n token,\n );\n\n if (!connected || !user) return next();\n\n socket.user = user;\n users.set(socket.client.id, user);\n\n socket.on('disconnected', () => users.delete(socket.client.id));\n\n await next();\n });\n};\n","import type { IncomingMessage } from 'http';\nimport type { NodeConfig } from 'alp-types';\nimport { Logger } from 'nightingale-logger';\nimport type { User } from '../types.d';\nimport type MongoUsersManager from './MongoUsersManager';\nimport { getTokenFromRequest, COOKIE_NAME } from './utils/cookies';\nimport { createFindConnectedAndUser } from './utils/createFindConnectedAndUser';\n\nconst logger = new Logger('alp:auth');\n\nconst getTokenFromReq = (\n req: IncomingMessage & { cookies?: Record<string, string> },\n): string | undefined => {\n if (req.cookies) return req.cookies[COOKIE_NAME];\n return getTokenFromRequest(req);\n};\n\n/*\n * Not tested yet.\n * @internal\n */\nexport const createAuthApolloContext = <U extends User = User>(\n config: NodeConfig,\n usersManager: MongoUsersManager<U>,\n): any => {\n const findConnectedAndUser = createFindConnectedAndUser(\n config.get<Map<string, string>>('authentication').get('secretKey')!,\n usersManager,\n logger,\n );\n\n return async ({ req, connection }: { req: any; connection: any }) => {\n if (connection?.user) {\n return { user: connection.user };\n }\n\n if (!req) return null;\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n const token = getTokenFromReq(req);\n\n if (!token) return { user: undefined };\n\n const [, user] = await findConnectedAndUser(\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n req.headers['user-agent'],\n token,\n );\n\n return { user };\n };\n};\n","import type { IncomingMessage } from 'http';\nimport { promisify } from 'util';\nimport type { Context } from 'alp-node';\nimport type { ContextState, NodeApplication } from 'alp-types';\nimport jsonwebtoken from 'jsonwebtoken';\nimport { Logger } from 'nightingale-logger';\nimport type { User, UserSanitized } from '../types.d';\nimport type MongoUsersManager from './MongoUsersManager';\nimport type {\n AuthController as AuthControllerType,\n AuthHooks,\n} from './createAuthController';\nimport { createAuthController } from './createAuthController';\nimport type { AuthRoutes as AuthRoutesType } from './createRoutes';\nimport { createRoutes } from './createRoutes';\nimport type { Strategies } from './services/authentification/AuthenticationService';\nimport { AuthenticationService } from './services/authentification/AuthenticationService';\nimport type { AllowedStrategyKeys } from './services/authentification/types';\nimport UserAccountsService from './services/user/UserAccountsService';\nimport type { AccountService } from './services/user/types';\nimport { getTokenFromRequest, COOKIE_NAME } from './utils/cookies';\nimport { createFindConnectedAndUser } from './utils/createFindConnectedAndUser';\n\nexport { default as MongoUsersManager } from './MongoUsersManager';\nexport { default as UserAccountGoogleService } from './services/user/UserAccountGoogleService';\nexport { default as UserAccountSlackService } from './services/user/UserAccountSlackService';\nexport { authSocketIO } from './authSocketIO';\nexport { createAuthApolloContext } from './authApolloContext';\nexport { STATUSES } from './services/user/UserAccountsService';\n\ndeclare module 'alp-types' {\n // eslint-disable-next-line @typescript-eslint/no-shadow\n interface ContextState {\n connected: NonNullable<ContextState['user']>['_id'] | null | undefined;\n user: User | null | undefined;\n }\n\n interface ContextSanitizedState {\n connected:\n | NonNullable<ContextSanitizedState['user']>['_id']\n | null\n | undefined;\n user: UserSanitized | null | undefined;\n }\n\n interface BaseContext {\n setConnected: (\n connected: NonNullable<ContextState['user']>['_id'],\n user: NonNullable<ContextState['user']>,\n ) => Promise<void>;\n logout: () => void;\n }\n}\n\nconst logger = new Logger('alp:auth');\n\nconst signPromisified: any = promisify(jsonwebtoken.sign);\n\nexport type AuthController = AuthControllerType;\nexport type AuthRoutes = AuthRoutesType;\nexport { AuthenticationService } from './services/authentification/AuthenticationService';\n\nexport default function init<\n StrategyKeys extends AllowedStrategyKeys = 'google',\n U extends User = User,\n USanitized extends UserSanitized = UserSanitized,\n>({\n homeRouterKey,\n usersManager,\n strategies,\n defaultStrategy,\n strategyToService,\n authHooks,\n jwtAudience,\n}: {\n homeRouterKey?: string;\n usersManager: MongoUsersManager<U, USanitized>;\n strategies: Strategies<StrategyKeys>;\n defaultStrategy?: StrategyKeys;\n strategyToService: Record<StrategyKeys, AccountService<any>>;\n authHooks?: AuthHooks<StrategyKeys>;\n jwtAudience?: string;\n}) {\n // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\n return (app: NodeApplication) => {\n const userAccountsService = new UserAccountsService(\n usersManager,\n strategyToService,\n );\n\n const authenticationService = new AuthenticationService(\n app.config,\n strategies,\n userAccountsService,\n );\n\n const controller = createAuthController({\n usersManager,\n authenticationService,\n homeRouterKey,\n defaultStrategy,\n authHooks,\n });\n\n app.context.setConnected = async function (\n this: Context,\n connected: NonNullable<ContextState['user']>['_id'],\n user: NonNullable<ContextState['user']>,\n ): Promise<void> {\n logger.debug('setConnected', { connected });\n if (!connected) {\n throw new Error('Illegal value for setConnected');\n }\n\n this.state.connected = connected;\n this.state.user = user;\n\n const token = await signPromisified(\n { connected, time: Date.now() },\n this.config\n .get<Map<string, unknown>>('authentication')\n .get('secretKey'),\n {\n algorithm: 'HS512',\n audience: jwtAudience || this.request.headers['user-agent'],\n expiresIn: '30 days',\n },\n );\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n this.cookies.set(COOKIE_NAME, token, {\n httpOnly: true,\n secure: this.config.get('allowHttps'),\n });\n };\n\n app.context.logout = function (this: Context): void {\n delete this.state.connected;\n delete this.state.user;\n this.cookies.set(COOKIE_NAME, '', { expires: new Date(1) });\n };\n\n const getConnectedAndUser = createFindConnectedAndUser(\n app.config\n .get<Map<string, unknown>>('authentication')\n .get('secretKey') as string,\n usersManager,\n logger,\n );\n\n return {\n routes: createRoutes(controller),\n\n getConnectedAndUserFromRequest: (\n req: IncomingMessage,\n ): ReturnType<typeof getConnectedAndUser> => {\n const token = getTokenFromRequest(req);\n return getConnectedAndUser(\n jwtAudience || req.headers['user-agent'],\n token,\n );\n },\n getConnectedAndUser,\n\n middleware: async <T>(\n ctx: Context,\n next: () => T | Promise<T>,\n ): Promise<T> => {\n const token = ctx.cookies.get(COOKIE_NAME);\n const userAgent = ctx.request.headers['user-agent'];\n logger.debug('middleware', { token });\n\n const setState = (\n connected: U['_id'] | null | undefined,\n user: U | null | undefined,\n ): void => {\n ctx.state.connected = connected;\n ctx.state.user = user;\n ctx.sanitizedState.connected = connected;\n ctx.sanitizedState.user = user && usersManager.sanitize(user);\n };\n\n const [connected, user] = await getConnectedAndUser(\n jwtAudience || userAgent,\n token,\n );\n logger.debug('middleware', { connected });\n\n if (connected == null || user == null) {\n if (token) ctx.cookies.set(COOKIE_NAME, '', { expires: new Date(1) });\n setState(null, null);\n return next();\n }\n\n setState(connected, user);\n return next();\n },\n };\n };\n}\n"],"names":["createAuthController","usersManager","authenticationService","homeRouterKey","defaultStrategy","authHooks","login","ctx","strategy","namedParam","Error","params","paramsForLogin","redirectAuthUrl","addScope","state","connected","redirectTo","scopeKey","response","assert","connectedUser","accessResponse","afterLoginSuccess","afterScopeUpdate","keyPath","store","setConnected","logout","createRoutes","controller","segment","add","defaultRoute","randomBytesPromisified","promisify","randomBytes","randomHex","size","buffer","toString","logger","Logger","AuthenticationService","EventEmitter","constructor","config","strategies","userAccountsService","generateAuthUrl","debug","strategyInstance","type","oauth2","authorizationCode","authorizeURL","getTokens","options","result","getToken","code","redirect_uri","redirectUri","accessToken","access_token","refreshToken","refresh_token","tokenType","token_type","expiresIn","expires_in","expireDate","d","Date","setTime","getTime","idToken","id_token","tokensParam","token","create","refresh","tokens","host","get","request","urlGenerator","user","accountId","scope","getScope","cookies","set","JSON","stringify","isLoginAccess","maxAge","httpOnly","secure","access_type","redirect","isConnected","hooks","query","error","status","expose","cookieName","cookie","expires","parse","findOrCreateFromStrategy","account","update","refreshAccountTokens","tokenExpireDate","now","Promise","resolve","provider","then","updateAccount","STATUSES","VALIDATED","DELETED","UserAccountsService","strategyToService","userId","_id","service","newScope","scopeKeyToScope","accounts","find","join","subservice","profile","getProfile","getId","subservices","includes","push","replaceOne","emails","getEmails","findOneByAccountOrEmails","providerKey","info","Object","assign","displayName","getDisplayName","fullName","getFullName","name","getAccountName","userEmails","forEach","email","emailDomains","reduce","domains","split","Set","insertOne","COOKIE_NAME","getTokenFromRequest","req","Cookies","verifyPromisified","jsonwebtoken","verify","createDecodeJWT","secretKey","jwtAudience","algorithms","audience","createFindConnectedAndUser","decodeJwt","err","findConnected","MongoUsersManager","findByKey","sanitize","sanitizeBaseUser","length","$or","$in","findOne","accountIndex","indexOf","partialUpdateOne","$set","created","updated","map","UserAccountGoogleService","fetch","json","id","givenName","given_name","familyName","family_name","getDefaultScope","undefined","oldScope","filter","item","i","ar","UserAccountSlackService","team","authSocketIO","app","io","findConnectedAndUser","users","Map","use","socket","next","handshakeData","headers","client","on","delete","getTokenFromReq","createAuthApolloContext","connection","signPromisified","sign","init","context","time","algorithm","getConnectedAndUser","routes","getConnectedAndUserFromRequest","middleware","userAgent","setState","sanitizedState"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "alp-node-auth",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "7.0.0",
|
|
4
4
|
"description": "authentication with alp",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"alp"
|
|
@@ -15,10 +15,10 @@
|
|
|
15
15
|
"homepage": "https://github.com/christophehurpeau/alp",
|
|
16
16
|
"type": "module",
|
|
17
17
|
"engines": {
|
|
18
|
-
"node": "
|
|
18
|
+
"node": ">=16.0.0"
|
|
19
19
|
},
|
|
20
|
-
"main": "./dist/index-
|
|
21
|
-
"types": "./dist/index.d.ts",
|
|
20
|
+
"main": "./dist/index-node16.mjs",
|
|
21
|
+
"types": "./dist/definitions/index.d.ts",
|
|
22
22
|
"typesVersions": {
|
|
23
23
|
">=3.1": {
|
|
24
24
|
"strategies/*": [
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
"./package.json": "./package.json",
|
|
31
31
|
".": {
|
|
32
32
|
"node": {
|
|
33
|
-
"import": "./dist/index-
|
|
33
|
+
"import": "./dist/index-node16.mjs"
|
|
34
34
|
}
|
|
35
35
|
},
|
|
36
36
|
"./strategies/dropbox": "./strategies/dropbox.js",
|
|
@@ -40,15 +40,14 @@
|
|
|
40
40
|
"./strategies/google": "./strategies/google.js",
|
|
41
41
|
"./strategies/slack": "./strategies/slack.js"
|
|
42
42
|
},
|
|
43
|
-
"module:node": "./dist/index-node14.mjs",
|
|
44
43
|
"sideEffects": false,
|
|
45
44
|
"scripts": {
|
|
46
45
|
"build": "yarn clean:build && rollup --config rollup.config.mjs && yarn run build:definitions",
|
|
47
|
-
"build:definitions": "tsc -p tsconfig.
|
|
46
|
+
"build:definitions": "tsc -p tsconfig.json",
|
|
48
47
|
"clean": "yarn clean:build",
|
|
49
48
|
"clean:build": "pob-babel-clean-out dist",
|
|
50
49
|
"lint": "yarn run lint:eslint",
|
|
51
|
-
"lint:eslint": "
|
|
50
|
+
"lint:eslint": "yarn ../.. run eslint --report-unused-disable-directives --resolve-plugins-relative-to . --quiet packages/alp-node-auth",
|
|
52
51
|
"watch": "yarn clean:build && rollup --config rollup.config.mjs --watch"
|
|
53
52
|
},
|
|
54
53
|
"prettier": "@pob/root/prettier-config",
|
|
@@ -56,10 +55,7 @@
|
|
|
56
55
|
"babelEnvs": [
|
|
57
56
|
{
|
|
58
57
|
"target": "node",
|
|
59
|
-
"version": "
|
|
60
|
-
"formats": [
|
|
61
|
-
"es"
|
|
62
|
-
]
|
|
58
|
+
"version": "16"
|
|
63
59
|
}
|
|
64
60
|
],
|
|
65
61
|
"entries": [
|
|
@@ -91,14 +87,14 @@
|
|
|
91
87
|
"simple-oauth2": "^2.2.1"
|
|
92
88
|
},
|
|
93
89
|
"devDependencies": {
|
|
94
|
-
"@babel/core": "7.
|
|
95
|
-
"alp-node": "
|
|
96
|
-
"alp-router": "
|
|
90
|
+
"@babel/core": "7.20.2",
|
|
91
|
+
"alp-node": "5.0.0",
|
|
92
|
+
"alp-router": "6.0.0",
|
|
97
93
|
"liwi-mongo": "9.1.0",
|
|
98
|
-
"pob-babel": "
|
|
94
|
+
"pob-babel": "35.3.0",
|
|
99
95
|
"react": "18.1.0",
|
|
100
96
|
"router-segments": "5.0.0",
|
|
101
|
-
"typescript": "4.
|
|
97
|
+
"typescript": "4.9.3"
|
|
102
98
|
},
|
|
103
|
-
"gitHead": "
|
|
99
|
+
"gitHead": "f50c153bb4ab2123eb137b375b2109734cd8fd0c"
|
|
104
100
|
}
|
package/src/.eslintrc.json
CHANGED
|
@@ -26,7 +26,7 @@ export interface CreateAuthControllerParams<
|
|
|
26
26
|
export interface AuthController {
|
|
27
27
|
login: (ctx: Context) => Promise<void>;
|
|
28
28
|
addScope: (ctx: Context) => Promise<void>;
|
|
29
|
-
|
|
29
|
+
response: (ctx: Context) => Promise<void>;
|
|
30
30
|
logout: (ctx: Context) => Promise<void>;
|
|
31
31
|
}
|
|
32
32
|
|
|
@@ -67,8 +67,12 @@ export function createAuthController<
|
|
|
67
67
|
await authenticationService.redirectAuthUrl(ctx, strategy, {}, params);
|
|
68
68
|
},
|
|
69
69
|
|
|
70
|
+
/**
|
|
71
|
+
* Add scope in existing
|
|
72
|
+
* The user must already be connected
|
|
73
|
+
*/
|
|
70
74
|
async addScope(ctx: Context): Promise<void> {
|
|
71
|
-
if (ctx.state.connected) {
|
|
75
|
+
if (!ctx.state.connected) {
|
|
72
76
|
await ctx.redirectTo(homeRouterKey);
|
|
73
77
|
return;
|
|
74
78
|
}
|
|
@@ -81,12 +85,7 @@ export function createAuthController<
|
|
|
81
85
|
await authenticationService.redirectAuthUrl(ctx, strategy, { scopeKey });
|
|
82
86
|
},
|
|
83
87
|
|
|
84
|
-
async
|
|
85
|
-
if (ctx.state.connected) {
|
|
86
|
-
await ctx.redirectTo(homeRouterKey);
|
|
87
|
-
return;
|
|
88
|
-
}
|
|
89
|
-
|
|
88
|
+
async response(ctx: Context): Promise<void> {
|
|
90
89
|
const strategy: StrategyKeys = ctx.namedParam('strategy') as StrategyKeys;
|
|
91
90
|
ctx.assert(strategy);
|
|
92
91
|
|
package/src/createRoutes.ts
CHANGED
|
@@ -10,10 +10,10 @@ export const createRoutes = (controller: AuthController): AuthRoutes => ({
|
|
|
10
10
|
login: [
|
|
11
11
|
'/login/:strategy?',
|
|
12
12
|
(segment: any) => {
|
|
13
|
-
segment.add('/response', controller.
|
|
13
|
+
segment.add('/response', controller.response, 'authResponse');
|
|
14
14
|
segment.defaultRoute(controller.login, 'login');
|
|
15
15
|
},
|
|
16
16
|
],
|
|
17
|
-
addScope: ['/
|
|
17
|
+
addScope: ['/add-scope/:strategy/:scopeKey', controller.addScope],
|
|
18
18
|
logout: ['/logout', controller.logout],
|
|
19
19
|
});
|
|
@@ -163,7 +163,9 @@ export class AuthenticationService<
|
|
|
163
163
|
const host = `http${this.config.get('allowHttps') ? 's' : ''}://${
|
|
164
164
|
ctx.request.host
|
|
165
165
|
}`;
|
|
166
|
-
return `${host}${ctx.urlGenerator('
|
|
166
|
+
return `${host}${ctx.urlGenerator('authResponse', {
|
|
167
|
+
strategy,
|
|
168
|
+
})}`;
|
|
167
169
|
}
|
|
168
170
|
|
|
169
171
|
async redirectAuthUrl(
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"MongoUsersManager.d.ts","sourceRoot":"","sources":["../src/MongoUsersManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,UAAU,EAAU,MAAM,YAAY,CAAC;AACtE,OAAO,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE/D,MAAM,CAAC,OAAO,OAAO,iBAAiB,CACpC,CAAC,SAAS,IAAI,GAAG,IAAI,EACrB,UAAU,SAAS,aAAa,GAAG,aAAa;IAEhD,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;gBAET,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC;IAIhC,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAIxD,SAAS,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC;IAIjD,UAAU,CAAC,IAAI,EAAE,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC;IAIjC,QAAQ,CAAC,IAAI,EAAE,CAAC,GAAG,UAAU;IAI7B,wBAAwB,CAAC,EACvB,SAAS,EACT,MAAM,EACN,QAAQ,GACT,EAAE;QACD,SAAS,EAAE,MAAM,GAAG,MAAM,CAAC;QAC3B,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;QAClB,QAAQ,EAAE,MAAM,CAAC;KAClB,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAqB1B,aAAa,CAAC,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC;IAapD,SAAS,CAAC,gBAAgB,CAAC,IAAI,EAAE,CAAC,GAAG,aAAa;CAmBnD"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"authApolloContext.d.ts","sourceRoot":"","sources":["../src/authApolloContext.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAE5C,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,KAAK,iBAAiB,MAAM,qBAAqB,CAAC;AAiBzD,eAAO,MAAM,uBAAuB,kCAC1B,UAAU,6EAEjB,GA2BF,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"authSocketIO.d.ts","sourceRoot":"","sources":["../src/authSocketIO.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AACjD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAEtC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,KAAK,iBAAiB,MAAM,qBAAqB,CAAC;AAMzD,eAAO,MAAM,YAAY,+BAClB,eAAe,8EAGhB,GAAG,YACG,KAAK,MAAM,EAAE,QAAQ,MAAM,MAAM,EAAE,QAAQ,CAAC,CAAC,KACtD,IAgCF,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"createAuthController.d.ts","sourceRoot":"","sources":["../src/createAuthController.ts"],"names":[],"mappings":";AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AACxC,OAAO,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AACtD,OAAO,KAAK,iBAAiB,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EACV,qBAAqB,EACrB,mBAAmB,EACpB,MAAM,mDAAmD,CAAC;AAC3D,OAAO,KAAK,EACV,mBAAmB,EACnB,wBAAwB,EACzB,MAAM,mCAAmC,CAAC;AAE3C,MAAM,WAAW,0BAA0B,CACzC,YAAY,SAAS,mBAAmB,EACxC,CAAC,SAAS,IAAI,GAAG,IAAI,EACrB,UAAU,SAAS,aAAa,GAAG,aAAa;IAEhD,qBAAqB,EAAE,qBAAqB,CAAC,YAAY,EAAE,CAAC,EAAE,aAAa,CAAC,CAAC;IAC7E,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,iBAAiB,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;IAC/C,eAAe,CAAC,EAAE,YAAY,CAAC;IAC/B,SAAS,CAAC,EAAE,SAAS,CAAC,YAAY,CAAC,CAAC;CACrC;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACvC,QAAQ,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1C,aAAa,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/C,MAAM,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACzC;AAED,aAAK,cAAc,CAAC,CAAC,SAAS,MAAM,GAAG,EAAE,CAAC,IAAI;KAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;CAAE,CAAC;AAE/D,MAAM,WAAW,SAAS,CAAC,YAAY,SAAS,mBAAmB,CACjE,SAAQ,mBAAmB,CAAC,YAAY,CAAC;IACzC,cAAc,CAAC,EAAE,CAAC,WAAW,SAAS,YAAY,EAChD,QAAQ,EAAE,WAAW,EACrB,GAAG,EAAE,OAAO,KAEZ,IAAI,GACF,OAAO,CAAC,IAAI,CAAC,GACb,cAAc,CAAC,wBAAwB,CAAC,WAAW,CAAC,EAAE,GAAG,CAAC,GAC1D,OAAO,CAAC,cAAc,CAAC,wBAAwB,CAAC,WAAW,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;CACzE;AAED,wBAAgB,oBAAoB,CAClC,YAAY,SAAS,mBAAmB,EACxC,CAAC,SAAS,IAAI,GAAG,IAAI,EACrB,UAAU,SAAS,aAAa,GAAG,aAAa,EAChD,EACA,YAAY,EACZ,qBAAqB,EACrB,aAAmB,EACnB,eAAe,EACf,SAAc,GACf,EAAE,0BAA0B,CAAC,YAAY,EAAE,CAAC,EAAE,UAAU,CAAC,GAAG,cAAc,CAuD1E"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"createRoutes.d.ts","sourceRoot":"","sources":["../src/createRoutes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAE7D,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,GAAG,KAAK,IAAI,CAAC,CAAC;IACxC,QAAQ,EAAE,CAAC,MAAM,EAAE,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC;IAC/C,MAAM,EAAE,CAAC,MAAM,EAAE,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC;CAC5C;AAED,eAAO,MAAM,YAAY,eAAgB,cAAc,KAAG,UAUxD,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index-node14.mjs","sources":["../src/createAuthController.ts","../src/createRoutes.ts","../src/utils/generators.ts","../src/services/authentification/AuthenticationService.ts","../src/services/user/UserAccountsService.ts","../src/utils/cookies.ts","../src/utils/createFindConnectedAndUser.ts","../src/MongoUsersManager.ts","../src/services/user/UserAccountGoogleService.ts","../src/services/user/UserAccountSlackService.ts","../src/authSocketIO.ts","../src/authApolloContext.ts","../src/index.ts"],"sourcesContent":["import type { Context } from 'alp-node';\nimport 'alp-router';\nimport type { User, UserSanitized } from '../types.d';\nimport type MongoUsersManager from './MongoUsersManager';\nimport type {\n AuthenticationService,\n AccessResponseHooks,\n} from './services/authentification/AuthenticationService';\nimport type {\n AllowedStrategyKeys,\n AllowedMapParamsStrategy,\n} from './services/authentification/types';\n\nexport interface CreateAuthControllerParams<\n StrategyKeys extends AllowedStrategyKeys,\n U extends User = User,\n USanitized extends UserSanitized = UserSanitized,\n> {\n authenticationService: AuthenticationService<StrategyKeys, U, UserSanitized>;\n homeRouterKey?: string;\n usersManager: MongoUsersManager<U, USanitized>;\n defaultStrategy?: StrategyKeys;\n authHooks?: AuthHooks<StrategyKeys>;\n}\n\nexport interface AuthController {\n login: (ctx: Context) => Promise<void>;\n addScope: (ctx: Context) => Promise<void>;\n loginResponse: (ctx: Context) => Promise<void>;\n logout: (ctx: Context) => Promise<void>;\n}\n\ntype OptionalRecord<K extends keyof any, T> = { [P in K]?: T };\n\nexport interface AuthHooks<StrategyKeys extends AllowedStrategyKeys>\n extends AccessResponseHooks<StrategyKeys> {\n paramsForLogin?: <StrategyKey extends StrategyKeys>(\n strategy: StrategyKey,\n ctx: Context,\n ) => // eslint-disable-next-line @typescript-eslint/no-invalid-void-type\n | void\n | Promise<void>\n | OptionalRecord<AllowedMapParamsStrategy[StrategyKey], any>\n | Promise<OptionalRecord<AllowedMapParamsStrategy[StrategyKey], any>>;\n}\n\nexport function createAuthController<\n StrategyKeys extends AllowedStrategyKeys,\n U extends User = User,\n USanitized extends UserSanitized = UserSanitized,\n>({\n usersManager,\n authenticationService,\n homeRouterKey = '/',\n defaultStrategy,\n authHooks = {},\n}: CreateAuthControllerParams<StrategyKeys, U, USanitized>): AuthController {\n return {\n async login(ctx: Context): Promise<void> {\n const strategy: StrategyKeys = (ctx.namedParam('strategy') ||\n defaultStrategy) as StrategyKeys;\n if (!strategy) throw new Error('Strategy missing');\n const params =\n (authHooks.paramsForLogin &&\n (await authHooks.paramsForLogin(strategy, ctx))) ||\n {};\n await authenticationService.redirectAuthUrl(ctx, strategy, {}, params);\n },\n\n async addScope(ctx: Context): Promise<void> {\n if (ctx.state.connected) {\n await ctx.redirectTo(homeRouterKey);\n return;\n }\n\n const strategy: StrategyKeys = (ctx.namedParam('strategy') ||\n defaultStrategy) as StrategyKeys;\n if (!strategy) throw new Error('Strategy missing');\n const scopeKey = ctx.namedParam('scopeKey');\n if (!scopeKey) throw new Error('Scope missing');\n await authenticationService.redirectAuthUrl(ctx, strategy, { scopeKey });\n },\n\n async loginResponse(ctx: Context): Promise<void> {\n if (ctx.state.connected) {\n await ctx.redirectTo(homeRouterKey);\n return;\n }\n\n const strategy: StrategyKeys = ctx.namedParam('strategy') as StrategyKeys;\n ctx.assert(strategy);\n\n const connectedUser = await authenticationService.accessResponse(\n ctx,\n strategy,\n ctx.state.connected as boolean | undefined,\n {\n afterLoginSuccess: authHooks.afterLoginSuccess,\n afterScopeUpdate: authHooks.afterScopeUpdate,\n },\n );\n const keyPath = usersManager.store.keyPath;\n await ctx.setConnected(connectedUser[keyPath], connectedUser);\n await ctx.redirectTo(homeRouterKey);\n },\n\n async logout(ctx: Context): Promise<void> {\n ctx.logout();\n await ctx.redirectTo(homeRouterKey);\n },\n };\n}\n","import type { AuthController } from './createAuthController';\n\nexport interface AuthRoutes {\n login: [string, (segment: any) => void];\n addScope: [string, AuthController['addScope']];\n logout: [string, AuthController['logout']];\n}\n\nexport const createRoutes = (controller: AuthController): AuthRoutes => ({\n login: [\n '/login/:strategy?',\n (segment: any) => {\n segment.add('/response', controller.loginResponse, 'loginResponse');\n segment.defaultRoute(controller.login, 'login');\n },\n ],\n addScope: ['/auth/add-scope/:strategy/:scopeKey', controller.addScope],\n logout: ['/logout', controller.logout],\n});\n","import { randomBytes } from 'crypto';\nimport { promisify } from 'util';\n\nconst randomBytesPromisified = promisify(randomBytes);\n\nexport async function randomBase64(size: number): Promise<string> {\n const buffer = await randomBytesPromisified(size);\n return buffer.toString('base64');\n}\n\nexport async function randomHex(size: number): Promise<string> {\n const buffer = await randomBytesPromisified(size);\n return buffer.toString('hex');\n}\n","/* eslint-disable @typescript-eslint/no-unsafe-argument */\n/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\n/* eslint-disable @typescript-eslint/no-unsafe-assignment */\n/* eslint-disable camelcase, max-lines */\nimport { EventEmitter } from 'events';\nimport 'alp-router';\nimport type { Context, NodeConfig } from 'alp-types';\nimport { Logger } from 'nightingale-logger';\nimport type { OAuthClient } from 'simple-oauth2';\nimport type { AccountId, User, Account, UserSanitized } from '../../../types.d';\nimport { randomHex } from '../../utils/generators';\nimport type UserAccountsService from '../user/UserAccountsService';\nimport type { AllowedStrategyKeys, Tokens } from './types';\n\nconst logger = new Logger('alp:auth:authentication');\n\nexport interface GenerateAuthUrlOptions {\n accessType?: string;\n grantType?: string;\n includeGrantedScopes?: boolean;\n loginHint?: string;\n prompt?: string;\n redirectUri?: string;\n scope?: string;\n state?: string;\n}\n\nexport interface GetTokensOptions {\n code: string;\n redirectUri: string;\n}\n\nexport interface Strategy {\n type: string;\n}\n\nexport interface Oauth2Strategy<Params extends string> extends Strategy {\n oauth2: OAuthClient<Params>;\n}\n\nexport type Strategies<StrategyKeys extends AllowedStrategyKeys> = Record<\n StrategyKeys,\n Oauth2Strategy<any>\n>;\n\nexport interface AccessResponseHooks<StrategyKeys, U extends User = User> {\n afterLoginSuccess?: <StrategyKey extends StrategyKeys>(\n strategy: StrategyKey,\n connectedUser: U,\n ) => void | Promise<void>;\n\n afterScopeUpdate?: <StrategyKey extends StrategyKeys>(\n strategy: StrategyKey,\n scopeKey: string,\n account: Account,\n user: U,\n ) => void | Promise<void>;\n}\n\nexport class AuthenticationService<\n StrategyKeys extends AllowedStrategyKeys,\n U extends User = User,\n USanitized extends UserSanitized = UserSanitized,\n> extends EventEmitter {\n config: NodeConfig;\n\n strategies: Strategies<StrategyKeys>;\n\n userAccountsService: UserAccountsService<StrategyKeys, U, USanitized>;\n\n constructor(\n config: NodeConfig,\n strategies: Strategies<StrategyKeys>,\n userAccountsService: UserAccountsService<StrategyKeys, U, USanitized>,\n ) {\n super();\n this.config = config;\n this.strategies = strategies;\n this.userAccountsService = userAccountsService;\n }\n\n generateAuthUrl<T extends StrategyKeys>(strategy: T, params: any): string {\n logger.debug('generateAuthUrl', { strategy, params });\n const strategyInstance = this.strategies[strategy];\n switch (strategyInstance.type) {\n case 'oauth2':\n return strategyInstance.oauth2.authorizationCode.authorizeURL(params);\n default:\n throw new Error('Invalid strategy');\n }\n }\n\n async getTokens(\n strategy: StrategyKeys,\n options: GetTokensOptions,\n ): Promise<Tokens> {\n logger.debug('getTokens', { strategy, options });\n const strategyInstance = this.strategies[strategy];\n switch (strategyInstance.type) {\n case 'oauth2': {\n const result = await strategyInstance.oauth2.authorizationCode.getToken(\n {\n code: options.code,\n redirect_uri: options.redirectUri,\n },\n );\n if (!result) return result;\n return {\n accessToken: result.access_token,\n refreshToken: result.refresh_token,\n tokenType: result.token_type,\n expiresIn: result.expires_in,\n expireDate: (() => {\n const d = new Date();\n d.setTime(d.getTime() + result.expires_in * 1000);\n return d;\n })(),\n idToken: result.id_token,\n };\n // return strategyInstance.accessToken.create(result);\n }\n\n default:\n throw new Error('Invalid stategy');\n }\n }\n\n async refreshToken(\n strategy: StrategyKeys,\n tokensParam: { refreshToken: string },\n ): Promise<Tokens> {\n logger.debug('refreshToken', { strategy });\n if (!tokensParam.refreshToken) {\n throw new Error('Missing refresh token');\n }\n const strategyInstance = this.strategies[strategy];\n switch (strategyInstance.type) {\n case 'oauth2': {\n const token = strategyInstance.oauth2.accessToken.create({\n refresh_token: tokensParam.refreshToken,\n });\n const result = await token.refresh();\n const tokens = result.token;\n return {\n accessToken: tokens.access_token,\n tokenType: tokens.token_type,\n expiresIn: tokens.expires_in,\n expireDate: (() => {\n const d = new Date();\n d.setTime(d.getTime() + tokens.expires_in * 1000);\n return d;\n })(),\n idToken: tokens.id_token,\n };\n }\n\n default:\n throw new Error('Invalid stategy');\n }\n }\n\n redirectUri(ctx: Context, strategy: string): string {\n const host = `http${this.config.get('allowHttps') ? 's' : ''}://${\n ctx.request.host\n }`;\n return `${host}${ctx.urlGenerator('loginResponse', { strategy })}`;\n }\n\n async redirectAuthUrl(\n ctx: Context,\n strategy: StrategyKeys,\n {\n refreshToken,\n scopeKey,\n user,\n accountId,\n }: {\n refreshToken?: string | undefined;\n scopeKey?: string | undefined;\n user?: U;\n accountId?: AccountId;\n },\n params?: any,\n ): Promise<void> {\n logger.debug('redirectAuthUrl', { strategy, scopeKey, refreshToken });\n const state = await randomHex(8);\n const isLoginAccess = !scopeKey || scopeKey === 'login';\n const scope = this.userAccountsService.getScope(\n strategy,\n scopeKey || 'login',\n user,\n accountId,\n );\n\n if (!scope) {\n throw new Error('Invalid empty scope');\n }\n\n ctx.cookies.set(\n `auth_${strategy}_${state}`,\n JSON.stringify({\n scopeKey,\n scope,\n isLoginAccess,\n }),\n {\n maxAge: 10 * 60 * 1000,\n httpOnly: true,\n secure: this.config.get('allowHttps'),\n },\n );\n const redirectUri = this.generateAuthUrl(strategy, {\n redirect_uri: this.redirectUri(ctx, strategy),\n scope,\n state,\n access_type: refreshToken ? 'offline' : 'online',\n ...params,\n });\n\n return ctx.redirect(redirectUri);\n }\n\n async accessResponse<StrategyKey extends StrategyKeys>(\n ctx: any,\n strategy: StrategyKey,\n isConnected: undefined | boolean,\n hooks: AccessResponseHooks<StrategyKeys, U>,\n ): Promise<U> {\n if (ctx.query.error) {\n const error: any = new Error(ctx.query.error);\n error.status = 403;\n error.expose = true;\n throw error;\n }\n\n const code = ctx.query.code;\n const state = ctx.query.state;\n const cookieName = `auth_${strategy}_${state as string}`;\n let cookie = ctx.cookies.get(cookieName);\n ctx.cookies.set(cookieName, '', { expires: new Date(1) });\n if (!cookie) {\n throw new Error('No cookie for this state');\n }\n\n cookie = JSON.parse(cookie);\n if (!cookie || !cookie.scope) {\n throw new Error('Unexpected cookie value');\n }\n\n if (!cookie.isLoginAccess) {\n if (!isConnected) {\n throw new Error('You are not connected');\n }\n }\n\n const tokens: Tokens = await this.getTokens(strategy, {\n code,\n redirectUri: this.redirectUri(ctx, strategy),\n });\n\n if (cookie.isLoginAccess) {\n const user = await this.userAccountsService.findOrCreateFromStrategy(\n strategy,\n tokens,\n cookie.scope,\n cookie.scopeKey,\n );\n\n if (hooks.afterLoginSuccess) {\n await hooks.afterLoginSuccess(strategy, user);\n }\n\n return user;\n }\n\n const connectedUser = ctx.state.user;\n const { account, user } = await this.userAccountsService.update(\n connectedUser,\n strategy,\n tokens,\n cookie.scope,\n cookie.scopeKey,\n );\n\n if (hooks.afterScopeUpdate) {\n await hooks.afterScopeUpdate(strategy, cookie.scopeKey, account, user);\n }\n\n return connectedUser;\n }\n\n refreshAccountTokens(user: U, account: Account): Promise<boolean> {\n if (\n account.tokenExpireDate &&\n account.tokenExpireDate.getTime() > Date.now()\n ) {\n return Promise.resolve(false);\n }\n return this.refreshToken(account.provider as StrategyKeys, {\n // accessToken: account.accessToken,\n refreshToken: account.refreshToken!,\n }).then((tokens: Tokens) => {\n if (!tokens) {\n // serviceGoogle.updateFields({ accessToken:null, refreshToken:null, status: .OUTDATED });\n return false;\n }\n account.accessToken = tokens.accessToken;\n account.tokenExpireDate = tokens.expireDate;\n return this.userAccountsService\n .updateAccount(user, account)\n .then(() => true);\n });\n }\n}\n","/* eslint-disable @typescript-eslint/no-shadow */\nimport { EventEmitter } from 'events';\nimport { Logger } from 'nightingale-logger';\nimport type { AccountId, User, Account, UserSanitized } from '../../../types.d';\nimport type MongoUsersManager from '../../MongoUsersManager';\nimport type { AllowedStrategyKeys } from '../authentification/types';\nimport type { AccountService, TokensObject } from './types';\n\nconst logger = new Logger('alp:auth:userAccounts');\n\nexport const STATUSES = {\n VALIDATED: 'validated',\n DELETED: 'deleted',\n};\n\nexport default class UserAccountsService<\n StrategyKeys extends AllowedStrategyKeys,\n U extends User = User,\n USanitized extends UserSanitized = UserSanitized,\n> extends EventEmitter {\n private readonly strategyToService: Record<StrategyKeys, AccountService<any>>;\n\n usersManager: MongoUsersManager<U, USanitized>;\n\n constructor(\n usersManager: MongoUsersManager<U, USanitized>,\n strategyToService: Record<StrategyKeys, AccountService<any>>,\n ) {\n super();\n this.usersManager = usersManager;\n this.strategyToService = strategyToService;\n }\n\n getScope(\n strategy: StrategyKeys,\n scopeKey: string,\n user?: U,\n accountId?: AccountId,\n ): string {\n logger.debug('getScope', { strategy, userId: user?._id });\n const service = this.strategyToService[strategy];\n if (!service) {\n throw new Error('Strategy not supported');\n }\n\n const newScope = service.scopeKeyToScope[scopeKey];\n if (!user || !accountId) {\n return newScope;\n }\n const account = user.accounts.find(\n (account) =>\n account.provider === strategy && account.accountId === accountId,\n );\n\n if (!account) {\n throw new Error('Could not found associated account');\n }\n return service.getScope(account.scope, newScope).join(' ');\n }\n\n async update(\n user: U,\n strategy: StrategyKeys,\n tokens: TokensObject,\n scope: string,\n subservice: string,\n ): Promise<{ user: U; account: U['accounts'][number] }> {\n const service = this.strategyToService[strategy];\n const profile = await service.getProfile(tokens);\n const accountId = service.getId(profile);\n const account = user.accounts.find(\n (account) =>\n account.provider === strategy && account.accountId === accountId,\n );\n if (!account) {\n // TODO check if already exists in other user => merge\n // TODO else add a new account in this user\n throw new Error('Could not found associated account');\n }\n account.status = 'valid';\n account.accessToken = tokens.accessToken;\n if (tokens.refreshToken) {\n account.refreshToken = tokens.refreshToken;\n }\n if (tokens.expireDate) {\n account.tokenExpireDate = tokens.expireDate;\n }\n account.scope = service.getScope(account.scope, scope);\n account.subservices = account.subservices || [];\n if (subservice && !account.subservices.includes(subservice)) {\n account.subservices.push(subservice);\n }\n\n await this.usersManager.replaceOne(user);\n return { user, account };\n }\n\n async findOrCreateFromStrategy(\n strategy: StrategyKeys,\n tokens: TokensObject,\n scope: string,\n subservice: string,\n ): Promise<U> {\n const service = this.strategyToService[strategy];\n if (!service) throw new Error('Strategy not supported');\n\n const profile = await service.getProfile(tokens);\n const accountId = service.getId(profile);\n if (!accountId) throw new Error('Invalid profile: no id found');\n\n const emails = service.getEmails(profile);\n\n let user: Partial<U> | undefined =\n await this.usersManager.findOneByAccountOrEmails({\n provider: service.providerKey,\n accountId,\n emails,\n });\n\n logger.info(!user ? 'create user' : 'existing user', { emails, user });\n\n if (!user) {\n user = {};\n }\n\n Object.assign(user, {\n displayName: service.getDisplayName(profile),\n fullName: service.getFullName(profile),\n status: STATUSES.VALIDATED,\n });\n\n if (!user.accounts) user.accounts = [];\n\n let account: Partial<Account> | undefined = user.accounts.find(\n (account: Account) =>\n account.provider === strategy && account.accountId === accountId,\n );\n\n if (!account) {\n account = { provider: strategy, accountId };\n // @ts-expect-error well...\n user.accounts.push(account);\n }\n\n account.name = service.getAccountName(profile);\n account.status = 'valid';\n account.profile = profile;\n account.accessToken = tokens.accessToken;\n if (tokens.refreshToken) {\n account.refreshToken = tokens.refreshToken;\n }\n if (tokens.expireDate) {\n account.tokenExpireDate = tokens.expireDate;\n }\n account.scope = service.getScope(account.scope, scope);\n\n if (!account.subservices) account.subservices = [];\n if (subservice && !account.subservices.includes(subservice)) {\n account.subservices.push(subservice);\n }\n\n if (!user.emails) user.emails = [];\n const userEmails = user.emails;\n emails.forEach((email: string) => {\n if (!userEmails.includes(email)) {\n userEmails.push(email);\n }\n });\n\n user.emailDomains = [\n // eslint-disable-next-line unicorn/no-array-reduce\n ...user.emails.reduce(\n (domains: Set<string>, email: string) =>\n domains.add(email.split('@', 2)[1]),\n new Set<string>(),\n ),\n ];\n\n const keyPath = this.usersManager.store.keyPath;\n\n if (user[keyPath]) {\n await this.usersManager.replaceOne(user as U);\n } else {\n await this.usersManager.insertOne(user as U);\n }\n\n return user as U;\n }\n\n async updateAccount(user: U, account: Account): Promise<U> {\n await this.usersManager.updateAccount(user, account);\n return user;\n }\n}\n","import type { IncomingMessage } from 'http';\nimport type { Option } from 'cookies';\nimport Cookies from 'cookies';\n\nexport const COOKIE_NAME = 'connectedUser';\n\nexport const getTokenFromRequest = (\n req: IncomingMessage,\n options?: Pick<Option, Exclude<keyof Option, 'secure'>>,\n): string | undefined => {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n const cookies = new Cookies(req, null as unknown as any, {\n ...options,\n secure: true,\n });\n\n return cookies.get(COOKIE_NAME);\n};\n","import { promisify } from 'util';\nimport type {\n GetPublicKeyOrSecret,\n Secret,\n VerifyCallback,\n VerifyOptions,\n} from 'jsonwebtoken';\nimport jsonwebtoken from 'jsonwebtoken';\nimport type { Logger } from 'nightingale-logger';\nimport type { User, UserSanitized } from '../../types.d';\nimport type MongoUsersManager from '../MongoUsersManager';\n\ntype Verify = (\n token: string,\n secretOrPublicKey: Secret | GetPublicKeyOrSecret,\n options?: VerifyOptions,\n callback?: VerifyCallback,\n) => void;\n\nconst verifyPromisified = promisify<\n Parameters<Verify>[0],\n Parameters<Verify>[1],\n Parameters<Verify>[2],\n Parameters<VerifyCallback>[1]\n>(jsonwebtoken.verify as Verify);\n\nconst createDecodeJWT =\n (secretKey: string) =>\n async (token: string, jwtAudience: string): Promise<string | undefined> => {\n const result = await verifyPromisified(token, secretKey, {\n algorithms: ['HS512'],\n audience: jwtAudience,\n });\n return (result as any)?.connected as string | undefined;\n };\n\nexport type FindConnectedAndUser<U extends User> = (\n jwtAudience?: string,\n token?: string,\n) => Promise<[null | undefined | U['_id'], null | undefined | U]>;\n\nexport const createFindConnectedAndUser = <\n U extends User,\n USanitized extends UserSanitized,\n>(\n secretKey: string,\n usersManager: MongoUsersManager<U, USanitized>,\n logger: Logger,\n): FindConnectedAndUser<U> => {\n const decodeJwt = createDecodeJWT(secretKey);\n\n const findConnectedAndUser: FindConnectedAndUser<U> = async (\n jwtAudience,\n token,\n ) => {\n if (!token || !jwtAudience) return [null, null];\n\n let connected;\n try {\n connected = await decodeJwt(token, jwtAudience);\n } catch (err: unknown) {\n logger.debug('failed to verify authentification', { err });\n }\n\n if (connected == null) return [null, null];\n\n const user = await usersManager.findConnected(connected);\n\n return [connected, user];\n };\n\n return findConnectedAndUser;\n};\n","import type { MongoInsertType, MongoStore, Update } from 'liwi-mongo';\nimport type { User, Account, UserSanitized } from '../types.d';\n\nexport default class MongoUsersManager<\n U extends User = User,\n USanitized extends UserSanitized = UserSanitized,\n> {\n store: MongoStore<U>;\n\n constructor(store: MongoStore<U>) {\n this.store = store;\n }\n\n findConnected(connected: string): Promise<U | undefined> {\n return this.store.findByKey(connected);\n }\n\n insertOne(user: MongoInsertType<U>): Promise<any> {\n return this.store.insertOne(user);\n }\n\n replaceOne(user: U): Promise<any> {\n return this.store.replaceOne(user);\n }\n\n sanitize(user: U): USanitized {\n return this.sanitizeBaseUser(user) as USanitized;\n }\n\n findOneByAccountOrEmails({\n accountId,\n emails,\n provider,\n }: {\n accountId: string | number;\n emails?: string[];\n provider: string;\n }): Promise<U | undefined> {\n let query: any = {\n 'accounts.provider': provider,\n 'accounts.accountId': accountId,\n };\n\n if (emails && emails.length > 0) {\n query = {\n $or: [\n query,\n {\n emails: { $in: emails },\n },\n ],\n };\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n return this.store.findOne(query);\n }\n\n updateAccount(user: U, account: Account): Promise<U> {\n const accountIndex = user.accounts.indexOf(account);\n if (accountIndex === -1) {\n throw new Error('Invalid account');\n }\n\n return this.store.partialUpdateOne(user, {\n $set: {\n [`accounts.${accountIndex}`]: account,\n },\n } as Update<U>);\n }\n\n protected sanitizeBaseUser(user: U): UserSanitized {\n return {\n _id: user._id,\n created: user.created,\n updated: user.updated,\n displayName: user.displayName,\n fullName: user.fullName,\n status: user.status,\n emails: user.emails,\n emailDomains: user.emailDomains,\n accounts: user.accounts.map((account: Account) => ({\n provider: account.provider,\n accountId: account.accountId,\n name: account.name,\n status: account.status,\n profile: account.profile,\n })),\n };\n }\n}\n","/* eslint-disable @typescript-eslint/no-unsafe-argument */\n/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\nimport { fetch } from 'alp-node';\nimport type { Tokens } from '../authentification/types';\nimport type { AccountService, FullName } from './types';\n\nexport default class UserAccountGoogleService<ScopeKeys extends 'login'>\n implements AccountService<ScopeKeys>\n{\n scopeKeyToScope: Record<ScopeKeys, string>;\n\n constructor(scopeKeyToScope: Record<Exclude<'login', ScopeKeys>, string>) {\n this.scopeKeyToScope = {\n ...scopeKeyToScope,\n login: 'openid profile email',\n };\n }\n\n providerKey = 'google';\n\n getProfile(tokens: Tokens): Promise<any> {\n return fetch(\n `https://www.googleapis.com/oauth2/v1/userinfo?access_token=${tokens.accessToken}`,\n ).then((response) => response.json());\n }\n\n getId(profile: any): any {\n return profile.id;\n }\n\n getAccountName(profile: any): string | null | undefined {\n return profile.email;\n }\n\n getEmails(profile: any): string[] {\n const emails: string[] = [];\n\n if (profile.email) {\n emails.push(profile.email);\n }\n\n return emails;\n }\n\n getDisplayName(profile: any): string | null | undefined {\n return profile.name;\n }\n\n getFullName(profile: any): FullName {\n return {\n givenName: profile.given_name,\n familyName: profile.family_name,\n };\n }\n\n getDefaultScope(newScope: string): string[] {\n return this.getScope(undefined, newScope);\n }\n\n getScope(oldScope: string[] | undefined, newScope: string): string[] {\n return !oldScope\n ? newScope.split(' ')\n : [...oldScope, ...newScope.split(' ')].filter(\n (item, i, ar) => ar.indexOf(item) === i,\n );\n }\n}\n","/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\nimport { fetch } from 'alp-node';\nimport type { Tokens } from '../authentification/types';\nimport type { AccountService, FullName } from './types';\n\n// https://api.slack.com/methods/users.identity\n\nexport default class UserAccountSlackService<ScopeKeys extends 'login'>\n implements AccountService<ScopeKeys>\n{\n scopeKeyToScope: Record<ScopeKeys, string>;\n\n constructor(scopeKeyToScope: Record<Exclude<'login', ScopeKeys>, string>) {\n this.scopeKeyToScope = {\n ...scopeKeyToScope,\n login: 'identity.basic identity.email identity.avatar',\n };\n }\n\n providerKey = 'google';\n\n getProfile(tokens: Tokens): Promise<any> {\n return fetch(\n `https://slack.com/api/users.identity?token=${tokens.accessToken}`,\n ).then((response) => response.json());\n }\n\n getId(profile: any): string | null {\n if (\n !profile ||\n !profile.team ||\n !profile.team.id ||\n !profile.user ||\n !profile.user.id\n ) {\n return null;\n }\n return `team:${profile.team.id as string};user:${\n profile.user.id as string\n }`;\n }\n\n getAccountName(profile: any): string | null | undefined {\n return profile.user.email;\n }\n\n getEmails(profile: any): string[] {\n return profile.user.email ? [profile.user.email] : [];\n }\n\n getDisplayName(profile: any): string | null | undefined {\n return profile.user.name;\n }\n\n getFullName(profile: any): FullName | null {\n return null;\n }\n\n getDefaultScope(newScope: string): string[] {\n return this.getScope(undefined, newScope);\n }\n\n getScope(oldScope: string[] | undefined, newScope: string): string[] {\n return !oldScope\n ? newScope.split(' ')\n : [...oldScope, ...newScope.split(' ')].filter(\n (item, i, ar) => ar.indexOf(item) === i,\n );\n }\n}\n","import type { NodeApplication } from 'alp-types';\nimport type { Option } from 'cookies';\nimport { Logger } from 'nightingale-logger';\nimport type { User } from '../types.d';\nimport type MongoUsersManager from './MongoUsersManager';\nimport { getTokenFromRequest } from './utils/cookies';\nimport { createFindConnectedAndUser } from './utils/createFindConnectedAndUser';\n\nconst logger = new Logger('alp:auth');\n\nexport const authSocketIO = <U extends User = User>(\n app: NodeApplication,\n usersManager: MongoUsersManager<U>,\n // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\n io: any,\n options?: Pick<Option, Exclude<keyof Option, 'secure'>>,\n): void => {\n const findConnectedAndUser = createFindConnectedAndUser(\n app.config.get<Map<string, string>>('authentication').get('secretKey')!,\n usersManager,\n logger,\n );\n\n const users = new Map();\n io.users = users;\n\n io.use(async (socket: any, next: any) => {\n const handshakeData = socket.request;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n const token = getTokenFromRequest(handshakeData);\n\n if (!token) return next();\n\n const [connected, user] = await findConnectedAndUser(\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n handshakeData.headers['user-agent'],\n token,\n );\n\n if (!connected || !user) return next();\n\n socket.user = user;\n users.set(socket.client.id, user);\n\n socket.on('disconnected', () => users.delete(socket.client.id));\n\n await next();\n });\n};\n","import type { IncomingMessage } from 'http';\nimport type { NodeConfig } from 'alp-types';\nimport { Logger } from 'nightingale-logger';\nimport type { User } from '../types.d';\nimport type MongoUsersManager from './MongoUsersManager';\nimport { getTokenFromRequest, COOKIE_NAME } from './utils/cookies';\nimport { createFindConnectedAndUser } from './utils/createFindConnectedAndUser';\n\nconst logger = new Logger('alp:auth');\n\nconst getTokenFromReq = (\n req: IncomingMessage & { cookies?: Record<string, string> },\n): string | undefined => {\n if (req.cookies) return req.cookies[COOKIE_NAME];\n return getTokenFromRequest(req);\n};\n\n/*\n * Not tested yet.\n * @internal\n */\nexport const createAuthApolloContext = <U extends User = User>(\n config: NodeConfig,\n usersManager: MongoUsersManager<U>,\n): any => {\n const findConnectedAndUser = createFindConnectedAndUser(\n config.get<Map<string, string>>('authentication').get('secretKey')!,\n usersManager,\n logger,\n );\n\n return async ({ req, connection }: { req: any; connection: any }) => {\n if (connection?.user) {\n return { user: connection.user };\n }\n\n if (!req) return null;\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n const token = getTokenFromReq(req);\n\n if (!token) return { user: undefined };\n\n const [, user] = await findConnectedAndUser(\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n req.headers['user-agent'],\n token,\n );\n\n return { user };\n };\n};\n","import type { IncomingMessage } from 'http';\nimport { promisify } from 'util';\nimport type { Context } from 'alp-node';\nimport type { ContextState, NodeApplication } from 'alp-types';\nimport jsonwebtoken from 'jsonwebtoken';\nimport { Logger } from 'nightingale-logger';\nimport type { User, UserSanitized } from '../types.d';\nimport type MongoUsersManager from './MongoUsersManager';\nimport type {\n AuthController as AuthControllerType,\n AuthHooks,\n} from './createAuthController';\nimport { createAuthController } from './createAuthController';\nimport type { AuthRoutes as AuthRoutesType } from './createRoutes';\nimport { createRoutes } from './createRoutes';\nimport type { Strategies } from './services/authentification/AuthenticationService';\nimport { AuthenticationService } from './services/authentification/AuthenticationService';\nimport type { AllowedStrategyKeys } from './services/authentification/types';\nimport UserAccountsService from './services/user/UserAccountsService';\nimport type { AccountService } from './services/user/types';\nimport { getTokenFromRequest, COOKIE_NAME } from './utils/cookies';\nimport { createFindConnectedAndUser } from './utils/createFindConnectedAndUser';\n\nexport { default as MongoUsersManager } from './MongoUsersManager';\nexport { default as UserAccountGoogleService } from './services/user/UserAccountGoogleService';\nexport { default as UserAccountSlackService } from './services/user/UserAccountSlackService';\nexport { authSocketIO } from './authSocketIO';\nexport { createAuthApolloContext } from './authApolloContext';\nexport { STATUSES } from './services/user/UserAccountsService';\n\ndeclare module 'alp-types' {\n // eslint-disable-next-line @typescript-eslint/no-shadow\n interface ContextState {\n connected: NonNullable<ContextState['user']>['_id'] | null | undefined;\n user: User | null | undefined;\n }\n\n interface ContextSanitizedState {\n connected:\n | NonNullable<ContextSanitizedState['user']>['_id']\n | null\n | undefined;\n user: UserSanitized | null | undefined;\n }\n\n interface BaseContext {\n setConnected: (\n connected: NonNullable<ContextState['user']>['_id'],\n user: NonNullable<ContextState['user']>,\n ) => Promise<void>;\n logout: () => void;\n }\n}\n\nconst logger = new Logger('alp:auth');\n\nconst signPromisified: any = promisify(jsonwebtoken.sign);\n\nexport type AuthController = AuthControllerType;\nexport type AuthRoutes = AuthRoutesType;\nexport { AuthenticationService } from './services/authentification/AuthenticationService';\n\nexport default function init<\n StrategyKeys extends AllowedStrategyKeys = 'google',\n U extends User = User,\n USanitized extends UserSanitized = UserSanitized,\n>({\n homeRouterKey,\n usersManager,\n strategies,\n defaultStrategy,\n strategyToService,\n authHooks,\n jwtAudience,\n}: {\n homeRouterKey?: string;\n usersManager: MongoUsersManager<U, USanitized>;\n strategies: Strategies<StrategyKeys>;\n defaultStrategy?: StrategyKeys;\n strategyToService: Record<StrategyKeys, AccountService<any>>;\n authHooks?: AuthHooks<StrategyKeys>;\n jwtAudience?: string;\n}) {\n // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\n return (app: NodeApplication) => {\n const userAccountsService = new UserAccountsService(\n usersManager,\n strategyToService,\n );\n\n const authenticationService = new AuthenticationService(\n app.config,\n strategies,\n userAccountsService,\n );\n\n const controller = createAuthController({\n usersManager,\n authenticationService,\n homeRouterKey,\n defaultStrategy,\n authHooks,\n });\n\n app.context.setConnected = async function (\n this: Context,\n connected: NonNullable<ContextState['user']>['_id'],\n user: NonNullable<ContextState['user']>,\n ): Promise<void> {\n logger.debug('setConnected', { connected });\n if (!connected) {\n throw new Error('Illegal value for setConnected');\n }\n\n this.state.connected = connected;\n this.state.user = user;\n\n const token = await signPromisified(\n { connected, time: Date.now() },\n this.config\n .get<Map<string, unknown>>('authentication')\n .get('secretKey'),\n {\n algorithm: 'HS512',\n audience: jwtAudience || this.request.headers['user-agent'],\n expiresIn: '30 days',\n },\n );\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n this.cookies.set(COOKIE_NAME, token, {\n httpOnly: true,\n secure: this.config.get('allowHttps'),\n });\n };\n\n app.context.logout = function (this: Context): void {\n delete this.state.connected;\n delete this.state.user;\n this.cookies.set(COOKIE_NAME, '', { expires: new Date(1) });\n };\n\n const getConnectedAndUser = createFindConnectedAndUser(\n app.config\n .get<Map<string, unknown>>('authentication')\n .get('secretKey') as string,\n usersManager,\n logger,\n );\n\n return {\n routes: createRoutes(controller),\n\n getConnectedAndUserFromRequest: (\n req: IncomingMessage,\n ): ReturnType<typeof getConnectedAndUser> => {\n const token = getTokenFromRequest(req);\n return getConnectedAndUser(\n jwtAudience || req.headers['user-agent'],\n token,\n );\n },\n getConnectedAndUser,\n\n middleware: async <T>(\n ctx: Context,\n next: () => T | Promise<T>,\n ): Promise<T> => {\n const token = ctx.cookies.get(COOKIE_NAME);\n const userAgent = ctx.request.headers['user-agent'];\n logger.debug('middleware', { token });\n\n const setState = (\n connected: U['_id'] | null | undefined,\n user: U | null | undefined,\n ): void => {\n ctx.state.connected = connected;\n ctx.state.user = user;\n ctx.sanitizedState.connected = connected;\n ctx.sanitizedState.user = user && usersManager.sanitize(user);\n };\n\n const [connected, user] = await getConnectedAndUser(\n jwtAudience || userAgent,\n token,\n );\n logger.debug('middleware', { connected });\n\n if (connected == null || user == null) {\n if (token) ctx.cookies.set(COOKIE_NAME, '', { expires: new Date(1) });\n setState(null, null);\n return next();\n }\n\n setState(connected, user);\n return next();\n },\n };\n };\n}\n"],"names":["createAuthController","usersManager","authenticationService","homeRouterKey","defaultStrategy","authHooks","login","ctx","strategy","namedParam","Error","params","paramsForLogin","redirectAuthUrl","addScope","state","connected","redirectTo","scopeKey","loginResponse","assert","connectedUser","accessResponse","afterLoginSuccess","afterScopeUpdate","keyPath","store","setConnected","logout","createRoutes","controller","segment","add","defaultRoute","randomBytesPromisified","promisify","randomBytes","randomHex","size","buffer","toString","logger","Logger","AuthenticationService","EventEmitter","constructor","config","strategies","userAccountsService","generateAuthUrl","debug","strategyInstance","type","oauth2","authorizationCode","authorizeURL","getTokens","options","result","getToken","code","redirect_uri","redirectUri","accessToken","access_token","refreshToken","refresh_token","tokenType","token_type","expiresIn","expires_in","expireDate","d","Date","setTime","getTime","idToken","id_token","tokensParam","token","create","refresh","tokens","host","get","request","urlGenerator","user","accountId","scope","getScope","cookies","set","JSON","stringify","isLoginAccess","maxAge","httpOnly","secure","access_type","redirect","isConnected","hooks","query","error","status","expose","cookieName","cookie","expires","parse","findOrCreateFromStrategy","account","update","refreshAccountTokens","tokenExpireDate","now","Promise","resolve","provider","then","updateAccount","STATUSES","VALIDATED","DELETED","UserAccountsService","strategyToService","userId","_id","service","newScope","scopeKeyToScope","accounts","find","join","subservice","profile","getProfile","getId","subservices","includes","push","replaceOne","emails","getEmails","findOneByAccountOrEmails","providerKey","info","Object","assign","displayName","getDisplayName","fullName","getFullName","name","getAccountName","userEmails","forEach","email","emailDomains","reduce","domains","split","Set","insertOne","COOKIE_NAME","getTokenFromRequest","req","Cookies","verifyPromisified","jsonwebtoken","verify","createDecodeJWT","secretKey","jwtAudience","algorithms","audience","createFindConnectedAndUser","decodeJwt","err","findConnected","MongoUsersManager","findByKey","sanitize","sanitizeBaseUser","length","$or","$in","findOne","accountIndex","indexOf","partialUpdateOne","$set","created","updated","map","UserAccountGoogleService","fetch","response","json","id","givenName","given_name","familyName","family_name","getDefaultScope","undefined","oldScope","filter","item","i","ar","UserAccountSlackService","team","authSocketIO","app","io","findConnectedAndUser","users","Map","use","socket","next","handshakeData","headers","client","on","delete","getTokenFromReq","createAuthApolloContext","connection","signPromisified","sign","init","context","time","algorithm","getConnectedAndUser","routes","getConnectedAndUserFromRequest","middleware","userAgent","setState","sanitizedState"],"mappings":"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"}
|
package/dist/index.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"AuthenticationService.d.ts","sourceRoot":"","sources":["../../../src/services/authentification/AuthenticationService.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/services/authentification/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAE3D,oBAAY,mBAAmB,GAAG,QAAQ,GAAG,OAAO,CAAC;AAErD,MAAM,WAAW,wBAAwB;IACvC,MAAM,EAAE,YAAY,CAAC;IACrB,KAAK,EAAE,WAAW,CAAC;CACpB;AAED,MAAM,WAAW,MAAM;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,IAAI,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"UserAccountGoogleService.d.ts","sourceRoot":"","sources":["../../../src/services/user/UserAccountGoogleService.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAExD,MAAM,CAAC,OAAO,OAAO,wBAAwB,CAAC,SAAS,SAAS,OAAO,CACrE,YAAW,cAAc,CAAC,SAAS,CAAC;IAEpC,eAAe,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;gBAE/B,eAAe,EAAE,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAOxE,WAAW,SAAY;IAEvB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAMxC,KAAK,CAAC,OAAO,EAAE,GAAG,GAAG,GAAG;IAIxB,cAAc,CAAC,OAAO,EAAE,GAAG,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS;IAIvD,SAAS,CAAC,OAAO,EAAE,GAAG,GAAG,MAAM,EAAE;IAUjC,cAAc,CAAC,OAAO,EAAE,GAAG,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS;IAIvD,WAAW,CAAC,OAAO,EAAE,GAAG,GAAG,QAAQ;IAOnC,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE;IAI3C,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,SAAS,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE;CAOrE"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"UserAccountSlackService.d.ts","sourceRoot":"","sources":["../../../src/services/user/UserAccountSlackService.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAIxD,MAAM,CAAC,OAAO,OAAO,uBAAuB,CAAC,SAAS,SAAS,OAAO,CACpE,YAAW,cAAc,CAAC,SAAS,CAAC;IAEpC,eAAe,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;gBAE/B,eAAe,EAAE,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAOxE,WAAW,SAAY;IAEvB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAMxC,KAAK,CAAC,OAAO,EAAE,GAAG,GAAG,MAAM,GAAG,IAAI;IAelC,cAAc,CAAC,OAAO,EAAE,GAAG,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS;IAIvD,SAAS,CAAC,OAAO,EAAE,GAAG,GAAG,MAAM,EAAE;IAIjC,cAAc,CAAC,OAAO,EAAE,GAAG,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS;IAIvD,WAAW,CAAC,OAAO,EAAE,GAAG,GAAG,QAAQ,GAAG,IAAI;IAI1C,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE;IAI3C,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,SAAS,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE;CAOrE"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"UserAccountsService.d.ts","sourceRoot":"","sources":["../../../src/services/user/UserAccountsService.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAEtC,OAAO,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAChF,OAAO,KAAK,iBAAiB,MAAM,yBAAyB,CAAC;AAC7D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AACrE,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAI5D,eAAO,MAAM,QAAQ;;;CAGpB,CAAC;AAEF,MAAM,CAAC,OAAO,OAAO,mBAAmB,CACtC,YAAY,SAAS,mBAAmB,EACxC,CAAC,SAAS,IAAI,GAAG,IAAI,EACrB,UAAU,SAAS,aAAa,GAAG,aAAa,CAChD,SAAQ,YAAY;IACpB,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAA4C;IAE9E,YAAY,EAAE,iBAAiB,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;gBAG7C,YAAY,EAAE,iBAAiB,CAAC,CAAC,EAAE,UAAU,CAAC,EAC9C,iBAAiB,EAAE,MAAM,CAAC,YAAY,EAAE,cAAc,CAAC,GAAG,CAAC,CAAC;IAO9D,QAAQ,CACN,QAAQ,EAAE,YAAY,EACtB,QAAQ,EAAE,MAAM,EAChB,IAAI,CAAC,EAAE,CAAC,EACR,SAAS,CAAC,EAAE,SAAS,GACpB,MAAM;IAsBH,MAAM,CACV,IAAI,EAAE,CAAC,EACP,QAAQ,EAAE,YAAY,EACtB,MAAM,EAAE,YAAY,EACpB,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC;QAAE,IAAI,EAAE,CAAC,CAAC;QAAC,OAAO,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAA;KAAE,CAAC;IA+BjD,wBAAwB,CAC5B,QAAQ,EAAE,YAAY,EACtB,MAAM,EAAE,YAAY,EACpB,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,CAAC,CAAC;IAuFP,aAAa,CAAC,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC;CAI3D"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/services/user/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,QAAQ;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,IAAI,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,cAAc,CAAC,SAAS,SAAS,OAAO;IACvD,eAAe,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IAC3C,WAAW,EAAE,MAAM,CAAC;IAEpB,UAAU,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;IACnD,KAAK,EAAE,CAAC,OAAO,EAAE,GAAG,KAAK,GAAG,CAAC;IAC7B,cAAc,EAAE,CAAC,OAAO,EAAE,GAAG,KAAK,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAC5D,SAAS,EAAE,CAAC,OAAO,EAAE,GAAG,KAAK,MAAM,EAAE,CAAC;IACtC,cAAc,EAAE,CAAC,OAAO,EAAE,GAAG,KAAK,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAC5D,WAAW,EAAE,CAAC,OAAO,EAAE,GAAG,KAAK,QAAQ,GAAG,IAAI,CAAC;IAC/C,eAAe,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM,EAAE,CAAC;IAChD,QAAQ,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,SAAS,EAAE,QAAQ,EAAE,MAAM,KAAK,MAAM,EAAE,CAAC;CAC1E"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cookies.d.ts","sourceRoot":"","sources":["../../src/utils/cookies.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,MAAM,CAAC;AAC5C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAGtC,eAAO,MAAM,WAAW,kBAAkB,CAAC;AAE3C,eAAO,MAAM,mBAAmB,QACzB,eAAe,YACV,KAAK,MAAM,EAAE,QAAQ,MAAM,MAAM,EAAE,QAAQ,CAAC,CAAC,KACtD,MAAM,GAAG,SAQX,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"createFindConnectedAndUser.d.ts","sourceRoot":"","sources":["../../src/utils/createFindConnectedAndUser.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,KAAK,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACzD,OAAO,KAAK,iBAAiB,MAAM,sBAAsB,CAAC;AA0B1D,oBAAY,oBAAoB,CAAC,CAAC,SAAS,IAAI,IAAI,CACjD,WAAW,CAAC,EAAE,MAAM,EACpB,KAAK,CAAC,EAAE,MAAM,KACX,OAAO,CAAC,CAAC,IAAI,GAAG,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,EAAE,IAAI,GAAG,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC;AAElE,eAAO,MAAM,0BAA0B,gEAI1B,MAAM,0DAET,MAAM,4BAyBf,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"generators.d.ts","sourceRoot":"","sources":["../../src/utils/generators.ts"],"names":[],"mappings":"AAKA,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAGhE;AAED,wBAAsB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAG7D"}
|