@spinajs/rbac-http-user 2.0.485 → 2.0.487
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 +12 -5
- 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
|
@@ -40,27 +40,12 @@ declare const rbacHttp: {
|
|
|
40
40
|
forceUser: boolean;
|
|
41
41
|
service: string;
|
|
42
42
|
};
|
|
43
|
-
fingerprint: {
|
|
44
|
-
enabled: boolean;
|
|
45
|
-
maxDevices: number;
|
|
46
|
-
service: string;
|
|
47
|
-
};
|
|
48
|
-
session: {
|
|
49
|
-
cookie: {
|
|
50
|
-
sameSite: string;
|
|
51
|
-
};
|
|
52
|
-
};
|
|
53
43
|
password: {
|
|
54
|
-
tokenTTL: number;
|
|
55
44
|
/**
|
|
56
45
|
* Block account after invalid login attempts
|
|
57
46
|
*/
|
|
58
47
|
blockAfterAttempts: number;
|
|
59
48
|
};
|
|
60
|
-
/**
|
|
61
|
-
* Should federated login be enabled ? eg. facebook
|
|
62
|
-
*/
|
|
63
|
-
allowFederated: boolean;
|
|
64
49
|
};
|
|
65
50
|
http: {};
|
|
66
51
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rbac-http.d.ts","sourceRoot":"","sources":["../../../src/config/rbac-http.ts"],"names":[],"mappings":"AAQA,QAAA,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;YAiBR;;eAEG;;YAGH;;eAEG
|
|
1
|
+
{"version":3,"file":"rbac-http.d.ts","sourceRoot":"","sources":["../../../src/config/rbac-http.ts"],"names":[],"mappings":"AAQA,QAAA,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;YAiBR;;eAEG;;YAGH;;eAEG;;;;;;;;;;;;YAmBH;;eAEG;;;;;CASR,CAAC;AAEF,eAAe,QAAQ,CAAC"}
|
|
@@ -39,28 +39,18 @@ const rbacHttp = {
|
|
|
39
39
|
forceUser: false,
|
|
40
40
|
service: 'Default2FaToken',
|
|
41
41
|
},
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
},
|
|
47
|
-
session: {
|
|
48
|
-
cookie: {
|
|
49
|
-
sameSite: 'lax'
|
|
50
|
-
}
|
|
51
|
-
},
|
|
42
|
+
// NOTE: the session cookie ( `rbac.session.cookie` ) is configured by
|
|
43
|
+
// @spinajs/rbac and defaults to Secure + SameSite=Strict + HttpOnly. This
|
|
44
|
+
// package used to weaken it to SameSite=Lax here, which is what let a
|
|
45
|
+
// cross-site GET reach the logout route.
|
|
52
46
|
password: {
|
|
53
|
-
// password reset token
|
|
54
|
-
|
|
47
|
+
// NOTE: the password reset token's lifetime is `rbac.password.passwordResetWaitTime`
|
|
48
|
+
// ( seconds, defined by @spinajs/rbac ) — this package does not restate it.
|
|
55
49
|
/**
|
|
56
50
|
* Block account after invalid login attempts
|
|
57
51
|
*/
|
|
58
52
|
blockAfterAttempts: 3,
|
|
59
53
|
},
|
|
60
|
-
/**
|
|
61
|
-
* Should federated login be enabled ? eg. facebook
|
|
62
|
-
*/
|
|
63
|
-
allowFederated: false,
|
|
64
54
|
},
|
|
65
55
|
http: {
|
|
66
56
|
// middlewares: [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rbac-http.js","sourceRoot":"","sources":["../../../src/config/rbac-http.ts"],"names":[],"mappings":";;AAAA,+BAAgD;AAEhD,SAAS,GAAG,CAAC,IAAY;IACvB,MAAM,UAAU,GAAG,OAAO,MAAM,KAAK,WAAW,CAAC;IACjD,OAAO,IAAA,cAAO,EAAC,IAAA,gBAAS,EAAC,IAAA,WAAI,EAAC,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,OAAO,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,UAAU,EAAE,gBAAgB,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;AAC3K,CAAC;AAGD,MAAM,QAAQ,GAAG;IACf,MAAM,EAAE;QACN,IAAI,EAAE;YACJ,WAAW,EAAE,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;YACjC,GAAG,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;SAClB;KACF;IACD,KAAK,EAAE;QACL,OAAO,EAAE;YACP,eAAe,EAAE,EAAE,UAAU,EAAE,uBAAuB,EAAE;YACxD,cAAc,EAAE,EAAE,UAAU,EAAE,uBAAuB,EAAE;YACvD,aAAa,EAAE,EAAE,UAAU,EAAE,uBAAuB,EAAE;YACtD,YAAY,EAAE,EAAE,UAAU,EAAE,uBAAuB,EAAE;SACtD;KACF;IACD,IAAI,EAAE;QACJ,OAAO,EAAE;YACP;;eAEG;YACH,MAAM,EAAE,SAAS;YAEjB;;eAEG;YACH,SAAS,EAAE,MAAM;YACjB,MAAM,EAAE,CAAC;YACT,MAAM,EAAE,EAAE;YACV,MAAM,EAAE,CAAC;SACV;QACD,aAAa,EAAE;YACb,OAAO,EAAE,IAAI;YACb,SAAS,EAAE,KAAK;YAChB,OAAO,EAAE,iBAAiB;SAC3B;QACD,
|
|
1
|
+
{"version":3,"file":"rbac-http.js","sourceRoot":"","sources":["../../../src/config/rbac-http.ts"],"names":[],"mappings":";;AAAA,+BAAgD;AAEhD,SAAS,GAAG,CAAC,IAAY;IACvB,MAAM,UAAU,GAAG,OAAO,MAAM,KAAK,WAAW,CAAC;IACjD,OAAO,IAAA,cAAO,EAAC,IAAA,gBAAS,EAAC,IAAA,WAAI,EAAC,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,OAAO,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,UAAU,EAAE,gBAAgB,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;AAC3K,CAAC;AAGD,MAAM,QAAQ,GAAG;IACf,MAAM,EAAE;QACN,IAAI,EAAE;YACJ,WAAW,EAAE,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;YACjC,GAAG,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;SAClB;KACF;IACD,KAAK,EAAE;QACL,OAAO,EAAE;YACP,eAAe,EAAE,EAAE,UAAU,EAAE,uBAAuB,EAAE;YACxD,cAAc,EAAE,EAAE,UAAU,EAAE,uBAAuB,EAAE;YACvD,aAAa,EAAE,EAAE,UAAU,EAAE,uBAAuB,EAAE;YACtD,YAAY,EAAE,EAAE,UAAU,EAAE,uBAAuB,EAAE;SACtD;KACF;IACD,IAAI,EAAE;QACJ,OAAO,EAAE;YACP;;eAEG;YACH,MAAM,EAAE,SAAS;YAEjB;;eAEG;YACH,SAAS,EAAE,MAAM;YACjB,MAAM,EAAE,CAAC;YACT,MAAM,EAAE,EAAE;YACV,MAAM,EAAE,CAAC;SACV;QACD,aAAa,EAAE;YACb,OAAO,EAAE,IAAI;YACb,SAAS,EAAE,KAAK;YAChB,OAAO,EAAE,iBAAiB;SAC3B;QACD,sEAAsE;QACtE,0EAA0E;QAC1E,sEAAsE;QACtE,yCAAyC;QACzC,QAAQ,EAAE;YACR,qFAAqF;YACrF,4EAA4E;YAE5E;;eAEG;YACH,kBAAkB,EAAE,CAAC;SACtB;KACF;IACD,IAAI,EAAE;IACJ,iBAAiB;IACjB,+CAA+C;IAC/C,KAAK;KACN;CACF,CAAC;AAEF,kBAAe,QAAQ,CAAC"}
|
|
@@ -3,6 +3,7 @@ import { BaseController, Ok, BadRequestResponse, Unauthorized } from '@spinajs/h
|
|
|
3
3
|
import { AccessControl, AuthProvider, PasswordProvider, SessionProvider } from '@spinajs/rbac';
|
|
4
4
|
import type { ISession, User } from '@spinajs/rbac';
|
|
5
5
|
import { IActiveRoleResponse } from '@spinajs/rbac-http';
|
|
6
|
+
import { SessionCookieFactory } from '../services/SessionCookies.js';
|
|
6
7
|
/**
|
|
7
8
|
* Active role endpoints.
|
|
8
9
|
* Let users with multiple roles inspect and switch the currently active role.
|
|
@@ -16,7 +17,7 @@ export declare class ActiveRoleController extends BaseController {
|
|
|
16
17
|
protected PasswordProvider: PasswordProvider;
|
|
17
18
|
protected SessionProvider: SessionProvider;
|
|
18
19
|
protected RolesRequiringPassword: string[];
|
|
19
|
-
protected
|
|
20
|
+
protected SessionCookies: SessionCookieFactory;
|
|
20
21
|
/**
|
|
21
22
|
* Get active role
|
|
22
23
|
* Returns the currently active role for the session and the RBAC grants
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ActiveRoleController.d.ts","sourceRoot":"","sources":["../../../src/controllers/ActiveRoleController.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,cAAc,EAAwB,EAAE,EAAO,kBAAkB,EAAE,YAAY,EAAU,MAAM,eAAe,CAAC;AACxH,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,gBAAgB,EAAE,eAAe,
|
|
1
|
+
{"version":3,"file":"ActiveRoleController.d.ts","sourceRoot":"","sources":["../../../src/controllers/ActiveRoleController.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,cAAc,EAAwB,EAAE,EAAO,kBAAkB,EAAE,YAAY,EAAU,MAAM,eAAe,CAAC;AACxH,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAqB,MAAM,eAAe,CAAC;AAClH,OAAO,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAGpD,OAAO,EAA+E,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACtI,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAGrE;;;;;;GAMG;AACH,qBACa,oBAAqB,SAAQ,cAAc;IAEtD,SAAS,CAAC,EAAE,EAAE,aAAa,CAAC;IAG5B,SAAS,CAAC,YAAY,EAAE,YAAY,CAAC;IAGrC,SAAS,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;IAG7C,SAAS,CAAC,eAAe,EAAE,eAAe,CAAC;IAG3C,SAAS,CAAC,sBAAsB,EAAE,MAAM,EAAE,CAAC;IAG3C,SAAS,CAAC,cAAc,EAAE,oBAAoB,CAAC;IAE/C;;;;;;;OAOG;IAGU,aAAa,CAAiB,IAAI,EAAE,IAAI,EAAiB,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,EAAE,CAAC,mBAAmB,CAAC,CAAC;IAI3H;;;;;;;;;OASG;IAGU,gBAAgB,CACX,IAAI,EAAE,IAAI,EACP,OAAO,EAAE,QAAQ,EAC5B,OAAO,EAAE,aAAa,GAC7B,OAAO,CAAC,EAAE,CAAC,mBAAmB,CAAC,GAAG,kBAAkB,GAAG,YAAY,CAAC;IA0CvE,SAAS,CAAC,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,mBAAmB;CAMjE"}
|
|
@@ -19,6 +19,8 @@ const rbac_1 = require("@spinajs/rbac");
|
|
|
19
19
|
const di_1 = require("@spinajs/di");
|
|
20
20
|
const configuration_1 = require("@spinajs/configuration");
|
|
21
21
|
const rbac_http_1 = require("@spinajs/rbac-http");
|
|
22
|
+
const SessionCookies_js_1 = require("../services/SessionCookies.js");
|
|
23
|
+
const grants_js_1 = require("../services/grants.js");
|
|
22
24
|
/**
|
|
23
25
|
* Active role endpoints.
|
|
24
26
|
* Let users with multiple roles inspect and switch the currently active role.
|
|
@@ -81,25 +83,13 @@ let ActiveRoleController = class ActiveRoleController extends http_1.BaseControl
|
|
|
81
83
|
// fixation, and reset the ssid cookie to the new id.
|
|
82
84
|
const regenerated = await (0, rbac_1.regenerateSession)(this.SessionProvider, session);
|
|
83
85
|
return new http_1.Ok(this.buildResponse(payload.Role), {
|
|
84
|
-
Coockies: [
|
|
85
|
-
{
|
|
86
|
-
Name: 'ssid',
|
|
87
|
-
Value: regenerated.SessionId,
|
|
88
|
-
Options: {
|
|
89
|
-
signed: true,
|
|
90
|
-
httpOnly: true,
|
|
91
|
-
maxAge: (0, rbac_1.sessionCookieMaxAge)(regenerated),
|
|
92
|
-
...this.SessionCookieConfig,
|
|
93
|
-
},
|
|
94
|
-
},
|
|
95
|
-
],
|
|
86
|
+
Coockies: [this.SessionCookies.issue(regenerated)],
|
|
96
87
|
});
|
|
97
88
|
}
|
|
98
89
|
buildResponse(activeRole) {
|
|
99
|
-
const grants = activeRole ? (0, rbac_1._unwindGrants)(activeRole, this.AC.getGrants()) : {};
|
|
100
90
|
return {
|
|
101
91
|
ActiveRole: activeRole,
|
|
102
|
-
Grants:
|
|
92
|
+
Grants: (0, grants_js_1.grantsFor)(this.AC, activeRole),
|
|
103
93
|
};
|
|
104
94
|
}
|
|
105
95
|
};
|
|
@@ -125,9 +115,9 @@ __decorate([
|
|
|
125
115
|
__metadata("design:type", Array)
|
|
126
116
|
], ActiveRoleController.prototype, "RolesRequiringPassword", void 0);
|
|
127
117
|
__decorate([
|
|
128
|
-
(0,
|
|
129
|
-
__metadata("design:type",
|
|
130
|
-
], ActiveRoleController.prototype, "
|
|
118
|
+
(0, di_1.Autoinject)(SessionCookies_js_1.SessionCookieFactory),
|
|
119
|
+
__metadata("design:type", SessionCookies_js_1.SessionCookieFactory)
|
|
120
|
+
], ActiveRoleController.prototype, "SessionCookies", void 0);
|
|
131
121
|
__decorate([
|
|
132
122
|
(0, http_1.Get)('active-role'),
|
|
133
123
|
(0, http_1.Policy)(rbac_http_1.LoggedPolicy),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ActiveRoleController.js","sourceRoot":"","sources":["../../../src/controllers/ActiveRoleController.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,gEAAyD;AACzD,wCAAwH;AACxH,
|
|
1
|
+
{"version":3,"file":"ActiveRoleController.js","sourceRoot":"","sources":["../../../src/controllers/ActiveRoleController.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import { ImpersonateDto } from '../dto/impersonate-dto.js';
|
|
2
2
|
import { BaseController, Ok, BadRequestResponse, Unauthorized, ForbiddenResponse, Conflict, NotFound } from '@spinajs/http';
|
|
3
|
-
import { AccessControl, PasswordProvider,
|
|
3
|
+
import { AccessControl, PasswordProvider, User, UserImpersonationStarted } from '@spinajs/rbac';
|
|
4
4
|
import type { ISession } from '@spinajs/rbac';
|
|
5
5
|
import { IImpersonationResponse, IImpersonationState, IUserWithGrants } from '@spinajs/rbac-http';
|
|
6
|
+
import { ImpersonationService } from '../services/ImpersonationService.js';
|
|
7
|
+
import { SessionCookieFactory } from '../services/SessionCookies.js';
|
|
6
8
|
/**
|
|
7
9
|
* Impersonation endpoints.
|
|
8
10
|
*
|
|
@@ -17,7 +19,8 @@ import { IImpersonationResponse, IImpersonationState, IUserWithGrants } from '@s
|
|
|
17
19
|
export declare class ImpersonationController extends BaseController {
|
|
18
20
|
protected AC: AccessControl;
|
|
19
21
|
protected PasswordProvider: PasswordProvider;
|
|
20
|
-
protected
|
|
22
|
+
protected Impersonation: ImpersonationService;
|
|
23
|
+
protected SessionCookies: SessionCookieFactory;
|
|
21
24
|
protected RequirePassword: boolean;
|
|
22
25
|
protected ProtectedRoles: string[];
|
|
23
26
|
/**
|
|
@@ -56,17 +59,12 @@ export declare class ImpersonationController extends BaseController {
|
|
|
56
59
|
* Emit an impersonation lifecycle event. Wrapped in a protected method so
|
|
57
60
|
* tests can intercept without stubbing module-level ESM bindings.
|
|
58
61
|
*/
|
|
59
|
-
protected emitEvent(event: UserImpersonationStarted
|
|
62
|
+
protected emitEvent(event: UserImpersonationStarted): Promise<void>;
|
|
60
63
|
/**
|
|
61
64
|
* Load the impersonation target (with Metadata so IsBanned works). Extracted
|
|
62
65
|
* as a protected method so tests can stub it without setting up a database.
|
|
63
66
|
*/
|
|
64
67
|
protected loadTarget(uuid: string): Promise<User | undefined>;
|
|
65
|
-
|
|
66
|
-
* Load the original (impersonator) user. Extracted for the same reason as
|
|
67
|
-
* loadTarget — keeps the controller easy to test in isolation.
|
|
68
|
-
*/
|
|
69
|
-
protected loadOriginal(uuid: string): Promise<User | undefined>;
|
|
70
|
-
protected buildResponse(target: User, impersonator: User, activeRole: string, startedAt: string): IImpersonationResponse;
|
|
68
|
+
protected buildResponse(target: User, impersonator: User, activeRole: string | undefined, startedAt: string): IImpersonationResponse;
|
|
71
69
|
}
|
|
72
70
|
//# sourceMappingURL=ImpersonationController.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ImpersonationController.d.ts","sourceRoot":"","sources":["../../../src/controllers/ImpersonationController.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,cAAc,EAA6B,EAAE,EAAO,kBAAkB,EAAE,YAAY,EAAE,iBAAiB,EAAE,QAAQ,EAAE,QAAQ,EAAU,MAAM,eAAe,CAAC;AACpK,OAAO,EACL,aAAa,EACb,gBAAgB,EAChB,
|
|
1
|
+
{"version":3,"file":"ImpersonationController.d.ts","sourceRoot":"","sources":["../../../src/controllers/ImpersonationController.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,cAAc,EAA6B,EAAE,EAAO,kBAAkB,EAAE,YAAY,EAAE,iBAAiB,EAAE,QAAQ,EAAE,QAAQ,EAAU,MAAM,eAAe,CAAC;AACpK,OAAO,EACL,aAAa,EACb,gBAAgB,EAChB,IAAI,EACJ,wBAAwB,EAEzB,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAK9C,OAAO,EAKL,sBAAsB,EACtB,mBAAmB,EACnB,eAAe,EAChB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAC3E,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAKrE;;;;;;;;;;GAUG;AACH,qBACa,uBAAwB,SAAQ,cAAc;IAEzD,SAAS,CAAC,EAAE,EAAE,aAAa,CAAC;IAG5B,SAAS,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;IAG7C,SAAS,CAAC,aAAa,EAAE,oBAAoB,CAAC;IAG9C,SAAS,CAAC,cAAc,EAAE,oBAAoB,CAAC;IAG/C,SAAS,CAAC,eAAe,EAAE,OAAO,CAAC;IAGnC,SAAS,CAAC,cAAc,EAAE,MAAM,EAAE,CAAC;IAEnC;;;;;;OAMG;IAGU,QAAQ,CACJ,YAAY,EAAE,MAAM,EACpB,IAAI,EAAE,MAAM,EACZ,sBAAsB,EAAE,MAAM,GAC5C,OAAO,CAAC,EAAE,CAAC,mBAAmB,CAAC,CAAC;IAYnC;;;;;;;;;;;;;;OAcG;IAGU,KAAK,CACA,MAAM,EAAE,IAAI,EACT,OAAO,EAAE,QAAQ,EAC5B,OAAO,EAAE,cAAc,GAC9B,OAAO,CACR,EAAE,CAAC,sBAAsB,CAAC,GAAG,kBAAkB,GAAG,YAAY,GAAG,iBAAiB,GAAG,QAAQ,GAAG,QAAQ,CACzG;IA+ED;;;;;;OAMG;IAGU,IAAI,CACC,MAAM,EAAE,IAAI,EACT,OAAO,EAAE,QAAQ,GACnC,OAAO,CAAC,EAAE,CAAC,eAAe,CAAC,GAAG,kBAAkB,CAAC;IAwBpD;;;OAGG;IACH,SAAS,CAAC,SAAS,CAAC,KAAK,EAAE,wBAAwB,GAAG,OAAO,CAAC,IAAI,CAAC;IAInE;;;OAGG;IACH,SAAS,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,SAAS,CAAC;IAI7D,SAAS,CAAC,aAAa,CACrB,MAAM,EAAE,IAAI,EACZ,YAAY,EAAE,IAAI,EAClB,UAAU,EAAE,MAAM,GAAG,SAAS,EAC9B,SAAS,EAAE,MAAM,GAChB,sBAAsB;CAS1B"}
|
|
@@ -21,6 +21,9 @@ const configuration_1 = require("@spinajs/configuration");
|
|
|
21
21
|
const queue_1 = require("@spinajs/queue");
|
|
22
22
|
const luxon_1 = require("luxon");
|
|
23
23
|
const rbac_http_1 = require("@spinajs/rbac-http");
|
|
24
|
+
const ImpersonationService_js_1 = require("../services/ImpersonationService.js");
|
|
25
|
+
const SessionCookies_js_1 = require("../services/SessionCookies.js");
|
|
26
|
+
const grants_js_1 = require("../services/grants.js");
|
|
24
27
|
const IMPERSONATE_RESOURCE = 'user:impersonate';
|
|
25
28
|
/**
|
|
26
29
|
* Impersonation endpoints.
|
|
@@ -68,7 +71,7 @@ let ImpersonationController = class ImpersonationController extends http_1.BaseC
|
|
|
68
71
|
* @response 409 An impersonation is already in progress for this session
|
|
69
72
|
*/
|
|
70
73
|
async start(caller, session, payload) {
|
|
71
|
-
if (
|
|
74
|
+
if (this.Impersonation.isActive(session)) {
|
|
72
75
|
return new http_1.Conflict({
|
|
73
76
|
error: {
|
|
74
77
|
code: 'E_IMPERSONATION_ACTIVE',
|
|
@@ -124,24 +127,18 @@ let ImpersonationController = class ImpersonationController extends http_1.BaseC
|
|
|
124
127
|
return new http_1.Unauthorized({ error: { code: 'E_PASSWORD_INVALID', message: 'Invalid password' } });
|
|
125
128
|
}
|
|
126
129
|
}
|
|
127
|
-
// Persist impersonation state.
|
|
128
|
-
// ActiveRole so it can be restored on stop; effective ActiveRole
|
|
129
|
-
// the target's first role.
|
|
130
|
+
// Persist impersonation state. The service keeps the impersonator's
|
|
131
|
+
// previous ActiveRole so it can be restored on stop; effective ActiveRole
|
|
132
|
+
// becomes the target's first role.
|
|
130
133
|
const startedAt = luxon_1.DateTime.now().toISO();
|
|
131
|
-
const
|
|
132
|
-
session.Data.set('Impersonator', caller.Uuid);
|
|
133
|
-
session.Data.set('User', target.Uuid);
|
|
134
|
-
session.Data.set('ImpersonationStartedAt', startedAt);
|
|
135
|
-
if (previousActiveRole !== undefined) {
|
|
136
|
-
session.Data.set('OriginalActiveRole', previousActiveRole);
|
|
137
|
-
}
|
|
138
|
-
const targetActiveRole = target.Role?.[0];
|
|
139
|
-
if (targetActiveRole) {
|
|
140
|
-
session.Data.set('ActiveRole', targetActiveRole);
|
|
141
|
-
}
|
|
142
|
-
await this.SessionProvider.save(session);
|
|
134
|
+
const { Session: regenerated, ActiveRole: targetActiveRole } = await this.Impersonation.start(session, caller, target, startedAt);
|
|
143
135
|
await this.emitEvent(new rbac_1.UserImpersonationStarted(caller, target));
|
|
144
|
-
|
|
136
|
+
// The session id changed with the identity — hand the client the new one or
|
|
137
|
+
// its next request arrives with a session that no longer exists.
|
|
138
|
+
return new http_1.Ok(this.buildResponse(target, caller, targetActiveRole, startedAt), {
|
|
139
|
+
Coockies: [this.SessionCookies.issue(regenerated)],
|
|
140
|
+
Headers: [{ Name: 'Cache-Control', Value: 'no-store' }],
|
|
141
|
+
});
|
|
145
142
|
}
|
|
146
143
|
/**
|
|
147
144
|
* Stop impersonation
|
|
@@ -151,41 +148,23 @@ let ImpersonationController = class ImpersonationController extends http_1.BaseC
|
|
|
151
148
|
* @response 400 No impersonation is currently active
|
|
152
149
|
*/
|
|
153
150
|
async stop(target, session) {
|
|
154
|
-
const
|
|
155
|
-
if (
|
|
151
|
+
const result = await this.Impersonation.revert(session, target);
|
|
152
|
+
if (result.Status === 'not-impersonating') {
|
|
156
153
|
return new http_1.BadRequestResponse({
|
|
157
154
|
error: { code: 'E_NO_IMPERSONATION', message: 'No impersonation is currently in progress' },
|
|
158
155
|
});
|
|
159
156
|
}
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
//
|
|
163
|
-
//
|
|
164
|
-
// can re-authenticate.
|
|
165
|
-
session.Data.delete('Impersonator');
|
|
166
|
-
session.Data.delete('ImpersonationStartedAt');
|
|
167
|
-
session.Data.delete('OriginalActiveRole');
|
|
168
|
-
await this.SessionProvider.save(session);
|
|
157
|
+
if (result.Status === 'impersonator-gone') {
|
|
158
|
+
// Stale session referencing a deleted impersonator. The service already
|
|
159
|
+
// cleared the impersonation block to recover; report an error so the
|
|
160
|
+
// caller can re-authenticate.
|
|
169
161
|
return new http_1.BadRequestResponse({
|
|
170
162
|
error: { code: 'E_IMPERSONATOR_GONE', message: 'Original user no longer exists' },
|
|
171
163
|
});
|
|
172
164
|
}
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
session.Data.delete('ImpersonationStartedAt');
|
|
177
|
-
const restoredActiveRole = session.Data.get('OriginalActiveRole') ?? original.Role?.[0];
|
|
178
|
-
if (restoredActiveRole) {
|
|
179
|
-
session.Data.set('ActiveRole', restoredActiveRole);
|
|
180
|
-
}
|
|
181
|
-
session.Data.delete('OriginalActiveRole');
|
|
182
|
-
await this.SessionProvider.save(session);
|
|
183
|
-
await this.emitEvent(new rbac_1.UserImpersonationEnded(original, target));
|
|
184
|
-
const grants = restoredActiveRole ? (0, rbac_1._unwindGrants)(restoredActiveRole, this.AC.getGrants()) : {};
|
|
185
|
-
return new http_1.Ok({
|
|
186
|
-
...original.dehydrateWithRelations({ dateTimeFormat: 'iso' }),
|
|
187
|
-
ActiveRole: restoredActiveRole,
|
|
188
|
-
Grants: grants,
|
|
165
|
+
return new http_1.Ok((0, grants_js_1.buildUserWithGrants)(result.Original, result.ActiveRole, this.AC), {
|
|
166
|
+
Coockies: [this.SessionCookies.issue(result.Session)],
|
|
167
|
+
Headers: [{ Name: 'Cache-Control', Value: 'no-store' }],
|
|
189
168
|
});
|
|
190
169
|
}
|
|
191
170
|
/**
|
|
@@ -202,20 +181,12 @@ let ImpersonationController = class ImpersonationController extends http_1.BaseC
|
|
|
202
181
|
loadTarget(uuid) {
|
|
203
182
|
return rbac_1.User.query().whereUuid(uuid).populate('Metadata').notDeleted().first();
|
|
204
183
|
}
|
|
205
|
-
/**
|
|
206
|
-
* Load the original (impersonator) user. Extracted for the same reason as
|
|
207
|
-
* loadTarget — keeps the controller easy to test in isolation.
|
|
208
|
-
*/
|
|
209
|
-
loadOriginal(uuid) {
|
|
210
|
-
return rbac_1.User.getByUuid(uuid);
|
|
211
|
-
}
|
|
212
184
|
buildResponse(target, impersonator, activeRole, startedAt) {
|
|
213
|
-
const grants = activeRole ? (0, rbac_1._unwindGrants)(activeRole, this.AC.getGrants()) : {};
|
|
214
185
|
return {
|
|
215
186
|
User: target.dehydrateWithRelations({ dateTimeFormat: 'iso' }),
|
|
216
187
|
Impersonator: impersonator.dehydrateWithRelations({ dateTimeFormat: 'iso' }),
|
|
217
188
|
ActiveRole: activeRole,
|
|
218
|
-
Grants:
|
|
189
|
+
Grants: (0, grants_js_1.grantsFor)(this.AC, activeRole),
|
|
219
190
|
StartedAt: startedAt,
|
|
220
191
|
};
|
|
221
192
|
}
|
|
@@ -230,9 +201,13 @@ __decorate([
|
|
|
230
201
|
__metadata("design:type", rbac_1.PasswordProvider)
|
|
231
202
|
], ImpersonationController.prototype, "PasswordProvider", void 0);
|
|
232
203
|
__decorate([
|
|
233
|
-
(0,
|
|
234
|
-
__metadata("design:type",
|
|
235
|
-
], ImpersonationController.prototype, "
|
|
204
|
+
(0, di_1.Autoinject)(ImpersonationService_js_1.ImpersonationService),
|
|
205
|
+
__metadata("design:type", ImpersonationService_js_1.ImpersonationService)
|
|
206
|
+
], ImpersonationController.prototype, "Impersonation", void 0);
|
|
207
|
+
__decorate([
|
|
208
|
+
(0, di_1.Autoinject)(SessionCookies_js_1.SessionCookieFactory),
|
|
209
|
+
__metadata("design:type", SessionCookies_js_1.SessionCookieFactory)
|
|
210
|
+
], ImpersonationController.prototype, "SessionCookies", void 0);
|
|
236
211
|
__decorate([
|
|
237
212
|
(0, configuration_1.Config)('rbac.impersonation.requirePassword', { defaultValue: true }),
|
|
238
213
|
__metadata("design:type", Boolean)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ImpersonationController.js","sourceRoot":"","sources":["../../../src/controllers/ImpersonationController.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,kEAA2D;AAC3D,wCAAoK;AACpK,
|
|
1
|
+
{"version":3,"file":"ImpersonationController.js","sourceRoot":"","sources":["../../../src/controllers/ImpersonationController.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,6 +5,7 @@ import { Configuration } from '@spinajs/configuration';
|
|
|
5
5
|
import { ILoginResponse } from '@spinajs/rbac-http';
|
|
6
6
|
import { User } from '@spinajs/rbac';
|
|
7
7
|
import type { ISession } from '@spinajs/rbac';
|
|
8
|
+
import { SessionCookieFactory } from '../services/SessionCookies.js';
|
|
8
9
|
/**
|
|
9
10
|
* Authentication endpoints.
|
|
10
11
|
* Handles user login, logout, and current-session inspection.
|
|
@@ -17,7 +18,7 @@ export declare class LoginController extends BaseController {
|
|
|
17
18
|
protected SessionProvider: SessionProvider;
|
|
18
19
|
protected TwoFactorAuthEnabled: boolean;
|
|
19
20
|
protected TwoFactorAuthForceUser: boolean;
|
|
20
|
-
protected
|
|
21
|
+
protected SessionCookies: SessionCookieFactory;
|
|
21
22
|
protected AC: AccessControl;
|
|
22
23
|
/**
|
|
23
24
|
* Login
|
|
@@ -36,6 +37,10 @@ export declare class LoginController extends BaseController {
|
|
|
36
37
|
* If an impersonation is active, the session is NOT destroyed — instead the
|
|
37
38
|
* impersonation is ended and the original user resumes their session.
|
|
38
39
|
* Requires the user to be logged in (session exists), but full authorization (2FA) is not required.
|
|
40
|
+
*
|
|
41
|
+
* POST, not GET: under `SameSite=Lax` a cookie rides a top-level cross-site
|
|
42
|
+
* GET, so a third-party page could log any visitor out simply by linking to
|
|
43
|
+
* this route.
|
|
39
44
|
* @security cookieAuth
|
|
40
45
|
* @response 401 No active session
|
|
41
46
|
*/
|
|
@@ -43,18 +48,20 @@ export declare class LoginController extends BaseController {
|
|
|
43
48
|
/**
|
|
44
49
|
* Get current user
|
|
45
50
|
* Returns the user object associated with the current session along with the
|
|
46
|
-
* currently active role
|
|
51
|
+
* currently active role and whether the session has completed 2FA (when
|
|
52
|
+
* required). Roles the user may switch to are listed in Role.
|
|
47
53
|
* Requires the user to be logged in (session exists), but full authorization (2FA) is not required.
|
|
48
54
|
* @security cookieAuth
|
|
49
55
|
* @returns {User} User data from the current session
|
|
50
56
|
* @response 401 No active session
|
|
51
57
|
*/
|
|
52
|
-
whoami(User: User, ActiveRole: string): Promise<Ok<{
|
|
58
|
+
whoami(User: User, ActiveRole: string, session: ISession): Promise<Ok<{
|
|
53
59
|
ActiveRole: string;
|
|
54
|
-
|
|
55
|
-
Uuid: string;
|
|
60
|
+
Authorized: {};
|
|
56
61
|
Email: string;
|
|
57
62
|
Password: string;
|
|
63
|
+
Id: number;
|
|
64
|
+
Uuid: string;
|
|
58
65
|
Login: string;
|
|
59
66
|
Role: string[];
|
|
60
67
|
CreatedAt: import("luxon").DateTime;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LoginController.d.ts","sourceRoot":"","sources":["../../../src/controllers/LoginController.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAwB,EAAE,
|
|
1
|
+
{"version":3,"file":"LoginController.d.ts","sourceRoot":"","sources":["../../../src/controllers/LoginController.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAwB,EAAE,EAAO,YAAY,EAAU,MAAM,eAAe,CAAC;AACpG,OAAO,EAAE,YAAY,EAAE,eAAe,EAAsB,aAAa,EAA0C,MAAM,eAAe,CAAC;AAGzI,OAAO,EAA6B,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAElF,OAAO,EAA0F,cAAc,EAAuB,MAAM,oBAAoB,CAAC;AACjK,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AACrC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAE9C,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAKrE;;;;;GAKG;AACH,qBACa,eAAgB,SAAQ,cAAc;IAEjD,SAAS,CAAC,aAAa,EAAE,aAAa,CAAC;IAGvC,SAAS,CAAC,YAAY,EAAE,YAAY,CAAC;IAGrC,SAAS,CAAC,eAAe,EAAE,eAAe,CAAC;IAK3C,SAAS,CAAC,oBAAoB,EAAE,OAAO,CAAC;IAMxC,SAAS,CAAC,sBAAsB,EAAE,OAAO,CAAC;IAG1C,SAAS,CAAC,cAAc,EAAE,oBAAoB,CAAC;IAG/C,SAAS,CAAC,EAAE,EAAE,aAAa,CAAC;IAE5B;;;;;;;;;OASG;IAGU,KAAK,CAAiB,MAAM,EAAE,IAAI,EAAe,IAAI,EAAE,MAAM,EAAU,WAAW,EAAE,YAAY,GAAG,OAAO,CAAC,EAAE,CAAC,cAAc,CAAC,GAAG,YAAY,CAAC;IA8G1J;;;;;;;;;;;;OAYG;IAGU,MAAM,CAAc,IAAI,EAAE,MAAM,EAAqB,OAAO,EAAE,QAAQ,EAAkB,IAAI,EAAE,IAAI;IAgC/G;;;;;;;;;OASG;IAGU,MAAM,CAAiB,IAAI,EAAE,IAAI,EAAiB,UAAU,EAAE,MAAM,EAAqB,OAAO,EAAE,QAAQ;;;;;;;;;;;;;;;;;;;;;CAQxH"}
|