@spinajs/rbac-http-token 2.0.521 → 2.0.522
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/actions.d.ts +11 -20
- package/lib/cjs/actions.d.ts.map +1 -1
- package/lib/cjs/actions.js +81 -90
- package/lib/cjs/actions.js.map +1 -1
- package/lib/cjs/controllers/AccessTokenController.d.ts +1 -1
- package/lib/cjs/controllers/AccessTokenController.js +3 -3
- package/lib/cjs/controllers/AccessTokenController.js.map +1 -1
- package/lib/cjs/exceptions.d.ts +33 -0
- package/lib/cjs/exceptions.d.ts.map +1 -0
- package/lib/cjs/exceptions.js +43 -0
- package/lib/cjs/exceptions.js.map +1 -0
- package/lib/cjs/index.d.ts +1 -0
- package/lib/cjs/index.d.ts.map +1 -1
- package/lib/cjs/index.js +1 -0
- package/lib/cjs/index.js.map +1 -1
- package/lib/cjs/middlewares.js +2 -2
- package/lib/cjs/middlewares.js.map +1 -1
- package/lib/mjs/actions.d.ts +11 -20
- package/lib/mjs/actions.d.ts.map +1 -1
- package/lib/mjs/actions.js +82 -92
- package/lib/mjs/actions.js.map +1 -1
- package/lib/mjs/controllers/AccessTokenController.d.ts +1 -1
- package/lib/mjs/controllers/AccessTokenController.js +4 -4
- package/lib/mjs/controllers/AccessTokenController.js.map +1 -1
- package/lib/mjs/exceptions.d.ts +33 -0
- package/lib/mjs/exceptions.d.ts.map +1 -0
- package/lib/mjs/exceptions.js +35 -0
- package/lib/mjs/exceptions.js.map +1 -0
- package/lib/mjs/index.d.ts +1 -0
- package/lib/mjs/index.d.ts.map +1 -1
- package/lib/mjs/index.js +1 -0
- package/lib/mjs/index.js.map +1 -1
- package/lib/mjs/middlewares.js +2 -2
- package/lib/mjs/middlewares.js.map +1 -1
- package/lib/tsconfig.cjs.tsbuildinfo +1 -1
- package/lib/tsconfig.mjs.tsbuildinfo +1 -1
- package/package.json +15 -15
package/lib/cjs/actions.d.ts
CHANGED
|
@@ -1,31 +1,22 @@
|
|
|
1
1
|
import { DateTime } from 'luxon';
|
|
2
2
|
import { User } from '@spinajs/rbac';
|
|
3
3
|
import { AccessToken } from './models/AccessToken.js';
|
|
4
|
-
/**
|
|
5
|
-
* Failure codes carried by every {@link ErrorCode} this module throws.
|
|
6
|
-
*
|
|
7
|
-
* Named `E_TOKEN_CODES` rather than the shorter `E_CODES` on purpose:
|
|
8
|
-
* `@spinajs/rbac` exports an enum called `E_CODES` too, and both are re-exported
|
|
9
|
-
* from their package index. A downstream barrel that does
|
|
10
|
-
* `export * from '@spinajs/rbac'; export * from '@spinajs/rbac-http-token';`
|
|
11
|
-
* would collide on the NAME while the members underneath carry different
|
|
12
|
-
* numeric values - the kind of clash that resolves silently in a barrel and
|
|
13
|
-
* makes an `err.code === E_CODES.X` comparison answer the wrong question.
|
|
14
|
-
*/
|
|
15
|
-
export declare enum E_TOKEN_CODES {
|
|
16
|
-
E_TOKEN_NOT_FOUND = 0,
|
|
17
|
-
E_TOKEN_EXPIRED = 1,
|
|
18
|
-
E_TOKEN_OWNER_INVALID = 2,
|
|
19
|
-
E_TOKEN_ROLE_NOT_ALLOWED = 3
|
|
20
|
-
}
|
|
21
4
|
/**
|
|
22
5
|
* Resolves an AccessToken from an instance or its uuid.
|
|
23
6
|
*/
|
|
24
|
-
export declare function
|
|
7
|
+
export declare function getToken(token: AccessToken | string): Promise<AccessToken>;
|
|
25
8
|
/**
|
|
26
9
|
* Resolves the owning user by instance, numeric id or uuid, with metadata
|
|
27
10
|
* populated ( needed for IsBanned checks downstream ).
|
|
28
11
|
*/
|
|
12
|
+
export declare function getOwner(user: User | number | string): Promise<User>;
|
|
13
|
+
/**
|
|
14
|
+
* Thunk form of {@link getToken}.
|
|
15
|
+
*/
|
|
16
|
+
export declare function _token(token: AccessToken | string): () => Promise<AccessToken>;
|
|
17
|
+
/**
|
|
18
|
+
* Thunk form of {@link getOwner}.
|
|
19
|
+
*/
|
|
29
20
|
export declare function _owner(user: User | number | string): () => Promise<User>;
|
|
30
21
|
/**
|
|
31
22
|
* Roles the configured {@link AccessTokenRolePolicy} lets `owner` put on a
|
|
@@ -106,7 +97,7 @@ export declare function grantTokenRole(token: AccessToken | string, role: string
|
|
|
106
97
|
*
|
|
107
98
|
* @param token - {@link AccessToken} instance or its uuid
|
|
108
99
|
* @param role - role name to revoke
|
|
109
|
-
* @throws
|
|
100
|
+
* @throws AccessTokenRoleNotAllowed when `role` is the token's last role
|
|
110
101
|
*/
|
|
111
102
|
export declare function revokeTokenRole(token: AccessToken | string, role: string): Promise<AccessToken>;
|
|
112
103
|
export interface ITokenValidationResult {
|
|
@@ -123,7 +114,7 @@ export interface ITokenValidationResult {
|
|
|
123
114
|
*
|
|
124
115
|
* Checks, in order: token exists ( by hash ), token not expired, owner active /
|
|
125
116
|
* not soft-deleted / not banned, effective role intersection non-empty.
|
|
126
|
-
* Throws
|
|
117
|
+
* Throws {@link AccessTokenException} subclasses on every failure path.
|
|
127
118
|
*
|
|
128
119
|
* The owner checks are spelled out instead of reusing the `isActiveUser` query
|
|
129
120
|
* scope on purpose - a single "no such active user" result cannot say WHY, and
|
package/lib/cjs/actions.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"actions.d.ts","sourceRoot":"","sources":["../../src/actions.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAEjC,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAOrC,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAItD
|
|
1
|
+
{"version":3,"file":"actions.d.ts","sourceRoot":"","sources":["../../src/actions.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAEjC,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAOrC,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAItD;;GAEG;AACH,wBAAsB,QAAQ,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAMhF;AAED;;;GAGG;AACH,wBAAsB,QAAQ,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAY1E;AAED;;GAEG;AACH,wBAAgB,MAAM,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,CAE9E;AAED;;GAEG;AACH,wBAAgB,MAAM,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,CAExE;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAsB,cAAc,CAAC,KAAK,EAAE,IAAI,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAOrF;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CAAC,KAAK,EAAE,IAAI,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAGtE;AA8BD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,WAAW,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,GAAG,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAAE,KAAK,EAAE,WAAW,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,CA6BrM;AAED;;;;GAIG;AACH,wBAAsB,WAAW,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAK5E;AAED;;;;;;GAMG;AACH,wBAAsB,cAAc,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAcpG;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,eAAe,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAyBrG;AAED,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,IAAI,CAAC;IACX,KAAK,EAAE,WAAW,CAAC;IAEnB;;;OAGG;IACH,cAAc,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAyDtF;AAED;;;;;;GAMG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,MAAM,CAAC,CAU3D;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,UAAU,CAAC,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAS3F"}
|
package/lib/cjs/actions.js
CHANGED
|
@@ -3,7 +3,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.
|
|
6
|
+
exports.getToken = getToken;
|
|
7
|
+
exports.getOwner = getOwner;
|
|
7
8
|
exports._token = _token;
|
|
8
9
|
exports._owner = _owner;
|
|
9
10
|
exports._allowed_roles = _allowed_roles;
|
|
@@ -21,64 +22,46 @@ const rbac_1 = require("@spinajs/rbac");
|
|
|
21
22
|
const util_1 = require("@spinajs/util");
|
|
22
23
|
const configuration_1 = require("@spinajs/configuration");
|
|
23
24
|
const queue_1 = require("@spinajs/queue");
|
|
24
|
-
const
|
|
25
|
+
const exceptions_js_1 = require("./exceptions.js");
|
|
25
26
|
const di_1 = require("@spinajs/di");
|
|
26
27
|
const AccessToken_js_1 = require("./models/AccessToken.js");
|
|
27
28
|
const interfaces_js_1 = require("./interfaces.js");
|
|
28
29
|
const index_js_1 = require("./events/index.js");
|
|
29
|
-
/**
|
|
30
|
-
* Failure codes carried by every {@link ErrorCode} this module throws.
|
|
31
|
-
*
|
|
32
|
-
* Named `E_TOKEN_CODES` rather than the shorter `E_CODES` on purpose:
|
|
33
|
-
* `@spinajs/rbac` exports an enum called `E_CODES` too, and both are re-exported
|
|
34
|
-
* from their package index. A downstream barrel that does
|
|
35
|
-
* `export * from '@spinajs/rbac'; export * from '@spinajs/rbac-http-token';`
|
|
36
|
-
* would collide on the NAME while the members underneath carry different
|
|
37
|
-
* numeric values - the kind of clash that resolves silently in a barrel and
|
|
38
|
-
* makes an `err.code === E_CODES.X` comparison answer the wrong question.
|
|
39
|
-
*/
|
|
40
|
-
var E_TOKEN_CODES;
|
|
41
|
-
(function (E_TOKEN_CODES) {
|
|
42
|
-
E_TOKEN_CODES[E_TOKEN_CODES["E_TOKEN_NOT_FOUND"] = 0] = "E_TOKEN_NOT_FOUND";
|
|
43
|
-
E_TOKEN_CODES[E_TOKEN_CODES["E_TOKEN_EXPIRED"] = 1] = "E_TOKEN_EXPIRED";
|
|
44
|
-
E_TOKEN_CODES[E_TOKEN_CODES["E_TOKEN_OWNER_INVALID"] = 2] = "E_TOKEN_OWNER_INVALID";
|
|
45
|
-
E_TOKEN_CODES[E_TOKEN_CODES["E_TOKEN_ROLE_NOT_ALLOWED"] = 3] = "E_TOKEN_ROLE_NOT_ALLOWED";
|
|
46
|
-
})(E_TOKEN_CODES || (exports.E_TOKEN_CODES = E_TOKEN_CODES = {}));
|
|
47
30
|
/**
|
|
48
31
|
* Resolves an AccessToken from an instance or its uuid.
|
|
49
32
|
*/
|
|
50
|
-
function
|
|
33
|
+
async function getToken(token) {
|
|
51
34
|
if (lodash_1.default.isString(token)) {
|
|
52
|
-
return
|
|
35
|
+
return AccessToken_js_1.AccessToken.where('Uuid', token).firstOrFail();
|
|
53
36
|
}
|
|
54
|
-
return
|
|
37
|
+
return token;
|
|
55
38
|
}
|
|
56
39
|
/**
|
|
57
40
|
* Resolves the owning user by instance, numeric id or uuid, with metadata
|
|
58
41
|
* populated ( needed for IsBanned checks downstream ).
|
|
59
42
|
*/
|
|
60
|
-
function
|
|
43
|
+
async function getOwner(user) {
|
|
61
44
|
if (lodash_1.default.isString(user)) {
|
|
62
45
|
// base User on purpose: token-auth infrastructure resolves the token OWNER before any request scope exists; must not be row-scoped by an application model override.
|
|
63
|
-
return
|
|
46
|
+
return rbac_1.User.where('Uuid', user).populate('Metadata').firstOrFail();
|
|
64
47
|
}
|
|
65
48
|
if (lodash_1.default.isNumber(user)) {
|
|
66
49
|
// base User on purpose: token-auth infrastructure resolves the token OWNER before any request scope exists; must not be row-scoped by an application model override.
|
|
67
|
-
return
|
|
50
|
+
return rbac_1.User.where('Id', user).populate('Metadata').firstOrFail();
|
|
68
51
|
}
|
|
69
|
-
return
|
|
52
|
+
return user;
|
|
70
53
|
}
|
|
71
54
|
/**
|
|
72
|
-
*
|
|
73
|
-
*
|
|
74
|
-
* @param event - constructor of the {@link AccessTokenEvent} subclass to emit
|
|
75
|
-
* @param args - additional arguments forwarded to the event constructor
|
|
55
|
+
* Thunk form of {@link getToken}.
|
|
76
56
|
*/
|
|
77
|
-
function
|
|
78
|
-
return
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
57
|
+
function _token(token) {
|
|
58
|
+
return () => getToken(token);
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Thunk form of {@link getOwner}.
|
|
62
|
+
*/
|
|
63
|
+
function _owner(user) {
|
|
64
|
+
return () => getOwner(user);
|
|
82
65
|
}
|
|
83
66
|
/**
|
|
84
67
|
* Roles the configured {@link AccessTokenRolePolicy} lets `owner` put on a
|
|
@@ -103,7 +86,7 @@ function _token_ev(event, ...args) {
|
|
|
103
86
|
* this filter, get offered by `GET user/tokens/roles`, and be mintable onto a token.
|
|
104
87
|
*/
|
|
105
88
|
async function _allowed_roles(owner, profile) {
|
|
106
|
-
const policy = await (0, configuration_1.
|
|
89
|
+
const policy = await (0, configuration_1.service)('rbac.token.rolePolicy', interfaces_js_1.AccessTokenRolePolicy);
|
|
107
90
|
const allowed = await policy.allowedRoles(owner, profile);
|
|
108
91
|
const ac = di_1.DI.get('AccessControl');
|
|
109
92
|
const grants = ac.getGrants();
|
|
@@ -114,16 +97,16 @@ async function _allowed_roles(owner, profile) {
|
|
|
114
97
|
* token to. Same live-resolution rationale as `_allowed_roles`.
|
|
115
98
|
*/
|
|
116
99
|
async function _allowed_profiles(owner) {
|
|
117
|
-
const policy = await (0, configuration_1.
|
|
100
|
+
const policy = await (0, configuration_1.service)('rbac.token.rolePolicy', interfaces_js_1.AccessTokenRolePolicy);
|
|
118
101
|
return policy.allowedProfiles(owner);
|
|
119
102
|
}
|
|
120
103
|
/**
|
|
121
104
|
* Ensures `profile` is one the configured policy lets `owner` pin a token to.
|
|
122
105
|
*/
|
|
123
|
-
async function
|
|
106
|
+
async function assertProfile(owner, profile) {
|
|
124
107
|
const allowed = await _allowed_profiles(owner);
|
|
125
108
|
if (!allowed.includes(profile)) {
|
|
126
|
-
throw new
|
|
109
|
+
throw new exceptions_js_1.AccessTokenRoleNotAllowed(`Owner may not pin a token to profile: ${profile}`, { roles: [profile] });
|
|
127
110
|
}
|
|
128
111
|
}
|
|
129
112
|
/**
|
|
@@ -135,11 +118,11 @@ async function _assert_profile(owner, profile) {
|
|
|
135
118
|
* With `profile` given the question is asked relative to that profile, which a
|
|
136
119
|
* policy may answer more narrowly than the owner-wide union.
|
|
137
120
|
*/
|
|
138
|
-
async function
|
|
121
|
+
async function assertRolesSubset(owner, roles, profile) {
|
|
139
122
|
const allowed = await _allowed_roles(owner, profile);
|
|
140
123
|
const missing = roles.filter((r) => !allowed.includes(r));
|
|
141
124
|
if (missing.length !== 0) {
|
|
142
|
-
throw new
|
|
125
|
+
throw new exceptions_js_1.AccessTokenRoleNotAllowed(`Owner may not put role(s) on a token: ${missing.join(', ')}`, { roles: missing });
|
|
143
126
|
}
|
|
144
127
|
}
|
|
145
128
|
/**
|
|
@@ -163,27 +146,26 @@ async function _assert_roles_subset(owner, roles, profile) {
|
|
|
163
146
|
async function createToken(user, name, roles, expiresAt, profile) {
|
|
164
147
|
name = (0, util_1._check_arg)((0, util_1._trim)(), (0, util_1._non_empty)(), (0, util_1._max_length)(128))(name, 'name');
|
|
165
148
|
roles = (0, util_1._check_arg)((0, util_1._non_nil)(), (0, util_1._non_empty)())(roles, 'roles');
|
|
166
|
-
const generator = await (0, configuration_1.
|
|
149
|
+
const generator = await (0, configuration_1.service)('rbac.token.generation', interfaces_js_1.AccessTokenGenerationProvider);
|
|
167
150
|
const generated = await generator.generate();
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
}, _token_ev(index_js_1.AccessTokenCreated), (t) => ({ Token: t, Plaintext: generated.Plaintext }));
|
|
151
|
+
const owner = await getOwner(user);
|
|
152
|
+
if (profile) {
|
|
153
|
+
await assertProfile(owner, profile);
|
|
154
|
+
}
|
|
155
|
+
await assertRolesSubset(owner, roles, profile);
|
|
156
|
+
const token = new AccessToken_js_1.AccessToken({
|
|
157
|
+
Name: name,
|
|
158
|
+
Token: generated.Hash,
|
|
159
|
+
Roles: lodash_1.default.uniq(roles),
|
|
160
|
+
Profile: profile ?? undefined,
|
|
161
|
+
// `ExpiresAt` is optional rather than nullable ( see the model ), so a
|
|
162
|
+
// "never expires" token leaves the property unset instead of holding null.
|
|
163
|
+
ExpiresAt: expiresAt ?? undefined,
|
|
164
|
+
user_id: owner.Id,
|
|
165
|
+
});
|
|
166
|
+
await token.insert();
|
|
167
|
+
await (0, queue_1.ev)(new index_js_1.AccessTokenCreated(token));
|
|
168
|
+
return { Token: token, Plaintext: generated.Plaintext };
|
|
187
169
|
}
|
|
188
170
|
/**
|
|
189
171
|
* Permanently deletes ( revokes ) a token.
|
|
@@ -191,7 +173,9 @@ async function createToken(user, name, roles, expiresAt, profile) {
|
|
|
191
173
|
* @param token - {@link AccessToken} instance or its uuid
|
|
192
174
|
*/
|
|
193
175
|
async function deleteToken(token) {
|
|
194
|
-
|
|
176
|
+
const t = await getToken(token);
|
|
177
|
+
await t.destroy();
|
|
178
|
+
await (0, queue_1.ev)(new index_js_1.AccessTokenDeleted(t));
|
|
195
179
|
}
|
|
196
180
|
/**
|
|
197
181
|
* Adds a role to a token. The role must be allowed for the token owner by the
|
|
@@ -202,12 +186,13 @@ async function deleteToken(token) {
|
|
|
202
186
|
*/
|
|
203
187
|
async function grantTokenRole(token, role) {
|
|
204
188
|
role = (0, util_1._check_arg)((0, util_1._trim)(), (0, util_1._non_empty)())(role, 'role');
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
189
|
+
const t = await getToken(token);
|
|
190
|
+
const owner = await getOwner(t.user_id);
|
|
191
|
+
await assertRolesSubset(owner, [role], t.Profile);
|
|
192
|
+
t.Roles = lodash_1.default.uniq([...t.Roles, role]);
|
|
193
|
+
await t.update();
|
|
194
|
+
await (0, queue_1.ev)(new index_js_1.AccessTokenRoleGranted(t, role));
|
|
195
|
+
return t;
|
|
211
196
|
}
|
|
212
197
|
/**
|
|
213
198
|
* Removes a role from a token.
|
|
@@ -224,27 +209,33 @@ async function grantTokenRole(token, role) {
|
|
|
224
209
|
*
|
|
225
210
|
* @param token - {@link AccessToken} instance or its uuid
|
|
226
211
|
* @param role - role name to revoke
|
|
227
|
-
* @throws
|
|
212
|
+
* @throws AccessTokenRoleNotAllowed when `role` is the token's last role
|
|
228
213
|
*/
|
|
229
214
|
async function revokeTokenRole(token, role) {
|
|
230
215
|
role = (0, util_1._check_arg)((0, util_1._trim)(), (0, util_1._non_empty)())(role, 'role');
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
216
|
+
const t = await getToken(token);
|
|
217
|
+
const remaining = t.Roles.filter((r) => r !== role);
|
|
218
|
+
// a role the token never carried: nothing to revoke - no row write and no
|
|
219
|
+
// AccessTokenRoleRevoked event recording a revocation that never happened
|
|
220
|
+
if (remaining.length === t.Roles.length) {
|
|
221
|
+
return t;
|
|
222
|
+
}
|
|
223
|
+
// checked BEFORE mutating, so a refused revoke leaves the instance and
|
|
224
|
+
// the row exactly as they were
|
|
225
|
+
if (remaining.length === 0) {
|
|
226
|
+
throw new exceptions_js_1.AccessTokenRoleNotAllowed('Cannot revoke the last role from a token - delete the token instead', { token: t.Uuid });
|
|
227
|
+
}
|
|
228
|
+
t.Roles = remaining;
|
|
229
|
+
await t.update();
|
|
230
|
+
await (0, queue_1.ev)(new index_js_1.AccessTokenRoleRevoked(t, role));
|
|
231
|
+
return t;
|
|
241
232
|
}
|
|
242
233
|
/**
|
|
243
234
|
* Validates a presented plaintext token.
|
|
244
235
|
*
|
|
245
236
|
* Checks, in order: token exists ( by hash ), token not expired, owner active /
|
|
246
237
|
* not soft-deleted / not banned, effective role intersection non-empty.
|
|
247
|
-
* Throws
|
|
238
|
+
* Throws {@link AccessTokenException} subclasses on every failure path.
|
|
248
239
|
*
|
|
249
240
|
* The owner checks are spelled out instead of reusing the `isActiveUser` query
|
|
250
241
|
* scope on purpose - a single "no such active user" result cannot say WHY, and
|
|
@@ -256,21 +247,21 @@ async function validateToken(plaintext) {
|
|
|
256
247
|
// Degenerate input is a failed authentication like any other, so it has to
|
|
257
248
|
// leave through the same door. `_check_arg(_trim(), _non_empty())` would
|
|
258
249
|
// throw a raw InvalidArgument here - and a bare TypeError for nil, since
|
|
259
|
-
// `_non_empty` dereferences `.length` - breaking the "always an
|
|
260
|
-
// contract this function is called under. Reported as
|
|
250
|
+
// `_non_empty` dereferences `.length` - breaking the "always an AccessTokenException"
|
|
251
|
+
// contract this function is called under. Reported as AccessTokenNotFound with
|
|
261
252
|
// the unknown-token message on purpose: a caller must not learn WHY.
|
|
262
253
|
if (!lodash_1.default.isString(plaintext) || plaintext.trim().length === 0) {
|
|
263
|
-
throw new
|
|
254
|
+
throw new exceptions_js_1.AccessTokenNotFound('Access token not found');
|
|
264
255
|
}
|
|
265
256
|
plaintext = plaintext.trim();
|
|
266
|
-
const generator = await (0, configuration_1.
|
|
257
|
+
const generator = await (0, configuration_1.service)('rbac.token.generation', interfaces_js_1.AccessTokenGenerationProvider);
|
|
267
258
|
const hash = generator.hash(plaintext);
|
|
268
259
|
const token = await AccessToken_js_1.AccessToken.where('Token', hash).first();
|
|
269
260
|
if (!token) {
|
|
270
|
-
throw new
|
|
261
|
+
throw new exceptions_js_1.AccessTokenNotFound('Access token not found');
|
|
271
262
|
}
|
|
272
263
|
if (token.IsExpired) {
|
|
273
|
-
throw new
|
|
264
|
+
throw new exceptions_js_1.AccessTokenExpired('Access token expired', { token: token.Uuid });
|
|
274
265
|
}
|
|
275
266
|
// Metadata carries the ban flag, so it must be populated - without it
|
|
276
267
|
// `IsBanned` silently answers false and every banned owner authenticates.
|
|
@@ -279,7 +270,7 @@ async function validateToken(plaintext) {
|
|
|
279
270
|
// `DeletedAt` is defence in depth: the orm's soft-delete scope already appends
|
|
280
271
|
// `DeletedAt IS NULL` to User selects, so a deleted owner arrives as undefined.
|
|
281
272
|
if (!owner || !owner.IsActive || owner.DeletedAt || owner.IsBanned) {
|
|
282
|
-
throw new
|
|
273
|
+
throw new exceptions_js_1.AccessTokenOwnerInvalid('Access token owner is not allowed to authenticate', { token: token.Uuid });
|
|
283
274
|
}
|
|
284
275
|
// a profile token whose owner no longer passes the profile policy (role
|
|
285
276
|
// revoked, policy tightened) authorises nothing - same immediacy rule as
|
|
@@ -287,7 +278,7 @@ async function validateToken(plaintext) {
|
|
|
287
278
|
if (token.Profile) {
|
|
288
279
|
const profiles = await _allowed_profiles(owner);
|
|
289
280
|
if (!profiles.includes(token.Profile)) {
|
|
290
|
-
throw new
|
|
281
|
+
throw new exceptions_js_1.AccessTokenRoleNotAllowed('Access token profile is no longer allowed for its owner', { token: token.Uuid });
|
|
291
282
|
}
|
|
292
283
|
}
|
|
293
284
|
// roles are re-checked against the policy on every request rather than
|
|
@@ -297,7 +288,7 @@ async function validateToken(plaintext) {
|
|
|
297
288
|
const allowed = await _allowed_roles(owner, token.Profile);
|
|
298
289
|
const effective = token.Roles.filter((r) => allowed.includes(r));
|
|
299
290
|
if (effective.length === 0) {
|
|
300
|
-
throw new
|
|
291
|
+
throw new exceptions_js_1.AccessTokenRoleNotAllowed('Access token has no effective roles', { token: token.Uuid });
|
|
301
292
|
}
|
|
302
293
|
return { User: owner, Token: token, EffectiveRoles: effective };
|
|
303
294
|
}
|
package/lib/cjs/actions.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"actions.js","sourceRoot":"","sources":["../../src/actions.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"actions.js","sourceRoot":"","sources":["../../src/actions.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AAAA,oDAAuB;AACvB,iCAAiC;AAEjC,wCAAqC;AACrC,wCAAqF;AACrF,0DAAiD;AACjD,0CAAoC;AACpC,mDAA8H;AAC9H,oCAAiC;AAEjC,4DAAsD;AACtD,mDAAuF;AACvF,gDAA2H;AAE3H;;GAEG;AACI,KAAK,mBAAmB,KAA2B;IACxD,IAAI,gBAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO,4BAAW,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;IACxD,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;GAGG;AACI,KAAK,mBAAmB,IAA4B;IACzD,IAAI,gBAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACrB,qKAAqK;QACrK,OAAO,WAAI,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,WAAW,EAAE,CAAC;IACrE,CAAC;IAED,IAAI,gBAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACrB,qKAAqK;QACrK,OAAO,WAAI,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,WAAW,EAAE,CAAC;IACnE,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,gBAAuB,KAA2B;IAChD,OAAO,GAAG,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC/B,CAAC;AAED;;GAEG;AACH,gBAAuB,IAA4B;IACjD,OAAO,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AAC9B,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACI,KAAK,yBAAyB,KAAW,EAAE,OAAgB;IAChE,MAAM,MAAM,GAAG,MAAM,IAAA,uBAAO,EAAwB,uBAAuB,EAAE,qCAAqB,CAAC,CAAC;IACpG,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAE1D,MAAM,EAAE,GAAG,OAAE,CAAC,GAAG,CAAgB,eAAe,CAAE,CAAC;IACnD,MAAM,MAAM,GAAG,EAAE,CAAC,SAAS,EAAE,CAAC;IAC9B,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;AACzD,CAAC;AAED;;;GAGG;AACI,KAAK,4BAA4B,KAAW;IACjD,MAAM,MAAM,GAAG,MAAM,IAAA,uBAAO,EAAwB,uBAAuB,EAAE,qCAAqB,CAAC,CAAC;IACpG,OAAO,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;AACvC,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,aAAa,CAAC,KAAW,EAAE,OAAe;IACvD,MAAM,OAAO,GAAG,MAAM,iBAAiB,CAAC,KAAK,CAAC,CAAC;IAC/C,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAC/B,MAAM,IAAI,yCAAyB,CAAC,yCAAyC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAChH,CAAC;AACH,CAAC;AAED;;;;;;;;GAQG;AACH,KAAK,UAAU,iBAAiB,CAAC,KAAW,EAAE,KAAe,EAAE,OAAgB;IAC7E,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACrD,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IAE1D,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,yCAAyB,CAAC,yCAAyC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;IACzH,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACI,KAAK,sBAAsB,IAA4B,EAAE,IAAY,EAAE,KAAe,EAAE,SAAgC,EAAE,OAAgB;IAC/I,IAAI,GAAG,IAAA,iBAAU,EAAC,IAAA,YAAK,GAAE,EAAE,IAAA,iBAAU,GAAE,EAAE,IAAA,kBAAW,EAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACzE,KAAK,GAAG,IAAA,iBAAU,EAAC,IAAA,eAAQ,GAAE,EAAE,IAAA,iBAAU,GAAE,CAAC,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAE7D,MAAM,SAAS,GAAG,MAAM,IAAA,uBAAO,EAAgC,uBAAuB,EAAE,6CAA6B,CAAC,CAAC;IACvH,MAAM,SAAS,GAAG,MAAM,SAAS,CAAC,QAAQ,EAAE,CAAC;IAE7C,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAC;IAEnC,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,aAAa,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACtC,CAAC;IACD,MAAM,iBAAiB,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;IAE/C,MAAM,KAAK,GAAG,IAAI,4BAAW,CAAC;QAC5B,IAAI,EAAE,IAAI;QACV,KAAK,EAAE,SAAS,CAAC,IAAI;QACrB,KAAK,EAAE,gBAAC,CAAC,IAAI,CAAC,KAAK,CAAC;QACpB,OAAO,EAAE,OAAO,IAAI,SAAS;QAC7B,uEAAuE;QACvE,2EAA2E;QAC3E,SAAS,EAAE,SAAS,IAAI,SAAS;QACjC,OAAO,EAAE,KAAK,CAAC,EAAE;KAClB,CAAC,CAAC;IACH,MAAM,KAAK,CAAC,MAAM,EAAE,CAAC;IAErB,MAAM,IAAA,UAAE,EAAC,IAAI,6BAAkB,CAAC,KAAK,CAAC,CAAC,CAAC;IAExC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,CAAC,SAAS,EAAE,CAAC;AAC1D,CAAC;AAED;;;;GAIG;AACI,KAAK,sBAAsB,KAA2B;IAC3D,MAAM,CAAC,GAAG,MAAM,QAAQ,CAAC,KAAK,CAAC,CAAC;IAEhC,MAAM,CAAC,CAAC,OAAO,EAAE,CAAC;IAClB,MAAM,IAAA,UAAE,EAAC,IAAI,6BAAkB,CAAC,CAAC,CAAC,CAAC,CAAC;AACtC,CAAC;AAED;;;;;;GAMG;AACI,KAAK,yBAAyB,KAA2B,EAAE,IAAY;IAC5E,IAAI,GAAG,IAAA,iBAAU,EAAC,IAAA,YAAK,GAAE,EAAE,IAAA,iBAAU,GAAE,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAEvD,MAAM,CAAC,GAAG,MAAM,QAAQ,CAAC,KAAK,CAAC,CAAC;IAEhC,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IACxC,MAAM,iBAAiB,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;IAElD,CAAC,CAAC,KAAK,GAAG,gBAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;IACrC,MAAM,CAAC,CAAC,MAAM,EAAE,CAAC;IAEjB,MAAM,IAAA,UAAE,EAAC,IAAI,iCAAsB,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;IAE9C,OAAO,CAAC,CAAC;AACX,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACI,KAAK,0BAA0B,KAA2B,EAAE,IAAY;IAC7E,IAAI,GAAG,IAAA,iBAAU,EAAC,IAAA,YAAK,GAAE,EAAE,IAAA,iBAAU,GAAE,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAEvD,MAAM,CAAC,GAAG,MAAM,QAAQ,CAAC,KAAK,CAAC,CAAC;IAEhC,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;IAEpD,0EAA0E;IAC1E,0EAA0E;IAC1E,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;QACxC,OAAO,CAAC,CAAC;IACX,CAAC;IAED,uEAAuE;IACvE,+BAA+B;IAC/B,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3B,MAAM,IAAI,yCAAyB,CAAC,qEAAqE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAChI,CAAC;IAED,CAAC,CAAC,KAAK,GAAG,SAAS,CAAC;IACpB,MAAM,CAAC,CAAC,MAAM,EAAE,CAAC;IAEjB,MAAM,IAAA,UAAE,EAAC,IAAI,iCAAsB,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;IAE9C,OAAO,CAAC,CAAC;AACX,CAAC;AAaD;;;;;;;;;;;;GAYG;AACI,KAAK,wBAAwB,SAAiB;IACnD,2EAA2E;IAC3E,yEAAyE;IACzE,yEAAyE;IACzE,sFAAsF;IACtF,+EAA+E;IAC/E,qEAAqE;IACrE,IAAI,CAAC,gBAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5D,MAAM,IAAI,mCAAmB,CAAC,wBAAwB,CAAC,CAAC;IAC1D,CAAC;IAED,SAAS,GAAG,SAAS,CAAC,IAAI,EAAE,CAAC;IAE7B,MAAM,SAAS,GAAG,MAAM,IAAA,uBAAO,EAAgC,uBAAuB,EAAE,6CAA6B,CAAC,CAAC;IACvH,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAEvC,MAAM,KAAK,GAAG,MAAM,4BAAW,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;IAC7D,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,mCAAmB,CAAC,wBAAwB,CAAC,CAAC;IAC1D,CAAC;IAED,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;QACpB,MAAM,IAAI,kCAAkB,CAAC,sBAAsB,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;IAC9E,CAAC;IAED,sEAAsE;IACtE,0EAA0E;IAC1E,qKAAqK;IACrK,MAAM,KAAK,GAAG,MAAM,WAAI,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,KAAK,EAAE,CAAC;IAEjF,+EAA+E;IAC/E,gFAAgF;IAChF,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;QACnE,MAAM,IAAI,uCAAuB,CAAC,mDAAmD,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;IAChH,CAAC;IAED,wEAAwE;IACxE,yEAAyE;IACzE,iCAAiC;IACjC,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;QAClB,MAAM,QAAQ,GAAG,MAAM,iBAAiB,CAAC,KAAK,CAAC,CAAC;QAChD,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;YACtC,MAAM,IAAI,yCAAyB,CAAC,yDAAyD,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;QACxH,CAAC;IACH,CAAC;IAED,uEAAuE;IACvE,yEAAyE;IACzE,0EAA0E;IAC1E,8CAA8C;IAC9C,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;IAC3D,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IACjE,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3B,MAAM,IAAI,yCAAyB,CAAC,qCAAqC,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;IACpG,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,CAAC;AAClE,CAAC;AAED;;;;;;GAMG;AACI,KAAK;IACV,2EAA2E;IAC3E,iEAAiE;IACjE,MAAM,OAAO,GAAG,MAAM,4BAAW,CAAC,KAAK,CAAC,WAAW,EAAE,IAAI,EAAE,gBAAQ,CAAC,GAAG,EAAE,CAAC,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;IAErG,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,MAAM,CAAC,CAAC,OAAO,EAAE,CAAC;IACpB,CAAC;IAED,OAAO,OAAO,CAAC,MAAM,CAAC;AACxB,CAAC;AAED;;;;;;;;;;GAUG;AACI,KAAK,qBAAqB,KAAkB,EAAE,eAAuB;IAC1E,MAAM,GAAG,GAAG,gBAAQ,CAAC,GAAG,EAAE,CAAC;IAE3B,IAAI,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,UAAU,GAAG,GAAG,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,eAAe,EAAE,CAAC,EAAE,CAAC;QACnF,OAAO;IACT,CAAC;IAED,KAAK,CAAC,UAAU,GAAG,GAAG,CAAC;IACvB,MAAM,KAAK,CAAC,MAAM,EAAE,CAAC;AACvB,CAAC"}
|
|
@@ -162,7 +162,7 @@ export declare class AccessTokenController extends BaseController {
|
|
|
162
162
|
/**
|
|
163
163
|
* Turns the actions layer's role refusals into a 400.
|
|
164
164
|
*
|
|
165
|
-
* `
|
|
165
|
+
* `AccessTokenRoleNotAllowed` has no entry in the http error map, so an uncaught one leaves as
|
|
166
166
|
* a 500 - and "you asked for a role you do not have" / "a token must keep one
|
|
167
167
|
* role" are the caller's mistakes, not the server's. Anything else is rethrown
|
|
168
168
|
* untouched so a genuine failure still reaches the error handler.
|
|
@@ -16,7 +16,7 @@ exports.AccessTokenController = void 0;
|
|
|
16
16
|
const http_1 = require("@spinajs/http");
|
|
17
17
|
const rbac_1 = require("@spinajs/rbac");
|
|
18
18
|
const rbac_http_1 = require("@spinajs/rbac-http");
|
|
19
|
-
const
|
|
19
|
+
const exceptions_js_1 = require("../exceptions.js");
|
|
20
20
|
const luxon_1 = require("luxon");
|
|
21
21
|
const AccessToken_js_1 = require("../models/AccessToken.js");
|
|
22
22
|
const actions_js_1 = require("../actions.js");
|
|
@@ -234,13 +234,13 @@ let AccessTokenController = class AccessTokenController extends http_1.BaseContr
|
|
|
234
234
|
/**
|
|
235
235
|
* Turns the actions layer's role refusals into a 400.
|
|
236
236
|
*
|
|
237
|
-
* `
|
|
237
|
+
* `AccessTokenRoleNotAllowed` has no entry in the http error map, so an uncaught one leaves as
|
|
238
238
|
* a 500 - and "you asked for a role you do not have" / "a token must keep one
|
|
239
239
|
* role" are the caller's mistakes, not the server's. Anything else is rethrown
|
|
240
240
|
* untouched so a genuine failure still reaches the error handler.
|
|
241
241
|
*/
|
|
242
242
|
roleError(err) {
|
|
243
|
-
if (err instanceof
|
|
243
|
+
if (err instanceof exceptions_js_1.AccessTokenRoleNotAllowed) {
|
|
244
244
|
return new http_1.BadRequestResponse({ error: { code: 'E_TOKEN_ROLE_NOT_ALLOWED', message: err.message } });
|
|
245
245
|
}
|
|
246
246
|
throw err;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AccessTokenController.js","sourceRoot":"","sources":["../../../src/controllers/AccessTokenController.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,wCAA4I;AAC5I,wCAAkD;AAClD,kDAAgE;AAChE,
|
|
1
|
+
{"version":3,"file":"AccessTokenController.js","sourceRoot":"","sources":["../../../src/controllers/AccessTokenController.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { Exception } from '@spinajs/exceptions';
|
|
2
|
+
/**
|
|
3
|
+
* Base class for access token failures. `data` carries a transport-agnostic
|
|
4
|
+
* payload ( token uuid, refused roles ) that middleware / controllers log or
|
|
5
|
+
* translate into responses. Named AccessToken* so the classes stay distinct
|
|
6
|
+
* from the password-reset TokenExpired / TokenInvalid in `@spinajs/rbac` -
|
|
7
|
+
* the http error map is keyed by constructor name.
|
|
8
|
+
*/
|
|
9
|
+
export declare class AccessTokenException extends Exception {
|
|
10
|
+
data?: unknown;
|
|
11
|
+
constructor(message?: string, data?: unknown, inner?: Error | unknown);
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Thrown when no access token matches the presented value.
|
|
15
|
+
*/
|
|
16
|
+
export declare class AccessTokenNotFound extends AccessTokenException {
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Thrown when the access token has expired.
|
|
20
|
+
*/
|
|
21
|
+
export declare class AccessTokenExpired extends AccessTokenException {
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Thrown when the token owner may no longer authenticate ( banned / inactive / deleted ).
|
|
25
|
+
*/
|
|
26
|
+
export declare class AccessTokenOwnerInvalid extends AccessTokenException {
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Thrown when a role / profile may not be pinned to or revoked from a token.
|
|
30
|
+
*/
|
|
31
|
+
export declare class AccessTokenRoleNotAllowed extends AccessTokenException {
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=exceptions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"exceptions.d.ts","sourceRoot":"","sources":["../../src/exceptions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAEhD;;;;;;GAMG;AACH,qBAAa,oBAAqB,SAAQ,SAAS;IACZ,IAAI,CAAC,EAAE,OAAO;IAAnD,YAAY,OAAO,CAAC,EAAE,MAAM,EAAS,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,KAAK,GAAG,OAAO,EAE3E;CACF;AAED;;GAEG;AACH,qBAAa,mBAAoB,SAAQ,oBAAoB;CAAG;AAEhE;;GAEG;AACH,qBAAa,kBAAmB,SAAQ,oBAAoB;CAAG;AAE/D;;GAEG;AACH,qBAAa,uBAAwB,SAAQ,oBAAoB;CAAG;AAEpE;;GAEG;AACH,qBAAa,yBAA0B,SAAQ,oBAAoB;CAAG"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AccessTokenRoleNotAllowed = exports.AccessTokenOwnerInvalid = exports.AccessTokenExpired = exports.AccessTokenNotFound = exports.AccessTokenException = void 0;
|
|
4
|
+
const exceptions_1 = require("@spinajs/exceptions");
|
|
5
|
+
/**
|
|
6
|
+
* Base class for access token failures. `data` carries a transport-agnostic
|
|
7
|
+
* payload ( token uuid, refused roles ) that middleware / controllers log or
|
|
8
|
+
* translate into responses. Named AccessToken* so the classes stay distinct
|
|
9
|
+
* from the password-reset TokenExpired / TokenInvalid in `@spinajs/rbac` -
|
|
10
|
+
* the http error map is keyed by constructor name.
|
|
11
|
+
*/
|
|
12
|
+
class AccessTokenException extends exceptions_1.Exception {
|
|
13
|
+
constructor(message, data, inner) {
|
|
14
|
+
super(message, inner);
|
|
15
|
+
this.data = data;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
exports.AccessTokenException = AccessTokenException;
|
|
19
|
+
/**
|
|
20
|
+
* Thrown when no access token matches the presented value.
|
|
21
|
+
*/
|
|
22
|
+
class AccessTokenNotFound extends AccessTokenException {
|
|
23
|
+
}
|
|
24
|
+
exports.AccessTokenNotFound = AccessTokenNotFound;
|
|
25
|
+
/**
|
|
26
|
+
* Thrown when the access token has expired.
|
|
27
|
+
*/
|
|
28
|
+
class AccessTokenExpired extends AccessTokenException {
|
|
29
|
+
}
|
|
30
|
+
exports.AccessTokenExpired = AccessTokenExpired;
|
|
31
|
+
/**
|
|
32
|
+
* Thrown when the token owner may no longer authenticate ( banned / inactive / deleted ).
|
|
33
|
+
*/
|
|
34
|
+
class AccessTokenOwnerInvalid extends AccessTokenException {
|
|
35
|
+
}
|
|
36
|
+
exports.AccessTokenOwnerInvalid = AccessTokenOwnerInvalid;
|
|
37
|
+
/**
|
|
38
|
+
* Thrown when a role / profile may not be pinned to or revoked from a token.
|
|
39
|
+
*/
|
|
40
|
+
class AccessTokenRoleNotAllowed extends AccessTokenException {
|
|
41
|
+
}
|
|
42
|
+
exports.AccessTokenRoleNotAllowed = AccessTokenRoleNotAllowed;
|
|
43
|
+
//# sourceMappingURL=exceptions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"exceptions.js","sourceRoot":"","sources":["../../src/exceptions.ts"],"names":[],"mappings":";;;AAAA,oDAAgD;AAEhD;;;;;;GAMG;AACH,0BAAkC,SAAQ,sBAAS;IACjD,YAAY,OAAgB,EAAS,IAAc,EAAE,KAAuB;QAC1E,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;oBADa,IAAI;IAEzC,CAAC;CACF;;AAED;;GAEG;AACH,yBAAiC,SAAQ,oBAAoB;CAAG;;AAEhE;;GAEG;AACH,wBAAgC,SAAQ,oBAAoB;CAAG;;AAE/D;;GAEG;AACH,6BAAqC,SAAQ,oBAAoB;CAAG;;AAEpE;;GAEG;AACH,+BAAuC,SAAQ,oBAAoB;CAAG"}
|
package/lib/cjs/index.d.ts
CHANGED
|
@@ -2,6 +2,7 @@ import './generator.js';
|
|
|
2
2
|
import './role-policy.js';
|
|
3
3
|
import './middlewares.js';
|
|
4
4
|
export * from './interfaces.js';
|
|
5
|
+
export * from './exceptions.js';
|
|
5
6
|
export * from './models/AccessToken.js';
|
|
6
7
|
export * from './migrations/RbacHttpTokenInitial_2026_08_11_01_00_00.js';
|
|
7
8
|
export * from './migrations/RbacHttpTokenProfile_2026_08_21_00_00_00.js';
|
package/lib/cjs/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,gBAAgB,CAAC;AACxB,OAAO,kBAAkB,CAAC;AAC1B,OAAO,kBAAkB,CAAC;AAE1B,cAAc,iBAAiB,CAAC;AAChC,cAAc,yBAAyB,CAAC;AACxC,cAAc,0DAA0D,CAAC;AACzE,cAAc,0DAA0D,CAAC;AACzE,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,iCAAiC,CAAC;AAChD,cAAc,qCAAqC,CAAC;AACpD,cAAc,wCAAwC,CAAC;AACvD,cAAc,2BAA2B,CAAC;AAC1C,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,0BAA0B,CAAC;AACzC,cAAc,8BAA8B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,gBAAgB,CAAC;AACxB,OAAO,kBAAkB,CAAC;AAC1B,OAAO,kBAAkB,CAAC;AAE1B,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,yBAAyB,CAAC;AACxC,cAAc,0DAA0D,CAAC;AACzE,cAAc,0DAA0D,CAAC;AACzE,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,iCAAiC,CAAC;AAChD,cAAc,qCAAqC,CAAC;AACpD,cAAc,wCAAwC,CAAC;AACvD,cAAc,2BAA2B,CAAC;AAC1C,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,0BAA0B,CAAC;AACzC,cAAc,8BAA8B,CAAC"}
|
package/lib/cjs/index.js
CHANGED
|
@@ -21,6 +21,7 @@ require("./generator.js");
|
|
|
21
21
|
require("./role-policy.js");
|
|
22
22
|
require("./middlewares.js");
|
|
23
23
|
__exportStar(require("./interfaces.js"), exports);
|
|
24
|
+
__exportStar(require("./exceptions.js"), exports);
|
|
24
25
|
__exportStar(require("./models/AccessToken.js"), exports);
|
|
25
26
|
__exportStar(require("./migrations/RbacHttpTokenInitial_2026_08_11_01_00_00.js"), exports);
|
|
26
27
|
__exportStar(require("./migrations/RbacHttpTokenProfile_2026_08_21_00_00_00.js"), exports);
|
package/lib/cjs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,uEAAuE;AACvE,yEAAyE;AACzE,yEAAyE;AACzE,0BAAwB;AACxB,4BAA0B;AAC1B,4BAA0B;AAE1B,kDAAgC;AAChC,0DAAwC;AACxC,2FAAyE;AACzE,2FAAyE;AACzE,iDAA+B;AAC/B,mDAAiC;AACjC,oDAAkC;AAClC,+CAA6B;AAC7B,mDAAiC;AACjC,4DAA0C;AAC1C,kEAAgD;AAChD,sEAAoD;AACpD,yEAAuD;AACvD,4DAA0C;AAC1C,uDAAqC;AACrC,uDAAqC;AACrC,0DAAwC;AACxC,2DAAyC;AACzC,+DAA6C"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,uEAAuE;AACvE,yEAAyE;AACzE,yEAAyE;AACzE,0BAAwB;AACxB,4BAA0B;AAC1B,4BAA0B;AAE1B,kDAAgC;AAChC,kDAAgC;AAChC,0DAAwC;AACxC,2FAAyE;AACzE,2FAAyE;AACzE,iDAA+B;AAC/B,mDAAiC;AACjC,oDAAkC;AAClC,+CAA6B;AAC7B,mDAAiC;AACjC,4DAA0C;AAC1C,kEAAgD;AAChD,sEAAoD;AACpD,yEAAuD;AACvD,4DAA0C;AAC1C,uDAAqC;AACrC,uDAAqC;AACrC,0DAAwC;AACxC,2DAAyC;AACzC,+DAA6C"}
|