@spinajs/rbac-http-user 2.0.486 → 2.0.488
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/cjs/config/rbac-http.d.ts +0 -15
- package/lib/cjs/config/rbac-http.d.ts.map +1 -1
- package/lib/cjs/config/rbac-http.js +6 -16
- package/lib/cjs/config/rbac-http.js.map +1 -1
- package/lib/cjs/controllers/ActiveRoleController.d.ts +2 -1
- package/lib/cjs/controllers/ActiveRoleController.d.ts.map +1 -1
- package/lib/cjs/controllers/ActiveRoleController.js +7 -17
- package/lib/cjs/controllers/ActiveRoleController.js.map +1 -1
- package/lib/cjs/controllers/ImpersonationController.d.ts +7 -9
- package/lib/cjs/controllers/ImpersonationController.d.ts.map +1 -1
- package/lib/cjs/controllers/ImpersonationController.js +31 -56
- package/lib/cjs/controllers/ImpersonationController.js.map +1 -1
- package/lib/cjs/controllers/LoginController.d.ts +10 -3
- package/lib/cjs/controllers/LoginController.d.ts.map +1 -1
- package/lib/cjs/controllers/LoginController.js +39 -40
- package/lib/cjs/controllers/LoginController.js.map +1 -1
- package/lib/cjs/controllers/PasswordResetController.d.ts +54 -0
- package/lib/cjs/controllers/PasswordResetController.d.ts.map +1 -0
- package/lib/cjs/controllers/PasswordResetController.js +129 -0
- package/lib/cjs/controllers/PasswordResetController.js.map +1 -0
- package/lib/cjs/controllers/SessionsController.d.ts +65 -0
- package/lib/cjs/controllers/SessionsController.d.ts.map +1 -0
- package/lib/cjs/controllers/SessionsController.js +143 -0
- package/lib/cjs/controllers/SessionsController.js.map +1 -0
- package/lib/cjs/controllers/TwoFactorAuthController.d.ts +24 -23
- package/lib/cjs/controllers/TwoFactorAuthController.d.ts.map +1 -1
- package/lib/cjs/controllers/TwoFactorAuthController.js +39 -72
- package/lib/cjs/controllers/TwoFactorAuthController.js.map +1 -1
- package/lib/cjs/controllers/TwoFactorAuthUserController.d.ts +98 -0
- package/lib/cjs/controllers/TwoFactorAuthUserController.d.ts.map +1 -0
- package/lib/cjs/controllers/TwoFactorAuthUserController.js +195 -0
- package/lib/cjs/controllers/TwoFactorAuthUserController.js.map +1 -0
- package/lib/cjs/controllers/UserController.d.ts +10 -7
- package/lib/cjs/controllers/UserController.d.ts.map +1 -1
- package/lib/cjs/controllers/UserController.js +56 -58
- package/lib/cjs/controllers/UserController.js.map +1 -1
- package/lib/cjs/controllers/UserMetadataController.d.ts +6 -12
- package/lib/cjs/controllers/UserMetadataController.d.ts.map +1 -1
- package/lib/cjs/controllers/UserMetadataController.js +23 -72
- package/lib/cjs/controllers/UserMetadataController.js.map +1 -1
- package/lib/cjs/dto/confirm-password-dto.d.ts +23 -0
- package/lib/cjs/dto/confirm-password-dto.d.ts.map +1 -0
- package/lib/cjs/dto/{restore-password-dto.js → confirm-password-dto.js} +16 -12
- package/lib/cjs/dto/confirm-password-dto.js.map +1 -0
- package/lib/cjs/dto/password-reset-dto.d.ts +58 -0
- package/lib/cjs/dto/password-reset-dto.d.ts.map +1 -0
- package/lib/cjs/dto/password-reset-dto.js +57 -0
- package/lib/cjs/dto/password-reset-dto.js.map +1 -0
- package/lib/cjs/handlers/DefaultLogoutHandler.d.ts +4 -1
- package/lib/cjs/handlers/DefaultLogoutHandler.d.ts.map +1 -1
- package/lib/cjs/handlers/DefaultLogoutHandler.js +20 -13
- package/lib/cjs/handlers/DefaultLogoutHandler.js.map +1 -1
- package/lib/cjs/handlers/ImpersonationLogoutHandler.d.ts +4 -7
- package/lib/cjs/handlers/ImpersonationLogoutHandler.d.ts.map +1 -1
- package/lib/cjs/handlers/ImpersonationLogoutHandler.js +30 -31
- package/lib/cjs/handlers/ImpersonationLogoutHandler.js.map +1 -1
- package/lib/cjs/index.d.ts +20 -0
- package/lib/cjs/index.d.ts.map +1 -1
- package/lib/cjs/index.js +22 -0
- package/lib/cjs/index.js.map +1 -1
- package/lib/cjs/logout.d.ts +7 -0
- package/lib/cjs/logout.d.ts.map +1 -1
- package/lib/cjs/logout.js.map +1 -1
- package/lib/cjs/policies/2FaPolicy.d.ts +21 -1
- package/lib/cjs/policies/2FaPolicy.d.ts.map +1 -1
- package/lib/cjs/policies/2FaPolicy.js +31 -7
- package/lib/cjs/policies/2FaPolicy.js.map +1 -1
- package/lib/cjs/services/ImpersonationService.d.ts +90 -0
- package/lib/cjs/services/ImpersonationService.d.ts.map +1 -0
- package/lib/cjs/services/ImpersonationService.js +147 -0
- package/lib/cjs/services/ImpersonationService.js.map +1 -0
- package/lib/cjs/services/SessionCookies.d.ts +41 -0
- package/lib/cjs/services/SessionCookies.d.ts.map +1 -0
- package/lib/cjs/services/SessionCookies.js +62 -0
- package/lib/cjs/services/SessionCookies.js.map +1 -0
- package/lib/cjs/services/UserMetadataService.d.ts +53 -0
- package/lib/cjs/services/UserMetadataService.d.ts.map +1 -0
- package/lib/cjs/services/UserMetadataService.js +94 -0
- package/lib/cjs/services/UserMetadataService.js.map +1 -0
- package/lib/cjs/services/grants.d.ts +29 -0
- package/lib/cjs/services/grants.d.ts.map +1 -0
- package/lib/cjs/services/grants.js +43 -0
- package/lib/cjs/services/grants.js.map +1 -0
- package/lib/mjs/config/rbac-http.d.ts +0 -15
- package/lib/mjs/config/rbac-http.d.ts.map +1 -1
- package/lib/mjs/config/rbac-http.js +6 -16
- package/lib/mjs/config/rbac-http.js.map +1 -1
- package/lib/mjs/controllers/ActiveRoleController.d.ts +2 -1
- package/lib/mjs/controllers/ActiveRoleController.d.ts.map +1 -1
- package/lib/mjs/controllers/ActiveRoleController.js +8 -18
- package/lib/mjs/controllers/ActiveRoleController.js.map +1 -1
- package/lib/mjs/controllers/ImpersonationController.d.ts +7 -9
- package/lib/mjs/controllers/ImpersonationController.d.ts.map +1 -1
- package/lib/mjs/controllers/ImpersonationController.js +32 -57
- package/lib/mjs/controllers/ImpersonationController.js.map +1 -1
- package/lib/mjs/controllers/LoginController.d.ts +10 -3
- package/lib/mjs/controllers/LoginController.d.ts.map +1 -1
- package/lib/mjs/controllers/LoginController.js +42 -43
- package/lib/mjs/controllers/LoginController.js.map +1 -1
- package/lib/mjs/controllers/PasswordResetController.d.ts +54 -0
- package/lib/mjs/controllers/PasswordResetController.d.ts.map +1 -0
- package/lib/mjs/controllers/PasswordResetController.js +126 -0
- package/lib/mjs/controllers/PasswordResetController.js.map +1 -0
- package/lib/mjs/controllers/SessionsController.d.ts +65 -0
- package/lib/mjs/controllers/SessionsController.d.ts.map +1 -0
- package/lib/mjs/controllers/SessionsController.js +140 -0
- package/lib/mjs/controllers/SessionsController.js.map +1 -0
- package/lib/mjs/controllers/TwoFactorAuthController.d.ts +24 -23
- package/lib/mjs/controllers/TwoFactorAuthController.d.ts.map +1 -1
- package/lib/mjs/controllers/TwoFactorAuthController.js +43 -76
- package/lib/mjs/controllers/TwoFactorAuthController.js.map +1 -1
- package/lib/mjs/controllers/TwoFactorAuthUserController.d.ts +98 -0
- package/lib/mjs/controllers/TwoFactorAuthUserController.d.ts.map +1 -0
- package/lib/mjs/controllers/TwoFactorAuthUserController.js +192 -0
- package/lib/mjs/controllers/TwoFactorAuthUserController.js.map +1 -0
- package/lib/mjs/controllers/UserController.d.ts +10 -7
- package/lib/mjs/controllers/UserController.d.ts.map +1 -1
- package/lib/mjs/controllers/UserController.js +59 -28
- package/lib/mjs/controllers/UserController.js.map +1 -1
- package/lib/mjs/controllers/UserMetadataController.d.ts +6 -12
- package/lib/mjs/controllers/UserMetadataController.d.ts.map +1 -1
- package/lib/mjs/controllers/UserMetadataController.js +23 -72
- package/lib/mjs/controllers/UserMetadataController.js.map +1 -1
- package/lib/mjs/dto/confirm-password-dto.d.ts +23 -0
- package/lib/mjs/dto/confirm-password-dto.d.ts.map +1 -0
- package/lib/mjs/dto/{user-dto.js → confirm-password-dto.js} +15 -10
- package/lib/mjs/dto/confirm-password-dto.js.map +1 -0
- package/lib/mjs/dto/password-reset-dto.d.ts +58 -0
- package/lib/mjs/dto/password-reset-dto.d.ts.map +1 -0
- package/lib/mjs/dto/password-reset-dto.js +54 -0
- package/lib/mjs/dto/password-reset-dto.js.map +1 -0
- package/lib/mjs/handlers/DefaultLogoutHandler.d.ts +4 -1
- package/lib/mjs/handlers/DefaultLogoutHandler.d.ts.map +1 -1
- package/lib/mjs/handlers/DefaultLogoutHandler.js +23 -16
- package/lib/mjs/handlers/DefaultLogoutHandler.js.map +1 -1
- package/lib/mjs/handlers/ImpersonationLogoutHandler.d.ts +4 -7
- package/lib/mjs/handlers/ImpersonationLogoutHandler.d.ts.map +1 -1
- package/lib/mjs/handlers/ImpersonationLogoutHandler.js +31 -32
- package/lib/mjs/handlers/ImpersonationLogoutHandler.js.map +1 -1
- package/lib/mjs/index.d.ts +20 -0
- package/lib/mjs/index.d.ts.map +1 -1
- package/lib/mjs/index.js +22 -0
- package/lib/mjs/index.js.map +1 -1
- package/lib/mjs/logout.d.ts +7 -0
- package/lib/mjs/logout.d.ts.map +1 -1
- package/lib/mjs/logout.js.map +1 -1
- package/lib/mjs/policies/2FaPolicy.d.ts +21 -1
- package/lib/mjs/policies/2FaPolicy.d.ts.map +1 -1
- package/lib/mjs/policies/2FaPolicy.js +29 -6
- package/lib/mjs/policies/2FaPolicy.js.map +1 -1
- package/lib/mjs/services/ImpersonationService.d.ts +90 -0
- package/lib/mjs/services/ImpersonationService.d.ts.map +1 -0
- package/lib/mjs/services/ImpersonationService.js +144 -0
- package/lib/mjs/services/ImpersonationService.js.map +1 -0
- package/lib/mjs/services/SessionCookies.d.ts +41 -0
- package/lib/mjs/services/SessionCookies.d.ts.map +1 -0
- package/lib/mjs/services/SessionCookies.js +59 -0
- package/lib/mjs/services/SessionCookies.js.map +1 -0
- package/lib/mjs/services/UserMetadataService.d.ts +53 -0
- package/lib/mjs/services/UserMetadataService.d.ts.map +1 -0
- package/lib/mjs/services/UserMetadataService.js +91 -0
- package/lib/mjs/services/UserMetadataService.js.map +1 -0
- package/lib/mjs/services/grants.d.ts +29 -0
- package/lib/mjs/services/grants.d.ts.map +1 -0
- package/lib/mjs/services/grants.js +38 -0
- package/lib/mjs/services/grants.js.map +1 -0
- package/lib/tsconfig.cjs.tsbuildinfo +1 -1
- package/lib/tsconfig.mjs.tsbuildinfo +1 -1
- package/package.json +17 -11
- package/lib/cjs/controllers/AuthController.d.ts +0 -1
- package/lib/cjs/controllers/AuthController.d.ts.map +0 -1
- package/lib/cjs/controllers/AuthController.js +0 -211
- package/lib/cjs/controllers/AuthController.js.map +0 -1
- package/lib/cjs/controllers/FederatedLoginController.d.ts +0 -1
- package/lib/cjs/controllers/FederatedLoginController.d.ts.map +0 -1
- package/lib/cjs/controllers/FederatedLoginController.js +0 -38
- package/lib/cjs/controllers/FederatedLoginController.js.map +0 -1
- package/lib/cjs/dto/login-dto.d.ts +0 -17
- package/lib/cjs/dto/login-dto.d.ts.map +0 -1
- package/lib/cjs/dto/login-dto.js +0 -33
- package/lib/cjs/dto/login-dto.js.map +0 -1
- package/lib/cjs/dto/restore-password-dto.d.ts +0 -24
- package/lib/cjs/dto/restore-password-dto.d.ts.map +0 -1
- package/lib/cjs/dto/restore-password-dto.js.map +0 -1
- package/lib/cjs/dto/user-dto.d.ts +0 -22
- package/lib/cjs/dto/user-dto.d.ts.map +0 -1
- package/lib/cjs/dto/user-dto.js +0 -33
- package/lib/cjs/dto/user-dto.js.map +0 -1
- package/lib/cjs/fingerprint/FingerprintJs.d.ts +0 -1
- package/lib/cjs/fingerprint/FingerprintJs.d.ts.map +0 -1
- package/lib/cjs/fingerprint/FingerprintJs.js +0 -5
- package/lib/cjs/fingerprint/FingerprintJs.js.map +0 -1
- package/lib/cjs/middlewares/AttributeFilter.d.ts +0 -11
- package/lib/cjs/middlewares/AttributeFilter.d.ts.map +0 -1
- package/lib/cjs/middlewares/AttributeFilter.js +0 -19
- package/lib/cjs/middlewares/AttributeFilter.js.map +0 -1
- package/lib/cjs/policies/AllowFederatedLoginPolicy.d.ts +0 -7
- package/lib/cjs/policies/AllowFederatedLoginPolicy.d.ts.map +0 -1
- package/lib/cjs/policies/AllowFederatedLoginPolicy.js +0 -32
- package/lib/cjs/policies/AllowFederatedLoginPolicy.js.map +0 -1
- package/lib/cjs/policies/CaptchaPolicy.d.ts +0 -1
- package/lib/cjs/policies/CaptchaPolicy.d.ts.map +0 -1
- package/lib/cjs/policies/CaptchaPolicy.js +0 -1
- package/lib/cjs/policies/CaptchaPolicy.js.map +0 -1
- package/lib/mjs/controllers/AuthController.d.ts +0 -2
- package/lib/mjs/controllers/AuthController.d.ts.map +0 -1
- package/lib/mjs/controllers/AuthController.js +0 -212
- package/lib/mjs/controllers/AuthController.js.map +0 -1
- package/lib/mjs/controllers/FederatedLoginController.d.ts +0 -2
- package/lib/mjs/controllers/FederatedLoginController.d.ts.map +0 -1
- package/lib/mjs/controllers/FederatedLoginController.js +0 -39
- package/lib/mjs/controllers/FederatedLoginController.js.map +0 -1
- package/lib/mjs/dto/login-dto.d.ts +0 -17
- package/lib/mjs/dto/login-dto.d.ts.map +0 -1
- package/lib/mjs/dto/login-dto.js +0 -30
- package/lib/mjs/dto/login-dto.js.map +0 -1
- package/lib/mjs/dto/restore-password-dto.d.ts +0 -24
- package/lib/mjs/dto/restore-password-dto.d.ts.map +0 -1
- package/lib/mjs/dto/restore-password-dto.js +0 -31
- package/lib/mjs/dto/restore-password-dto.js.map +0 -1
- package/lib/mjs/dto/user-dto.d.ts +0 -22
- package/lib/mjs/dto/user-dto.d.ts.map +0 -1
- package/lib/mjs/dto/user-dto.js.map +0 -1
- package/lib/mjs/fingerprint/FingerprintJs.d.ts +0 -2
- package/lib/mjs/fingerprint/FingerprintJs.d.ts.map +0 -1
- package/lib/mjs/fingerprint/FingerprintJs.js +0 -6
- package/lib/mjs/fingerprint/FingerprintJs.js.map +0 -1
- package/lib/mjs/middlewares/AttributeFilter.d.ts +0 -11
- package/lib/mjs/middlewares/AttributeFilter.d.ts.map +0 -1
- package/lib/mjs/middlewares/AttributeFilter.js +0 -15
- package/lib/mjs/middlewares/AttributeFilter.js.map +0 -1
- package/lib/mjs/policies/AllowFederatedLoginPolicy.d.ts +0 -7
- package/lib/mjs/policies/AllowFederatedLoginPolicy.d.ts.map +0 -1
- package/lib/mjs/policies/AllowFederatedLoginPolicy.js +0 -28
- package/lib/mjs/policies/AllowFederatedLoginPolicy.js.map +0 -1
- package/lib/mjs/policies/CaptchaPolicy.d.ts +0 -2
- package/lib/mjs/policies/CaptchaPolicy.d.ts.map +0 -1
- package/lib/mjs/policies/CaptchaPolicy.js +0 -2
- package/lib/mjs/policies/CaptchaPolicy.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"password-reset-dto.js","sourceRoot":"","sources":["../../../src/dto/password-reset-dto.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAE7C,MAAM,CAAC,MAAM,6BAA6B,GAAG;IAC3C,OAAO,EAAE,yCAAyC;IAClD,KAAK,EAAE,4BAA4B;IACnC,IAAI,EAAE,QAAQ;IACd,UAAU,EAAE;QACV,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,uCAAuC,EAAE;KACjG;IACD,QAAQ,EAAE,CAAC,OAAO,CAAC;CACpB,CAAC;AAEF,2EAA2E;AAEpE,IAAM,uBAAuB,GAA7B,MAAM,uBAAuB;IAGlC,YAAY,IAAS;QACnB,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC5B,CAAC;CACF,CAAA;AANY,uBAAuB;IADnC,MAAM,CAAC,6BAA6B,CAAC;;GACzB,uBAAuB,CAMnC;;AAED,MAAM,CAAC,MAAM,6BAA6B,GAAG;IAC3C,OAAO,EAAE,yCAAyC;IAClD,KAAK,EAAE,iCAAiC;IACxC,IAAI,EAAE,QAAQ;IACd,UAAU,EAAE;QACV,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,8CAA8C,EAAE;QACvG,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,WAAW,EAAE,mCAAmC,EAAE;QACxG,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,WAAW,EAAE,gCAAgC,EAAE;QACxG,eAAe,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,WAAW,EAAE,qBAAqB,EAAE;KACrG;IACD,QAAQ,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,iBAAiB,CAAC;CAC5D,CAAC;AAEF,iEAAiE;AAE1D,IAAM,uBAAuB,GAA7B,MAAM,uBAAuB;IASlC,YAAY,IAAS;QACnB,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC5B,CAAC;CACF,CAAA;AAZY,uBAAuB;IADnC,MAAM,CAAC,6BAA6B,CAAC;;GACzB,uBAAuB,CAYnC"}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { SessionProvider } from '@spinajs/rbac';
|
|
2
|
+
import { Log } from '@spinajs/log';
|
|
2
3
|
import { LogoutHandler, ILogoutContext, ILogoutResult } from '../logout.js';
|
|
4
|
+
import { SessionCookieFactory } from '../services/SessionCookies.js';
|
|
3
5
|
/**
|
|
4
6
|
* Default logout handler: deletes the session and clears the ssid cookie.
|
|
5
7
|
* Runs last (priority 999) so any earlier handler can short-circuit (e.g.
|
|
@@ -7,8 +9,9 @@ import { LogoutHandler, ILogoutContext, ILogoutResult } from '../logout.js';
|
|
|
7
9
|
*/
|
|
8
10
|
export declare class DefaultLogoutHandler extends LogoutHandler {
|
|
9
11
|
Priority: number;
|
|
12
|
+
protected Log: Log;
|
|
10
13
|
protected SessionProvider: SessionProvider;
|
|
11
|
-
protected
|
|
14
|
+
protected SessionCookies: SessionCookieFactory;
|
|
12
15
|
handle(context: ILogoutContext): Promise<ILogoutResult | null>;
|
|
13
16
|
}
|
|
14
17
|
//# sourceMappingURL=DefaultLogoutHandler.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DefaultLogoutHandler.d.ts","sourceRoot":"","sources":["../../../src/handlers/DefaultLogoutHandler.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,
|
|
1
|
+
{"version":3,"file":"DefaultLogoutHandler.d.ts","sourceRoot":"","sources":["../../../src/handlers/DefaultLogoutHandler.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAiB,MAAM,eAAe,CAAC;AAC/D,OAAO,EAAE,GAAG,EAAU,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC5E,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAErE;;;;GAIG;AACH,qBACa,oBAAqB,SAAQ,aAAa;IAC9C,QAAQ,SAAO;IAGtB,SAAS,CAAC,GAAG,EAAG,GAAG,CAAC;IAGpB,SAAS,CAAC,eAAe,EAAG,eAAe,CAAC;IAG5C,SAAS,CAAC,cAAc,EAAG,oBAAoB,CAAC;IAEnC,MAAM,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;CAyB5E"}
|
|
@@ -7,10 +7,12 @@ 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 { Injectable } from '@spinajs/di';
|
|
11
|
-
import { AutoinjectService
|
|
12
|
-
import { SessionProvider } from '@spinajs/rbac';
|
|
10
|
+
import { Autoinject, Injectable } from '@spinajs/di';
|
|
11
|
+
import { AutoinjectService } from '@spinajs/configuration';
|
|
12
|
+
import { SessionProvider, hashSessionId } from '@spinajs/rbac';
|
|
13
|
+
import { Log, Logger } from '@spinajs/log';
|
|
13
14
|
import { LogoutHandler } from '../logout.js';
|
|
15
|
+
import { SessionCookieFactory } from '../services/SessionCookies.js';
|
|
14
16
|
/**
|
|
15
17
|
* Default logout handler: deletes the session and clears the ssid cookie.
|
|
16
18
|
* Runs last (priority 999) so any earlier handler can short-circuit (e.g.
|
|
@@ -27,30 +29,35 @@ let DefaultLogoutHandler = class DefaultLogoutHandler extends LogoutHandler {
|
|
|
27
29
|
return { Body: null };
|
|
28
30
|
}
|
|
29
31
|
await this.SessionProvider.delete(context.Ssid);
|
|
32
|
+
this.Log.info(`Session destroyed by logout`, {
|
|
33
|
+
Session: hashSessionId(context.Ssid),
|
|
34
|
+
User: context.User?.Uuid,
|
|
35
|
+
});
|
|
30
36
|
return {
|
|
31
37
|
Body: null,
|
|
32
|
-
Cookies: [
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
...this.SessionCookieConfig,
|
|
40
|
-
},
|
|
41
|
-
},
|
|
38
|
+
Cookies: [this.SessionCookies.clear()],
|
|
39
|
+
Headers: [
|
|
40
|
+
// Drop everything this origin left in the browser, not just the cookie:
|
|
41
|
+
// a cached authenticated page is still readable after logout on a
|
|
42
|
+
// shared machine, and `max-age=0` on the cookie does nothing about it.
|
|
43
|
+
{ Name: 'Clear-Site-Data', Value: '"cache", "cookies", "storage"' },
|
|
44
|
+
{ Name: 'Cache-Control', Value: 'no-store' },
|
|
42
45
|
],
|
|
43
46
|
};
|
|
44
47
|
}
|
|
45
48
|
};
|
|
49
|
+
__decorate([
|
|
50
|
+
Logger('rbac-session'),
|
|
51
|
+
__metadata("design:type", Log)
|
|
52
|
+
], DefaultLogoutHandler.prototype, "Log", void 0);
|
|
46
53
|
__decorate([
|
|
47
54
|
AutoinjectService('rbac.session'),
|
|
48
55
|
__metadata("design:type", SessionProvider)
|
|
49
56
|
], DefaultLogoutHandler.prototype, "SessionProvider", void 0);
|
|
50
57
|
__decorate([
|
|
51
|
-
|
|
52
|
-
__metadata("design:type",
|
|
53
|
-
], DefaultLogoutHandler.prototype, "
|
|
58
|
+
Autoinject(SessionCookieFactory),
|
|
59
|
+
__metadata("design:type", SessionCookieFactory)
|
|
60
|
+
], DefaultLogoutHandler.prototype, "SessionCookies", void 0);
|
|
54
61
|
DefaultLogoutHandler = __decorate([
|
|
55
62
|
Injectable(LogoutHandler)
|
|
56
63
|
], DefaultLogoutHandler);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DefaultLogoutHandler.js","sourceRoot":"","sources":["../../../src/handlers/DefaultLogoutHandler.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"DefaultLogoutHandler.js","sourceRoot":"","sources":["../../../src/handlers/DefaultLogoutHandler.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC/D,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAiC,MAAM,cAAc,CAAC;AAC5E,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAErE;;;;GAIG;AAEI,IAAM,oBAAoB,GAA1B,MAAM,oBAAqB,SAAQ,aAAa;IAAhD;;QACE,aAAQ,GAAG,GAAG,CAAC;IAoCxB,CAAC;IAzBQ,KAAK,CAAC,MAAM,CAAC,OAAuB;QACzC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YAClB,+DAA+D;YAC/D,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;QACxB,CAAC;QAED,MAAM,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAEhD,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,6BAA6B,EAAE;YAC3C,OAAO,EAAE,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC;YACpC,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,IAAI;SACzB,CAAC,CAAC;QAEH,OAAO;YACL,IAAI,EAAE,IAAI;YACV,OAAO,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC;YACtC,OAAO,EAAE;gBACP,wEAAwE;gBACxE,kEAAkE;gBAClE,uEAAuE;gBACvE,EAAE,IAAI,EAAE,iBAAiB,EAAE,KAAK,EAAE,+BAA+B,EAAE;gBACnE,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,UAAU,EAAE;aAC7C;SACF,CAAC;IACJ,CAAC;CACF,CAAA;AAjCW;IADT,MAAM,CAAC,cAAc,CAAC;8BACP,GAAG;iDAAC;AAGV;IADT,iBAAiB,CAAC,cAAc,CAAC;8BACN,eAAe;6DAAC;AAGlC;IADT,UAAU,CAAC,oBAAoB,CAAC;8BACN,oBAAoB;4DAAC;AAVrC,oBAAoB;IADhC,UAAU,CAAC,aAAa,CAAC;GACb,oBAAoB,CAqChC"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import { SessionProvider, User } from '@spinajs/rbac';
|
|
2
1
|
import { LogoutHandler, ILogoutContext, ILogoutResult } from '../logout.js';
|
|
2
|
+
import { ImpersonationService } from '../services/ImpersonationService.js';
|
|
3
|
+
import { SessionCookieFactory } from '../services/SessionCookies.js';
|
|
3
4
|
/**
|
|
4
5
|
* Logout handler that detects an active impersonation and reverts it instead
|
|
5
6
|
* of destroying the session. Runs early (priority 10) so it short-circuits
|
|
@@ -7,12 +8,8 @@ import { LogoutHandler, ILogoutContext, ILogoutResult } from '../logout.js';
|
|
|
7
8
|
*/
|
|
8
9
|
export declare class ImpersonationLogoutHandler extends LogoutHandler {
|
|
9
10
|
Priority: number;
|
|
10
|
-
protected
|
|
11
|
+
protected Impersonation: ImpersonationService;
|
|
12
|
+
protected SessionCookies: SessionCookieFactory;
|
|
11
13
|
handle(context: ILogoutContext): Promise<ILogoutResult | null>;
|
|
12
|
-
/**
|
|
13
|
-
* Hook for tests to intercept event emission without stubbing the module-level
|
|
14
|
-
* `_ev` ESM binding.
|
|
15
|
-
*/
|
|
16
|
-
protected emitEvent(original: User, target: User): Promise<void>;
|
|
17
14
|
}
|
|
18
15
|
//# sourceMappingURL=ImpersonationLogoutHandler.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ImpersonationLogoutHandler.d.ts","sourceRoot":"","sources":["../../../src/handlers/ImpersonationLogoutHandler.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ImpersonationLogoutHandler.d.ts","sourceRoot":"","sources":["../../../src/handlers/ImpersonationLogoutHandler.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC5E,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAC3E,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAErE;;;;GAIG;AACH,qBACa,0BAA2B,SAAQ,aAAa;IACpD,QAAQ,SAAM;IAGrB,SAAS,CAAC,aAAa,EAAE,oBAAoB,CAAC;IAG9C,SAAS,CAAC,cAAc,EAAE,oBAAoB,CAAC;IAElC,MAAM,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;CA6B5E"}
|
|
@@ -7,11 +7,10 @@ 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 { Injectable } from '@spinajs/di';
|
|
11
|
-
import { AutoinjectService } from '@spinajs/configuration';
|
|
12
|
-
import { SessionProvider, User, UserImpersonationEnded } from '@spinajs/rbac';
|
|
13
|
-
import { _ev } from '@spinajs/queue';
|
|
10
|
+
import { Autoinject, Injectable } from '@spinajs/di';
|
|
14
11
|
import { LogoutHandler } from '../logout.js';
|
|
12
|
+
import { ImpersonationService } from '../services/ImpersonationService.js';
|
|
13
|
+
import { SessionCookieFactory } from '../services/SessionCookies.js';
|
|
15
14
|
/**
|
|
16
15
|
* Logout handler that detects an active impersonation and reverts it instead
|
|
17
16
|
* of destroying the session. Runs early (priority 10) so it short-circuits
|
|
@@ -23,39 +22,39 @@ let ImpersonationLogoutHandler = class ImpersonationLogoutHandler extends Logout
|
|
|
23
22
|
this.Priority = 10;
|
|
24
23
|
}
|
|
25
24
|
async handle(context) {
|
|
26
|
-
|
|
27
|
-
if (!session)
|
|
25
|
+
if (!this.Impersonation.isActive(context.Session)) {
|
|
28
26
|
return null;
|
|
29
|
-
const impersonatorUuid = session.Data.get('Impersonator');
|
|
30
|
-
if (!impersonatorUuid)
|
|
31
|
-
return null;
|
|
32
|
-
const original = await User.getByUuid(impersonatorUuid);
|
|
33
|
-
session.Data.set('User', original.Uuid);
|
|
34
|
-
session.Data.delete('Impersonator');
|
|
35
|
-
session.Data.delete('ImpersonationStartedAt');
|
|
36
|
-
const restoredActiveRole = session.Data.get('OriginalActiveRole') ?? original.Role?.[0];
|
|
37
|
-
if (restoredActiveRole) {
|
|
38
|
-
session.Data.set('ActiveRole', restoredActiveRole);
|
|
39
27
|
}
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
28
|
+
const result = await this.Impersonation.revert(context.Session, context.User);
|
|
29
|
+
switch (result.Status) {
|
|
30
|
+
case 'reverted':
|
|
31
|
+
// Take ownership of the response: the original user's session
|
|
32
|
+
// continues, under the new id the revert rotated it to.
|
|
33
|
+
return {
|
|
34
|
+
Body: { ImpersonationEnded: true },
|
|
35
|
+
Cookies: [this.SessionCookies.issue(result.Session)],
|
|
36
|
+
Headers: [{ Name: 'Cache-Control', Value: 'no-store' }],
|
|
37
|
+
};
|
|
38
|
+
case 'impersonator-gone':
|
|
39
|
+
// The impersonator's account disappeared mid-impersonation. The stale
|
|
40
|
+
// block has been cleared, but there is no identity left to hand the
|
|
41
|
+
// session back to — defer to the default handler so the session is
|
|
42
|
+
// destroyed and the caller is logged out properly. Reverting used to
|
|
43
|
+
// dereference the missing user here and answer a logout with a 500.
|
|
44
|
+
return null;
|
|
45
|
+
default:
|
|
46
|
+
return null;
|
|
47
|
+
}
|
|
53
48
|
}
|
|
54
49
|
};
|
|
55
50
|
__decorate([
|
|
56
|
-
|
|
57
|
-
__metadata("design:type",
|
|
58
|
-
], ImpersonationLogoutHandler.prototype, "
|
|
51
|
+
Autoinject(ImpersonationService),
|
|
52
|
+
__metadata("design:type", ImpersonationService)
|
|
53
|
+
], ImpersonationLogoutHandler.prototype, "Impersonation", void 0);
|
|
54
|
+
__decorate([
|
|
55
|
+
Autoinject(SessionCookieFactory),
|
|
56
|
+
__metadata("design:type", SessionCookieFactory)
|
|
57
|
+
], ImpersonationLogoutHandler.prototype, "SessionCookies", void 0);
|
|
59
58
|
ImpersonationLogoutHandler = __decorate([
|
|
60
59
|
Injectable(LogoutHandler)
|
|
61
60
|
], ImpersonationLogoutHandler);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ImpersonationLogoutHandler.js","sourceRoot":"","sources":["../../../src/handlers/ImpersonationLogoutHandler.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,UAAU,EAAE,
|
|
1
|
+
{"version":3,"file":"ImpersonationLogoutHandler.js","sourceRoot":"","sources":["../../../src/handlers/ImpersonationLogoutHandler.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,aAAa,EAAiC,MAAM,cAAc,CAAC;AAC5E,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAC3E,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAErE;;;;GAIG;AAEI,IAAM,0BAA0B,GAAhC,MAAM,0BAA2B,SAAQ,aAAa;IAAtD;;QACE,aAAQ,GAAG,EAAE,CAAC;IAqCvB,CAAC;IA7BQ,KAAK,CAAC,MAAM,CAAC,OAAuB;QACzC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YAClD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;QAE9E,QAAQ,MAAM,CAAC,MAAM,EAAE,CAAC;YACtB,KAAK,UAAU;gBACb,8DAA8D;gBAC9D,wDAAwD;gBACxD,OAAO;oBACL,IAAI,EAAE,EAAE,kBAAkB,EAAE,IAAI,EAAE;oBAClC,OAAO,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;oBACpD,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;iBACxD,CAAC;YAEJ,KAAK,mBAAmB;gBACtB,sEAAsE;gBACtE,oEAAoE;gBACpE,mEAAmE;gBACnE,qEAAqE;gBACrE,oEAAoE;gBACpE,OAAO,IAAI,CAAC;YAEd;gBACE,OAAO,IAAI,CAAC;QAChB,CAAC;IACH,CAAC;CACF,CAAA;AAlCW;IADT,UAAU,CAAC,oBAAoB,CAAC;8BACR,oBAAoB;iEAAC;AAGpC;IADT,UAAU,CAAC,oBAAoB,CAAC;8BACP,oBAAoB;kEAAC;AAPpC,0BAA0B;IADtC,UAAU,CAAC,aAAa,CAAC;GACb,0BAA0B,CAsCtC"}
|
package/lib/mjs/index.d.ts
CHANGED
|
@@ -8,9 +8,29 @@ export * from './handlers/ImpersonationLogoutHandler.js';
|
|
|
8
8
|
export * from './handlers/DefaultLogoutHandler.js';
|
|
9
9
|
export * from './controllers/UserMetadataController.js';
|
|
10
10
|
export * from "./controllers/TwoFactorAuthController.js";
|
|
11
|
+
export * from "./controllers/TwoFactorAuthUserController.js";
|
|
12
|
+
export * from "./controllers/PasswordResetController.js";
|
|
13
|
+
export * from "./controllers/SessionsController.js";
|
|
11
14
|
export * from "./cli/EnableUser2Fa.js";
|
|
12
15
|
export * from "./2fa/Default2FaToken.js";
|
|
13
16
|
export * from './actions/2fa.js';
|
|
17
|
+
export * from './services/SessionCookies.js';
|
|
18
|
+
export * from './services/grants.js';
|
|
19
|
+
export * from './services/ImpersonationService.js';
|
|
20
|
+
export * from './services/UserMetadataService.js';
|
|
21
|
+
export * from './policies/2FaPolicy.js';
|
|
22
|
+
export * from './events/User2FaEnabled.js';
|
|
23
|
+
export * from './events/User2FaDisabled.js';
|
|
24
|
+
export * from './events/User2FaPassed.js';
|
|
25
|
+
export * from './events/User2FaReset.js';
|
|
26
|
+
export * from './dto/confirm-password-dto.js';
|
|
27
|
+
export * from './dto/impersonate-dto.js';
|
|
28
|
+
export * from './dto/metadata-dto.js';
|
|
29
|
+
export * from './dto/password-dto.js';
|
|
30
|
+
export * from './dto/password-reset-dto.js';
|
|
31
|
+
export * from './dto/switchRole-dto.js';
|
|
32
|
+
export * from './dto/token-dto.js';
|
|
33
|
+
export * from './dto/userLogin-dto.js';
|
|
14
34
|
export declare class RbacHttpUserBootstrapper extends Bootstrapper {
|
|
15
35
|
bootstrap(): void;
|
|
16
36
|
}
|
package/lib/mjs/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAc,MAAM,aAAa,CAAC;AAIvD,cAAc,kCAAkC,CAAC;AACjD,cAAc,uCAAuC,CAAC;AACtD,cAAc,0CAA0C,CAAC;AACzD,cAAc,iCAAiC,CAAC;AAEhD,cAAc,aAAa,CAAC;AAC5B,cAAc,0CAA0C,CAAC;AACzD,cAAc,oCAAoC,CAAC;AACnD,cAAc,yCAAyC,CAAC;AACxD,cAAc,0CAA0C,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAc,MAAM,aAAa,CAAC;AAIvD,cAAc,kCAAkC,CAAC;AACjD,cAAc,uCAAuC,CAAC;AACtD,cAAc,0CAA0C,CAAC;AACzD,cAAc,iCAAiC,CAAC;AAEhD,cAAc,aAAa,CAAC;AAC5B,cAAc,0CAA0C,CAAC;AACzD,cAAc,oCAAoC,CAAC;AACnD,cAAc,yCAAyC,CAAC;AACxD,cAAc,0CAA0C,CAAC;AACzD,cAAc,8CAA8C,CAAC;AAC7D,cAAc,0CAA0C,CAAC;AACzD,cAAc,qCAAqC,CAAC;AAEpD,cAAc,wBAAwB,CAAC;AACvC,cAAc,0BAA0B,CAAC;AAEzC,cAAc,kBAAkB,CAAC;AAEjC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,sBAAsB,CAAC;AACrC,cAAc,oCAAoC,CAAC;AACnD,cAAc,mCAAmC,CAAC;AAElD,cAAc,yBAAyB,CAAC;AAIxC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,0BAA0B,CAAC;AAEzC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,0BAA0B,CAAC;AACzC,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,yBAAyB,CAAC;AACxC,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC;AAGvC,qBACa,wBAAyB,SAAQ,YAAY;IAC/C,SAAS,IAAI,IAAI;CAO3B"}
|
package/lib/mjs/index.js
CHANGED
|
@@ -16,9 +16,31 @@ export * from './handlers/ImpersonationLogoutHandler.js';
|
|
|
16
16
|
export * from './handlers/DefaultLogoutHandler.js';
|
|
17
17
|
export * from './controllers/UserMetadataController.js';
|
|
18
18
|
export * from "./controllers/TwoFactorAuthController.js";
|
|
19
|
+
export * from "./controllers/TwoFactorAuthUserController.js";
|
|
20
|
+
export * from "./controllers/PasswordResetController.js";
|
|
21
|
+
export * from "./controllers/SessionsController.js";
|
|
19
22
|
export * from "./cli/EnableUser2Fa.js";
|
|
20
23
|
export * from "./2fa/Default2FaToken.js";
|
|
21
24
|
export * from './actions/2fa.js';
|
|
25
|
+
export * from './services/SessionCookies.js';
|
|
26
|
+
export * from './services/grants.js';
|
|
27
|
+
export * from './services/ImpersonationService.js';
|
|
28
|
+
export * from './services/UserMetadataService.js';
|
|
29
|
+
export * from './policies/2FaPolicy.js';
|
|
30
|
+
// Emitted on the 2FA lifecycle and routed by name in this package's config —
|
|
31
|
+
// consumers need the classes themselves to subscribe by type.
|
|
32
|
+
export * from './events/User2FaEnabled.js';
|
|
33
|
+
export * from './events/User2FaDisabled.js';
|
|
34
|
+
export * from './events/User2FaPassed.js';
|
|
35
|
+
export * from './events/User2FaReset.js';
|
|
36
|
+
export * from './dto/confirm-password-dto.js';
|
|
37
|
+
export * from './dto/impersonate-dto.js';
|
|
38
|
+
export * from './dto/metadata-dto.js';
|
|
39
|
+
export * from './dto/password-dto.js';
|
|
40
|
+
export * from './dto/password-reset-dto.js';
|
|
41
|
+
export * from './dto/switchRole-dto.js';
|
|
42
|
+
export * from './dto/token-dto.js';
|
|
43
|
+
export * from './dto/userLogin-dto.js';
|
|
22
44
|
let RbacHttpUserBootstrapper = class RbacHttpUserBootstrapper extends Bootstrapper {
|
|
23
45
|
bootstrap() {
|
|
24
46
|
UserMetadataBase._hiddenKeys = [
|
package/lib/mjs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAElE,cAAc,kCAAkC,CAAC;AACjD,cAAc,uCAAuC,CAAC;AACtD,cAAc,0CAA0C,CAAC;AACzD,cAAc,iCAAiC,CAAC;AAEhD,cAAc,aAAa,CAAC;AAC5B,cAAc,0CAA0C,CAAC;AACzD,cAAc,oCAAoC,CAAC;AACnD,cAAc,yCAAyC,CAAC;AACxD,cAAc,0CAA0C,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAElE,cAAc,kCAAkC,CAAC;AACjD,cAAc,uCAAuC,CAAC;AACtD,cAAc,0CAA0C,CAAC;AACzD,cAAc,iCAAiC,CAAC;AAEhD,cAAc,aAAa,CAAC;AAC5B,cAAc,0CAA0C,CAAC;AACzD,cAAc,oCAAoC,CAAC;AACnD,cAAc,yCAAyC,CAAC;AACxD,cAAc,0CAA0C,CAAC;AACzD,cAAc,8CAA8C,CAAC;AAC7D,cAAc,0CAA0C,CAAC;AACzD,cAAc,qCAAqC,CAAC;AAEpD,cAAc,wBAAwB,CAAC;AACvC,cAAc,0BAA0B,CAAC;AAEzC,cAAc,kBAAkB,CAAC;AAEjC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,sBAAsB,CAAC;AACrC,cAAc,oCAAoC,CAAC;AACnD,cAAc,mCAAmC,CAAC;AAElD,cAAc,yBAAyB,CAAC;AAExC,6EAA6E;AAC7E,8DAA8D;AAC9D,cAAc,4BAA4B,CAAC;AAC3C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,0BAA0B,CAAC;AAEzC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,0BAA0B,CAAC;AACzC,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,yBAAyB,CAAC;AACxC,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC;AAIhC,IAAM,wBAAwB,GAA9B,MAAM,wBAAyB,SAAQ,YAAY;IAC/C,SAAS;QACZ,gBAAgB,CAAC,WAAW,GAAG;YAC3B,GAAG,gBAAgB,CAAC,WAAW;YAC/B,sBAAsB,CAAC,KAAK;YAC5B,sBAAsB,CAAC,GAAG;SAC7B,CAAA;IACL,CAAC;CACJ,CAAA;AARY,wBAAwB;IADpC,UAAU,CAAC,YAAY,CAAC;GACZ,wBAAwB,CAQpC"}
|
package/lib/mjs/logout.d.ts
CHANGED
|
@@ -18,12 +18,19 @@ export interface ILogoutCookie {
|
|
|
18
18
|
Value: string;
|
|
19
19
|
Options: Record<string, unknown>;
|
|
20
20
|
}
|
|
21
|
+
/** Response header a handler may attach to its response */
|
|
22
|
+
export interface ILogoutHeader {
|
|
23
|
+
Name: string;
|
|
24
|
+
Value: string;
|
|
25
|
+
}
|
|
21
26
|
/** Response payload a handler returns when it takes ownership of the logout */
|
|
22
27
|
export interface ILogoutResult {
|
|
23
28
|
/** Response body */
|
|
24
29
|
Body?: unknown;
|
|
25
30
|
/** Cookie operations to attach */
|
|
26
31
|
Cookies?: ILogoutCookie[];
|
|
32
|
+
/** Response headers to attach ( eg. `Clear-Site-Data` ) */
|
|
33
|
+
Headers?: ILogoutHeader[];
|
|
27
34
|
}
|
|
28
35
|
/**
|
|
29
36
|
* Pluggable logout step. Handlers are resolved via `DI.resolve(Array.ofType(LogoutHandler))`
|
package/lib/mjs/logout.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logout.d.ts","sourceRoot":"","sources":["../../src/logout.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAEpD;;;;GAIG;AACH,MAAM,WAAW,cAAc;IAC7B,0EAA0E;IAC1E,IAAI,EAAE,MAAM,CAAC;IAEb,oDAAoD;IACpD,OAAO,EAAE,QAAQ,GAAG,IAAI,CAAC;IAEzB,mDAAmD;IACnD,IAAI,EAAE,IAAI,CAAC;CACZ;AAED,4DAA4D;AAC5D,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAED,+EAA+E;AAC/E,MAAM,WAAW,aAAa;IAC5B,oBAAoB;IACpB,IAAI,CAAC,EAAE,OAAO,CAAC;IAEf,kCAAkC;IAClC,OAAO,CAAC,EAAE,aAAa,EAAE,CAAC;CAC3B;AAED;;;;;;;;;;;;;;GAcG;AACH,8BAAsB,aAAa;IACjC;;;OAGG;IACI,QAAQ,EAAE,MAAM,CAAO;aAEd,MAAM,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;CAC/E"}
|
|
1
|
+
{"version":3,"file":"logout.d.ts","sourceRoot":"","sources":["../../src/logout.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAEpD;;;;GAIG;AACH,MAAM,WAAW,cAAc;IAC7B,0EAA0E;IAC1E,IAAI,EAAE,MAAM,CAAC;IAEb,oDAAoD;IACpD,OAAO,EAAE,QAAQ,GAAG,IAAI,CAAC;IAEzB,mDAAmD;IACnD,IAAI,EAAE,IAAI,CAAC;CACZ;AAED,4DAA4D;AAC5D,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAED,2DAA2D;AAC3D,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAED,+EAA+E;AAC/E,MAAM,WAAW,aAAa;IAC5B,oBAAoB;IACpB,IAAI,CAAC,EAAE,OAAO,CAAC;IAEf,kCAAkC;IAClC,OAAO,CAAC,EAAE,aAAa,EAAE,CAAC;IAE1B,2DAA2D;IAC3D,OAAO,CAAC,EAAE,aAAa,EAAE,CAAC;CAC3B;AAED;;;;;;;;;;;;;;GAcG;AACH,8BAAsB,aAAa;IACjC;;;OAGG;IACI,QAAQ,EAAE,MAAM,CAAO;aAEd,MAAM,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;CAC/E"}
|
package/lib/mjs/logout.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logout.js","sourceRoot":"","sources":["../../src/logout.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"logout.js","sourceRoot":"","sources":["../../src/logout.ts"],"names":[],"mappings":"AA2CA;;;;;;;;;;;;;;GAcG;AACH,MAAM,OAAgB,aAAa;IAAnC;QACE;;;WAGG;QACI,aAAQ,GAAW,GAAG,CAAC;IAGhC,CAAC;CAAA"}
|
|
@@ -1,8 +1,28 @@
|
|
|
1
1
|
import { BasePolicy, Request as sRequest } from '@spinajs/http';
|
|
2
2
|
import { TwoFactorAuthConfig } from '@spinajs/rbac-http';
|
|
3
|
-
|
|
3
|
+
/**
|
|
4
|
+
* Guards routes that only make sense when 2FA is switched on system-wide.
|
|
5
|
+
*
|
|
6
|
+
* This is the whole check for self-service routes: an already authorized user
|
|
7
|
+
* managing their own TOTP device has no pending 2FA step to look at. The
|
|
8
|
+
* login-window routes need more — see {@link TwoFacRouteEnabled}.
|
|
9
|
+
*/
|
|
10
|
+
export declare class TwoFactorAuthEnabled extends BasePolicy {
|
|
4
11
|
protected TwoFactorConfig: TwoFactorAuthConfig;
|
|
5
12
|
isEnabled(): boolean;
|
|
13
|
+
execute(_req: sRequest): Promise<void>;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Guards the routes that belong to the login-time 2FA step: the caller has
|
|
17
|
+
* passed password authentication and the session is parked awaiting TOTP
|
|
18
|
+
* verification.
|
|
19
|
+
*
|
|
20
|
+
* Combined with `NotAuthorizedPolicy` this window is deliberately narrow. It is
|
|
21
|
+
* NOT the right guard for managing a TOTP device — a session sitting in this
|
|
22
|
+
* window has not proven possession of the second factor yet, so anything it can
|
|
23
|
+
* reach must not be able to weaken 2FA.
|
|
24
|
+
*/
|
|
25
|
+
export declare class TwoFacRouteEnabled extends TwoFactorAuthEnabled {
|
|
6
26
|
execute(req: sRequest): Promise<void>;
|
|
7
27
|
}
|
|
8
28
|
//# sourceMappingURL=2FaPolicy.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"2FaPolicy.d.ts","sourceRoot":"","sources":["../../../src/policies/2FaPolicy.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,eAAe,CAAC;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"2FaPolicy.d.ts","sourceRoot":"","sources":["../../../src/policies/2FaPolicy.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,eAAe,CAAC;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAGzD;;;;;;GAMG;AACH,qBAAa,oBAAqB,SAAQ,UAAU;IAElD,SAAS,CAAC,eAAe,EAAE,mBAAmB,CAAC;IAExC,SAAS,IAAI,OAAO;IAIpB,OAAO,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;CAO9C;AAED;;;;;;;;;GASG;AACH,qBAAa,kBAAmB,SAAQ,oBAAoB;IAC7C,OAAO,CAAC,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;CAgBnD"}
|
|
@@ -11,14 +11,41 @@ import { InvalidOperation } from '@spinajs/exceptions';
|
|
|
11
11
|
import { Config } from '@spinajs/configuration';
|
|
12
12
|
import { BasePolicy } from '@spinajs/http';
|
|
13
13
|
import { Forbidden } from '@spinajs/exceptions';
|
|
14
|
-
|
|
14
|
+
/**
|
|
15
|
+
* Guards routes that only make sense when 2FA is switched on system-wide.
|
|
16
|
+
*
|
|
17
|
+
* This is the whole check for self-service routes: an already authorized user
|
|
18
|
+
* managing their own TOTP device has no pending 2FA step to look at. The
|
|
19
|
+
* login-window routes need more — see {@link TwoFacRouteEnabled}.
|
|
20
|
+
*/
|
|
21
|
+
export class TwoFactorAuthEnabled extends BasePolicy {
|
|
15
22
|
isEnabled() {
|
|
16
23
|
return true;
|
|
17
24
|
}
|
|
18
|
-
execute(
|
|
25
|
+
execute(_req) {
|
|
19
26
|
if (this.TwoFactorConfig.enabled === false) {
|
|
20
27
|
throw new InvalidOperation('2 factor auth is not enabled');
|
|
21
28
|
}
|
|
29
|
+
return Promise.resolve();
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
__decorate([
|
|
33
|
+
Config('rbac.twoFactorAuth'),
|
|
34
|
+
__metadata("design:type", Object)
|
|
35
|
+
], TwoFactorAuthEnabled.prototype, "TwoFactorConfig", void 0);
|
|
36
|
+
/**
|
|
37
|
+
* Guards the routes that belong to the login-time 2FA step: the caller has
|
|
38
|
+
* passed password authentication and the session is parked awaiting TOTP
|
|
39
|
+
* verification.
|
|
40
|
+
*
|
|
41
|
+
* Combined with `NotAuthorizedPolicy` this window is deliberately narrow. It is
|
|
42
|
+
* NOT the right guard for managing a TOTP device — a session sitting in this
|
|
43
|
+
* window has not proven possession of the second factor yet, so anything it can
|
|
44
|
+
* reach must not be able to weaken 2FA.
|
|
45
|
+
*/
|
|
46
|
+
export class TwoFacRouteEnabled extends TwoFactorAuthEnabled {
|
|
47
|
+
async execute(req) {
|
|
48
|
+
await super.execute(req);
|
|
22
49
|
if (!req.storage || !req.storage.Session) {
|
|
23
50
|
throw new InvalidOperation('Session is not set');
|
|
24
51
|
}
|
|
@@ -31,8 +58,4 @@ export class TwoFacRouteEnabled extends BasePolicy {
|
|
|
31
58
|
return Promise.resolve();
|
|
32
59
|
}
|
|
33
60
|
}
|
|
34
|
-
__decorate([
|
|
35
|
-
Config('rbac.twoFactorAuth'),
|
|
36
|
-
__metadata("design:type", Object)
|
|
37
|
-
], TwoFacRouteEnabled.prototype, "TwoFactorConfig", void 0);
|
|
38
61
|
//# sourceMappingURL=2FaPolicy.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"2FaPolicy.js","sourceRoot":"","sources":["../../../src/policies/2FaPolicy.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAuB,MAAM,eAAe,CAAC;AAEhE,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"2FaPolicy.js","sourceRoot":"","sources":["../../../src/policies/2FaPolicy.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAuB,MAAM,eAAe,CAAC;AAEhE,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAEhD;;;;;;GAMG;AACH,MAAM,OAAO,oBAAqB,SAAQ,UAAU;IAI3C,SAAS;QACd,OAAO,IAAI,CAAC;IACd,CAAC;IAEM,OAAO,CAAC,IAAc;QAC3B,IAAI,IAAI,CAAC,eAAe,CAAC,OAAO,KAAK,KAAK,EAAE,CAAC;YAC3C,MAAM,IAAI,gBAAgB,CAAC,8BAA8B,CAAC,CAAC;QAC7D,CAAC;QAED,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;CACF;AAbW;IADT,MAAM,CAAC,oBAAoB,CAAC;;6DACkB;AAejD;;;;;;;;;GASG;AACH,MAAM,OAAO,kBAAmB,SAAQ,oBAAoB;IACnD,KAAK,CAAC,OAAO,CAAC,GAAa;QAChC,MAAM,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAEzB,IAAI,CAAC,GAAG,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YACzC,MAAM,IAAI,gBAAgB,CAAC,oBAAoB,CAAC,CAAC;QACnD,CAAC;QAED;;WAEG;QACH,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,EAAE,CAAC;YACpD,MAAM,IAAI,SAAS,CAAC,gCAAgC,CAAC,CAAC;QACxD,CAAC;QAED,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;CACF"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { SessionProvider, User } from '@spinajs/rbac';
|
|
2
|
+
import type { ISession } from '@spinajs/rbac';
|
|
3
|
+
/** Session keys holding the impersonation block. */
|
|
4
|
+
export declare const IMPERSONATION_KEYS: {
|
|
5
|
+
readonly IMPERSONATOR: "Impersonator";
|
|
6
|
+
readonly STARTED_AT: "ImpersonationStartedAt";
|
|
7
|
+
readonly ORIGINAL_ACTIVE_ROLE: "OriginalActiveRole";
|
|
8
|
+
/**
|
|
9
|
+
* Numeric id of the impersonator, stashed because `session.UserId` is handed
|
|
10
|
+
* over to the target for the duration — see {@link ImpersonationService.start}.
|
|
11
|
+
*/
|
|
12
|
+
readonly ORIGINAL_USER_ID: "OriginalUserId";
|
|
13
|
+
};
|
|
14
|
+
/** Outcome of an attempt to end an impersonation. */
|
|
15
|
+
export type RevertResult =
|
|
16
|
+
/** Impersonation ended; the original user is back in the session. */
|
|
17
|
+
{
|
|
18
|
+
Status: 'reverted';
|
|
19
|
+
Original: User;
|
|
20
|
+
ActiveRole: string | undefined;
|
|
21
|
+
Session: ISession;
|
|
22
|
+
}
|
|
23
|
+
/** The session carried no impersonation — nothing was changed. */
|
|
24
|
+
| {
|
|
25
|
+
Status: 'not-impersonating';
|
|
26
|
+
}
|
|
27
|
+
/** The impersonator no longer exists; the stale block was cleared. */
|
|
28
|
+
| {
|
|
29
|
+
Status: 'impersonator-gone';
|
|
30
|
+
};
|
|
31
|
+
/**
|
|
32
|
+
* Owns the impersonation session block.
|
|
33
|
+
*
|
|
34
|
+
* The revert path is reachable two ways — explicitly via `DELETE /auth/impersonate`
|
|
35
|
+
* and implicitly when an impersonating user logs out — and both used to carry
|
|
36
|
+
* their own copy of the key juggling. The copies had already drifted: the logout
|
|
37
|
+
* handler dereferenced a deleted impersonator without a guard and answered a
|
|
38
|
+
* logout with a 500, while the controller handled that same case.
|
|
39
|
+
*/
|
|
40
|
+
export declare class ImpersonationService {
|
|
41
|
+
protected SessionProvider: SessionProvider;
|
|
42
|
+
/** True when the session is currently acting as somebody else. */
|
|
43
|
+
isActive(session: ISession | null | undefined): boolean;
|
|
44
|
+
/**
|
|
45
|
+
* Begin acting as `target`. The impersonator's own ActiveRole is stashed so
|
|
46
|
+
* `revert` can restore it, and the effective ActiveRole becomes the target's
|
|
47
|
+
* first role.
|
|
48
|
+
*
|
|
49
|
+
* Two things beyond the key juggling:
|
|
50
|
+
*
|
|
51
|
+
* - the session id is REGENERATED. Assuming another identity is a privilege
|
|
52
|
+
* change, and a privilege change on a session id that an attacker may
|
|
53
|
+
* already know is the definition of session fixation.
|
|
54
|
+
* - `session.UserId` is handed over to the target and the impersonator's own
|
|
55
|
+
* id is stashed. Ownership is what `deleteByUser` keys on, so while the
|
|
56
|
+
* impersonation runs, "log this user out everywhere" aimed at the target
|
|
57
|
+
* reaches the impersonating session too — which is exactly what an
|
|
58
|
+
* administrator killing a compromised account expects.
|
|
59
|
+
*
|
|
60
|
+
* @returns the regenerated session and the ActiveRole now in effect
|
|
61
|
+
*/
|
|
62
|
+
start(session: ISession, impersonator: User, target: User, startedAt: string): Promise<{
|
|
63
|
+
Session: ISession;
|
|
64
|
+
ActiveRole: string | undefined;
|
|
65
|
+
}>;
|
|
66
|
+
/**
|
|
67
|
+
* End an active impersonation and put the original user back in the session.
|
|
68
|
+
*
|
|
69
|
+
* The session survives either way — reverting is not a logout. When the
|
|
70
|
+
* original user is gone the impersonation block is still cleared, so the
|
|
71
|
+
* session stops claiming an identity that cannot be resolved, and the caller
|
|
72
|
+
* is told to re-authenticate rather than being handed a 500.
|
|
73
|
+
*/
|
|
74
|
+
revert(session: ISession | null | undefined, target: User): Promise<RevertResult>;
|
|
75
|
+
/** Drops the impersonation keys and persists the session under the same id. */
|
|
76
|
+
protected clearBlock(session: ISession): Promise<void>;
|
|
77
|
+
/** Removes the impersonation keys from session data without persisting. */
|
|
78
|
+
protected dropBlockKeys(session: ISession): void;
|
|
79
|
+
/**
|
|
80
|
+
* Load the original (impersonator) user, or undefined when the account is
|
|
81
|
+
* gone. Extracted so tests can stub it without a database.
|
|
82
|
+
*/
|
|
83
|
+
protected loadOriginal(uuid: string): Promise<User | undefined>;
|
|
84
|
+
/**
|
|
85
|
+
* Hook for tests to intercept event emission without stubbing the
|
|
86
|
+
* module-level `_ev` ESM binding.
|
|
87
|
+
*/
|
|
88
|
+
protected emitEnded(original: User, target: User): Promise<void>;
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=ImpersonationService.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ImpersonationService.d.ts","sourceRoot":"","sources":["../../../src/services/ImpersonationService.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,IAAI,EAA6C,MAAM,eAAe,CAAC;AACjG,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAG9C,oDAAoD;AACpD,eAAO,MAAM,kBAAkB;;;;IAK7B;;;OAGG;;CAEK,CAAC;AAEX,qDAAqD;AACrD,MAAM,MAAM,YAAY;AACtB,qEAAqE;AACnE;IAAE,MAAM,EAAE,UAAU,CAAC;IAAC,QAAQ,EAAE,IAAI,CAAC;IAAC,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;IAAC,OAAO,EAAE,QAAQ,CAAA;CAAE;AAC3F,kEAAkE;GAChE;IAAE,MAAM,EAAE,mBAAmB,CAAA;CAAE;AACjC,sEAAsE;GACpE;IAAE,MAAM,EAAE,mBAAmB,CAAA;CAAE,CAAC;AAEpC;;;;;;;;GAQG;AACH,qBACa,oBAAoB;IAE/B,SAAS,CAAC,eAAe,EAAE,eAAe,CAAC;IAE3C,kEAAkE;IAC3D,QAAQ,CAAC,OAAO,EAAE,QAAQ,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO;IAI9D;;;;;;;;;;;;;;;;;OAiBG;IACU,KAAK,CAAC,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,QAAQ,CAAC;QAAC,UAAU,EAAE,MAAM,GAAG,SAAS,CAAA;KAAE,CAAC;IAwB1J;;;;;;;OAOG;IACU,MAAM,CAAC,OAAO,EAAE,QAAQ,GAAG,IAAI,GAAG,SAAS,EAAE,MAAM,EAAE,IAAI,GAAG,OAAO,CAAC,YAAY,CAAC;IAuC9F,+EAA+E;cAC/D,UAAU,CAAC,OAAO,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAK5D,2EAA2E;IAC3E,SAAS,CAAC,aAAa,CAAC,OAAO,EAAE,QAAQ,GAAG,IAAI;IAOhD;;;OAGG;cACa,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,SAAS,CAAC;IAIrE;;;OAGG;IACH,SAAS,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;CAGjE"}
|