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.
Files changed (54) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/dist/{MongoUsersManager.d.ts → definitions/MongoUsersManager.d.ts} +0 -0
  3. package/dist/definitions/MongoUsersManager.d.ts.map +1 -0
  4. package/dist/{authApolloContext.d.ts → definitions/authApolloContext.d.ts} +0 -0
  5. package/dist/definitions/authApolloContext.d.ts.map +1 -0
  6. package/dist/{authSocketIO.d.ts → definitions/authSocketIO.d.ts} +0 -0
  7. package/dist/definitions/authSocketIO.d.ts.map +1 -0
  8. package/dist/{createAuthController.d.ts → definitions/createAuthController.d.ts} +2 -2
  9. package/dist/definitions/createAuthController.d.ts.map +1 -0
  10. package/dist/{createRoutes.d.ts → definitions/createRoutes.d.ts} +0 -0
  11. package/dist/definitions/createRoutes.d.ts.map +1 -0
  12. package/dist/{index.d.ts → definitions/index.d.ts} +2 -2
  13. package/dist/definitions/index.d.ts.map +1 -0
  14. package/dist/{services → definitions/services}/authentification/AuthenticationService.d.ts +1 -1
  15. package/dist/definitions/services/authentification/AuthenticationService.d.ts.map +1 -0
  16. package/dist/{services → definitions/services}/authentification/types.d.ts +1 -1
  17. package/dist/definitions/services/authentification/types.d.ts.map +1 -0
  18. package/dist/{services → definitions/services}/user/UserAccountGoogleService.d.ts +0 -0
  19. package/dist/definitions/services/user/UserAccountGoogleService.d.ts.map +1 -0
  20. package/dist/{services → definitions/services}/user/UserAccountSlackService.d.ts +0 -0
  21. package/dist/definitions/services/user/UserAccountSlackService.d.ts.map +1 -0
  22. package/dist/{services → definitions/services}/user/UserAccountsService.d.ts +0 -0
  23. package/dist/definitions/services/user/UserAccountsService.d.ts.map +1 -0
  24. package/dist/{services → definitions/services}/user/types.d.ts +0 -0
  25. package/dist/definitions/services/user/types.d.ts.map +1 -0
  26. package/dist/{utils → definitions/utils}/cookies.d.ts +0 -0
  27. package/dist/definitions/utils/cookies.d.ts.map +1 -0
  28. package/dist/{utils → definitions/utils}/createFindConnectedAndUser.d.ts +1 -1
  29. package/dist/definitions/utils/createFindConnectedAndUser.d.ts.map +1 -0
  30. package/dist/{utils → definitions/utils}/generators.d.ts +0 -0
  31. package/dist/definitions/utils/generators.d.ts.map +1 -0
  32. package/dist/{index-node14.mjs → index-node16.mjs} +10 -10
  33. package/dist/index-node16.mjs.map +1 -0
  34. package/package.json +14 -18
  35. package/src/.eslintrc.json +1 -1
  36. package/src/createAuthController.ts +7 -8
  37. package/src/createRoutes.ts +2 -2
  38. package/src/services/authentification/AuthenticationService.ts +3 -1
  39. package/dist/MongoUsersManager.d.ts.map +0 -1
  40. package/dist/authApolloContext.d.ts.map +0 -1
  41. package/dist/authSocketIO.d.ts.map +0 -1
  42. package/dist/createAuthController.d.ts.map +0 -1
  43. package/dist/createRoutes.d.ts.map +0 -1
  44. package/dist/index-node14.mjs.map +0 -1
  45. package/dist/index.d.ts.map +0 -1
  46. package/dist/services/authentification/AuthenticationService.d.ts.map +0 -1
  47. package/dist/services/authentification/types.d.ts.map +0 -1
  48. package/dist/services/user/UserAccountGoogleService.d.ts.map +0 -1
  49. package/dist/services/user/UserAccountSlackService.d.ts.map +0 -1
  50. package/dist/services/user/UserAccountsService.d.ts.map +0 -1
  51. package/dist/services/user/types.d.ts.map +0 -1
  52. package/dist/utils/cookies.d.ts.map +0 -1
  53. package/dist/utils/createFindConnectedAndUser.d.ts.map +0 -1
  54. 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
@@ -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"}
@@ -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"}
@@ -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
- loginResponse: (ctx: Context) => Promise<void>;
18
+ response: (ctx: Context) => Promise<void>;
19
19
  logout: (ctx: Context) => Promise<void>;
20
20
  }
21
- declare type OptionalRecord<K extends keyof any, T> = {
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"}
@@ -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 declare type AuthController = AuthControllerType;
32
- export declare type AuthRoutes = AuthRoutesType;
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 declare type Strategies<StrategyKeys extends AllowedStrategyKeys> = Record<StrategyKeys, Oauth2Strategy<any>>;
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 declare type AllowedStrategyKeys = 'google' | 'slack';
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"}
@@ -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"}
@@ -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"}
@@ -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"}
@@ -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 declare type FindConnectedAndUser<U extends User> = (jwtAudience?: string, token?: string) => Promise<[null | undefined | U['_id'], null | undefined | U]>;
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"}
@@ -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 loginResponse(ctx) {
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.loginResponse, 'loginResponse');
61
+ segment.add('/response', controller.response, 'authResponse');
62
62
  segment.defaultRoute(controller.login, 'login');
63
63
  }],
64
- addScope: ['/auth/add-scope/:strategy/:scopeKey', controller.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('loginResponse', {
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-node14.mjs.map
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": "6.1.2",
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": "^14.13.1 || >=16.0.0"
18
+ "node": ">=16.0.0"
19
19
  },
20
- "main": "./dist/index-node14.mjs",
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-node14.mjs"
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.build.json",
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": "cd ../.. && yarn run eslint --report-unused-disable-directives --resolve-plugins-relative-to . --quiet packages/alp-node-auth",
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": "14",
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.19.3",
95
- "alp-node": "4.2.2",
96
- "alp-router": "5.2.2",
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": "34.3.0",
94
+ "pob-babel": "35.3.0",
99
95
  "react": "18.1.0",
100
96
  "router-segments": "5.0.0",
101
- "typescript": "4.8.4"
97
+ "typescript": "4.9.3"
102
98
  },
103
- "gitHead": "e39c7b67a1da463cbec7753aac9e4253b832f0f8"
99
+ "gitHead": "f50c153bb4ab2123eb137b375b2109734cd8fd0c"
104
100
  }
@@ -2,7 +2,7 @@
2
2
  "root": true,
3
3
  "parser": "@typescript-eslint/parser",
4
4
  "parserOptions": {
5
- "project": "packages/alp-node-auth/tsconfig.eslint.json"
5
+ "project": "packages/alp-node-auth/tsconfig.json"
6
6
  },
7
7
  "plugins": ["@typescript-eslint"],
8
8
  "extends": [
@@ -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
- loginResponse: (ctx: Context) => Promise<void>;
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 loginResponse(ctx: Context): Promise<void> {
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
 
@@ -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.loginResponse, 'loginResponse');
13
+ segment.add('/response', controller.response, 'authResponse');
14
14
  segment.defaultRoute(controller.login, 'login');
15
15
  },
16
16
  ],
17
- addScope: ['/auth/add-scope/:strategy/:scopeKey', controller.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('loginResponse', { strategy })}`;
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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"}
@@ -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"}