@furystack/rest-service 11.0.7 → 12.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (104) hide show
  1. package/CHANGELOG.md +120 -0
  2. package/README.md +3 -2
  3. package/esm/actions/index.d.ts +1 -0
  4. package/esm/actions/index.d.ts.map +1 -1
  5. package/esm/actions/index.js +1 -0
  6. package/esm/actions/index.js.map +1 -1
  7. package/esm/actions/login.d.ts +7 -3
  8. package/esm/actions/login.d.ts.map +1 -1
  9. package/esm/actions/login.js +11 -5
  10. package/esm/actions/login.js.map +1 -1
  11. package/esm/actions/password-login-action.d.ts +24 -0
  12. package/esm/actions/password-login-action.d.ts.map +1 -0
  13. package/esm/actions/password-login-action.js +31 -0
  14. package/esm/actions/password-login-action.js.map +1 -0
  15. package/esm/actions/password-login-action.spec.d.ts +2 -0
  16. package/esm/actions/password-login-action.spec.d.ts.map +1 -0
  17. package/esm/actions/password-login-action.spec.js +105 -0
  18. package/esm/actions/password-login-action.spec.js.map +1 -0
  19. package/esm/authenticate.d.ts.map +1 -1
  20. package/esm/authenticate.js +4 -1
  21. package/esm/authenticate.js.map +1 -1
  22. package/esm/authenticate.spec.js +6 -4
  23. package/esm/authenticate.spec.js.map +1 -1
  24. package/esm/authentication-providers/authentication-provider.d.ts +25 -0
  25. package/esm/authentication-providers/authentication-provider.d.ts.map +1 -0
  26. package/esm/authentication-providers/authentication-provider.js +2 -0
  27. package/esm/authentication-providers/authentication-provider.js.map +1 -0
  28. package/esm/authentication-providers/basic-auth-provider.d.ts +8 -0
  29. package/esm/authentication-providers/basic-auth-provider.d.ts.map +1 -0
  30. package/esm/authentication-providers/basic-auth-provider.js +18 -0
  31. package/esm/authentication-providers/basic-auth-provider.js.map +1 -0
  32. package/esm/authentication-providers/cookie-auth-provider.d.ts +11 -0
  33. package/esm/authentication-providers/cookie-auth-provider.d.ts.map +1 -0
  34. package/esm/authentication-providers/cookie-auth-provider.js +21 -0
  35. package/esm/authentication-providers/cookie-auth-provider.js.map +1 -0
  36. package/esm/authentication-providers/helpers.d.ts +11 -0
  37. package/esm/authentication-providers/helpers.d.ts.map +1 -0
  38. package/esm/authentication-providers/helpers.js +47 -0
  39. package/esm/authentication-providers/helpers.js.map +1 -0
  40. package/esm/authentication-providers/index.d.ts +5 -0
  41. package/esm/authentication-providers/index.d.ts.map +1 -0
  42. package/esm/authentication-providers/index.js +5 -0
  43. package/esm/authentication-providers/index.js.map +1 -0
  44. package/esm/endpoint-generators/utils.d.ts.map +1 -1
  45. package/esm/endpoint-generators/utils.js +4 -1
  46. package/esm/endpoint-generators/utils.js.map +1 -1
  47. package/esm/helpers.d.ts +5 -2
  48. package/esm/helpers.d.ts.map +1 -1
  49. package/esm/helpers.js +27 -3
  50. package/esm/helpers.js.map +1 -1
  51. package/esm/helpers.spec.js +37 -0
  52. package/esm/helpers.spec.js.map +1 -1
  53. package/esm/http-authentication-settings.d.ts +11 -4
  54. package/esm/http-authentication-settings.d.ts.map +1 -1
  55. package/esm/http-authentication-settings.js +9 -2
  56. package/esm/http-authentication-settings.js.map +1 -1
  57. package/esm/http-user-context.d.ts +9 -4
  58. package/esm/http-user-context.d.ts.map +1 -1
  59. package/esm/http-user-context.js +28 -55
  60. package/esm/http-user-context.js.map +1 -1
  61. package/esm/http-user-context.spec.d.ts +3 -1
  62. package/esm/http-user-context.spec.d.ts.map +1 -1
  63. package/esm/http-user-context.spec.js +103 -45
  64. package/esm/http-user-context.spec.js.map +1 -1
  65. package/esm/index.d.ts +2 -0
  66. package/esm/index.d.ts.map +1 -1
  67. package/esm/index.js +2 -0
  68. package/esm/index.js.map +1 -1
  69. package/esm/login-response-strategy.d.ts +28 -0
  70. package/esm/login-response-strategy.d.ts.map +1 -0
  71. package/esm/login-response-strategy.js +28 -0
  72. package/esm/login-response-strategy.js.map +1 -0
  73. package/esm/login-response-strategy.spec.d.ts +2 -0
  74. package/esm/login-response-strategy.spec.d.ts.map +1 -0
  75. package/esm/login-response-strategy.spec.js +78 -0
  76. package/esm/login-response-strategy.spec.js.map +1 -0
  77. package/esm/rest-service.integration.spec.d.ts.map +1 -1
  78. package/esm/rest-service.integration.spec.js +5 -4
  79. package/esm/rest-service.integration.spec.js.map +1 -1
  80. package/esm/validate.integration.spec.js +5 -0
  81. package/esm/validate.integration.spec.js.map +1 -1
  82. package/package.json +7 -7
  83. package/src/actions/index.ts +1 -0
  84. package/src/actions/login.ts +12 -6
  85. package/src/actions/password-login-action.spec.ts +122 -0
  86. package/src/actions/password-login-action.ts +35 -0
  87. package/src/authenticate.spec.ts +6 -4
  88. package/src/authenticate.ts +4 -1
  89. package/src/authentication-providers/authentication-provider.ts +25 -0
  90. package/src/authentication-providers/basic-auth-provider.ts +21 -0
  91. package/src/authentication-providers/cookie-auth-provider.ts +26 -0
  92. package/src/authentication-providers/helpers.ts +73 -0
  93. package/src/authentication-providers/index.ts +4 -0
  94. package/src/endpoint-generators/utils.ts +4 -1
  95. package/src/helpers.spec.ts +40 -0
  96. package/src/helpers.ts +48 -3
  97. package/src/http-authentication-settings.ts +30 -21
  98. package/src/http-user-context.spec.ts +462 -394
  99. package/src/http-user-context.ts +164 -194
  100. package/src/index.ts +2 -0
  101. package/src/login-response-strategy.spec.ts +90 -0
  102. package/src/login-response-strategy.ts +48 -0
  103. package/src/rest-service.integration.spec.ts +5 -4
  104. package/src/validate.integration.spec.ts +5 -0
@@ -0,0 +1,11 @@
1
+ import type { User } from '@furystack/core';
2
+ import type { Injector } from '@furystack/inject';
3
+ import type { PasswordAuthenticator } from '@furystack/security';
4
+ import type { DataSet } from '@furystack/repository';
5
+ import type { IncomingMessage } from 'http';
6
+ import type { DefaultSession } from '../models/default-session.js';
7
+ export declare const authenticateUserWithDataSet: (authenticator: PasswordAuthenticator, userDataSet: DataSet<User, "username">, injector: Injector, userName: string, password: string) => Promise<User>;
8
+ export declare const findSessionById: (sessionDataSet: DataSet<DefaultSession, "sessionId">, injector: Injector, sessionId: string) => Promise<DefaultSession | null>;
9
+ export declare const findUserByName: (userDataSet: DataSet<User, "username">, injector: Injector, userName: string) => Promise<User>;
10
+ export declare const extractSessionIdFromCookies: (request: Pick<IncomingMessage, "headers">, cookieName: string) => string | null;
11
+ //# sourceMappingURL=helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../src/authentication-providers/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AAC3C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AACjD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAA;AAEhE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAA;AACpD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,MAAM,CAAA;AAC3C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAA;AAElE,eAAO,MAAM,2BAA2B,GACtC,eAAe,qBAAqB,EACpC,aAAa,OAAO,CAAC,IAAI,EAAE,UAAU,CAAC,EACtC,UAAU,QAAQ,EAClB,UAAU,MAAM,EAChB,UAAU,MAAM,KACf,OAAO,CAAC,IAAI,CAUd,CAAA;AAED,eAAO,MAAM,eAAe,GAC1B,gBAAgB,OAAO,CAAC,cAAc,EAAE,WAAW,CAAC,EACpD,UAAU,QAAQ,EAClB,WAAW,MAAM,KAChB,OAAO,CAAC,cAAc,GAAG,IAAI,CAS/B,CAAA;AAED,eAAO,MAAM,cAAc,GACzB,aAAa,OAAO,CAAC,IAAI,EAAE,UAAU,CAAC,EACtC,UAAU,QAAQ,EAClB,UAAU,MAAM,KACf,OAAO,CAAC,IAAI,CAMd,CAAA;AAED,eAAO,MAAM,2BAA2B,GACtC,SAAS,IAAI,CAAC,eAAe,EAAE,SAAS,CAAC,EACzC,YAAY,MAAM,KACjB,MAAM,GAAG,IAgBX,CAAA"}
@@ -0,0 +1,47 @@
1
+ import { UnauthenticatedError } from '@furystack/security';
2
+ export const authenticateUserWithDataSet = async (authenticator, userDataSet, injector, userName, password) => {
3
+ const result = await authenticator.checkPasswordForUser(userName, password);
4
+ if (!result.isValid) {
5
+ throw new UnauthenticatedError();
6
+ }
7
+ const users = await userDataSet.find(injector, { filter: { username: { $eq: userName } }, top: 2 });
8
+ if (users.length !== 1) {
9
+ throw new UnauthenticatedError();
10
+ }
11
+ return users[0];
12
+ };
13
+ export const findSessionById = async (sessionDataSet, injector, sessionId) => {
14
+ const sessions = await sessionDataSet.find(injector, {
15
+ filter: { sessionId: { $eq: sessionId } },
16
+ top: 2,
17
+ });
18
+ if (sessions.length !== 1) {
19
+ return null;
20
+ }
21
+ return sessions[0];
22
+ };
23
+ export const findUserByName = async (userDataSet, injector, userName) => {
24
+ const users = await userDataSet.find(injector, { filter: { username: { $eq: userName } }, top: 2 });
25
+ if (users.length !== 1) {
26
+ throw new UnauthenticatedError();
27
+ }
28
+ return users[0];
29
+ };
30
+ export const extractSessionIdFromCookies = (request, cookieName) => {
31
+ if (request.headers.cookie) {
32
+ const cookies = request.headers.cookie
33
+ .toString()
34
+ .split(';')
35
+ .filter((val) => val.length > 0)
36
+ .map((val) => {
37
+ const [name, value] = val.split('=');
38
+ return { name: name?.trim(), value: value?.trim() };
39
+ });
40
+ const sessionCookie = cookies.find((c) => c.name === cookieName);
41
+ if (sessionCookie) {
42
+ return sessionCookie.value;
43
+ }
44
+ }
45
+ return null;
46
+ };
47
+ //# sourceMappingURL=helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/authentication-providers/helpers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export * from './authentication-provider.js';
2
+ export * from './basic-auth-provider.js';
3
+ export * from './cookie-auth-provider.js';
4
+ export * from './helpers.js';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/authentication-providers/index.ts"],"names":[],"mappings":"AAAA,cAAc,8BAA8B,CAAA;AAC5C,cAAc,0BAA0B,CAAA;AACxC,cAAc,2BAA2B,CAAA;AACzC,cAAc,cAAc,CAAA"}
@@ -0,0 +1,5 @@
1
+ export * from './authentication-provider.js';
2
+ export * from './basic-auth-provider.js';
3
+ export * from './cookie-auth-provider.js';
4
+ export * from './helpers.js';
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/authentication-providers/index.ts"],"names":[],"mappings":"AAAA,cAAc,8BAA8B,CAAA;AAC5C,cAAc,0BAA0B,CAAA;AACxC,cAAc,2BAA2B,CAAA;AACzC,cAAc,cAAc,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/endpoint-generators/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAGjD,OAAO,uBAAuB,CAAA;AAC9B,OAAO,eAAe,CAAA;AAGtB,qBAAa,SAAS;IACZ,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;CACtB;AAED,eAAO,MAAM,YAAY,GAAI,GAAG,QAAQ,SAqBvC,CAAA"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/endpoint-generators/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAGjD,OAAO,uBAAuB,CAAA;AAC9B,OAAO,eAAe,CAAA;AAGtB,qBAAa,SAAS;IACZ,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;CACtB;AAED,eAAO,MAAM,YAAY,GAAI,GAAG,QAAQ,SAwBvC,CAAA"}
@@ -18,6 +18,9 @@ export const setupContext = (i) => {
18
18
  model: DefaultSession,
19
19
  primaryKey: 'sessionId',
20
20
  }));
21
- getRepository(i).createDataSet(MockClass, 'id');
21
+ getRepository(i)
22
+ .createDataSet(MockClass, 'id')
23
+ .createDataSet(User, 'username')
24
+ .createDataSet(DefaultSession, 'sessionId');
22
25
  };
23
26
  //# sourceMappingURL=utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/endpoint-generators/utils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAA;AAC7D,OAAO,uBAAuB,CAAA;AAC9B,OAAO,eAAe,CAAA;AACtB,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AAErD,MAAM,OAAO,SAAS;CAGrB;AAED,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAW,EAAE,EAAE;IAC1C,QAAQ,CACN,CAAC,EACD,IAAI,aAAa,CAAC;QAChB,KAAK,EAAE,SAAS;QAChB,UAAU,EAAE,IAAI;KACjB,CAAC,CACH;SACE,QAAQ,CACP,IAAI,aAAa,CAAC;QAChB,KAAK,EAAE,IAAI;QACX,UAAU,EAAE,UAAU;KACvB,CAAC,CACH;SACA,QAAQ,CACP,IAAI,aAAa,CAAC;QAChB,KAAK,EAAE,cAAc;QACrB,UAAU,EAAE,WAAW;KACxB,CAAC,CACH,CAAA;IACH,aAAa,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,SAAS,EAAE,IAAI,CAAC,CAAA;AACjD,CAAC,CAAA"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/endpoint-generators/utils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAA;AAC7D,OAAO,uBAAuB,CAAA;AAC9B,OAAO,eAAe,CAAA;AACtB,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AAErD,MAAM,OAAO,SAAS;CAGrB;AAED,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAW,EAAE,EAAE;IAC1C,QAAQ,CACN,CAAC,EACD,IAAI,aAAa,CAAC;QAChB,KAAK,EAAE,SAAS;QAChB,UAAU,EAAE,IAAI;KACjB,CAAC,CACH;SACE,QAAQ,CACP,IAAI,aAAa,CAAC;QAChB,KAAK,EAAE,IAAI;QACX,UAAU,EAAE,UAAU;KACvB,CAAC,CACH;SACA,QAAQ,CACP,IAAI,aAAa,CAAC;QAChB,KAAK,EAAE,cAAc;QACrB,UAAU,EAAE,WAAW;KACxB,CAAC,CACH,CAAA;IACH,aAAa,CAAC,CAAC,CAAC;SACb,aAAa,CAAC,SAAS,EAAE,IAAI,CAAC;SAC9B,aAAa,CAAC,IAAI,EAAE,UAAU,CAAC;SAC/B,aAAa,CAAC,cAAc,EAAE,WAAW,CAAC,CAAA;AAC/C,CAAC,CAAA"}
package/esm/helpers.d.ts CHANGED
@@ -16,10 +16,13 @@ export declare const useRestService: <T extends RestApi>(api: ImplementApiOption
16
16
  onRequest: (msg: import("./server-manager.js").OnRequest) => Promise<void>;
17
17
  }>;
18
18
  /**
19
- * Sets up the HTTP Authentication
19
+ * Sets up the HTTP Authentication with pluggable providers.
20
+ *
21
+ * Registers Basic Auth (if enabled) and Cookie Auth as built-in providers,
22
+ * then appends any custom providers passed via settings.
23
+ *
20
24
  * @param injector The Injector instance
21
25
  * @param settings Settings for HTTP Authentication
22
- * @returns void
23
26
  */
24
27
  export declare const useHttpAuthentication: <TUser extends User, TSession extends DefaultSession>(injector: Injector, settings?: Partial<HttpAuthenticationSettings<TUser, TSession>>) => void;
25
28
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AAC3C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AACjD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AAC9C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAA;AAE3D,OAAO,EAAE,0BAA0B,EAAE,MAAM,mCAAmC,CAAA;AAC9E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAA;AACjE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAEtD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAA;AAGrE;;;;GAIG;AACH,eAAO,MAAM,cAAc,GAAU,CAAC,SAAS,OAAO,EAAE,KAAK,mBAAmB,CAAC,CAAC,CAAC;;;EACpB,CAAA;AAE/D;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,GAAI,KAAK,SAAS,IAAI,EAAE,QAAQ,SAAS,cAAc,EACvF,UAAU,QAAQ,EAClB,WAAW,OAAO,CAAC,0BAA0B,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,SACuD,CAAA;AAExH;;;;;;GAMG;AACH,eAAO,MAAM,cAAc,GAAI,SAAS;IAAE,QAAQ,EAAE,QAAQ,CAAA;CAAE,GAAG,mBAAmB,kBAGnF,CAAA;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+DG;AACH,eAAO,MAAM,QAAQ,GAAI,SAAS;IAAE,QAAQ,EAAE,QAAQ,CAAA;CAAE,GAAG,YAAY,kBAGtE,CAAA"}
1
+ {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AAE3C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AACjD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AAI9C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAA;AAM3D,OAAO,EAAE,0BAA0B,EAAE,MAAM,mCAAmC,CAAA;AAC9E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAA;AACjE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAEtD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAA;AAGrE;;;;GAIG;AACH,eAAO,MAAM,cAAc,GAAU,CAAC,SAAS,OAAO,EAAE,KAAK,mBAAmB,CAAC,CAAC,CAAC;;;EACpB,CAAA;AAE/D;;;;;;;;GAQG;AACH,eAAO,MAAM,qBAAqB,GAAI,KAAK,SAAS,IAAI,EAAE,QAAQ,SAAS,cAAc,EACvF,UAAU,QAAQ,EAClB,WAAW,OAAO,CAAC,0BAA0B,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,SAmChE,CAAA;AAED;;;;;;GAMG;AACH,eAAO,MAAM,cAAc,GAAI,SAAS;IAAE,QAAQ,EAAE,QAAQ,CAAA;CAAE,GAAG,mBAAmB,kBAGnF,CAAA;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+DG;AACH,eAAO,MAAM,QAAQ,GAAI,SAAS;IAAE,QAAQ,EAAE,QAAQ,CAAA;CAAE,GAAG,YAAY,kBAGtE,CAAA"}
package/esm/helpers.js CHANGED
@@ -1,4 +1,9 @@
1
+ import { useSystemIdentityContext } from '@furystack/core';
2
+ import { PasswordAuthenticator } from '@furystack/security';
1
3
  import { ApiManager } from './api-manager.js';
4
+ import { createBasicAuthProvider } from './authentication-providers/basic-auth-provider.js';
5
+ import { createCookieAuthProvider } from './authentication-providers/cookie-auth-provider.js';
6
+ import { authenticateUserWithDataSet, findSessionById, findUserByName } from './authentication-providers/helpers.js';
2
7
  import { HttpAuthenticationSettings } from './http-authentication-settings.js';
3
8
  import { ProxyManager } from './proxy-manager.js';
4
9
  import { StaticServerManager } from './static-server-manager.js';
@@ -9,12 +14,31 @@ import { StaticServerManager } from './static-server-manager.js';
9
14
  */
10
15
  export const useRestService = async (api) => await api.injector.getInstance(ApiManager).addApi({ ...api });
11
16
  /**
12
- * Sets up the HTTP Authentication
17
+ * Sets up the HTTP Authentication with pluggable providers.
18
+ *
19
+ * Registers Basic Auth (if enabled) and Cookie Auth as built-in providers,
20
+ * then appends any custom providers passed via settings.
21
+ *
13
22
  * @param injector The Injector instance
14
23
  * @param settings Settings for HTTP Authentication
15
- * @returns void
16
24
  */
17
- export const useHttpAuthentication = (injector, settings) => injector.setExplicitInstance(Object.assign(new HttpAuthenticationSettings(), settings), HttpAuthenticationSettings);
25
+ export const useHttpAuthentication = (injector, settings) => {
26
+ const mergedSettings = Object.assign(new HttpAuthenticationSettings(), settings);
27
+ const systemInjector = useSystemIdentityContext({ injector, username: 'useHttpAuthentication' });
28
+ const passwordAuthenticator = injector.getInstance(PasswordAuthenticator);
29
+ const userDataSet = mergedSettings.getUserDataSet(systemInjector);
30
+ // Narrow from DataSet<TSession, keyof TSession> to DataSet<DefaultSession, 'sessionId'>
31
+ // because the built-in providers operate on DefaultSession with the concrete 'sessionId' key
32
+ const sessionDataSet = mergedSettings.getSessionDataSet(systemInjector);
33
+ const providers = [];
34
+ if (mergedSettings.enableBasicAuth) {
35
+ providers.push(createBasicAuthProvider((username, password) => authenticateUserWithDataSet(passwordAuthenticator, userDataSet, systemInjector, username, password)));
36
+ }
37
+ providers.push(createCookieAuthProvider(mergedSettings.cookieName, (sessionId) => findSessionById(sessionDataSet, systemInjector, sessionId), (username) => findUserByName(userDataSet, systemInjector, username)));
38
+ providers.push(...(settings?.authenticationProviders ?? []));
39
+ mergedSettings.authenticationProviders = providers;
40
+ injector.setExplicitInstance(mergedSettings, HttpAuthenticationSettings);
41
+ };
18
42
  /**
19
43
  * Sets up a static file server
20
44
  * @param options The settings for the static file server
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,0BAA0B,EAAE,MAAM,mCAAmC,CAAA;AAG9E,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAEjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAA;AAEhE;;;;GAIG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,EAAqB,GAA2B,EAAE,EAAE,CACrF,MAAM,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,EAAE,GAAG,GAAG,EAAE,CAAC,CAAA;AAE/D;;;;;GAKG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CACnC,QAAkB,EAClB,QAA+D,EAC/D,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,0BAA0B,EAAE,EAAE,QAAQ,CAAC,EAAE,0BAA0B,CAAC,CAAA;AAExH;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,OAAqD,EAAE,EAAE;IACtF,MAAM,EAAE,QAAQ,EAAE,GAAG,QAAQ,EAAE,GAAG,OAAO,CAAA;IACzC,OAAO,QAAQ,CAAC,WAAW,CAAC,mBAAmB,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAA;AAC1E,CAAC,CAAA;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+DG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,OAA8C,EAAE,EAAE;IACzE,MAAM,EAAE,QAAQ,EAAE,GAAG,QAAQ,EAAE,GAAG,OAAO,CAAA;IACzC,OAAO,QAAQ,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;AAC9D,CAAC,CAAA"}
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"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"}
@@ -1,20 +1,57 @@
1
+ import { InMemoryStore, User, addStore } from '@furystack/core';
1
2
  import { getPort } from '@furystack/core/port-generator';
2
3
  import { Injector } from '@furystack/inject';
4
+ import { getRepository } from '@furystack/repository';
5
+ import { PasswordCredential, PasswordResetToken, usePasswordPolicy } from '@furystack/security';
3
6
  import { usingAsync } from '@furystack/utils';
4
7
  import { describe, expect, it } from 'vitest';
5
8
  import { ApiManager } from './api-manager.js';
6
9
  import { useHttpAuthentication, useProxy, useRestService, useStaticFiles } from './helpers.js';
7
10
  import { HttpAuthenticationSettings } from './http-authentication-settings.js';
11
+ import { DefaultSession } from './models/default-session.js';
8
12
  import { ProxyManager } from './proxy-manager.js';
9
13
  import { StaticServerManager } from './static-server-manager.js';
14
+ const setupAuthStores = (i) => {
15
+ addStore(i, new InMemoryStore({ model: User, primaryKey: 'username' }))
16
+ .addStore(new InMemoryStore({ model: DefaultSession, primaryKey: 'sessionId' }))
17
+ .addStore(new InMemoryStore({ model: PasswordCredential, primaryKey: 'userName' }))
18
+ .addStore(new InMemoryStore({ model: PasswordResetToken, primaryKey: 'token' }));
19
+ const repo = getRepository(i);
20
+ repo.createDataSet(User, 'username');
21
+ repo.createDataSet(DefaultSession, 'sessionId');
22
+ repo.createDataSet(PasswordCredential, 'userName');
23
+ repo.createDataSet(PasswordResetToken, 'token');
24
+ usePasswordPolicy(i);
25
+ };
10
26
  describe('Injector extensions', () => {
11
27
  describe('useHttpAuthentication', () => {
12
28
  it('Should set up HTTP Authentication', async () => {
13
29
  await usingAsync(new Injector(), async (i) => {
30
+ setupAuthStores(i);
14
31
  useHttpAuthentication(i);
15
32
  expect(i.cachedSingletons.get(HttpAuthenticationSettings)).toBeDefined();
16
33
  });
17
34
  });
35
+ it('Should register basic-auth and cookie-auth providers by default', async () => {
36
+ await usingAsync(new Injector(), async (i) => {
37
+ setupAuthStores(i);
38
+ useHttpAuthentication(i);
39
+ const settings = i.getInstance(HttpAuthenticationSettings);
40
+ const providerNames = settings.authenticationProviders.map((p) => p.name);
41
+ expect(providerNames).toContain('basic-auth');
42
+ expect(providerNames).toContain('cookie-auth');
43
+ });
44
+ });
45
+ it('Should not register basic-auth provider when disabled', async () => {
46
+ await usingAsync(new Injector(), async (i) => {
47
+ setupAuthStores(i);
48
+ useHttpAuthentication(i, { enableBasicAuth: false });
49
+ const settings = i.getInstance(HttpAuthenticationSettings);
50
+ const providerNames = settings.authenticationProviders.map((p) => p.name);
51
+ expect(providerNames).not.toContain('basic-auth');
52
+ expect(providerNames).toContain('cookie-auth');
53
+ });
54
+ });
18
55
  });
19
56
  describe('useRestService()', () => {
20
57
  it('Should set up a REST service', async () => {
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.spec.js","sourceRoot":"","sources":["../src/helpers.spec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAA;AACxD,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,qBAAqB,EAAE,QAAQ,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAC9F,OAAO,EAAE,0BAA0B,EAAE,MAAM,mCAAmC,CAAA;AAC9E,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAA;AAEhE,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;IACnC,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;QACrC,EAAE,CAAC,mCAAmC,EAAE,KAAK,IAAI,EAAE;YACjD,MAAM,UAAU,CAAC,IAAI,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;gBAC3C,qBAAqB,CAAC,CAAC,CAAC,CAAA;gBACxB,MAAM,CAAC,CAAC,CAAC,gBAAgB,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC,CAAC,WAAW,EAAE,CAAA;YAC1E,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;QAChC,EAAE,CAAC,8BAA8B,EAAE,KAAK,IAAI,EAAE;YAC5C,MAAM,UAAU,CAAC,IAAI,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;gBAC3C,MAAM,IAAI,GAAG,OAAO,EAAE,CAAA;gBAEtB,MAAM,cAAc,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAA;gBAC/D,MAAM,CAAC,CAAC,CAAC,gBAAgB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,WAAW,EAAE,CAAA;YAC1D,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;QAChC,EAAE,CAAC,oCAAoC,EAAE,KAAK,IAAI,EAAE;YAClD,MAAM,UAAU,CAAC,IAAI,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;gBAC3C,MAAM,IAAI,GAAG,OAAO,EAAE,CAAA;gBAEtB,MAAM,cAAc,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAA;gBACpE,MAAM,CAAC,CAAC,CAAC,gBAAgB,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC,CAAC,WAAW,EAAE,CAAA;YACnE,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;QAC1B,EAAE,CAAC,8BAA8B,EAAE,KAAK,IAAI,EAAE;YAC5C,MAAM,UAAU,CAAC,IAAI,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;gBAC3C,MAAM,UAAU,GAAG,OAAO,EAAE,CAAA;gBAC5B,MAAM,UAAU,GAAG,OAAO,EAAE,CAAA;gBAE5B,MAAM,QAAQ,CAAC;oBACb,QAAQ,EAAE,CAAC;oBACX,aAAa,EAAE,MAAM;oBACrB,aAAa,EAAE,oBAAoB,UAAU,EAAE;oBAC/C,UAAU;iBACX,CAAC,CAAA;gBACF,MAAM,CAAC,CAAC,CAAC,gBAAgB,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,WAAW,EAAE,CAAA;YAC5D,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
1
+ {"version":3,"file":"helpers.spec.js","sourceRoot":"","sources":["../src/helpers.spec.ts"],"names":[],"mappings":"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"}
@@ -1,15 +1,22 @@
1
- import type { PhysicalStore, StoreManager } from '@furystack/core';
2
1
  import { User } from '@furystack/core';
3
- import type { Constructable } from '@furystack/inject';
2
+ import type { Constructable, Injector } from '@furystack/inject';
3
+ import type { DataSet } from '@furystack/repository';
4
+ import type { AuthenticationProvider } from './authentication-providers/authentication-provider.js';
4
5
  import { DefaultSession } from './models/default-session.js';
5
6
  /**
6
7
  * Authentication settings object for FuryStack HTTP Api
7
8
  */
8
9
  export declare class HttpAuthenticationSettings<TUser extends User, TSession extends DefaultSession> {
9
10
  model: Constructable<TUser>;
10
- getUserStore: (sm: StoreManager) => PhysicalStore<User, "username", import("@furystack/core").WithOptionalId<User, "username">>;
11
- getSessionStore: (storeManager: StoreManager) => PhysicalStore<TSession, keyof TSession>;
11
+ getUserDataSet: (injector: Injector) => DataSet<User, "username", import("@furystack/core").WithOptionalId<User, "username">>;
12
+ getSessionDataSet: (injector: Injector) => DataSet<TSession, keyof TSession>;
12
13
  cookieName: string;
13
14
  enableBasicAuth: boolean;
15
+ /**
16
+ * Ordered list of authentication providers. Populated by {@link useHttpAuthentication}
17
+ * and extended by `useJwtAuthentication()` or other auth plugins.
18
+ * Safe to mutate only during setup, before the first request is served.
19
+ */
20
+ authenticationProviders: AuthenticationProvider[];
14
21
  }
15
22
  //# sourceMappingURL=http-authentication-settings.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"http-authentication-settings.d.ts","sourceRoot":"","sources":["../src/http-authentication-settings.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAClE,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AACtC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAEtD,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAA;AAE5D;;GAEG;AACH,qBACa,0BAA0B,CAAC,KAAK,SAAS,IAAI,EAAE,QAAQ,SAAS,cAAc;IAClF,KAAK,EAAE,aAAa,CAAC,KAAK,CAAC,CAA+B;IAE1D,YAAY,GAAI,IAAI,YAAY,iGAAqC;IAErE,eAAe,EAAE,CAAC,YAAY,EAAE,YAAY,KAAK,aAAa,CAAC,QAAQ,EAAE,MAAM,QAAQ,CAAC,CACI;IAE5F,UAAU,SAAQ;IAClB,eAAe,UAAO;CAC9B"}
1
+ {"version":3,"file":"http-authentication-settings.d.ts","sourceRoot":"","sources":["../src/http-authentication-settings.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AACtC,OAAO,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAEhE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAA;AAEpD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,uDAAuD,CAAA;AACnG,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAA;AAE5D;;GAEG;AACH,qBACa,0BAA0B,CAAC,KAAK,SAAS,IAAI,EAAE,QAAQ,SAAS,cAAc;IAClF,KAAK,EAAE,aAAa,CAAC,KAAK,CAAC,CAA+B;IAE1D,cAAc,GAAI,UAAU,QAAQ,2FAA8C;IAElF,iBAAiB,EAAE,CAAC,QAAQ,EAAE,QAAQ,KAAK,OAAO,CAAC,QAAQ,EAAE,MAAM,QAAQ,CAAC,CACmB;IAE/F,UAAU,SAAQ;IAClB,eAAe,UAAO;IAE7B;;;;OAIG;IACI,uBAAuB,EAAE,sBAAsB,EAAE,CAAK;CAC9D"}
@@ -6,16 +6,23 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
6
6
  };
7
7
  import { User } from '@furystack/core';
8
8
  import { Injectable } from '@furystack/inject';
9
+ import { getDataSetFor } from '@furystack/repository';
9
10
  import { DefaultSession } from './models/default-session.js';
10
11
  /**
11
12
  * Authentication settings object for FuryStack HTTP Api
12
13
  */
13
14
  let HttpAuthenticationSettings = class HttpAuthenticationSettings {
14
15
  model = User;
15
- getUserStore = (sm) => sm.getStoreFor(User, 'username');
16
- getSessionStore = (sm) => sm.getStoreFor(DefaultSession, 'sessionId');
16
+ getUserDataSet = (injector) => getDataSetFor(injector, User, 'username');
17
+ getSessionDataSet = (injector) => getDataSetFor(injector, DefaultSession, 'sessionId');
17
18
  cookieName = 'fss';
18
19
  enableBasicAuth = true;
20
+ /**
21
+ * Ordered list of authentication providers. Populated by {@link useHttpAuthentication}
22
+ * and extended by `useJwtAuthentication()` or other auth plugins.
23
+ * Safe to mutate only during setup, before the first request is served.
24
+ */
25
+ authenticationProviders = [];
19
26
  };
20
27
  HttpAuthenticationSettings = __decorate([
21
28
  Injectable({ lifetime: 'singleton' })
@@ -1 +1 @@
1
- {"version":3,"file":"http-authentication-settings.js","sourceRoot":"","sources":["../src/http-authentication-settings.ts"],"names":[],"mappings":";;;;;;AACA,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AAEtC,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAA;AAE5D;;GAEG;AAEI,IAAM,0BAA0B,GAAhC,MAAM,0BAA0B;IAC9B,KAAK,GAAyB,IAA4B,CAAA;IAE1D,YAAY,GAAG,CAAC,EAAgB,EAAE,EAAE,CAAC,EAAE,CAAC,WAAW,CAAC,IAAI,EAAE,UAAU,CAAC,CAAA;IAErE,eAAe,GAA4E,CAAC,EAAE,EAAE,EAAE,CACvG,EAAE,CAAC,WAAW,CAAC,cAAc,EAAE,WAAW,CAAuD,CAAA;IAE5F,UAAU,GAAG,KAAK,CAAA;IAClB,eAAe,GAAG,IAAI,CAAA;CAC9B,CAAA;AAVY,0BAA0B;IADtC,UAAU,CAAC,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC;GACzB,0BAA0B,CAUtC"}
1
+ {"version":3,"file":"http-authentication-settings.js","sourceRoot":"","sources":["../src/http-authentication-settings.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AAEtC,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAE9C,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AAErD,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAA;AAE5D;;GAEG;AAEI,IAAM,0BAA0B,GAAhC,MAAM,0BAA0B;IAC9B,KAAK,GAAyB,IAA4B,CAAA;IAE1D,cAAc,GAAG,CAAC,QAAkB,EAAE,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,IAAI,EAAE,UAAU,CAAC,CAAA;IAElF,iBAAiB,GAA8D,CAAC,QAAQ,EAAE,EAAE,CACjG,aAAa,CAAC,QAAQ,EAAE,cAAc,EAAE,WAAW,CAAiD,CAAA;IAE/F,UAAU,GAAG,KAAK,CAAA;IAClB,eAAe,GAAG,IAAI,CAAA;IAE7B;;;;OAIG;IACI,uBAAuB,GAA6B,EAAE,CAAA;CAC9D,CAAA;AAjBY,0BAA0B;IADtC,UAAU,CAAC,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC;GACzB,0BAA0B,CAiBtC"}
@@ -6,10 +6,9 @@ import type { DefaultSession } from './models/default-session.js';
6
6
  * Injectable UserContext for FuryStack HTTP Api
7
7
  */
8
8
  export declare class HttpUserContext {
9
- getUserStore: () => import("@furystack/core").PhysicalStore<User, "username", import("@furystack/core").WithOptionalId<User, "username">>;
10
- getSessionStore: () => import("@furystack/core").PhysicalStore<DefaultSession, keyof DefaultSession, import("@furystack/core").WithOptionalId<DefaultSession, keyof DefaultSession>>;
9
+ getUserDataSet: () => import("@furystack/repository").DataSet<User, "username", import("@furystack/core").WithOptionalId<User, "username">>;
10
+ getSessionDataSet: () => import("@furystack/repository").DataSet<DefaultSession, keyof DefaultSession, import("@furystack/core").WithOptionalId<DefaultSession, keyof DefaultSession>>;
11
11
  private getUserByName;
12
- private getSessionById;
13
12
  private user?;
14
13
  /**
15
14
  * @param request The request to be authenticated
@@ -32,6 +31,12 @@ export declare class HttpUserContext {
32
31
  authenticateUser(userName: string, password: string): Promise<import("@furystack/core").PartialResult<User, (keyof User)[]>>;
33
32
  getCurrentUser(request: Pick<IncomingMessage, 'headers'>): Promise<User>;
34
33
  getSessionIdFromRequest(request: Pick<IncomingMessage, 'headers'>): string | null;
34
+ /**
35
+ * Iterates registered authentication providers in order.
36
+ * - A provider returning `User` means authentication succeeded.
37
+ * - A provider returning `null` means it does not apply; try the next one.
38
+ * - A provider throwing means it owns the request but auth failed; propagate the error.
39
+ */
35
40
  authenticateRequest(request: Pick<IncomingMessage, 'headers'>): Promise<User>;
36
41
  /**
37
42
  * Creates and sets up a cookie-based session for the provided user
@@ -46,7 +51,7 @@ export declare class HttpUserContext {
46
51
  setHeader: (header: string, value: string) => void;
47
52
  }): Promise<void>;
48
53
  readonly authentication: HttpAuthenticationSettings<User, DefaultSession>;
49
- private readonly storeManager;
54
+ private readonly systemInjector;
50
55
  private readonly authenticator;
51
56
  init(): void;
52
57
  }
@@ -1 +1 @@
1
- {"version":3,"file":"http-user-context.d.ts","sourceRoot":"","sources":["../src/http-user-context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AAK3C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,MAAM,CAAA;AAC3C,OAAO,EAAE,0BAA0B,EAAE,MAAM,mCAAmC,CAAA;AAC9E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAA;AAEjE;;GAEG;AACH,qBACa,eAAe;IACnB,YAAY,8HAA4D;IAExE,eAAe,sKAA+D;IAErF,OAAO,CAAC,aAAa,CAOpB;IAED,OAAO,CAAC,cAAc,CAOrB;IAED,OAAO,CAAC,IAAI,CAAC,CAAM;IAEnB;;;OAGG;IACU,eAAe,CAAC,OAAO,EAAE,eAAe;IASrD;;;;;OAKG;IACU,YAAY,CAAC,OAAO,EAAE,eAAe,EAAE,GAAG,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IAUzF;;;;;OAKG;IACU,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM;IAanD,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,eAAe,EAAE,SAAS,CAAC;IAQ9D,uBAAuB,CAAC,OAAO,EAAE,IAAI,CAAC,eAAe,EAAE,SAAS,CAAC,GAAG,MAAM,GAAG,IAAI;IAkB3E,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,eAAe,EAAE,SAAS,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAuB1F;;;;;OAKG;IACU,WAAW,CACtB,IAAI,EAAE,IAAI,EACV,cAAc,EAAE;QAAE,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;KAAE,GACrE,OAAO,CAAC,IAAI,CAAC;IAQH,YAAY,CACvB,OAAO,EAAE,IAAI,CAAC,eAAe,EAAE,SAAS,CAAC,EACzC,QAAQ,EAAE;QAAE,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;KAAE;IAalE,SACwB,cAAc,EAAE,0BAA0B,CAAC,IAAI,EAAE,cAAc,CAAC,CAAA;IAExF,iBACyB,YAAY,CAAc;IAEnD,iBACyB,aAAa,CAAuB;IAEtD,IAAI;CAiBZ"}
1
+ {"version":3,"file":"http-user-context.d.ts","sourceRoot":"","sources":["../src/http-user-context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AAM3C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,MAAM,CAAA;AAE3C,OAAO,EAAE,0BAA0B,EAAE,MAAM,mCAAmC,CAAA;AAC9E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAA;AAEjE;;GAEG;AACH,qBACa,eAAe;IACnB,cAAc,8HAAgE;IAE9E,iBAAiB,sKAAmE;IAE3F,OAAO,CAAC,aAAa,CAOpB;IAED,OAAO,CAAC,IAAI,CAAC,CAAM;IAEnB;;;OAGG;IACU,eAAe,CAAC,OAAO,EAAE,eAAe;IASrD;;;;;OAKG;IACU,YAAY,CAAC,OAAO,EAAE,eAAe,EAAE,GAAG,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IAUzF;;;;;OAKG;IACU,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM;IAanD,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,eAAe,EAAE,SAAS,CAAC;IAQ9D,uBAAuB,CAAC,OAAO,EAAE,IAAI,CAAC,eAAe,EAAE,SAAS,CAAC,GAAG,MAAM,GAAG,IAAI;IAIxF;;;;;OAKG;IACU,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,eAAe,EAAE,SAAS,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ1F;;;;;OAKG;IACU,WAAW,CACtB,IAAI,EAAE,IAAI,EACV,cAAc,EAAE;QAAE,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;KAAE,GACrE,OAAO,CAAC,IAAI,CAAC;IAQH,YAAY,CACvB,OAAO,EAAE,IAAI,CAAC,eAAe,EAAE,SAAS,CAAC,EACzC,QAAQ,EAAE;QAAE,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;KAAE;IAalE,SACwB,cAAc,EAAE,0BAA0B,CAAC,IAAI,EAAE,cAAc,CAAC,CAAA;IAExF,iBACyB,cAAc,CAAU;IAEjD,iBACyB,aAAa,CAAuB;IAEtD,IAAI;CAiBZ"}
@@ -7,33 +7,26 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
7
7
  var __metadata = (this && this.__metadata) || function (k, v) {
8
8
  if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
9
  };
10
- import { StoreManager } from '@furystack/core';
10
+ import { useSystemIdentityContext } from '@furystack/core';
11
11
  import { Injectable, Injected } from '@furystack/inject';
12
12
  import { PasswordAuthenticator, UnauthenticatedError } from '@furystack/security';
13
13
  import { randomBytes } from 'crypto';
14
+ import { extractSessionIdFromCookies } from './authentication-providers/helpers.js';
14
15
  import { HttpAuthenticationSettings } from './http-authentication-settings.js';
15
16
  /**
16
17
  * Injectable UserContext for FuryStack HTTP Api
17
18
  */
18
19
  let HttpUserContext = class HttpUserContext {
19
- getUserStore = () => this.authentication.getUserStore(this.storeManager);
20
- getSessionStore = () => this.authentication.getSessionStore(this.storeManager);
20
+ getUserDataSet = () => this.authentication.getUserDataSet(this.systemInjector);
21
+ getSessionDataSet = () => this.authentication.getSessionDataSet(this.systemInjector);
21
22
  getUserByName = async (userName) => {
22
- const userStore = this.getUserStore();
23
- const users = await userStore.find({ filter: { username: { $eq: userName } }, top: 2 });
23
+ const userDataSet = this.getUserDataSet();
24
+ const users = await userDataSet.find(this.systemInjector, { filter: { username: { $eq: userName } }, top: 2 });
24
25
  if (users.length !== 1) {
25
26
  throw new UnauthenticatedError();
26
27
  }
27
28
  return users[0];
28
29
  };
29
- getSessionById = async (sessionId) => {
30
- const sessionStore = this.getSessionStore();
31
- const sessions = await sessionStore.find({ filter: { sessionId: { $eq: sessionId } }, top: 2 });
32
- if (sessions.length !== 1) {
33
- throw new UnauthenticatedError();
34
- }
35
- return sessions[0];
36
- };
37
30
  user;
38
31
  /**
39
32
  * @param request The request to be authenticated
@@ -88,39 +81,19 @@ let HttpUserContext = class HttpUserContext {
88
81
  return this.user;
89
82
  }
90
83
  getSessionIdFromRequest(request) {
91
- if (request.headers.cookie) {
92
- const cookies = request.headers.cookie
93
- .toString()
94
- .split(';')
95
- .filter((val) => val.length > 0)
96
- .map((val) => {
97
- const [name, value] = val.split('=');
98
- return { name: name?.trim(), value: value?.trim() };
99
- });
100
- const sessionCookie = cookies.find((c) => c.name === this.authentication.cookieName);
101
- if (sessionCookie) {
102
- return sessionCookie.value;
103
- }
104
- }
105
- return null;
84
+ return extractSessionIdFromCookies(request, this.authentication.cookieName);
106
85
  }
86
+ /**
87
+ * Iterates registered authentication providers in order.
88
+ * - A provider returning `User` means authentication succeeded.
89
+ * - A provider returning `null` means it does not apply; try the next one.
90
+ * - A provider throwing means it owns the request but auth failed; propagate the error.
91
+ */
107
92
  async authenticateRequest(request) {
108
- // Basic auth
109
- if (this.authentication.enableBasicAuth && request.headers.authorization) {
110
- const authData = Buffer.from(request.headers.authorization.toString().split(' ')[1], 'base64');
111
- const [userName, password] = authData.toString().split(':');
112
- return await this.authenticateUser(userName, password);
113
- }
114
- // Cookie auth
115
- const sessionId = this.getSessionIdFromRequest(request);
116
- if (sessionId) {
117
- const session = await this.getSessionById(sessionId);
118
- if (session) {
119
- const user = await this.getUserByName(session.username);
120
- if (user) {
121
- return user;
122
- }
123
- }
93
+ for (const provider of this.authentication.authenticationProviders) {
94
+ const user = await provider.authenticate(request);
95
+ if (user)
96
+ return user;
124
97
  }
125
98
  throw new UnauthenticatedError();
126
99
  }
@@ -132,7 +105,7 @@ let HttpUserContext = class HttpUserContext {
132
105
  */
133
106
  async cookieLogin(user, serverResponse) {
134
107
  const sessionId = randomBytes(32).toString('hex');
135
- await this.getSessionStore().add({ sessionId, username: user.username });
108
+ await this.getSessionDataSet().add(this.systemInjector, { sessionId, username: user.username });
136
109
  serverResponse.setHeader('Set-Cookie', `${this.authentication.cookieName}=${sessionId}; Path=/; HttpOnly`);
137
110
  this.user = user;
138
111
  return user;
@@ -142,24 +115,24 @@ let HttpUserContext = class HttpUserContext {
142
115
  const sessionId = this.getSessionIdFromRequest(request);
143
116
  response.setHeader('Set-Cookie', `${this.authentication.cookieName}=; Path=/; HttpOnly`);
144
117
  if (sessionId) {
145
- const sessionStore = this.getSessionStore();
146
- const sessions = await sessionStore.find({ filter: { sessionId: { $eq: sessionId } } });
147
- await this.getSessionStore().remove(...sessions.map((s) => s[sessionStore.primaryKey]));
118
+ const sessionDataSet = this.getSessionDataSet();
119
+ const sessions = await sessionDataSet.find(this.systemInjector, { filter: { sessionId: { $eq: sessionId } } });
120
+ await sessionDataSet.remove(this.systemInjector, ...sessions.map((s) => s[sessionDataSet.primaryKey]));
148
121
  }
149
122
  }
150
123
  init() {
151
- this.getUserStore().addListener('onEntityUpdated', ({ id, change }) => {
124
+ this.getUserDataSet().addListener('onEntityUpdated', ({ id, change }) => {
152
125
  if (this.user?.username === id) {
153
126
  this.user = { ...this.user, ...change };
154
127
  }
155
128
  });
156
- this.getUserStore().addListener('onEntityRemoved', ({ key }) => {
129
+ this.getUserDataSet().addListener('onEntityRemoved', ({ key }) => {
157
130
  if (this.user?.username === key) {
158
131
  this.user = undefined;
159
132
  }
160
133
  });
161
- this.getSessionStore().addListener('onEntityRemoved', () => {
162
- this.user = undefined; // as user cannot be determined by the session id anymore
134
+ this.getSessionDataSet().addListener('onEntityRemoved', () => {
135
+ this.user = undefined;
163
136
  });
164
137
  }
165
138
  };
@@ -168,9 +141,9 @@ __decorate([
168
141
  __metadata("design:type", HttpAuthenticationSettings)
169
142
  ], HttpUserContext.prototype, "authentication", void 0);
170
143
  __decorate([
171
- Injected(StoreManager),
172
- __metadata("design:type", StoreManager)
173
- ], HttpUserContext.prototype, "storeManager", void 0);
144
+ Injected((injector) => useSystemIdentityContext({ injector, username: 'HttpUserContext' })),
145
+ __metadata("design:type", Function)
146
+ ], HttpUserContext.prototype, "systemInjector", void 0);
174
147
  __decorate([
175
148
  Injected(PasswordAuthenticator),
176
149
  __metadata("design:type", PasswordAuthenticator)
@@ -1 +1 @@
1
- {"version":3,"file":"http-user-context.js","sourceRoot":"","sources":["../src/http-user-context.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"http-user-context.js","sourceRoot":"","sources":["../src/http-user-context.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,5 @@
1
1
  import { Injector } from '@furystack/inject';
2
- export declare const prepareInjector: (i: Injector) => Promise<void>;
2
+ export declare const prepareInjector: (i: Injector, options?: {
3
+ enableBasicAuth?: boolean;
4
+ }) => Promise<void>;
3
5
  //# sourceMappingURL=http-user-context.spec.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"http-user-context.spec.d.ts","sourceRoot":"","sources":["../src/http-user-context.spec.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAS5C,eAAO,MAAM,eAAe,GAAU,GAAG,QAAQ,kBAMhD,CAAA"}
1
+ {"version":3,"file":"http-user-context.spec.d.ts","sourceRoot":"","sources":["../src/http-user-context.spec.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAgB5C,eAAO,MAAM,eAAe,GAAU,GAAG,QAAQ,EAAE,UAAU;IAAE,eAAe,CAAC,EAAE,OAAO,CAAA;CAAE,kBAczF,CAAA"}