@spinajs/rbac-http-user 2.0.481 → 2.0.482
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/controllers/ActiveRoleController.d.ts +1 -0
- package/lib/cjs/controllers/ActiveRoleController.d.ts.map +1 -1
- package/lib/cjs/controllers/ActiveRoleController.js +21 -2
- package/lib/cjs/controllers/ActiveRoleController.js.map +1 -1
- package/lib/cjs/controllers/LoginController.d.ts +1 -1
- package/lib/cjs/controllers/LoginController.d.ts.map +1 -1
- package/lib/cjs/controllers/LoginController.js +17 -23
- package/lib/cjs/controllers/LoginController.js.map +1 -1
- package/lib/cjs/controllers/TwoFactorAuthController.d.ts +7 -0
- package/lib/cjs/controllers/TwoFactorAuthController.d.ts.map +1 -1
- package/lib/cjs/controllers/TwoFactorAuthController.js +36 -5
- package/lib/cjs/controllers/TwoFactorAuthController.js.map +1 -1
- package/lib/cjs/controllers/UserController.d.ts.map +1 -1
- package/lib/cjs/controllers/UserController.js +5 -1
- package/lib/cjs/controllers/UserController.js.map +1 -1
- package/lib/cjs/controllers/UserMetadataController.d.ts +5 -5
- package/lib/cjs/controllers/UserMetadataController.d.ts.map +1 -1
- package/lib/cjs/controllers/UserMetadataController.js +44 -20
- package/lib/cjs/controllers/UserMetadataController.js.map +1 -1
- package/lib/mjs/controllers/ActiveRoleController.d.ts +1 -0
- package/lib/mjs/controllers/ActiveRoleController.d.ts.map +1 -1
- package/lib/mjs/controllers/ActiveRoleController.js +22 -3
- package/lib/mjs/controllers/ActiveRoleController.js.map +1 -1
- package/lib/mjs/controllers/LoginController.d.ts +1 -1
- package/lib/mjs/controllers/LoginController.d.ts.map +1 -1
- package/lib/mjs/controllers/LoginController.js +18 -24
- package/lib/mjs/controllers/LoginController.js.map +1 -1
- package/lib/mjs/controllers/TwoFactorAuthController.d.ts +7 -0
- package/lib/mjs/controllers/TwoFactorAuthController.d.ts.map +1 -1
- package/lib/mjs/controllers/TwoFactorAuthController.js +38 -7
- package/lib/mjs/controllers/TwoFactorAuthController.js.map +1 -1
- package/lib/mjs/controllers/UserController.d.ts.map +1 -1
- package/lib/mjs/controllers/UserController.js +5 -1
- package/lib/mjs/controllers/UserController.js.map +1 -1
- package/lib/mjs/controllers/UserMetadataController.d.ts +5 -5
- package/lib/mjs/controllers/UserMetadataController.d.ts.map +1 -1
- package/lib/mjs/controllers/UserMetadataController.js +45 -21
- package/lib/mjs/controllers/UserMetadataController.js.map +1 -1
- package/lib/tsconfig.cjs.tsbuildinfo +1 -1
- package/lib/tsconfig.mjs.tsbuildinfo +1 -1
- package/package.json +19 -20
|
@@ -12,7 +12,7 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
|
12
12
|
};
|
|
13
13
|
import { SwitchRoleDto } from '../dto/switchRole-dto.js';
|
|
14
14
|
import { BaseController, BasePath, Post, Body, Ok, Get, BadRequestResponse, Unauthorized, Policy } from '@spinajs/http';
|
|
15
|
-
import { AccessControl, AuthProvider, PasswordProvider, SessionProvider, _unwindGrants } from '@spinajs/rbac';
|
|
15
|
+
import { AccessControl, AuthProvider, PasswordProvider, SessionProvider, _unwindGrants, regenerateSession, sessionCookieMaxAge } from '@spinajs/rbac';
|
|
16
16
|
import { Autoinject } from '@spinajs/di';
|
|
17
17
|
import { AutoinjectService, Config } from '@spinajs/configuration';
|
|
18
18
|
import { LoggedPolicy, User as UserRouteArg, Session as SessionRouteArg, FromSession } from '@spinajs/rbac-http';
|
|
@@ -74,8 +74,23 @@ let ActiveRoleController = class ActiveRoleController extends BaseController {
|
|
|
74
74
|
}
|
|
75
75
|
}
|
|
76
76
|
session.Data.set('ActiveRole', payload.Role);
|
|
77
|
-
|
|
78
|
-
|
|
77
|
+
// Privilege elevation — regenerate the session id to defend against session
|
|
78
|
+
// fixation, and reset the ssid cookie to the new id.
|
|
79
|
+
const regenerated = await regenerateSession(this.SessionProvider, session);
|
|
80
|
+
return new Ok(this.buildResponse(payload.Role), {
|
|
81
|
+
Coockies: [
|
|
82
|
+
{
|
|
83
|
+
Name: 'ssid',
|
|
84
|
+
Value: regenerated.SessionId,
|
|
85
|
+
Options: {
|
|
86
|
+
signed: true,
|
|
87
|
+
httpOnly: true,
|
|
88
|
+
maxAge: sessionCookieMaxAge(regenerated),
|
|
89
|
+
...this.SessionCookieConfig,
|
|
90
|
+
},
|
|
91
|
+
},
|
|
92
|
+
],
|
|
93
|
+
});
|
|
79
94
|
}
|
|
80
95
|
buildResponse(activeRole) {
|
|
81
96
|
const grants = activeRole ? _unwindGrants(activeRole, this.AC.getGrants()) : {};
|
|
@@ -105,6 +120,10 @@ __decorate([
|
|
|
105
120
|
Config('rbac.roleSwitch.requirePassword', { defaultValue: [] }),
|
|
106
121
|
__metadata("design:type", Array)
|
|
107
122
|
], ActiveRoleController.prototype, "RolesRequiringPassword", void 0);
|
|
123
|
+
__decorate([
|
|
124
|
+
Config('rbac.session.cookie', {}),
|
|
125
|
+
__metadata("design:type", Object)
|
|
126
|
+
], ActiveRoleController.prototype, "SessionCookieConfig", void 0);
|
|
108
127
|
__decorate([
|
|
109
128
|
Get('active-role'),
|
|
110
129
|
Policy(LoggedPolicy),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ActiveRoleController.js","sourceRoot":"","sources":["../../../src/controllers/ActiveRoleController.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACxH,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"ActiveRoleController.js","sourceRoot":"","sources":["../../../src/controllers/ActiveRoleController.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,7 +15,6 @@ export declare class LoginController extends BaseController {
|
|
|
15
15
|
protected Configuration: Configuration;
|
|
16
16
|
protected AuthProvider: AuthProvider;
|
|
17
17
|
protected SessionProvider: SessionProvider;
|
|
18
|
-
protected SessionExpirationTime: number;
|
|
19
18
|
protected TwoFactorAuthEnabled: boolean;
|
|
20
19
|
protected TwoFactorAuthForceUser: boolean;
|
|
21
20
|
protected SessionCookieConfig: any;
|
|
@@ -66,6 +65,7 @@ export declare class LoginController extends BaseController {
|
|
|
66
65
|
IsGuest: boolean;
|
|
67
66
|
IsBanned: boolean;
|
|
68
67
|
IsDirty: boolean;
|
|
68
|
+
Snapshot: import("@spinajs/orm").IModelSnapshot | null;
|
|
69
69
|
Metadata: Omit<import("@spinajs/orm").ModelDataWithRelationData<import("@spinajs/rbac").UserMetadataBase>, import("@spinajs/orm").ExcludedModelProperties>[];
|
|
70
70
|
PrimaryKeyValue: any;
|
|
71
71
|
}>>;
|
|
@@ -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,EAAe,YAAY,EAAU,MAAM,eAAe,CAAC;AAC5G,OAAO,EAAE,YAAY,EAAE,eAAe,EAAsB,aAAa,
|
|
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,EAAe,YAAY,EAAU,MAAM,eAAe,CAAC;AAC5G,OAAO,EAAE,YAAY,EAAE,eAAe,EAAsB,aAAa,EAAsC,MAAM,eAAe,CAAC;AAErI,OAAO,EAA6B,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAElF,OAAO,EAA+E,cAAc,EAAwC,MAAM,oBAAoB,CAAC;AACvK,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AACrC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAI9C;;;;;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,mBAAmB,EAAE,GAAG,CAAC;IAGnC,SAAS,CAAC,EAAE,EAAE,aAAa,CAAC;IAE5B;;;;;;;;;OASG;IAGU,KAAK,CAAiB,MAAM,EAAE,IAAI,EAAgB,IAAI,EAAE,MAAM,EAAU,WAAW,EAAE,YAAY,GAAG,OAAO,CAAC,EAAE,CAAC,cAAc,CAAC,GAAG,YAAY,CAAC;IA8G3J;;;;;;;;OAQG;IAGU,MAAM,CAAe,IAAI,EAAE,MAAM,EAAqB,OAAO,EAAE,QAAQ,EAAkB,IAAI,EAAE,IAAI;IA6BhH;;;;;;;;OAQG;IAGU,MAAM,CAAiB,IAAI,EAAE,IAAI,EAAiB,UAAU,EAAE,MAAM;;;;;;;;;;;;;;;;;;;;CAOlF"}
|
|
@@ -12,7 +12,7 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
|
12
12
|
};
|
|
13
13
|
import { UserLoginDto } from '../dto/userLogin-dto.js';
|
|
14
14
|
import { BaseController, BasePath, Post, Body, Ok, Get, Cookie, Unauthorized, Policy } from '@spinajs/http';
|
|
15
|
-
import { AuthProvider, SessionProvider, login, UserSession, AccessControl, _unwindGrants } from '@spinajs/rbac';
|
|
15
|
+
import { AuthProvider, SessionProvider, login, UserSession, AccessControl, _unwindGrants, sessionCookieMaxAge } from '@spinajs/rbac';
|
|
16
16
|
import { Autoinject, DI } from '@spinajs/di';
|
|
17
17
|
import { AutoinjectService, Config, Configuration } from '@spinajs/configuration';
|
|
18
18
|
import { LoggedPolicy, User as UserRouteArg, Session as SessionRouteArg, FromSession, SkipModelPermission } from '@spinajs/rbac-http';
|
|
@@ -44,21 +44,6 @@ let LoginController = class LoginController extends BaseController {
|
|
|
44
44
|
}
|
|
45
45
|
const user = await login(credentials.Email, credentials.Password);
|
|
46
46
|
const session = new UserSession();
|
|
47
|
-
const coockies = [
|
|
48
|
-
{
|
|
49
|
-
Name: 'ssid',
|
|
50
|
-
Value: session.SessionId,
|
|
51
|
-
Options: {
|
|
52
|
-
signed: true,
|
|
53
|
-
httpOnly: true,
|
|
54
|
-
// set expiration time in ms
|
|
55
|
-
maxAge: this.SessionExpirationTime * 1000,
|
|
56
|
-
// any optopnal cookie options
|
|
57
|
-
// or override default ones
|
|
58
|
-
...this.SessionCookieConfig
|
|
59
|
-
},
|
|
60
|
-
},
|
|
61
|
-
];
|
|
62
47
|
let result;
|
|
63
48
|
session.Data.set('User', user.Uuid);
|
|
64
49
|
// Default active role = first role from the user's role list.
|
|
@@ -73,8 +58,6 @@ let LoginController = class LoginController extends BaseController {
|
|
|
73
58
|
// user is automatically authorized at login
|
|
74
59
|
session.Data.set('Logged', true);
|
|
75
60
|
session.UserId = user.Id;
|
|
76
|
-
// set expiration time ( default val in config )
|
|
77
|
-
session.extend();
|
|
78
61
|
if (this.TwoFactorAuthForceUser && !user.Metadata['2fa:enabled']) {
|
|
79
62
|
this._log.trace('User logged in, 2fa init required', {
|
|
80
63
|
Uuid: user.Uuid
|
|
@@ -107,7 +90,24 @@ let LoginController = class LoginController extends BaseController {
|
|
|
107
90
|
this._log.trace('User logged in, no 2fa required', {
|
|
108
91
|
Uuid: user.Uuid
|
|
109
92
|
});
|
|
93
|
+
// save() schedules the session's initial expiration via the configured
|
|
94
|
+
// strategy; the cookie maxAge is then derived from that real expiry (B1),
|
|
95
|
+
// no longer the bogus `expiration * 1000` (~2 min) value.
|
|
110
96
|
await this.SessionProvider.save(session);
|
|
97
|
+
const coockies = [
|
|
98
|
+
{
|
|
99
|
+
Name: 'ssid',
|
|
100
|
+
Value: session.SessionId,
|
|
101
|
+
Options: {
|
|
102
|
+
signed: true,
|
|
103
|
+
httpOnly: true,
|
|
104
|
+
// cookie lifetime tracks the session's real expiration
|
|
105
|
+
maxAge: sessionCookieMaxAge(session),
|
|
106
|
+
// any optional cookie options / override default ones
|
|
107
|
+
...this.SessionCookieConfig
|
|
108
|
+
},
|
|
109
|
+
},
|
|
110
|
+
];
|
|
111
111
|
return new Ok(result, {
|
|
112
112
|
Coockies: coockies
|
|
113
113
|
});
|
|
@@ -184,12 +184,6 @@ __decorate([
|
|
|
184
184
|
AutoinjectService('rbac.session'),
|
|
185
185
|
__metadata("design:type", SessionProvider)
|
|
186
186
|
], LoginController.prototype, "SessionProvider", void 0);
|
|
187
|
-
__decorate([
|
|
188
|
-
Config('rbac.session.expiration', {
|
|
189
|
-
defaultValue: 120,
|
|
190
|
-
}),
|
|
191
|
-
__metadata("design:type", Number)
|
|
192
|
-
], LoginController.prototype, "SessionExpirationTime", void 0);
|
|
193
187
|
__decorate([
|
|
194
188
|
Config('rbac.twoFactorAuth.enabled', {
|
|
195
189
|
defaultValue: false,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LoginController.js","sourceRoot":"","sources":["../../../src/controllers/LoginController.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAC5G,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"LoginController.js","sourceRoot":"","sources":["../../../src/controllers/LoginController.ts"],"names":[],"mappings":"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"}
|
|
@@ -14,6 +14,7 @@ import { IEnable2faResponse, IUserWithGrants } from "@spinajs/rbac-http";
|
|
|
14
14
|
export declare class TwoFactorAuthController extends BaseController {
|
|
15
15
|
protected Queue: QueueService;
|
|
16
16
|
protected SessionProvider: SessionProvider;
|
|
17
|
+
protected SessionCookieConfig: any;
|
|
17
18
|
protected AC: AccessControl;
|
|
18
19
|
/**
|
|
19
20
|
* Enable two-factor authentication
|
|
@@ -45,5 +46,11 @@ export declare class TwoFactorAuthController extends BaseController {
|
|
|
45
46
|
* @response 401 Unauthorized — valid session required
|
|
46
47
|
*/
|
|
47
48
|
verifyToken(logged: UserModel, token: TokenDto, session: ISession): Promise<Ok<IUserWithGrants> | ForbiddenResponse>;
|
|
49
|
+
/**
|
|
50
|
+
* Verifies the supplied TOTP token against the user's 2FA secret. Wraps the
|
|
51
|
+
* module-level `auth2Fa` action in a protected method so tests can stub the
|
|
52
|
+
* verification without a TOTP/DB setup.
|
|
53
|
+
*/
|
|
54
|
+
protected verifyTwoFactorToken(user: UserModel, token: string): Promise<void>;
|
|
48
55
|
}
|
|
49
56
|
//# sourceMappingURL=TwoFactorAuthController.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TwoFactorAuthController.d.ts","sourceRoot":"","sources":["../../../src/controllers/TwoFactorAuthController.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAY,EAAE,EAAa,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAC3F,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,IAAI,IAAI,SAAS,EAAyC,aAAa,
|
|
1
|
+
{"version":3,"file":"TwoFactorAuthController.d.ts","sourceRoot":"","sources":["../../../src/controllers/TwoFactorAuthController.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAY,EAAE,EAAa,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAC3F,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,IAAI,IAAI,SAAS,EAAyC,aAAa,EAA0C,MAAM,eAAe,CAAC;AAO3K,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,OAAO,EAA6B,kBAAkB,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAKpG;;;;;;;GAOG;AACH,qBAGa,uBAAwB,SAAQ,cAAc;IAEvD,SAAS,CAAC,KAAK,EAAE,YAAY,CAAC;IAG9B,SAAS,CAAC,eAAe,EAAE,eAAe,CAAC;IAG3C,SAAS,CAAC,mBAAmB,EAAE,GAAG,CAAC;IAGnC,SAAS,CAAC,EAAE,EAAE,aAAa,CAAC;IAE5B;;;;;;;;OAQG;IAEU,SAAS,CAAS,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,EAAE,CAAC,kBAAkB,CAAC,CAAC;IAYhF;;;;;;;;OAQG;IAEU,UAAU,CAAS,IAAI,EAAE,SAAS;IAS/C;;;;;;;;OAQG;IAEU,WAAW,CAAS,MAAM,EAAE,SAAS,EAAU,KAAK,EAAE,QAAQ,EAAa,OAAO,EAAE,QAAQ,GAAG,OAAO,CAAC,EAAE,CAAC,eAAe,CAAC,GAAG,iBAAiB,CAAC;IAgE5J;;;;OAIG;IACH,SAAS,CAAC,oBAAoB,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAGhF"}
|
|
@@ -12,11 +12,11 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
|
12
12
|
};
|
|
13
13
|
import { TokenDto } from './../dto/token-dto.js';
|
|
14
14
|
import { BaseController, BasePath, Ok, Post, Get, ForbiddenResponse } from '@spinajs/http';
|
|
15
|
-
import { SessionProvider, User as UserModel, _unwindGrants, AccessControl } from '@spinajs/rbac';
|
|
15
|
+
import { SessionProvider, User as UserModel, _unwindGrants, AccessControl, regenerateSession, sessionCookieMaxAge } from '@spinajs/rbac';
|
|
16
16
|
import { Session } from "@spinajs/rbac-http";
|
|
17
17
|
import { Body, Policy } from '@spinajs/http';
|
|
18
18
|
import { TwoFacRouteEnabled } from '../policies/2FaPolicy.js';
|
|
19
|
-
import { AutoinjectService } from '@spinajs/configuration';
|
|
19
|
+
import { AutoinjectService, Config } from '@spinajs/configuration';
|
|
20
20
|
import { Autoinject } from '@spinajs/di';
|
|
21
21
|
import { QueueService } from '@spinajs/queue';
|
|
22
22
|
import { User, NotAuthorizedPolicy } from "@spinajs/rbac-http";
|
|
@@ -77,23 +77,42 @@ let TwoFactorAuthController = class TwoFactorAuthController extends BaseControll
|
|
|
77
77
|
*/
|
|
78
78
|
async verifyToken(logged, token, session) {
|
|
79
79
|
try {
|
|
80
|
-
await
|
|
80
|
+
await this.verifyTwoFactorToken(logged, token.Token);
|
|
81
81
|
// 2fa complete, mark as authorized
|
|
82
82
|
// fron now on user is considered authorized
|
|
83
83
|
session.Data.set('Authorized', true);
|
|
84
84
|
session.Data.delete('TwoFactorAuth');
|
|
85
|
-
|
|
85
|
+
// Privilege elevation (login -> authorized) — regenerate the session
|
|
86
|
+
// id to defend against session fixation and reset the ssid cookie.
|
|
87
|
+
const regenerated = await regenerateSession(this.SessionProvider, session);
|
|
86
88
|
this._log.trace('User logged in, 2fa authorized', {
|
|
87
89
|
Uuid: logged.Uuid
|
|
88
90
|
});
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
91
|
+
// Mirror the login response shape: resolve grants for the session's
|
|
92
|
+
// active role (falling back to the first role) and include ActiveRole,
|
|
93
|
+
// instead of flattening every role with no ActiveRole reported.
|
|
94
|
+
const activeRole = session.Data.get('ActiveRole') ?? logged.Role?.[0];
|
|
95
|
+
const combinedGrants = activeRole ? _unwindGrants(activeRole, this.AC.getGrants()) : {};
|
|
92
96
|
return new Ok({
|
|
93
97
|
...logged.dehydrateWithRelations({
|
|
94
98
|
dateTimeFormat: "iso"
|
|
95
99
|
}),
|
|
100
|
+
Role: logged.Role,
|
|
101
|
+
ActiveRole: activeRole,
|
|
96
102
|
Grants: combinedGrants,
|
|
103
|
+
}, {
|
|
104
|
+
Coockies: [
|
|
105
|
+
{
|
|
106
|
+
Name: 'ssid',
|
|
107
|
+
Value: regenerated.SessionId,
|
|
108
|
+
Options: {
|
|
109
|
+
signed: true,
|
|
110
|
+
httpOnly: true,
|
|
111
|
+
maxAge: sessionCookieMaxAge(regenerated),
|
|
112
|
+
...this.SessionCookieConfig,
|
|
113
|
+
},
|
|
114
|
+
},
|
|
115
|
+
],
|
|
97
116
|
});
|
|
98
117
|
}
|
|
99
118
|
catch (err) {
|
|
@@ -111,6 +130,14 @@ let TwoFactorAuthController = class TwoFactorAuthController extends BaseControll
|
|
|
111
130
|
});
|
|
112
131
|
}
|
|
113
132
|
}
|
|
133
|
+
/**
|
|
134
|
+
* Verifies the supplied TOTP token against the user's 2FA secret. Wraps the
|
|
135
|
+
* module-level `auth2Fa` action in a protected method so tests can stub the
|
|
136
|
+
* verification without a TOTP/DB setup.
|
|
137
|
+
*/
|
|
138
|
+
verifyTwoFactorToken(user, token) {
|
|
139
|
+
return auth2Fa(user, token);
|
|
140
|
+
}
|
|
114
141
|
};
|
|
115
142
|
__decorate([
|
|
116
143
|
Autoinject(QueueService),
|
|
@@ -120,6 +147,10 @@ __decorate([
|
|
|
120
147
|
AutoinjectService('rbac.session'),
|
|
121
148
|
__metadata("design:type", SessionProvider)
|
|
122
149
|
], TwoFactorAuthController.prototype, "SessionProvider", void 0);
|
|
150
|
+
__decorate([
|
|
151
|
+
Config('rbac.session.cookie', {}),
|
|
152
|
+
__metadata("design:type", Object)
|
|
153
|
+
], TwoFactorAuthController.prototype, "SessionCookieConfig", void 0);
|
|
123
154
|
__decorate([
|
|
124
155
|
Autoinject(AccessControl),
|
|
125
156
|
__metadata("design:type", AccessControl)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TwoFactorAuthController.js","sourceRoot":"","sources":["../../../src/controllers/TwoFactorAuthController.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAC3F,OAAO,EAAY,eAAe,EAAE,IAAI,IAAI,SAAS,EAA0B,aAAa,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"TwoFactorAuthController.js","sourceRoot":"","sources":["../../../src/controllers/TwoFactorAuthController.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UserController.d.ts","sourceRoot":"","sources":["../../../src/controllers/UserController.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,IAAI,IAAI,SAAS,EAAE,gBAAgB,EAAE,eAAe,EAAgD,aAAa,EAAE,MAAM,eAAe,CAAC;AAClJ,OAAO,EAAE,cAAc,EAAiB,EAAE,EAA+B,MAAM,eAAe,CAAC;AAM/F,OAAO,EAAgD,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAK9F;;;;;GAKG;AACH,qBAGa,cAAe,SAAQ,cAAc;IAEhD,SAAS,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;IAG7C,SAAS,CAAC,aAAa,EAAE,MAAM,CAAC;IAGhC,SAAS,CAAC,eAAe,EAAE,eAAe,CAAC;IAG3C,SAAS,CAAC,EAAE,EAAE,aAAa,CAAC;IAE5B;;;;;;;;OAQG;IAGU,OAAO,CAAS,IAAI,EAAE,SAAS,EAAY,IAAI,EAAE,MAAM;
|
|
1
|
+
{"version":3,"file":"UserController.d.ts","sourceRoot":"","sources":["../../../src/controllers/UserController.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,IAAI,IAAI,SAAS,EAAE,gBAAgB,EAAE,eAAe,EAAgD,aAAa,EAAE,MAAM,eAAe,CAAC;AAClJ,OAAO,EAAE,cAAc,EAAiB,EAAE,EAA+B,MAAM,eAAe,CAAC;AAM/F,OAAO,EAAgD,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAK9F;;;;;GAKG;AACH,qBAGa,cAAe,SAAQ,cAAc;IAEhD,SAAS,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;IAG7C,SAAS,CAAC,aAAa,EAAE,MAAM,CAAC;IAGhC,SAAS,CAAC,eAAe,EAAE,eAAe,CAAC;IAG3C,SAAS,CAAC,EAAE,EAAE,aAAa,CAAC;IAE5B;;;;;;;;OAQG;IAGU,OAAO,CAAS,IAAI,EAAE,SAAS,EAAY,IAAI,EAAE,MAAM;IAqBpE;;;;;;;;OAQG;IAGU,SAAS,CAAS,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC;IAUxE;;;;;;;;OAQG;IAGU,WAAW,CAAS,IAAI,EAAE,SAAS,EAAU,GAAG,EAAE,WAAW;CAkB3E"}
|
|
@@ -44,7 +44,11 @@ let UserController = class UserController extends BaseController {
|
|
|
44
44
|
if (sId) {
|
|
45
45
|
const session = await this.SessionProvider.restore(sId);
|
|
46
46
|
if (session) {
|
|
47
|
-
|
|
47
|
+
// Session stores the user UUID (see LoginController) — RbacUserFactory
|
|
48
|
+
// resolves the user from it on each request. Storing a dehydrated object
|
|
49
|
+
// here would break that lookup and log the user out on the next request.
|
|
50
|
+
session.Data.set('User', user.Uuid);
|
|
51
|
+
await this.SessionProvider.save(session);
|
|
48
52
|
}
|
|
49
53
|
}
|
|
50
54
|
return new Ok(user.dehydrate());
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UserController.js","sourceRoot":"","sources":["../../../src/controllers/UserController.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,IAAI,IAAI,SAAS,EAAE,gBAAgB,EAAE,eAAe,EAAE,aAAa,EAAE,cAAc,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAClJ,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAC/F,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAChD,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAEvC,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAc,MAAM,oBAAoB,CAAC;AAC9F,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAIhD;;;;;GAKG;AAII,IAAM,cAAc,GAApB,MAAM,cAAe,SAAQ,cAAc;IAahD;;;;;;;;OAQG;IAGU,AAAN,KAAK,CAAC,OAAO,CAAS,IAAe,EAAY,IAAY;QAClE,wBAAwB;QACxB,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;QACrB,MAAM,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;QAE/B,+BAA+B;QAC/B,MAAM,GAAG,GAAmB,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;QAChE,IAAI,GAAG,EAAE,CAAC;YACR,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YACxD,IAAI,OAAO,EAAE,CAAC;gBACZ,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"UserController.js","sourceRoot":"","sources":["../../../src/controllers/UserController.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,IAAI,IAAI,SAAS,EAAE,gBAAgB,EAAE,eAAe,EAAE,aAAa,EAAE,cAAc,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAClJ,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAC/F,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAChD,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAEvC,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAc,MAAM,oBAAoB,CAAC;AAC9F,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAIhD;;;;;GAKG;AAII,IAAM,cAAc,GAApB,MAAM,cAAe,SAAQ,cAAc;IAahD;;;;;;;;OAQG;IAGU,AAAN,KAAK,CAAC,OAAO,CAAS,IAAe,EAAY,IAAY;QAClE,wBAAwB;QACxB,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;QACrB,MAAM,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;QAE/B,+BAA+B;QAC/B,MAAM,GAAG,GAAmB,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;QAChE,IAAI,GAAG,EAAE,CAAC;YACR,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YACxD,IAAI,OAAO,EAAE,CAAC;gBACZ,uEAAuE;gBACvE,yEAAyE;gBACzE,yEAAyE;gBACzE,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;gBACpC,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC3C,CAAC;QACH,CAAC;QAED,OAAO,IAAI,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;IAClC,CAAC;IAED;;;;;;;;OAQG;IAGU,AAAN,KAAK,CAAC,SAAS,CAAS,IAAe;QAE5C,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC;QACnC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;QAChE,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,UAAU,CAAC,CAAC;QAExD,OAAO,IAAI,EAAE,CAAC,cAAc,CAAC,CAAC;IAChC,CAAC;IAGD;;;;;;;;OAQG;IAGU,AAAN,KAAK,CAAC,WAAW,CAAS,IAAe,EAAU,GAAgB;QACxE,IAAI,GAAG,CAAC,QAAQ,KAAK,GAAG,CAAC,eAAe,EAAE,CAAC;YACzC,MAAM,IAAI,eAAe,CAAC,yBAAyB,CAAC,CAAC;QACvD,CAAC;QAGD,OAAO,IAAI,EAAE,CACX,MAAM,CACJ,IAAI,EACJ,OAAO,CACL,aAAa,CAAC,GAAG,CAAC,WAAW,CAAC,EAC9B,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,EAC5B,GAAG,EAAE;YACH,MAAM,IAAI,eAAe,CAAC,2BAA2B,CAAC,CAAC;QACzD,CAAC,CAAC,CACL,CACF,CAAC;IACJ,CAAC;CACF,CAAA;AA7FW;IADT,UAAU,EAAE;8BACe,gBAAgB;wDAAC;AAGnC;IADT,MAAM,CAAC,oBAAoB,CAAC;;qDACG;AAGtB;IADT,UAAU,EAAE;8BACc,eAAe;uDAAC;AAGjC;IADT,UAAU,CAAC,aAAa,CAAC;8BACZ,aAAa;0CAAC;AAaf;IAFZ,GAAG,EAAE;IACL,UAAU,CAAC,CAAC,SAAS,CAAC,CAAC;IACF,WAAA,IAAI,EAAE,CAAA;IAAmB,WAAA,MAAM,EAAE,CAAA;;qCAApB,SAAS;;6CAmB3C;AAaY;IAFZ,GAAG,CAAC,QAAQ,CAAC;IACb,UAAU,CAAC,CAAC,SAAS,CAAC,CAAC;IACA,WAAA,IAAI,EAAE,CAAA;;qCAAO,SAAS;;+CAO7C;AAcY;IAFZ,KAAK,CAAC,UAAU,CAAC;IACjB,UAAU,CAAC,CAAC,WAAW,CAAC,CAAC;IACA,WAAA,IAAI,EAAE,CAAA;IAAmB,WAAA,IAAI,EAAE,CAAA;;qCAAlB,SAAS,EAAe,WAAW;;iDAiBzE;AA9FU,cAAc;IAH1B,QAAQ,CAAC,MAAM,CAAC;IAChB,QAAQ,CAAC,MAAM,CAAC;IAChB,MAAM,CAAC,gBAAgB,CAAC;GACZ,cAAc,CA+F1B"}
|
|
@@ -98,7 +98,7 @@ export declare class UserMetadataController extends BaseController {
|
|
|
98
98
|
* @response 401 Unauthorized — valid session required
|
|
99
99
|
* @response 403 Forbidden — readOwn permission required
|
|
100
100
|
*/
|
|
101
|
-
readMeta(pagination?: PaginationDTO, order?: OrderDTO, filter?: IFilterRequest): Promise<Ok<import("@spinajs/orm").ISelectQueryBuilder<FilterableUserMetadata[]> & import("@spinajs/orm").QueryScope>>;
|
|
101
|
+
readMeta(user: UserModel, pagination?: PaginationDTO, order?: OrderDTO, filter?: IFilterRequest): Promise<Ok<import("@spinajs/orm").ISelectQueryBuilder<FilterableUserMetadata[]> & import("@spinajs/orm").QueryScope>>;
|
|
102
102
|
/**
|
|
103
103
|
* Get own metadata entry by key
|
|
104
104
|
* Retrieves a single metadata entry by key for the authenticated user.
|
|
@@ -109,7 +109,7 @@ export declare class UserMetadataController extends BaseController {
|
|
|
109
109
|
* @response 403 Forbidden — readOwn permission required
|
|
110
110
|
* @response 404 Metadata key not found
|
|
111
111
|
*/
|
|
112
|
-
getMeta(key: string): Promise<Ok<UserMetadata>>;
|
|
112
|
+
getMeta(user: UserModel, key: string): Promise<Ok<UserMetadata>>;
|
|
113
113
|
/**
|
|
114
114
|
* Add or update own metadata
|
|
115
115
|
* Inserts a new metadata entry for the authenticated user, or updates it if the key already exists.
|
|
@@ -118,7 +118,7 @@ export declare class UserMetadataController extends BaseController {
|
|
|
118
118
|
* @response 401 Unauthorized — valid session required
|
|
119
119
|
* @response 403 Forbidden — updateOwn permission required
|
|
120
120
|
*/
|
|
121
|
-
addMetadata(metadata: UserMetadata): Promise<
|
|
121
|
+
addMetadata(user: UserModel, metadata: UserMetadata): Promise<Ok<any>>;
|
|
122
122
|
/**
|
|
123
123
|
* Update own metadata entry
|
|
124
124
|
* Updates Key, Value, and Type of an existing metadata entry identified by Id or Key.
|
|
@@ -130,7 +130,7 @@ export declare class UserMetadataController extends BaseController {
|
|
|
130
130
|
* @response 403 Forbidden — updateOwn permission required
|
|
131
131
|
* @response 404 Metadata entry not found
|
|
132
132
|
*/
|
|
133
|
-
updateMetadata(meta: string, data: UserMetadataDto): Promise<Ok<any>>;
|
|
133
|
+
updateMetadata(user: UserModel, meta: string, data: UserMetadataDto): Promise<Ok<any>>;
|
|
134
134
|
/**
|
|
135
135
|
* Delete own metadata entry
|
|
136
136
|
* Permanently removes a metadata entry by Id from the authenticated user's metadata.
|
|
@@ -141,6 +141,6 @@ export declare class UserMetadataController extends BaseController {
|
|
|
141
141
|
* @response 403 Forbidden — deleteOwn permission required
|
|
142
142
|
* @response 404 Metadata entry not found
|
|
143
143
|
*/
|
|
144
|
-
deleteMetadata(meta: number): Promise<Ok<any>>;
|
|
144
|
+
deleteMetadata(user: UserModel, meta: number): Promise<Ok<any>>;
|
|
145
145
|
}
|
|
146
146
|
//# sourceMappingURL=UserMetadataController.d.ts.map
|
|
@@ -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;AAEhE,OAAO,EAAW,aAAa,EAAE,QAAQ,EAAU,cAAc,EAAa,MAAM,mBAAmB,CAAC;AACxG,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAEzD,OAAO,EAAE,sBAAsB,EAAE,MAAM,qCAAqC,CAAC;AAE7E;;;;;;GAMG;AACH,qBAGa,sBAAuB,SAAQ,cAAc;IAEtD;;;;;;;;;;;;;OAaG;IAGU,YAAY,CACc,IAAI,EAAE,SAAS,EACzC,UAAU,CAAC,EAAE,aAAa,EAC1B,KAAK,CAAC,EAAE,QAAQ,EAEzB,MAAM,CAAC,EAAE,cAAc;IAY3B;;;;;;;;;;OAUG;IAGU,WAAW,CACe,IAAI,EAAE,SAAS,EACzC,GAAG,EAAE,MAAM;IAOxB;;;;;;;;;OASG;IAGU,eAAe,CACW,IAAI,EAAE,SAAS,EACvC,QAAQ,EAAE,YAAY;IAOrC;;;;;;;;;;;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;IASzB;;;;;;;;;;;OAWG;IAIH;;;;;;;;;;;OAWG;IAGU,QAAQ,
|
|
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;AAEhE,OAAO,EAAW,aAAa,EAAE,QAAQ,EAAU,cAAc,EAAa,MAAM,mBAAmB,CAAC;AACxG,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAEzD,OAAO,EAAE,sBAAsB,EAAE,MAAM,qCAAqC,CAAC;AAE7E;;;;;;GAMG;AACH,qBAGa,sBAAuB,SAAQ,cAAc;IAEtD;;;;;;;;;;;;;OAaG;IAGU,YAAY,CACc,IAAI,EAAE,SAAS,EACzC,UAAU,CAAC,EAAE,aAAa,EAC1B,KAAK,CAAC,EAAE,QAAQ,EAEzB,MAAM,CAAC,EAAE,cAAc;IAY3B;;;;;;;;;;OAUG;IAGU,WAAW,CACe,IAAI,EAAE,SAAS,EACzC,GAAG,EAAE,MAAM;IAOxB;;;;;;;;;OASG;IAGU,eAAe,CACW,IAAI,EAAE,SAAS,EACvC,QAAQ,EAAE,YAAY;IAOrC;;;;;;;;;;;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;IASzB;;;;;;;;;;;OAWG;IAIH;;;;;;;;;;;OAWG;IAGU,QAAQ,CACT,IAAI,EAAE,SAAS,EACd,UAAU,CAAC,EAAE,aAAa,EAC1B,KAAK,CAAC,EAAE,QAAQ,EAEzB,MAAM,CAAC,EAAE,cAAc;IAa3B;;;;;;;;;OASG;IAGU,OAAO,CAAS,IAAI,EAAE,SAAS,EAAW,GAAG,EAAE,MAAM;IAOlE;;;;;;;OAOG;IAGU,WAAW,CAAS,IAAI,EAAE,SAAS,EAAa,QAAQ,EAAE,YAAY;IAQnF;;;;;;;;;;OAUG;IAGU,cAAc,CAAS,IAAI,EAAE,SAAS,EAAW,IAAI,EAAE,MAAM,EAAU,IAAI,EAAE,eAAe;IAkBzG;;;;;;;;;OASG;IAGU,cAAc,CAAS,IAAI,EAAE,SAAS,EAAW,IAAI,EAAE,MAAM;CAQ7E"}
|
|
@@ -12,7 +12,7 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
|
12
12
|
};
|
|
13
13
|
import { Post, BasePath, Ok, Del, Body, Get, Query, Param, Policy, BaseController, Patch } from '@spinajs/http';
|
|
14
14
|
import { User as UserModel, UserMetadata } from '@spinajs/rbac';
|
|
15
|
-
import { AuthorizedPolicy, Permission, Resource } from '@spinajs/rbac-http';
|
|
15
|
+
import { AuthorizedPolicy, Permission, Resource, User } from '@spinajs/rbac-http';
|
|
16
16
|
import { AsModel, PaginationDTO, OrderDTO, Filter, FromModel } from '@spinajs/orm-http';
|
|
17
17
|
import { UserMetadataDto } from '../dto/metadata-dto.js';
|
|
18
18
|
import { InsertBehaviour, SortOrder } from '@spinajs/orm';
|
|
@@ -141,8 +141,12 @@ let UserMetadataController = class UserMetadataController extends BaseController
|
|
|
141
141
|
* @response 401 Unauthorized — valid session required
|
|
142
142
|
* @response 403 Forbidden — readOwn permission required
|
|
143
143
|
*/
|
|
144
|
-
async readMeta(pagination, order, filter) {
|
|
145
|
-
|
|
144
|
+
async readMeta(user, pagination, order, filter) {
|
|
145
|
+
// Explicit owner scoping: the rbac query middleware does not enforce
|
|
146
|
+
// ownership for the metadata model (queries resolve to the unsafe base
|
|
147
|
+
// model without an @OrmResource), so every own-route filters by the
|
|
148
|
+
// authenticated user's id directly.
|
|
149
|
+
return new Ok(FilterableUserMetadata.select().where('user_id', user.Id).filter(filter?.filters ?? [], filter?.op)
|
|
146
150
|
.take(pagination?.limit ?? 0)
|
|
147
151
|
.skip((pagination?.limit ?? 0) * (pagination?.page ?? 0))
|
|
148
152
|
.order(order?.column ?? 'Id', order?.order ?? SortOrder.DESC));
|
|
@@ -157,9 +161,10 @@ let UserMetadataController = class UserMetadataController extends BaseController
|
|
|
157
161
|
* @response 403 Forbidden — readOwn permission required
|
|
158
162
|
* @response 404 Metadata key not found
|
|
159
163
|
*/
|
|
160
|
-
async getMeta(key) {
|
|
164
|
+
async getMeta(user, key) {
|
|
161
165
|
return new Ok(UserMetadata.where({
|
|
162
166
|
Key: key,
|
|
167
|
+
user_id: user.Id,
|
|
163
168
|
}).firstOrFail());
|
|
164
169
|
}
|
|
165
170
|
/**
|
|
@@ -170,8 +175,12 @@ let UserMetadataController = class UserMetadataController extends BaseController
|
|
|
170
175
|
* @response 401 Unauthorized — valid session required
|
|
171
176
|
* @response 403 Forbidden — updateOwn permission required
|
|
172
177
|
*/
|
|
173
|
-
async addMetadata(metadata) {
|
|
178
|
+
async addMetadata(user, metadata) {
|
|
179
|
+
// force ownership to the authenticated user — never trust a user_id
|
|
180
|
+
// supplied in the request body
|
|
181
|
+
metadata.user_id = user.Id;
|
|
174
182
|
await metadata.insert(InsertBehaviour.InsertOrUpdate);
|
|
183
|
+
return new Ok();
|
|
175
184
|
}
|
|
176
185
|
/**
|
|
177
186
|
* Update own metadata entry
|
|
@@ -184,12 +193,20 @@ let UserMetadataController = class UserMetadataController extends BaseController
|
|
|
184
193
|
* @response 403 Forbidden — updateOwn permission required
|
|
185
194
|
* @response 404 Metadata entry not found
|
|
186
195
|
*/
|
|
187
|
-
async updateMetadata(meta, data) {
|
|
196
|
+
async updateMetadata(user, meta, data) {
|
|
197
|
+
// The Key/Id lookup is grouped and AND-ed with an explicit ownership
|
|
198
|
+
// filter. Without the grouping the flat "Key = ? OR Id = ? AND user_id = ?"
|
|
199
|
+
// binds as "Key = ? OR (Id = ? AND user_id = ?)", letting any user update
|
|
200
|
+
// another user's metadata by its Key. Scoping by user_id explicitly (not
|
|
201
|
+
// relying on the query middleware, which does not fire for this model)
|
|
202
|
+
// keeps the update owner-bound.
|
|
188
203
|
await UserMetadata.update({
|
|
189
204
|
Key: data.Key,
|
|
190
205
|
Value: data.Value,
|
|
191
206
|
Type: data.Type
|
|
192
|
-
}).where(
|
|
207
|
+
}).where(function () {
|
|
208
|
+
this.where("Key", meta).orWhere("Id", meta);
|
|
209
|
+
}).andWhere('user_id', user.Id);
|
|
193
210
|
return new Ok();
|
|
194
211
|
}
|
|
195
212
|
/**
|
|
@@ -202,9 +219,10 @@ let UserMetadataController = class UserMetadataController extends BaseController
|
|
|
202
219
|
* @response 403 Forbidden — deleteOwn permission required
|
|
203
220
|
* @response 404 Metadata entry not found
|
|
204
221
|
*/
|
|
205
|
-
async deleteMetadata(meta) {
|
|
222
|
+
async deleteMetadata(user, meta) {
|
|
206
223
|
await UserMetadata.destroy().where({
|
|
207
|
-
Id: meta
|
|
224
|
+
Id: meta,
|
|
225
|
+
user_id: user.Id,
|
|
208
226
|
});
|
|
209
227
|
return new Ok();
|
|
210
228
|
}
|
|
@@ -271,45 +289,51 @@ __decorate([
|
|
|
271
289
|
__decorate([
|
|
272
290
|
Get("metadata"),
|
|
273
291
|
Permission(['readOwn']),
|
|
274
|
-
__param(0,
|
|
292
|
+
__param(0, User()),
|
|
275
293
|
__param(1, Query()),
|
|
276
|
-
__param(2,
|
|
294
|
+
__param(2, Query()),
|
|
295
|
+
__param(3, Filter(FilterableUserMetadata)),
|
|
277
296
|
__metadata("design:type", Function),
|
|
278
|
-
__metadata("design:paramtypes", [
|
|
297
|
+
__metadata("design:paramtypes", [UserModel,
|
|
298
|
+
PaginationDTO,
|
|
279
299
|
OrderDTO, Object]),
|
|
280
300
|
__metadata("design:returntype", Promise)
|
|
281
301
|
], UserMetadataController.prototype, "readMeta", null);
|
|
282
302
|
__decorate([
|
|
283
303
|
Get("metadata/:key"),
|
|
284
304
|
Permission(['readOwn']),
|
|
285
|
-
__param(0,
|
|
305
|
+
__param(0, User()),
|
|
306
|
+
__param(1, Param()),
|
|
286
307
|
__metadata("design:type", Function),
|
|
287
|
-
__metadata("design:paramtypes", [String]),
|
|
308
|
+
__metadata("design:paramtypes", [UserModel, String]),
|
|
288
309
|
__metadata("design:returntype", Promise)
|
|
289
310
|
], UserMetadataController.prototype, "getMeta", null);
|
|
290
311
|
__decorate([
|
|
291
312
|
Post("metadata"),
|
|
292
313
|
Permission(['updateOwn']),
|
|
293
|
-
__param(0,
|
|
314
|
+
__param(0, User()),
|
|
315
|
+
__param(1, AsModel()),
|
|
294
316
|
__metadata("design:type", Function),
|
|
295
|
-
__metadata("design:paramtypes", [UserMetadata]),
|
|
317
|
+
__metadata("design:paramtypes", [UserModel, UserMetadata]),
|
|
296
318
|
__metadata("design:returntype", Promise)
|
|
297
319
|
], UserMetadataController.prototype, "addMetadata", null);
|
|
298
320
|
__decorate([
|
|
299
321
|
Patch('metadata/:meta'),
|
|
300
322
|
Permission(['updateOwn']),
|
|
301
|
-
__param(0,
|
|
302
|
-
__param(1,
|
|
323
|
+
__param(0, User()),
|
|
324
|
+
__param(1, Param()),
|
|
325
|
+
__param(2, Body()),
|
|
303
326
|
__metadata("design:type", Function),
|
|
304
|
-
__metadata("design:paramtypes", [String, UserMetadataDto]),
|
|
327
|
+
__metadata("design:paramtypes", [UserModel, String, UserMetadataDto]),
|
|
305
328
|
__metadata("design:returntype", Promise)
|
|
306
329
|
], UserMetadataController.prototype, "updateMetadata", null);
|
|
307
330
|
__decorate([
|
|
308
331
|
Del('metadata/:meta'),
|
|
309
332
|
Permission(['deleteOwn']),
|
|
310
|
-
__param(0,
|
|
333
|
+
__param(0, User()),
|
|
334
|
+
__param(1, Param()),
|
|
311
335
|
__metadata("design:type", Function),
|
|
312
|
-
__metadata("design:paramtypes", [Number]),
|
|
336
|
+
__metadata("design:paramtypes", [UserModel, Number]),
|
|
313
337
|
__metadata("design:returntype", Promise)
|
|
314
338
|
], UserMetadataController.prototype, "deleteMetadata", null);
|
|
315
339
|
UserMetadataController = __decorate([
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UserMetadataController.js","sourceRoot":"","sources":["../../../src/controllers/UserMetadataController.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAChH,OAAO,EAAE,IAAI,IAAI,SAAS,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"UserMetadataController.js","sourceRoot":"","sources":["../../../src/controllers/UserMetadataController.ts"],"names":[],"mappings":"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"}
|