@spinajs/rbac-http-user 2.0.486 → 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 +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
|
@@ -1,43 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
2
|
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
19
3
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
20
4
|
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
21
5
|
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
22
6
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
23
7
|
};
|
|
24
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
25
|
-
var ownKeys = function(o) {
|
|
26
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
27
|
-
var ar = [];
|
|
28
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
29
|
-
return ar;
|
|
30
|
-
};
|
|
31
|
-
return ownKeys(o);
|
|
32
|
-
};
|
|
33
|
-
return function (mod) {
|
|
34
|
-
if (mod && mod.__esModule) return mod;
|
|
35
|
-
var result = {};
|
|
36
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
37
|
-
__setModuleDefault(result, mod);
|
|
38
|
-
return result;
|
|
39
|
-
};
|
|
40
|
-
})();
|
|
41
8
|
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
42
9
|
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
43
10
|
};
|
|
@@ -51,10 +18,10 @@ const rbac_1 = require("@spinajs/rbac");
|
|
|
51
18
|
const http_1 = require("@spinajs/http");
|
|
52
19
|
const exceptions_1 = require("@spinajs/exceptions");
|
|
53
20
|
const di_1 = require("@spinajs/di");
|
|
54
|
-
const configuration_1 = require("@spinajs/configuration");
|
|
55
|
-
const cs = __importStar(require("cookie-signature"));
|
|
56
21
|
const rbac_http_1 = require("@spinajs/rbac-http");
|
|
57
22
|
const util_1 = require("@spinajs/util");
|
|
23
|
+
const grants_js_1 = require("../services/grants.js");
|
|
24
|
+
const SessionCookies_js_1 = require("../services/SessionCookies.js");
|
|
58
25
|
/**
|
|
59
26
|
* Current user profile management.
|
|
60
27
|
* Allows an authenticated user to read and modify their own account — refresh profile data,
|
|
@@ -75,10 +42,11 @@ let UserController = class UserController extends http_1.BaseController {
|
|
|
75
42
|
// get user data from db
|
|
76
43
|
await user.refresh();
|
|
77
44
|
await user.Metadata.populate();
|
|
78
|
-
//
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
45
|
+
// `@Cookie(true)` hands over the already-unsigned session id — the previous
|
|
46
|
+
// unsigned read plus a hand-rolled `cookie-signature` call duplicated what
|
|
47
|
+
// the framework's own extractor does, secret lookup included.
|
|
48
|
+
if (ssid) {
|
|
49
|
+
const session = await this.SessionProvider.restore(ssid);
|
|
82
50
|
if (session) {
|
|
83
51
|
// Session stores the user UUID (see LoginController) — RbacUserFactory
|
|
84
52
|
// resolves the user from it on each request. Storing a dehydrated object
|
|
@@ -87,22 +55,28 @@ let UserController = class UserController extends http_1.BaseController {
|
|
|
87
55
|
await this.SessionProvider.save(session);
|
|
88
56
|
}
|
|
89
57
|
}
|
|
90
|
-
|
|
58
|
+
// Same shape as every other user-bearing response ( login, whoami, 2FA
|
|
59
|
+
// verify ): relations included and DateTime rendered as ISO strings. Plain
|
|
60
|
+
// `dehydrate()` dropped Role/Metadata and emitted raw DateTime objects, so
|
|
61
|
+
// a client refreshing its profile got a different user than it logged in with.
|
|
62
|
+
return new http_1.Ok(user.dehydrateWithRelations({ dateTimeFormat: 'iso' }));
|
|
91
63
|
}
|
|
92
64
|
/**
|
|
93
65
|
* Get current user grants
|
|
94
|
-
* Returns the flattened RBAC grants for the authenticated user
|
|
95
|
-
* the
|
|
66
|
+
* Returns the flattened RBAC grants in effect for the authenticated user — those of
|
|
67
|
+
* the session's active role, resolved through its inheritance chain. Switching the
|
|
68
|
+
* active role (`POST /auth/active-role`) changes what this returns.
|
|
96
69
|
* @security cookieAuth
|
|
97
|
-
* @returns {IGrantsMap}
|
|
70
|
+
* @returns {IGrantsMap} RBAC grants map for the active role: resource → action → permission descriptor
|
|
98
71
|
* @response 401 Unauthorized — valid session required
|
|
99
72
|
* @response 403 Forbidden — insufficient permissions
|
|
100
73
|
*/
|
|
101
|
-
async getGrants(user) {
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
74
|
+
async getGrants(user, session) {
|
|
75
|
+
// Enforcement is bound to the session's ActiveRole, so reporting the union
|
|
76
|
+
// of every assigned role told clients about actions the server would then
|
|
77
|
+
// refuse — a user holding both 'admin' and 'user' saw admin grants while
|
|
78
|
+
// acting as 'user'. Resolve exactly what the middleware resolves.
|
|
79
|
+
return new http_1.Ok((0, grants_js_1.grantsFor)(this.AC, (0, grants_js_1.activeRoleOf)(user, session)));
|
|
106
80
|
}
|
|
107
81
|
/**
|
|
108
82
|
* Change own password
|
|
@@ -113,13 +87,35 @@ let UserController = class UserController extends http_1.BaseController {
|
|
|
113
87
|
* @response 401 Unauthorized — valid session required
|
|
114
88
|
* @response 403 Forbidden — insufficient permissions
|
|
115
89
|
*/
|
|
116
|
-
async newPassword(user, pwd) {
|
|
90
|
+
async newPassword(user, pwd, session) {
|
|
117
91
|
if (pwd.Password !== pwd.ConfirmPassword) {
|
|
118
92
|
throw new exceptions_1.InvalidArgument('password does not match');
|
|
119
93
|
}
|
|
120
|
-
|
|
94
|
+
await (0, util_1._chain)(user, (0, util_1._either)((0, rbac_1.passwordMatch)(pwd.OldPassword), (0, rbac_1.changePassword)(pwd.Password), () => {
|
|
121
95
|
throw new exceptions_1.InvalidArgument('Old password is incorrect');
|
|
122
|
-
}))
|
|
96
|
+
}));
|
|
97
|
+
// `changePassword` destroys every session of this user — anyone who got in
|
|
98
|
+
// with the old password is out, which is the whole point. That includes the
|
|
99
|
+
// caller's own session, so it is replaced here with a brand new one ( a new
|
|
100
|
+
// id, not the old one revived ) and the client is handed the new cookie.
|
|
101
|
+
const replacement = new rbac_1.UserSession();
|
|
102
|
+
replacement.UserId = user.Id;
|
|
103
|
+
if (session) {
|
|
104
|
+
for (const [key, value] of session.Data) {
|
|
105
|
+
replacement.Data.set(key, value);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
replacement.Data.set('User', user.Uuid);
|
|
110
|
+
replacement.Data.set('Logged', true);
|
|
111
|
+
replacement.Data.set('Authorized', true);
|
|
112
|
+
replacement.Data.set('ActiveRole', user.Role?.[0]);
|
|
113
|
+
}
|
|
114
|
+
await this.SessionProvider.save(replacement);
|
|
115
|
+
return new http_1.Ok(null, {
|
|
116
|
+
Coockies: [this.SessionCookies.issue(replacement)],
|
|
117
|
+
Headers: [{ Name: 'Cache-Control', Value: 'no-store' }],
|
|
118
|
+
});
|
|
123
119
|
}
|
|
124
120
|
};
|
|
125
121
|
exports.UserController = UserController;
|
|
@@ -127,10 +123,6 @@ __decorate([
|
|
|
127
123
|
(0, di_1.Autoinject)(),
|
|
128
124
|
__metadata("design:type", rbac_1.PasswordProvider)
|
|
129
125
|
], UserController.prototype, "PasswordProvider", void 0);
|
|
130
|
-
__decorate([
|
|
131
|
-
(0, configuration_1.Config)('http.cookie.secret'),
|
|
132
|
-
__metadata("design:type", String)
|
|
133
|
-
], UserController.prototype, "CoockieSecret", void 0);
|
|
134
126
|
__decorate([
|
|
135
127
|
(0, di_1.Autoinject)(),
|
|
136
128
|
__metadata("design:type", rbac_1.SessionProvider)
|
|
@@ -139,11 +131,15 @@ __decorate([
|
|
|
139
131
|
(0, di_1.Autoinject)(rbac_1.AccessControl),
|
|
140
132
|
__metadata("design:type", rbac_1.AccessControl)
|
|
141
133
|
], UserController.prototype, "AC", void 0);
|
|
134
|
+
__decorate([
|
|
135
|
+
(0, di_1.Autoinject)(SessionCookies_js_1.SessionCookieFactory),
|
|
136
|
+
__metadata("design:type", SessionCookies_js_1.SessionCookieFactory)
|
|
137
|
+
], UserController.prototype, "SessionCookies", void 0);
|
|
142
138
|
__decorate([
|
|
143
139
|
(0, http_1.Get)(),
|
|
144
140
|
(0, rbac_http_1.Permission)(['readOwn']),
|
|
145
141
|
__param(0, (0, rbac_http_1.User)()),
|
|
146
|
-
__param(1, (0,
|
|
142
|
+
__param(1, (0, rbac_http_1.SessionId)()),
|
|
147
143
|
__metadata("design:type", Function),
|
|
148
144
|
__metadata("design:paramtypes", [rbac_1.User, String]),
|
|
149
145
|
__metadata("design:returntype", Promise)
|
|
@@ -152,8 +148,9 @@ __decorate([
|
|
|
152
148
|
(0, http_1.Get)("grants"),
|
|
153
149
|
(0, rbac_http_1.Permission)(['readOwn']),
|
|
154
150
|
__param(0, (0, rbac_http_1.User)()),
|
|
151
|
+
__param(1, (0, rbac_http_1.Session)()),
|
|
155
152
|
__metadata("design:type", Function),
|
|
156
|
-
__metadata("design:paramtypes", [rbac_1.User]),
|
|
153
|
+
__metadata("design:paramtypes", [rbac_1.User, Object]),
|
|
157
154
|
__metadata("design:returntype", Promise)
|
|
158
155
|
], UserController.prototype, "getGrants", null);
|
|
159
156
|
__decorate([
|
|
@@ -161,8 +158,9 @@ __decorate([
|
|
|
161
158
|
(0, rbac_http_1.Permission)(["updateOwn"]),
|
|
162
159
|
__param(0, (0, rbac_http_1.User)()),
|
|
163
160
|
__param(1, (0, http_1.Body)()),
|
|
161
|
+
__param(2, (0, rbac_http_1.Session)()),
|
|
164
162
|
__metadata("design:type", Function),
|
|
165
|
-
__metadata("design:paramtypes", [rbac_1.User, password_dto_js_1.PasswordDto]),
|
|
163
|
+
__metadata("design:paramtypes", [rbac_1.User, password_dto_js_1.PasswordDto, Object]),
|
|
166
164
|
__metadata("design:returntype", Promise)
|
|
167
165
|
], UserController.prototype, "newPassword", null);
|
|
168
166
|
exports.UserController = UserController = __decorate([
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UserController.js","sourceRoot":"","sources":["../../../src/controllers/UserController.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"UserController.js","sourceRoot":"","sources":["../../../src/controllers/UserController.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,14 +3,20 @@ import { User as UserModel, UserMetadata } from '@spinajs/rbac';
|
|
|
3
3
|
import { PaginationDTO, OrderDTO, IFilterRequest } from '@spinajs/orm-http';
|
|
4
4
|
import { UserMetadataDto } from '../dto/metadata-dto.js';
|
|
5
5
|
import { FilterableUserMetadata } from '../models/FilterableUserMetadata.js';
|
|
6
|
+
import { UserMetadataService } from '../services/UserMetadataService.js';
|
|
6
7
|
/**
|
|
7
8
|
* User metadata management.
|
|
8
9
|
* Provides CRUD operations for key-value metadata entries attached to user accounts.
|
|
9
10
|
* Admin routes operate on any user (identified by UUID), while own routes operate on the
|
|
10
11
|
* currently authenticated user's metadata.
|
|
12
|
+
*
|
|
13
|
+
* Both families delegate to {@link UserMetadataService}, which owns the owner
|
|
14
|
+
* scoping — the only thing that ever differed between them is where the owner
|
|
15
|
+
* id comes from.
|
|
11
16
|
* @tags User Metadata
|
|
12
17
|
*/
|
|
13
18
|
export declare class UserMetadataController extends BaseController {
|
|
19
|
+
protected Metadata: UserMetadataService;
|
|
14
20
|
/**
|
|
15
21
|
* List metadata for a specific user (admin)
|
|
16
22
|
* Returns a paginated, filtered, and ordered list of metadata entries for the given user.
|
|
@@ -74,18 +80,6 @@ export declare class UserMetadataController extends BaseController {
|
|
|
74
80
|
* @response 404 User or metadata entry not found
|
|
75
81
|
*/
|
|
76
82
|
deleteUserMetadata(user: UserModel, meta: number): Promise<Ok<any>>;
|
|
77
|
-
/**
|
|
78
|
-
* List own metadata
|
|
79
|
-
* Returns a paginated, filtered, and ordered list of metadata entries for the authenticated user.
|
|
80
|
-
* @security cookieAuth
|
|
81
|
-
* @param pagination.page Page number (zero-based)
|
|
82
|
-
* @param pagination.limit Number of entries per page
|
|
83
|
-
* @param order.column Column to sort by (default: Id)
|
|
84
|
-
* @param order.order Sort direction: ASC or DESC (default: DESC)
|
|
85
|
-
* @returns {IUserMetadataEntry[]} Paginated list of own metadata entries
|
|
86
|
-
* @response 401 Unauthorized — valid session required
|
|
87
|
-
* @response 403 Forbidden — readOwn permission required
|
|
88
|
-
*/
|
|
89
83
|
/**
|
|
90
84
|
* List own metadata
|
|
91
85
|
* Returns a paginated, filtered, and ordered list of metadata entries for the authenticated user.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UserMetadataController.d.ts","sourceRoot":"","sources":["../../../src/controllers/UserMetadataController.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,EAAE,EAAwC,cAAc,EAAS,MAAM,eAAe,CAAC;AAChH,OAAO,EAAE,IAAI,IAAI,SAAS,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"UserMetadataController.d.ts","sourceRoot":"","sources":["../../../src/controllers/UserMetadataController.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,EAAE,EAAwC,cAAc,EAAS,MAAM,eAAe,CAAC;AAChH,OAAO,EAAE,IAAI,IAAI,SAAS,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAGhE,OAAO,EAAW,aAAa,EAAE,QAAQ,EAAU,cAAc,EAAa,MAAM,mBAAmB,CAAC;AACxG,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,sBAAsB,EAAE,MAAM,qCAAqC,CAAC;AAC7E,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AAEzE;;;;;;;;;;GAUG;AACH,qBAGa,sBAAuB,SAAQ,cAAc;IAGtD,SAAS,CAAC,QAAQ,EAAE,mBAAmB,CAAC;IAExC;;;;;;;;;;;;;OAaG;IAGU,YAAY,CACc,IAAI,EAAE,SAAS,EACzC,UAAU,CAAC,EAAE,aAAa,EAC1B,KAAK,CAAC,EAAE,QAAQ,EAEzB,MAAM,CAAC,EAAE,cAAc;IAM3B;;;;;;;;;;OAUG;IAGU,WAAW,CACe,IAAI,EAAE,SAAS,EACzC,GAAG,EAAE,MAAM;IAIxB;;;;;;;;;OASG;IAGU,eAAe,CACW,IAAI,EAAE,SAAS,EACvC,QAAQ,EAAE,YAAY;IAMrC;;;;;;;;;;;OAWG;IAGU,kBAAkB,CAOxB,IAAI,EAAE,YAAY,EACc,KAAK,EAAE,SAAS,EAC3C,IAAI,EAAE,eAAe;IAUjC;;;;;;;;;;OAUG;IAGU,kBAAkB,CACQ,IAAI,EAAE,SAAS,EACzC,IAAI,EAAE,MAAM;IAMzB;;;;;;;;;;;OAWG;IAGU,QAAQ,CACT,IAAI,EAAE,SAAS,EACd,UAAU,CAAC,EAAE,aAAa,EAC1B,KAAK,CAAC,EAAE,QAAQ,EAEzB,MAAM,CAAC,EAAE,cAAc;IAK3B;;;;;;;;;OASG;IAGU,OAAO,CAAS,IAAI,EAAE,SAAS,EAAW,GAAG,EAAE,MAAM;IAIlE;;;;;;;OAOG;IAGU,WAAW,CAAS,IAAI,EAAE,SAAS,EAAa,QAAQ,EAAE,YAAY;IAKnF;;;;;;;;;;OAUG;IAGU,cAAc,CAAS,IAAI,EAAE,SAAS,EAAW,IAAI,EAAE,MAAM,EAAU,IAAI,EAAE,eAAe;IAMzG;;;;;;;;;OASG;IAGU,cAAc,CAAS,IAAI,EAAE,SAAS,EAAW,IAAI,EAAE,MAAM;CAK7E"}
|
|
@@ -15,22 +15,21 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
15
15
|
exports.UserMetadataController = void 0;
|
|
16
16
|
const http_1 = require("@spinajs/http");
|
|
17
17
|
const rbac_1 = require("@spinajs/rbac");
|
|
18
|
+
const di_1 = require("@spinajs/di");
|
|
18
19
|
const rbac_http_1 = require("@spinajs/rbac-http");
|
|
19
20
|
const orm_http_1 = require("@spinajs/orm-http");
|
|
20
21
|
const metadata_dto_js_1 = require("../dto/metadata-dto.js");
|
|
21
|
-
const orm_1 = require("@spinajs/orm");
|
|
22
22
|
const FilterableUserMetadata_js_1 = require("../models/FilterableUserMetadata.js");
|
|
23
|
-
|
|
24
|
-
* Fallback page size. A request without a `limit` used to reach `take(0)`,
|
|
25
|
-
* which the query builder rejects ( "take count should be a positive number" ),
|
|
26
|
-
* so plain listing requests failed instead of returning the first page.
|
|
27
|
-
*/
|
|
28
|
-
const DEFAULT_PAGE_SIZE = 10;
|
|
23
|
+
const UserMetadataService_js_1 = require("../services/UserMetadataService.js");
|
|
29
24
|
/**
|
|
30
25
|
* User metadata management.
|
|
31
26
|
* Provides CRUD operations for key-value metadata entries attached to user accounts.
|
|
32
27
|
* Admin routes operate on any user (identified by UUID), while own routes operate on the
|
|
33
28
|
* currently authenticated user's metadata.
|
|
29
|
+
*
|
|
30
|
+
* Both families delegate to {@link UserMetadataService}, which owns the owner
|
|
31
|
+
* scoping — the only thing that ever differed between them is where the owner
|
|
32
|
+
* id comes from.
|
|
34
33
|
* @tags User Metadata
|
|
35
34
|
*/
|
|
36
35
|
let UserMetadataController = class UserMetadataController extends http_1.BaseController {
|
|
@@ -49,13 +48,7 @@ let UserMetadataController = class UserMetadataController extends http_1.BaseCon
|
|
|
49
48
|
* @response 404 User not found
|
|
50
49
|
*/
|
|
51
50
|
async readUserMeta(user, pagination, order, filter) {
|
|
52
|
-
|
|
53
|
-
return new http_1.Ok(FilterableUserMetadata_js_1.FilterableUserMetadata.select().where({
|
|
54
|
-
user_id: user.Id
|
|
55
|
-
}).filter(filter?.filters ?? [], filter?.op)
|
|
56
|
-
.take(limit)
|
|
57
|
-
.skip(limit * (pagination?.page ?? 0))
|
|
58
|
-
.order(order?.column ?? 'Id', order?.order ?? orm_1.SortOrder.DESC));
|
|
51
|
+
return new http_1.Ok(this.Metadata.list(user.Id, pagination, order, filter));
|
|
59
52
|
}
|
|
60
53
|
/**
|
|
61
54
|
* Get a single metadata entry for a specific user (admin)
|
|
@@ -69,10 +62,7 @@ let UserMetadataController = class UserMetadataController extends http_1.BaseCon
|
|
|
69
62
|
* @response 404 User or metadata key not found
|
|
70
63
|
*/
|
|
71
64
|
async getUserMeta(user, key) {
|
|
72
|
-
return new http_1.Ok(
|
|
73
|
-
Key: key,
|
|
74
|
-
user_id: user.Id
|
|
75
|
-
}).firstOrFail());
|
|
65
|
+
return new http_1.Ok(this.Metadata.getByKey(user.Id, key));
|
|
76
66
|
}
|
|
77
67
|
/**
|
|
78
68
|
* Add or update metadata for a specific user (admin)
|
|
@@ -85,8 +75,7 @@ let UserMetadataController = class UserMetadataController extends http_1.BaseCon
|
|
|
85
75
|
* @response 404 User not found
|
|
86
76
|
*/
|
|
87
77
|
async addUserMetadata(user, metadata) {
|
|
88
|
-
|
|
89
|
-
await metadata.insert(orm_1.InsertBehaviour.InsertOrUpdate);
|
|
78
|
+
await this.Metadata.upsert(user.Id, metadata);
|
|
90
79
|
return new http_1.Ok();
|
|
91
80
|
}
|
|
92
81
|
/**
|
|
@@ -102,11 +91,10 @@ let UserMetadataController = class UserMetadataController extends http_1.BaseCon
|
|
|
102
91
|
* @response 404 User or metadata entry not found
|
|
103
92
|
*/
|
|
104
93
|
async updateUserMetadata(meta, _user, data) {
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
});
|
|
94
|
+
// @FromModel already resolved the entry within the addressed user's
|
|
95
|
+
// scope ( so a miss is a 404 ); the write still goes through the
|
|
96
|
+
// owner-scoped service so the predicate is not restated here.
|
|
97
|
+
await this.Metadata.update(_user.Id, meta.Id, data);
|
|
110
98
|
return new http_1.Ok();
|
|
111
99
|
}
|
|
112
100
|
/**
|
|
@@ -121,24 +109,9 @@ let UserMetadataController = class UserMetadataController extends http_1.BaseCon
|
|
|
121
109
|
* @response 404 User or metadata entry not found
|
|
122
110
|
*/
|
|
123
111
|
async deleteUserMetadata(user, meta) {
|
|
124
|
-
|
|
125
|
-
// goes in as the primary key and ownership is AND-ed on top of it —
|
|
126
|
-
// deleting by id alone would let any user id delete anybody's entry.
|
|
127
|
-
await rbac_1.UserMetadata.destroy(meta).andWhere('user_id', user.Id);
|
|
112
|
+
await this.Metadata.delete(user.Id, meta);
|
|
128
113
|
return new http_1.Ok();
|
|
129
114
|
}
|
|
130
|
-
/**
|
|
131
|
-
* List own metadata
|
|
132
|
-
* Returns a paginated, filtered, and ordered list of metadata entries for the authenticated user.
|
|
133
|
-
* @security cookieAuth
|
|
134
|
-
* @param pagination.page Page number (zero-based)
|
|
135
|
-
* @param pagination.limit Number of entries per page
|
|
136
|
-
* @param order.column Column to sort by (default: Id)
|
|
137
|
-
* @param order.order Sort direction: ASC or DESC (default: DESC)
|
|
138
|
-
* @returns {IUserMetadataEntry[]} Paginated list of own metadata entries
|
|
139
|
-
* @response 401 Unauthorized — valid session required
|
|
140
|
-
* @response 403 Forbidden — readOwn permission required
|
|
141
|
-
*/
|
|
142
115
|
/**
|
|
143
116
|
* List own metadata
|
|
144
117
|
* Returns a paginated, filtered, and ordered list of metadata entries for the authenticated user.
|
|
@@ -152,15 +125,7 @@ let UserMetadataController = class UserMetadataController extends http_1.BaseCon
|
|
|
152
125
|
* @response 403 Forbidden — readOwn permission required
|
|
153
126
|
*/
|
|
154
127
|
async readMeta(user, pagination, order, filter) {
|
|
155
|
-
|
|
156
|
-
// ownership for the metadata model (queries resolve to the unsafe base
|
|
157
|
-
// model without an @OrmResource), so every own-route filters by the
|
|
158
|
-
// authenticated user's id directly.
|
|
159
|
-
const limit = pagination?.limit || DEFAULT_PAGE_SIZE;
|
|
160
|
-
return new http_1.Ok(FilterableUserMetadata_js_1.FilterableUserMetadata.select().where('user_id', user.Id).filter(filter?.filters ?? [], filter?.op)
|
|
161
|
-
.take(limit)
|
|
162
|
-
.skip(limit * (pagination?.page ?? 0))
|
|
163
|
-
.order(order?.column ?? 'Id', order?.order ?? orm_1.SortOrder.DESC));
|
|
128
|
+
return new http_1.Ok(this.Metadata.list(user.Id, pagination, order, filter));
|
|
164
129
|
}
|
|
165
130
|
/**
|
|
166
131
|
* Get own metadata entry by key
|
|
@@ -173,10 +138,7 @@ let UserMetadataController = class UserMetadataController extends http_1.BaseCon
|
|
|
173
138
|
* @response 404 Metadata key not found
|
|
174
139
|
*/
|
|
175
140
|
async getMeta(user, key) {
|
|
176
|
-
return new http_1.Ok(
|
|
177
|
-
Key: key,
|
|
178
|
-
user_id: user.Id,
|
|
179
|
-
}).firstOrFail());
|
|
141
|
+
return new http_1.Ok(this.Metadata.getByKey(user.Id, key));
|
|
180
142
|
}
|
|
181
143
|
/**
|
|
182
144
|
* Add or update own metadata
|
|
@@ -187,10 +149,7 @@ let UserMetadataController = class UserMetadataController extends http_1.BaseCon
|
|
|
187
149
|
* @response 403 Forbidden — updateOwn permission required
|
|
188
150
|
*/
|
|
189
151
|
async addMetadata(user, metadata) {
|
|
190
|
-
|
|
191
|
-
// supplied in the request body
|
|
192
|
-
metadata.user_id = user.Id;
|
|
193
|
-
await metadata.insert(orm_1.InsertBehaviour.InsertOrUpdate);
|
|
152
|
+
await this.Metadata.upsert(user.Id, metadata);
|
|
194
153
|
return new http_1.Ok();
|
|
195
154
|
}
|
|
196
155
|
/**
|
|
@@ -205,19 +164,7 @@ let UserMetadataController = class UserMetadataController extends http_1.BaseCon
|
|
|
205
164
|
* @response 404 Metadata entry not found
|
|
206
165
|
*/
|
|
207
166
|
async updateMetadata(user, meta, data) {
|
|
208
|
-
|
|
209
|
-
// filter. Without the grouping the flat "Key = ? OR Id = ? AND user_id = ?"
|
|
210
|
-
// binds as "Key = ? OR (Id = ? AND user_id = ?)", letting any user update
|
|
211
|
-
// another user's metadata by its Key. Scoping by user_id explicitly (not
|
|
212
|
-
// relying on the query middleware, which does not fire for this model)
|
|
213
|
-
// keeps the update owner-bound.
|
|
214
|
-
await rbac_1.UserMetadata.update({
|
|
215
|
-
Key: data.Key,
|
|
216
|
-
Value: data.Value,
|
|
217
|
-
Type: data.Type
|
|
218
|
-
}).where(function () {
|
|
219
|
-
this.where("Key", meta).orWhere("Id", meta);
|
|
220
|
-
}).andWhere('user_id', user.Id);
|
|
167
|
+
await this.Metadata.update(user.Id, meta, data);
|
|
221
168
|
return new http_1.Ok();
|
|
222
169
|
}
|
|
223
170
|
/**
|
|
@@ -231,11 +178,15 @@ let UserMetadataController = class UserMetadataController extends http_1.BaseCon
|
|
|
231
178
|
* @response 404 Metadata entry not found
|
|
232
179
|
*/
|
|
233
180
|
async deleteMetadata(user, meta) {
|
|
234
|
-
await
|
|
181
|
+
await this.Metadata.delete(user.Id, meta);
|
|
235
182
|
return new http_1.Ok();
|
|
236
183
|
}
|
|
237
184
|
};
|
|
238
185
|
exports.UserMetadataController = UserMetadataController;
|
|
186
|
+
__decorate([
|
|
187
|
+
(0, di_1.Autoinject)(UserMetadataService_js_1.UserMetadataService),
|
|
188
|
+
__metadata("design:type", UserMetadataService_js_1.UserMetadataService)
|
|
189
|
+
], UserMetadataController.prototype, "Metadata", void 0);
|
|
239
190
|
__decorate([
|
|
240
191
|
(0, http_1.Get)(":user/metadata"),
|
|
241
192
|
(0, rbac_http_1.Permission)(['readAny']),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UserMetadataController.js","sourceRoot":"","sources":["../../../src/controllers/UserMetadataController.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,wCAAgH;AAChH,wCAAgE;AAChE,kDAAkF;AAClF,gDAAwG;AACxG,4DAAyD;AACzD,
|
|
1
|
+
{"version":3,"file":"UserMetadataController.js","sourceRoot":"","sources":["../../../src/controllers/UserMetadataController.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,wCAAgH;AAChH,wCAAgE;AAChE,oCAAyC;AACzC,kDAAkF;AAClF,gDAAwG;AACxG,4DAAyD;AACzD,mFAA6E;AAC7E,+EAAyE;AAEzE;;;;;;;;;;GAUG;AAII,IAAM,sBAAsB,GAA5B,MAAM,sBAAuB,SAAQ,qBAAc;IAKtD;;;;;;;;;;;;;OAaG;IAGU,AAAN,KAAK,CAAC,YAAY,CACc,IAAe,EACzC,UAA0B,EAC1B,KAAgB,EAEzB,MAAuB;QAEvB,OAAO,IAAI,SAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;IAC1E,CAAC;IAGD;;;;;;;;;;OAUG;IAGU,AAAN,KAAK,CAAC,WAAW,CACe,IAAe,EACzC,GAAW;QACpB,OAAO,IAAI,SAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC;IACxD,CAAC;IAED;;;;;;;;;OASG;IAGU,AAAN,KAAK,CAAC,eAAe,CACW,IAAe,EACvC,QAAsB;QAEjC,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;QAC9C,OAAO,IAAI,SAAE,EAAE,CAAC;IACpB,CAAC;IAED;;;;;;;;;;;OAWG;IAGU,AAAN,KAAK,CAAC,kBAAkB,CAOxB,IAAkB,EACc,KAAgB,EAC3C,IAAqB;QAE7B,oEAAoE;QACpE,iEAAiE;QACjE,8DAA8D;QAC9D,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QAEpD,OAAO,IAAI,SAAE,EAAE,CAAC;IACpB,CAAC;IAED;;;;;;;;;;OAUG;IAGU,AAAN,KAAK,CAAC,kBAAkB,CACQ,IAAe,EACzC,IAAY;QACrB,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QAE1C,OAAO,IAAI,SAAE,EAAE,CAAC;IACpB,CAAC;IAED;;;;;;;;;;;OAWG;IAGU,AAAN,KAAK,CAAC,QAAQ,CACT,IAAe,EACd,UAA0B,EAC1B,KAAgB,EAEzB,MAAuB;QAEvB,OAAO,IAAI,SAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;IAC1E,CAAC;IAED;;;;;;;;;OASG;IAGU,AAAN,KAAK,CAAC,OAAO,CAAS,IAAe,EAAW,GAAW;QAC9D,OAAO,IAAI,SAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC;IACxD,CAAC;IAED;;;;;;;OAOG;IAGU,AAAN,KAAK,CAAC,WAAW,CAAS,IAAe,EAAa,QAAsB;QAC/E,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;QAC9C,OAAO,IAAI,SAAE,EAAE,CAAC;IACpB,CAAC;IAED;;;;;;;;;;OAUG;IAGU,AAAN,KAAK,CAAC,cAAc,CAAS,IAAe,EAAW,IAAY,EAAU,IAAqB;QACrG,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QAEhD,OAAO,IAAI,SAAE,EAAE,CAAC;IACpB,CAAC;IAED;;;;;;;;;OASG;IAGU,AAAN,KAAK,CAAC,cAAc,CAAS,IAAe,EAAW,IAAY;QACtE,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QAE1C,OAAO,IAAI,SAAE,EAAE,CAAC;IACpB,CAAC;CACJ,CAAA;AAxNY,wDAAsB;AAGrB;IADT,IAAA,eAAU,EAAC,4CAAmB,CAAC;8BACZ,4CAAmB;wDAAC;AAkB3B;IAFZ,IAAA,UAAG,EAAC,gBAAgB,CAAC;IACrB,IAAA,sBAAU,EAAC,CAAC,SAAS,CAAC,CAAC;IAEnB,WAAA,IAAA,oBAAS,EAAC,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,CAAA;IACjC,WAAA,IAAA,YAAK,GAAE,CAAA;IACP,WAAA,IAAA,YAAK,GAAE,CAAA;IACP,WAAA,IAAA,iBAAM,EAAC,kDAAsB,CAAC,CAAA;;qCAHU,WAAS;QAC5B,wBAAa;QAClB,mBAAQ;;0DAK5B;AAgBY;IAFZ,IAAA,UAAG,EAAC,qBAAqB,CAAC;IAC1B,IAAA,sBAAU,EAAC,CAAC,SAAS,CAAC,CAAC;IAEnB,WAAA,IAAA,oBAAS,EAAC,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,CAAA;IACjC,WAAA,IAAA,YAAK,GAAE,CAAA;;qCADiC,WAAS;;yDAGrD;AAcY;IAFZ,IAAA,WAAI,EAAC,gBAAgB,CAAC;IACtB,IAAA,sBAAU,EAAC,CAAC,WAAW,CAAC,CAAC;IAErB,WAAA,IAAA,oBAAS,EAAC,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,CAAA;IACjC,WAAA,IAAA,kBAAO,GAAE,CAAA;;qCAD+B,WAAS;QAC7B,mBAAY;;6DAIpC;AAgBY;IAFZ,IAAA,YAAK,EAAC,uBAAuB,CAAC;IAC9B,IAAA,sBAAU,EAAC,CAAC,WAAW,CAAC,CAAC;IAErB,WAAA,IAAA,oBAAS,EAAC;QACP,KAAK,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,IAAI;YAC7B,OAAO,IAAI,CAAC,KAAK,CAAC;gBACd,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;YAC/C,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC,EAAE,CAAC,CAAA;QACnC,CAAC,CAAC;KACL,CAAC,CAAA;IACD,WAAA,IAAA,oBAAS,EAAC,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,CAAA;IACjC,WAAA,IAAA,WAAI,GAAE,CAAA;;qCAFE,mBAAY;QACqB,WAAS;QACrC,iCAAe;;gEAQhC;AAeY;IAFZ,IAAA,UAAG,EAAC,sBAAsB,CAAC;IAC3B,IAAA,sBAAU,EAAC,CAAC,WAAW,CAAC,CAAC;IAErB,WAAA,IAAA,oBAAS,EAAC,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,CAAA;IACjC,WAAA,IAAA,YAAK,GAAE,CAAA;;qCADiC,WAAS;;gEAKrD;AAgBY;IAFZ,IAAA,UAAG,EAAC,UAAU,CAAC;IACf,IAAA,sBAAU,EAAC,CAAC,SAAS,CAAC,CAAC;IAEnB,WAAA,IAAA,gBAAI,GAAE,CAAA;IACN,WAAA,IAAA,YAAK,GAAE,CAAA;IACP,WAAA,IAAA,YAAK,GAAE,CAAA;IACP,WAAA,IAAA,iBAAM,EAAC,kDAAsB,CAAC,CAAA;;qCAHjB,WAAS;QACD,wBAAa;QAClB,mBAAQ;;sDAK5B;AAcY;IAFZ,IAAA,UAAG,EAAC,eAAe,CAAC;IACpB,IAAA,sBAAU,EAAC,CAAC,SAAS,CAAC,CAAC;IACF,WAAA,IAAA,gBAAI,GAAE,CAAA;IAAmB,WAAA,IAAA,YAAK,GAAE,CAAA;;qCAAnB,WAAS;;qDAE3C;AAYY;IAFZ,IAAA,WAAI,EAAC,UAAU,CAAC;IAChB,IAAA,sBAAU,EAAC,CAAC,WAAW,CAAC,CAAC;IACA,WAAA,IAAA,gBAAI,GAAE,CAAA;IAAmB,WAAA,IAAA,kBAAO,GAAE,CAAA;;qCAArB,WAAS,EAAuB,mBAAY;;yDAGlF;AAeY;IAFZ,IAAA,YAAK,EAAC,gBAAgB,CAAC;IACvB,IAAA,sBAAU,EAAC,CAAC,WAAW,CAAC,CAAC;IACG,WAAA,IAAA,gBAAI,GAAE,CAAA;IAAmB,WAAA,IAAA,YAAK,GAAE,CAAA;IAAgB,WAAA,IAAA,WAAI,GAAE,CAAA;;qCAAzC,WAAS,UAAuC,iCAAe;;4DAIxG;AAcY;IAFZ,IAAA,UAAG,EAAC,gBAAgB,CAAC;IACrB,IAAA,sBAAU,EAAC,CAAC,WAAW,CAAC,CAAC;IACG,WAAA,IAAA,gBAAI,GAAE,CAAA;IAAmB,WAAA,IAAA,YAAK,GAAE,CAAA;;qCAAnB,WAAS;;4DAIlD;iCAvNQ,sBAAsB;IAHlC,IAAA,eAAQ,EAAC,MAAM,CAAC;IAChB,IAAA,oBAAQ,EAAC,eAAe,CAAC;IACzB,IAAA,aAAM,EAAC,4BAAgB,CAAC;GACZ,sBAAsB,CAwNlC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export declare const ConfirmPasswordDtoSchema: {
|
|
2
|
+
$schema: string;
|
|
3
|
+
title: string;
|
|
4
|
+
type: string;
|
|
5
|
+
properties: {
|
|
6
|
+
Password: {
|
|
7
|
+
type: string;
|
|
8
|
+
maxLength: number;
|
|
9
|
+
description: string;
|
|
10
|
+
};
|
|
11
|
+
};
|
|
12
|
+
required: string[];
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* Re-authentication payload for sensitive self-service operations — enabling or
|
|
16
|
+
* disabling 2FA. A hijacked session alone must not be enough to weaken a
|
|
17
|
+
* user's second factor.
|
|
18
|
+
*/
|
|
19
|
+
export declare class ConfirmPasswordDto {
|
|
20
|
+
Password: string;
|
|
21
|
+
constructor(data: any);
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=confirm-password-dto.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"confirm-password-dto.d.ts","sourceRoot":"","sources":["../../../src/dto/confirm-password-dto.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,wBAAwB;;;;;;;;;;;;CAQpC,CAAC;AAEF;;;;GAIG;AACH,qBACa,kBAAkB;IACtB,QAAQ,EAAE,MAAM,CAAC;gBAEZ,IAAI,EAAE,GAAG;CAGtB"}
|
|
@@ -9,26 +9,30 @@ var __metadata = (this && this.__metadata) || function (k, v) {
|
|
|
9
9
|
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
10
|
};
|
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
exports.
|
|
12
|
+
exports.ConfirmPasswordDto = exports.ConfirmPasswordDtoSchema = void 0;
|
|
13
13
|
const validation_1 = require("@spinajs/validation");
|
|
14
|
-
exports.
|
|
14
|
+
exports.ConfirmPasswordDtoSchema = {
|
|
15
15
|
$schema: 'http://json-schema.org/draft-07/schema#',
|
|
16
|
-
title: '
|
|
16
|
+
title: 'Confirm password DTO',
|
|
17
17
|
type: 'object',
|
|
18
18
|
properties: {
|
|
19
|
-
Password: { type: 'string', maxLength: 32,
|
|
20
|
-
ConfirmPassword: { type: 'string', maxLength: 32, minLength: 6 },
|
|
19
|
+
Password: { type: 'string', maxLength: 32, description: 'Current password, re-entered to confirm a sensitive change' },
|
|
21
20
|
},
|
|
22
|
-
required: ['Password'
|
|
21
|
+
required: ['Password'],
|
|
23
22
|
};
|
|
24
|
-
|
|
23
|
+
/**
|
|
24
|
+
* Re-authentication payload for sensitive self-service operations — enabling or
|
|
25
|
+
* disabling 2FA. A hijacked session alone must not be enough to weaken a
|
|
26
|
+
* user's second factor.
|
|
27
|
+
*/
|
|
28
|
+
let ConfirmPasswordDto = class ConfirmPasswordDto {
|
|
25
29
|
constructor(data) {
|
|
26
30
|
Object.assign(this, data);
|
|
27
31
|
}
|
|
28
32
|
};
|
|
29
|
-
exports.
|
|
30
|
-
exports.
|
|
31
|
-
(0, validation_1.Schema)(exports.
|
|
33
|
+
exports.ConfirmPasswordDto = ConfirmPasswordDto;
|
|
34
|
+
exports.ConfirmPasswordDto = ConfirmPasswordDto = __decorate([
|
|
35
|
+
(0, validation_1.Schema)(exports.ConfirmPasswordDtoSchema),
|
|
32
36
|
__metadata("design:paramtypes", [Object])
|
|
33
|
-
],
|
|
34
|
-
//# sourceMappingURL=
|
|
37
|
+
], ConfirmPasswordDto);
|
|
38
|
+
//# sourceMappingURL=confirm-password-dto.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"confirm-password-dto.js","sourceRoot":"","sources":["../../../src/dto/confirm-password-dto.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,oDAA6C;AAEhC,QAAA,wBAAwB,GAAG;IACtC,OAAO,EAAE,yCAAyC;IAClD,KAAK,EAAE,sBAAsB;IAC7B,IAAI,EAAE,QAAQ;IACd,UAAU,EAAE;QACV,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,EAAE,WAAW,EAAE,4DAA4D,EAAE;KACvH;IACD,QAAQ,EAAE,CAAC,UAAU,CAAC;CACvB,CAAC;AAEF;;;;GAIG;AAEI,IAAM,kBAAkB,GAAxB,MAAM,kBAAkB;IAG7B,YAAY,IAAS;QACnB,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC5B,CAAC;CACF,CAAA;AANY,gDAAkB;6BAAlB,kBAAkB;IAD9B,IAAA,mBAAM,EAAC,gCAAwB,CAAC;;GACpB,kBAAkB,CAM9B"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
export declare const PasswordResetRequestDtoSchema: {
|
|
2
|
+
$schema: string;
|
|
3
|
+
title: string;
|
|
4
|
+
type: string;
|
|
5
|
+
properties: {
|
|
6
|
+
Email: {
|
|
7
|
+
type: string;
|
|
8
|
+
format: string;
|
|
9
|
+
description: string;
|
|
10
|
+
};
|
|
11
|
+
};
|
|
12
|
+
required: string[];
|
|
13
|
+
};
|
|
14
|
+
/** Payload starting a password reset — identifies the account by email. */
|
|
15
|
+
export declare class PasswordResetRequestDto {
|
|
16
|
+
Email: string;
|
|
17
|
+
constructor(data: any);
|
|
18
|
+
}
|
|
19
|
+
export declare const PasswordResetConfirmDtoSchema: {
|
|
20
|
+
$schema: string;
|
|
21
|
+
title: string;
|
|
22
|
+
type: string;
|
|
23
|
+
properties: {
|
|
24
|
+
Email: {
|
|
25
|
+
type: string;
|
|
26
|
+
format: string;
|
|
27
|
+
description: string;
|
|
28
|
+
};
|
|
29
|
+
Token: {
|
|
30
|
+
type: string;
|
|
31
|
+
maxLength: number;
|
|
32
|
+
minLength: number;
|
|
33
|
+
description: string;
|
|
34
|
+
};
|
|
35
|
+
Password: {
|
|
36
|
+
type: string;
|
|
37
|
+
maxLength: number;
|
|
38
|
+
minLength: number;
|
|
39
|
+
description: string;
|
|
40
|
+
};
|
|
41
|
+
ConfirmPassword: {
|
|
42
|
+
type: string;
|
|
43
|
+
maxLength: number;
|
|
44
|
+
minLength: number;
|
|
45
|
+
description: string;
|
|
46
|
+
};
|
|
47
|
+
};
|
|
48
|
+
required: string[];
|
|
49
|
+
};
|
|
50
|
+
/** Payload completing a password reset with the issued token. */
|
|
51
|
+
export declare class PasswordResetConfirmDto {
|
|
52
|
+
Email: string;
|
|
53
|
+
Token: string;
|
|
54
|
+
Password: string;
|
|
55
|
+
ConfirmPassword: string;
|
|
56
|
+
constructor(data: any);
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=password-reset-dto.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"password-reset-dto.d.ts","sourceRoot":"","sources":["../../../src/dto/password-reset-dto.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,6BAA6B;;;;;;;;;;;;CAQzC,CAAC;AAEF,2EAA2E;AAC3E,qBACa,uBAAuB;IAC3B,KAAK,EAAE,MAAM,CAAC;gBAET,IAAI,EAAE,GAAG;CAGtB;AAED,eAAO,MAAM,6BAA6B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAWzC,CAAC;AAEF,iEAAiE;AACjE,qBACa,uBAAuB;IAC3B,KAAK,EAAE,MAAM,CAAC;IAEd,KAAK,EAAE,MAAM,CAAC;IAEd,QAAQ,EAAE,MAAM,CAAC;IAEjB,eAAe,EAAE,MAAM,CAAC;gBAEnB,IAAI,EAAE,GAAG;CAGtB"}
|