@webda/core 4.0.0-beta.3 → 4.0.0-beta.4
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/application/application.d.ts +31 -0
- package/lib/application/application.d.ts.map +1 -1
- package/lib/application/application.js +55 -2
- package/lib/application/application.js.map +1 -1
- package/lib/application/deployment.d.ts +93 -0
- package/lib/application/deployment.d.ts.map +1 -0
- package/lib/application/deployment.js +99 -0
- package/lib/application/deployment.js.map +1 -0
- package/lib/application/unpackedapplication.d.ts.map +1 -1
- package/lib/application/unpackedapplication.js +9 -1
- package/lib/application/unpackedapplication.js.map +1 -1
- package/lib/bin/cli.d.ts +36 -1
- package/lib/bin/cli.d.ts.map +1 -1
- package/lib/bin/cli.js +108 -2
- package/lib/bin/cli.js.map +1 -1
- package/lib/contexts/execution.js +1 -1
- package/lib/contexts/execution.js.map +1 -1
- package/lib/contexts/operationcontext.d.ts +3 -0
- package/lib/contexts/operationcontext.d.ts.map +1 -1
- package/lib/contexts/operationcontext.js +6 -3
- package/lib/contexts/operationcontext.js.map +1 -1
- package/lib/core/core.js +1 -1
- package/lib/core/core.js.map +1 -1
- package/lib/core/hooks.d.ts +22 -0
- package/lib/core/hooks.d.ts.map +1 -1
- package/lib/core/hooks.js +24 -0
- package/lib/core/hooks.js.map +1 -1
- package/lib/deployers/deployer.d.ts +157 -0
- package/lib/deployers/deployer.d.ts.map +1 -0
- package/lib/deployers/deployer.js +81 -0
- package/lib/deployers/deployer.js.map +1 -0
- package/lib/deployers/git.d.ts +27 -0
- package/lib/deployers/git.d.ts.map +1 -0
- package/lib/deployers/git.js +66 -0
- package/lib/deployers/git.js.map +1 -0
- package/lib/deployers/packager.d.ts +85 -0
- package/lib/deployers/packager.d.ts.map +1 -0
- package/lib/deployers/packager.js +259 -0
- package/lib/deployers/packager.js.map +1 -0
- package/lib/index.d.ts +8 -3
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +8 -3
- package/lib/index.js.map +1 -1
- package/lib/models/coremodel.model.d.ts.map +1 -1
- package/lib/models/coremodel.model.js.map +1 -1
- package/lib/models/decorator.d.ts +4 -0
- package/lib/models/decorator.d.ts.map +1 -1
- package/lib/models/decorator.js +4 -0
- package/lib/models/decorator.js.map +1 -1
- package/lib/models/deployment.d.ts +2 -21
- package/lib/models/deployment.d.ts.map +1 -1
- package/lib/models/encrypted.model.d.ts +46 -0
- package/lib/models/encrypted.model.d.ts.map +1 -0
- package/lib/models/encrypted.model.js +87 -0
- package/lib/models/encrypted.model.js.map +1 -0
- package/lib/models/ident.model.d.ts +103 -64
- package/lib/models/ident.model.d.ts.map +1 -1
- package/lib/models/ident.model.js +168 -76
- package/lib/models/ident.model.js.map +1 -1
- package/lib/models/ownermodel.model.d.ts.map +1 -1
- package/lib/models/ownermodel.model.js +2 -1
- package/lib/models/ownermodel.model.js.map +1 -1
- package/lib/models/password.model.d.ts +78 -0
- package/lib/models/password.model.d.ts.map +1 -0
- package/lib/models/password.model.js +171 -0
- package/lib/models/password.model.js.map +1 -0
- package/lib/models/refreshtoken.model.d.ts +30 -0
- package/lib/models/refreshtoken.model.d.ts.map +1 -0
- package/lib/models/refreshtoken.model.js +29 -0
- package/lib/models/refreshtoken.model.js.map +1 -0
- package/lib/models/registry.model.d.ts.map +1 -1
- package/lib/models/registry.model.js.map +1 -1
- package/lib/models/simpleuser.model.d.ts.map +1 -1
- package/lib/models/simpleuser.model.js +2 -1
- package/lib/models/simpleuser.model.js.map +1 -1
- package/lib/models/user.model.d.ts +23 -23
- package/lib/models/user.model.d.ts.map +1 -1
- package/lib/models/user.model.js +68 -29
- package/lib/models/user.model.js.map +1 -1
- package/lib/services/audit.model.d.ts.map +1 -1
- package/lib/services/audit.model.js +2 -1
- package/lib/services/audit.model.js.map +1 -1
- package/lib/services/domainservice.service.d.ts +39 -0
- package/lib/services/domainservice.service.d.ts.map +1 -1
- package/lib/services/domainservice.service.js +78 -2
- package/lib/services/domainservice.service.js.map +1 -1
- package/lib/services/iauthentication.d.ts +196 -3
- package/lib/services/iauthentication.d.ts.map +1 -1
- package/lib/services/servicecommands.d.ts.map +1 -1
- package/lib/services/servicecommands.js +17 -11
- package/lib/services/servicecommands.js.map +1 -1
- package/lib/services/token.service.d.ts +95 -0
- package/lib/services/token.service.d.ts.map +1 -0
- package/lib/services/token.service.js +182 -0
- package/lib/services/token.service.js.map +1 -0
- package/lib/session/manager.model.d.ts +16 -0
- package/lib/session/manager.model.d.ts.map +1 -1
- package/lib/session/manager.model.js +58 -1
- package/lib/session/manager.model.js.map +1 -1
- package/lib/session/session.d.ts +44 -1
- package/lib/session/session.d.ts.map +1 -1
- package/lib/session/session.js +51 -2
- package/lib/session/session.js.map +1 -1
- package/lib/stores/memory.service.d.ts.map +1 -1
- package/lib/stores/memory.service.js +4 -3
- package/lib/stores/memory.service.js.map +1 -1
- package/lib/templates/templates.d.ts +8 -0
- package/lib/templates/templates.d.ts.map +1 -1
- package/lib/templates/templates.js +10 -1
- package/lib/templates/templates.js.map +1 -1
- package/lib/test/behavior-fixture.model.d.ts +30 -0
- package/lib/test/behavior-fixture.model.d.ts.map +1 -0
- package/lib/test/behavior-fixture.model.js +63 -0
- package/lib/test/behavior-fixture.model.js.map +1 -0
- package/lib/test/legacyident.fixture.model.d.ts +98 -0
- package/lib/test/legacyident.fixture.model.d.ts.map +1 -0
- package/lib/test/legacyident.fixture.model.js +125 -0
- package/lib/test/legacyident.fixture.model.js.map +1 -0
- package/lib/test/objects.d.ts +2 -2
- package/lib/test/objects.d.ts.map +1 -1
- package/lib/test/objects.js +2 -2
- package/lib/test/objects.js.map +1 -1
- package/package.json +25 -8
- package/test/config-cached.json +2 -1
- package/test/config.json +3 -1
- package/test/my-cnf.json +1 -1
- package/webda.module.json +653 -375
- package/lib/services/authentication.service.d.ts +0 -442
- package/lib/services/authentication.service.d.ts.map +0 -1
- package/lib/services/authentication.service.js +0 -932
- package/lib/services/authentication.service.js.map +0 -1
- package/lib/services/oauth.d.ts +0 -250
- package/lib/services/oauth.d.ts.map +0 -1
- package/lib/services/oauth.js +0 -405
- package/lib/services/oauth.js.map +0 -1
|
@@ -1,89 +1,128 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import {
|
|
3
|
-
import
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
1
|
+
import type { PrimaryKeyType } from "@webda/models";
|
|
2
|
+
import { Model, ModelLink, WEBDA_PRIMARY_KEY, WEBDA_PRIMARY_KEY_SEPARATOR, type Settable } from "@webda/models";
|
|
3
|
+
import * as WebdaError from "../errors/errors.js";
|
|
4
|
+
import type { IOperationContext } from "../contexts/icontext.js";
|
|
5
|
+
import { User } from "./user.model.js";
|
|
6
|
+
import { EncryptedField } from "./encrypted.model.js";
|
|
7
|
+
/** Tokens (credentials) of an identity provider, as the provider returns them */
|
|
8
|
+
export interface IdentTokens {
|
|
9
|
+
/** Access token */
|
|
10
|
+
access_token?: string;
|
|
11
|
+
/** Refresh token */
|
|
12
|
+
refresh_token?: string;
|
|
13
|
+
/** Any other provider field */
|
|
14
|
+
[key: string]: any;
|
|
15
|
+
}
|
|
16
|
+
/** Email sending throttle state of an ident (login failures are top-level `Ident` attributes) */
|
|
17
|
+
export interface IdentThrottle {
|
|
18
|
+
/** Timestamp of the last email sent */
|
|
19
|
+
lastSentAt?: number;
|
|
20
|
+
}
|
|
21
|
+
/** Raised for malformed ident keys (400 INVALID_IDENT) */
|
|
22
|
+
export declare class InvalidIdent extends WebdaError.HttpError {
|
|
23
|
+
/** @param message - error message */
|
|
24
|
+
constructor(message?: string);
|
|
8
25
|
}
|
|
9
26
|
/**
|
|
10
|
-
*
|
|
11
|
-
* @class
|
|
27
|
+
* An identity linked to a user: `<providerUid>:<provider>`
|
|
12
28
|
* @WebdaModel
|
|
13
29
|
*/
|
|
14
|
-
export declare class Ident extends
|
|
15
|
-
/**
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
/**
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
/**
|
|
36
|
-
* Last time the ident was used
|
|
37
|
-
*/
|
|
38
|
-
get _lastUsed(): Date;
|
|
39
|
-
set _lastUsed(value: string | number | Date);
|
|
30
|
+
export declare class Ident extends Model {
|
|
31
|
+
/** Composite primary key */
|
|
32
|
+
[WEBDA_PRIMARY_KEY]: readonly ["providerUid", "provider"];
|
|
33
|
+
[WEBDA_PRIMARY_KEY_SEPARATOR]: string;
|
|
34
|
+
/** Identifier on the provider (normalised email for "email") */
|
|
35
|
+
providerUid: string;
|
|
36
|
+
/** Provider name */
|
|
37
|
+
provider: string;
|
|
38
|
+
/** Owner */
|
|
39
|
+
get _user(): ModelLink<User>;
|
|
40
|
+
set _user(value: string | User | PrimaryKeyType<User> | ModelLink<User>);
|
|
41
|
+
/** Email asserted for this ident */
|
|
42
|
+
email?: string;
|
|
43
|
+
/** When the ident was verified */
|
|
44
|
+
get verifiedAt(): Date;
|
|
45
|
+
set verifiedAt(value: string | number | Date);
|
|
46
|
+
/** Last login with this ident */
|
|
47
|
+
get lastUsedAt(): Date;
|
|
48
|
+
set lastUsedAt(value: string | number | Date);
|
|
49
|
+
/** Email sending throttle state */
|
|
50
|
+
_throttle: IdentThrottle;
|
|
40
51
|
/**
|
|
41
|
-
*
|
|
42
|
-
|
|
43
|
-
|
|
52
|
+
* Login attempts counted since the last successful login
|
|
53
|
+
*
|
|
54
|
+
* Top-level so stores can increment it atomically (nested-path atomic operations are not portable)
|
|
55
|
+
*/
|
|
56
|
+
_loginAttempts: number;
|
|
57
|
+
/** Timestamp (ms) of the last counted login attempt */
|
|
58
|
+
_lastLoginAttemptAt?: number;
|
|
59
|
+
/** Provider profile */
|
|
60
|
+
__profile?: any;
|
|
61
|
+
/** Provider tokens, encrypted at rest (`await ident.tokens.get()`) */
|
|
62
|
+
tokens: EncryptedField<IdentTokens>;
|
|
63
|
+
/** @param data - initial data */
|
|
64
|
+
constructor(data?: Settable<Ident>);
|
|
44
65
|
/**
|
|
45
|
-
*
|
|
46
|
-
|
|
47
|
-
|
|
66
|
+
* Build and validate a key
|
|
67
|
+
* @param providerUid - uid on the provider
|
|
68
|
+
* @param provider - provider name
|
|
69
|
+
* @returns the composite key
|
|
70
|
+
*/
|
|
71
|
+
static key(providerUid: string, provider: string): {
|
|
72
|
+
providerUid: string;
|
|
73
|
+
provider: string;
|
|
74
|
+
};
|
|
48
75
|
/**
|
|
49
|
-
*
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
76
|
+
* Parse a v3 storage key `"<providerUid>_<provider>"`, split on its LAST "_" (provider names never
|
|
77
|
+
* contain "_", provider uids such as emails may)
|
|
78
|
+
*
|
|
79
|
+
* Consulted by repositories for keys that are not `"<providerUid>:<provider>"` (see `WEBDA_LEGACY_UID`),
|
|
80
|
+
* so v3 records stay addressable and queryable until they are upgraded.
|
|
81
|
+
* @param uid - raw storage key
|
|
82
|
+
* @returns the key parts, or undefined when the key is not a v3 ident key
|
|
83
|
+
*/
|
|
84
|
+
static parseLegacyUID(uid: string): {
|
|
85
|
+
providerUid: string;
|
|
86
|
+
provider: string;
|
|
87
|
+
} | undefined;
|
|
53
88
|
/**
|
|
54
|
-
*
|
|
89
|
+
* v3 storage key of a record stored before the composite key (v3 kept it as `uuid` in the body)
|
|
90
|
+
*
|
|
91
|
+
* Such an ident has no `providerUid`: it must be upgraded (`@webda/auth` `upgradeIdent`) before use.
|
|
92
|
+
* @returns the v3 key, or undefined for a current ident
|
|
55
93
|
*/
|
|
56
|
-
|
|
94
|
+
getLegacyUID(): string | undefined;
|
|
57
95
|
/**
|
|
58
|
-
*
|
|
96
|
+
* Normalise an email for use as providerUid
|
|
97
|
+
* @param email - raw email
|
|
98
|
+
* @returns trimmed lowercase email
|
|
59
99
|
*/
|
|
60
|
-
|
|
100
|
+
static normalizeEmail(email: string): string;
|
|
61
101
|
/**
|
|
62
|
-
*
|
|
63
|
-
* @returns the result string
|
|
102
|
+
* @returns the owner link
|
|
64
103
|
*/
|
|
65
|
-
|
|
104
|
+
getUser(): ModelLink<User>;
|
|
66
105
|
/**
|
|
67
|
-
*
|
|
68
|
-
* @returns the result
|
|
106
|
+
* @param user - owner uuid or user
|
|
69
107
|
*/
|
|
70
|
-
|
|
108
|
+
setUser(user: string | User): void;
|
|
71
109
|
/**
|
|
72
|
-
*
|
|
73
|
-
* @param type - the type to look up
|
|
110
|
+
* @returns the email of this ident
|
|
74
111
|
*/
|
|
75
|
-
|
|
112
|
+
getEmail(): string | undefined;
|
|
76
113
|
/**
|
|
77
|
-
*
|
|
78
|
-
* @returns the result
|
|
114
|
+
* @returns true when verified
|
|
79
115
|
*/
|
|
80
|
-
|
|
116
|
+
isVerified(): boolean;
|
|
81
117
|
/**
|
|
82
|
-
*
|
|
83
|
-
* @param
|
|
118
|
+
* Only the owner may act on an ident
|
|
119
|
+
* @param ctx - operation context
|
|
120
|
+
* @param action - action name
|
|
121
|
+
* @returns true or a refusal reason
|
|
84
122
|
*/
|
|
85
|
-
|
|
123
|
+
canAct(ctx: IOperationContext, action: string): Promise<string | boolean>;
|
|
86
124
|
/** Generated by @webda/content-mapper: include values held in WEBDA_STORAGE. */
|
|
87
125
|
toJSON(): any;
|
|
126
|
+
protected __hydrateBehaviors(rawData?: any): void;
|
|
88
127
|
}
|
|
89
128
|
//# sourceMappingURL=ident.model.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ident.model.d.ts","sourceRoot":"","sources":["../../src/models/ident.model.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ident.model.d.ts","sourceRoot":"","sources":["../../src/models/ident.model.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,115 +1,207 @@
|
|
|
1
1
|
import { WEBDA_STORAGE } from "@webda/models";
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
2
|
+
import { Model, ModelLink, WEBDA_PRIMARY_KEY, WEBDA_PRIMARY_KEY_SEPARATOR } from "@webda/models";
|
|
3
|
+
import * as WebdaError from "../errors/errors.js";
|
|
4
|
+
import { User } from "./user.model.js";
|
|
5
|
+
import { EncryptedField } from "./encrypted.model.js";
|
|
6
|
+
/** Raised for malformed ident keys (400 INVALID_IDENT) */
|
|
7
|
+
export class InvalidIdent extends WebdaError.HttpError {
|
|
8
|
+
/** @param message - error message */
|
|
9
|
+
constructor(message = "Invalid ident") {
|
|
10
|
+
super(message, 400);
|
|
11
|
+
}
|
|
7
12
|
}
|
|
13
|
+
const SEPARATOR = ":";
|
|
8
14
|
/**
|
|
9
|
-
*
|
|
10
|
-
* @class
|
|
15
|
+
* An identity linked to a user: `<providerUid>:<provider>`
|
|
11
16
|
* @WebdaModel
|
|
12
17
|
*/
|
|
13
|
-
export class Ident extends
|
|
14
|
-
/**
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
18
|
+
export class Ident extends Model {
|
|
19
|
+
/** Composite primary key */
|
|
20
|
+
[WEBDA_PRIMARY_KEY] = ["providerUid", "provider"];
|
|
21
|
+
// Must stay a string literal: the content mapper reads it textually
|
|
22
|
+
[WEBDA_PRIMARY_KEY_SEPARATOR] = ":";
|
|
23
|
+
/** Identifier on the provider (normalised email for "email") */
|
|
24
|
+
providerUid;
|
|
25
|
+
/** Provider name */
|
|
26
|
+
provider;
|
|
27
|
+
/** Owner */
|
|
28
|
+
get _user() {
|
|
29
|
+
return this[WEBDA_STORAGE]["_user"];
|
|
19
30
|
}
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
*/
|
|
39
|
-
get _lastUsed() {
|
|
40
|
-
return this[WEBDA_STORAGE]["_lastUsed"] ?? undefined;
|
|
31
|
+
set _user(value) {
|
|
32
|
+
if (value instanceof ModelLink) {
|
|
33
|
+
this[WEBDA_STORAGE]["_user"] = value;
|
|
34
|
+
}
|
|
35
|
+
else if (value != null) {
|
|
36
|
+
const inst = this[WEBDA_STORAGE]["_user"] || new ModelLink(User);
|
|
37
|
+
inst.set(value);
|
|
38
|
+
this[WEBDA_STORAGE]["_user"] = inst;
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
this[WEBDA_STORAGE]["_user"] = value;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
/** Email asserted for this ident */
|
|
45
|
+
email;
|
|
46
|
+
/** When the ident was verified */
|
|
47
|
+
get verifiedAt() {
|
|
48
|
+
return this[WEBDA_STORAGE]["verifiedAt"];
|
|
41
49
|
}
|
|
42
|
-
set
|
|
43
|
-
this[WEBDA_STORAGE]["
|
|
50
|
+
set verifiedAt(value) {
|
|
51
|
+
this[WEBDA_STORAGE]["verifiedAt"] = value !== undefined && value !== null ? new Date(value) : value;
|
|
44
52
|
}
|
|
53
|
+
/** Last login with this ident */
|
|
54
|
+
get lastUsedAt() {
|
|
55
|
+
return this[WEBDA_STORAGE]["lastUsedAt"];
|
|
56
|
+
}
|
|
57
|
+
set lastUsedAt(value) {
|
|
58
|
+
this[WEBDA_STORAGE]["lastUsedAt"] = value !== undefined && value !== null ? new Date(value) : value;
|
|
59
|
+
}
|
|
60
|
+
/** Email sending throttle state */
|
|
61
|
+
_throttle = {};
|
|
45
62
|
/**
|
|
46
|
-
*
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
63
|
+
* Login attempts counted since the last successful login
|
|
64
|
+
*
|
|
65
|
+
* Top-level so stores can increment it atomically (nested-path atomic operations are not portable)
|
|
66
|
+
*/
|
|
67
|
+
_loginAttempts = 0;
|
|
68
|
+
/** Timestamp (ms) of the last counted login attempt */
|
|
69
|
+
_lastLoginAttemptAt;
|
|
70
|
+
/** Provider profile */
|
|
71
|
+
__profile;
|
|
72
|
+
/** Provider tokens, encrypted at rest (`await ident.tokens.get()`) */
|
|
73
|
+
tokens;
|
|
74
|
+
/** @param data - initial data */
|
|
75
|
+
constructor(data) {
|
|
76
|
+
super();
|
|
77
|
+
Object.assign(this, data);
|
|
78
|
+
// Raw stored data (or none) must become an EncryptedField behavior
|
|
79
|
+
if (!(this.tokens instanceof EncryptedField)) {
|
|
80
|
+
this.__hydrateBehaviors?.({ tokens: data?.tokens ?? {} });
|
|
81
|
+
}
|
|
82
|
+
}
|
|
53
83
|
/**
|
|
54
|
-
*
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
84
|
+
* Build and validate a key
|
|
85
|
+
* @param providerUid - uid on the provider
|
|
86
|
+
* @param provider - provider name
|
|
87
|
+
* @returns the composite key
|
|
88
|
+
*/
|
|
89
|
+
static key(providerUid, provider) {
|
|
90
|
+
for (const [name, v] of [
|
|
91
|
+
["providerUid", providerUid],
|
|
92
|
+
["provider", provider]
|
|
93
|
+
]) {
|
|
94
|
+
if (typeof v !== "string" || v.length === 0 || v.includes(SEPARATOR)) {
|
|
95
|
+
throw new InvalidIdent(`${name} must be a non-empty string without '${SEPARATOR}'`);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
return { providerUid, provider };
|
|
58
99
|
}
|
|
59
|
-
|
|
60
|
-
|
|
100
|
+
/**
|
|
101
|
+
* Parse a v3 storage key `"<providerUid>_<provider>"`, split on its LAST "_" (provider names never
|
|
102
|
+
* contain "_", provider uids such as emails may)
|
|
103
|
+
*
|
|
104
|
+
* Consulted by repositories for keys that are not `"<providerUid>:<provider>"` (see `WEBDA_LEGACY_UID`),
|
|
105
|
+
* so v3 records stay addressable and queryable until they are upgraded.
|
|
106
|
+
* @param uid - raw storage key
|
|
107
|
+
* @returns the key parts, or undefined when the key is not a v3 ident key
|
|
108
|
+
*/
|
|
109
|
+
static parseLegacyUID(uid) {
|
|
110
|
+
if (typeof uid !== "string" || uid.includes(SEPARATOR)) {
|
|
111
|
+
return undefined;
|
|
112
|
+
}
|
|
113
|
+
const i = uid.lastIndexOf("_");
|
|
114
|
+
if (i <= 0 || i === uid.length - 1) {
|
|
115
|
+
return undefined;
|
|
116
|
+
}
|
|
117
|
+
return { providerUid: uid.substring(0, i), provider: uid.substring(i + 1) };
|
|
61
118
|
}
|
|
62
119
|
/**
|
|
63
|
-
*
|
|
64
|
-
|
|
65
|
-
|
|
120
|
+
* v3 storage key of a record stored before the composite key (v3 kept it as `uuid` in the body)
|
|
121
|
+
*
|
|
122
|
+
* Such an ident has no `providerUid`: it must be upgraded (`@webda/auth` `upgradeIdent`) before use.
|
|
123
|
+
* @returns the v3 key, or undefined for a current ident
|
|
124
|
+
*/
|
|
125
|
+
getLegacyUID() {
|
|
126
|
+
const uuid = this.uuid;
|
|
127
|
+
if (this.providerUid || typeof uuid !== "string" || !Ident.parseLegacyUID(uuid)) {
|
|
128
|
+
return undefined;
|
|
129
|
+
}
|
|
130
|
+
return uuid;
|
|
131
|
+
}
|
|
66
132
|
/**
|
|
67
|
-
*
|
|
133
|
+
* Normalise an email for use as providerUid
|
|
134
|
+
* @param email - raw email
|
|
135
|
+
* @returns trimmed lowercase email
|
|
68
136
|
*/
|
|
69
|
-
|
|
137
|
+
static normalizeEmail(email) {
|
|
138
|
+
return `${email ?? ""}`.trim().toLowerCase();
|
|
139
|
+
}
|
|
70
140
|
/**
|
|
71
|
-
*
|
|
72
|
-
* @returns the result string
|
|
141
|
+
* @returns the owner link
|
|
73
142
|
*/
|
|
74
|
-
|
|
75
|
-
return this.
|
|
143
|
+
getUser() {
|
|
144
|
+
return this._user;
|
|
76
145
|
}
|
|
77
146
|
/**
|
|
78
|
-
*
|
|
79
|
-
* @returns the result
|
|
147
|
+
* @param user - owner uuid or user
|
|
80
148
|
*/
|
|
81
|
-
|
|
82
|
-
|
|
149
|
+
setUser(user) {
|
|
150
|
+
const uuid = typeof user === "string" ? user : user.getUUID();
|
|
151
|
+
this._user ??= new ModelLink(User).set(uuid);
|
|
152
|
+
this._user.set(uuid);
|
|
83
153
|
}
|
|
84
154
|
/**
|
|
85
|
-
*
|
|
86
|
-
* @param type - the type to look up
|
|
155
|
+
* @returns the email of this ident
|
|
87
156
|
*/
|
|
88
|
-
|
|
89
|
-
this.
|
|
157
|
+
getEmail() {
|
|
158
|
+
return this.email;
|
|
90
159
|
}
|
|
91
160
|
/**
|
|
92
|
-
*
|
|
93
|
-
* @returns the result
|
|
161
|
+
* @returns true when verified
|
|
94
162
|
*/
|
|
95
|
-
|
|
96
|
-
return this.
|
|
163
|
+
isVerified() {
|
|
164
|
+
return this.verifiedAt !== undefined && this.verifiedAt !== null;
|
|
97
165
|
}
|
|
98
166
|
/**
|
|
99
|
-
*
|
|
100
|
-
* @param
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
167
|
+
* Only the owner may act on an ident
|
|
168
|
+
* @param ctx - operation context
|
|
169
|
+
* @param action - action name
|
|
170
|
+
* @returns true or a refusal reason
|
|
171
|
+
*/
|
|
172
|
+
async canAct(ctx, action) {
|
|
173
|
+
if (!ctx.getCurrentUserId() || this._user?.toString() !== ctx.getCurrentUserId()) {
|
|
174
|
+
return "You can't act on this ident";
|
|
175
|
+
}
|
|
176
|
+
return true;
|
|
104
177
|
}
|
|
105
178
|
/** Generated by @webda/content-mapper: include values held in WEBDA_STORAGE. */
|
|
106
179
|
toJSON() {
|
|
107
|
-
const
|
|
180
|
+
const parent = super.toJSON ? super.toJSON() : {};
|
|
181
|
+
const result = parent === this ? {} : parent;
|
|
108
182
|
for (const key of Object.keys(this)) {
|
|
109
183
|
result[key] = this[key];
|
|
110
184
|
}
|
|
111
185
|
Object.assign(result, this[WEBDA_STORAGE]);
|
|
112
186
|
return result;
|
|
113
187
|
}
|
|
188
|
+
__hydrateBehaviors(rawData) {
|
|
189
|
+
{
|
|
190
|
+
let v = this.tokens;
|
|
191
|
+
if (rawData !== undefined && rawData !== null && rawData["tokens"] !== undefined) {
|
|
192
|
+
v = rawData["tokens"];
|
|
193
|
+
}
|
|
194
|
+
if (!(v instanceof EncryptedField)) {
|
|
195
|
+
const inst = new EncryptedField();
|
|
196
|
+
if (v !== undefined && v !== null) {
|
|
197
|
+
Object.assign(inst, v);
|
|
198
|
+
}
|
|
199
|
+
v = inst;
|
|
200
|
+
}
|
|
201
|
+
v[WEBDA_STORAGE] = v[WEBDA_STORAGE] || {};
|
|
202
|
+
v[WEBDA_STORAGE]["__parent__"] = { instance: this, attribute: "tokens" };
|
|
203
|
+
this.tokens = v;
|
|
204
|
+
}
|
|
205
|
+
}
|
|
114
206
|
}
|
|
115
207
|
//# sourceMappingURL=ident.model.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ident.model.js","sourceRoot":"","sources":["../../src/models/ident.model.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ident.model.js","sourceRoot":"","sources":["../../src/models/ident.model.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ownermodel.model.d.ts","sourceRoot":"","sources":["../../src/models/ownermodel.model.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,UAAU,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC3F,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AACvC,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAE5D;;;;;GAKG;AACH,8BAAsB,kBAAkB,CAAC,CAAC,SAAS,IAAI,CAAE,SAAQ,SAAS;IACxE;;OAEG;IACH,IAAI,KAAK,IAAI,SAAS,CAAC,CAAC,CAAC,CAExB;IACD,IAAI,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,EAU7D;IACD;;;OAGG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IAEjB;;;OAGG;IACH,QAAQ,CAAC,aAAa,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC;IAExC;;;OAGG;IACH,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,IAAI,CAGtC;IAED;;;;;OAKG;IACH,QAAQ,IAAI,SAAS,CAAC,CAAC,CAAC,CAEvB;IAED;;;;;OAKG;IACG,MAAM,CAAC,OAAO,EAAE,iBAAiB,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,CAalF;IAED;;;;;OAKG;IACH,MAAM,CAAC,kBAAkB,CAAC,OAAO,CAAC,EAAE,iBAAiB,GAAG,IAAI,GAAG;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAQjG;IAED,gFAAgF;IAChF,MAAM,IAAI,GAAG,
|
|
1
|
+
{"version":3,"file":"ownermodel.model.d.ts","sourceRoot":"","sources":["../../src/models/ownermodel.model.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,UAAU,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC3F,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AACvC,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAE5D;;;;;GAKG;AACH,8BAAsB,kBAAkB,CAAC,CAAC,SAAS,IAAI,CAAE,SAAQ,SAAS;IACxE;;OAEG;IACH,IAAI,KAAK,IAAI,SAAS,CAAC,CAAC,CAAC,CAExB;IACD,IAAI,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,EAU7D;IACD;;;OAGG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IAEjB;;;OAGG;IACH,QAAQ,CAAC,aAAa,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC;IAExC;;;OAGG;IACH,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,IAAI,CAGtC;IAED;;;;;OAKG;IACH,QAAQ,IAAI,SAAS,CAAC,CAAC,CAAC,CAEvB;IAED;;;;;OAKG;IACG,MAAM,CAAC,OAAO,EAAE,iBAAiB,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,CAalF;IAED;;;;;OAKG;IACH,MAAM,CAAC,kBAAkB,CAAC,OAAO,CAAC,EAAE,iBAAiB,GAAG,IAAI,GAAG;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAQjG;IAED,gFAAgF;IAChF,MAAM,IAAI,GAAG,CAQZ;CACF;AAED;;GAEG;AACH,qBAAa,UAAW,SAAQ,kBAAkB,CAAC,IAAI,CAAC;IACtD;;;OAGG;IACH,aAAa,IAAI,UAAU,CAAC,IAAI,CAAC,CAEhC;CACF"}
|
|
@@ -89,7 +89,8 @@ export class AbstractOwnerModel extends UuidModel {
|
|
|
89
89
|
}
|
|
90
90
|
/** Generated by @webda/content-mapper: include values held in WEBDA_STORAGE. */
|
|
91
91
|
toJSON() {
|
|
92
|
-
const
|
|
92
|
+
const parent = super.toJSON ? super.toJSON() : {};
|
|
93
|
+
const result = parent === this ? {} : parent;
|
|
93
94
|
for (const key of Object.keys(this)) {
|
|
94
95
|
result[key] = this[key];
|
|
95
96
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ownermodel.model.js","sourceRoot":"","sources":["../../src/models/ownermodel.model.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ownermodel.model.js","sourceRoot":"","sources":["../../src/models/ownermodel.model.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { WEBDA_STORAGE } from "@webda/models";
|
|
2
|
+
import * as WebdaError from "../errors/errors.js";
|
|
3
|
+
import type { User } from "./user.model.js";
|
|
4
|
+
/** Rule a candidate password must satisfy */
|
|
5
|
+
export interface PasswordPolicy {
|
|
6
|
+
/**
|
|
7
|
+
* @param password - candidate password
|
|
8
|
+
* @param user - user setting it, when known
|
|
9
|
+
* @returns true when acceptable
|
|
10
|
+
*/
|
|
11
|
+
validate(password: string, user?: User): Promise<boolean>;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Replace the active password policy (undefined restores the default `.{8,}`)
|
|
15
|
+
* @param policy - the policy
|
|
16
|
+
*/
|
|
17
|
+
export declare function registerPasswordPolicy(policy: PasswordPolicy | undefined): void;
|
|
18
|
+
/**
|
|
19
|
+
* Get the active password policy
|
|
20
|
+
* @returns the policy
|
|
21
|
+
*/
|
|
22
|
+
export declare function usePasswordPolicy(): PasswordPolicy;
|
|
23
|
+
/** Raised when a password does not satisfy the active policy (400 PASSWORD_POLICY) */
|
|
24
|
+
export declare class PasswordPolicyError extends WebdaError.HttpError {
|
|
25
|
+
/** @param message - error message */
|
|
26
|
+
constructor(message?: string);
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Non-enumerable flag set on a User whose data carried a v3 top-level `__password` mapped onto `password` at
|
|
30
|
+
* hydration: its stored record still has the v3 layout until it is saved again (`webda auth migrate`)
|
|
31
|
+
*/
|
|
32
|
+
export declare const V3_PASSWORD_MAPPED: unique symbol;
|
|
33
|
+
/**
|
|
34
|
+
* Password credential of a user: bcrypt hash and change timestamp
|
|
35
|
+
* @WebdaBehavior Webda/Password
|
|
36
|
+
*/
|
|
37
|
+
export declare class Password {
|
|
38
|
+
[WEBDA_STORAGE]: Record<string, any>;
|
|
39
|
+
/** bcrypt hash, never output */
|
|
40
|
+
__hash?: string;
|
|
41
|
+
/** Last change, ms since epoch */
|
|
42
|
+
changedAt?: number;
|
|
43
|
+
/**
|
|
44
|
+
* Owning user (set by behavior hydration)
|
|
45
|
+
* @returns the user or undefined when detached
|
|
46
|
+
*/
|
|
47
|
+
protected getUser(): User | undefined;
|
|
48
|
+
/**
|
|
49
|
+
* @returns true when a password is set
|
|
50
|
+
*/
|
|
51
|
+
hasPassword(): boolean;
|
|
52
|
+
/**
|
|
53
|
+
* Compare a candidate with the stored hash
|
|
54
|
+
* @param plain - candidate password
|
|
55
|
+
* @returns true when it matches
|
|
56
|
+
*/
|
|
57
|
+
verify(plain: string): Promise<boolean>;
|
|
58
|
+
/**
|
|
59
|
+
* Validate against the policy and store a new hash (does not save the user)
|
|
60
|
+
* @param plain - new password
|
|
61
|
+
*/
|
|
62
|
+
set(plain: string): Promise<void>;
|
|
63
|
+
/**
|
|
64
|
+
* Store an existing hash (migration)
|
|
65
|
+
* @param hash - bcrypt hash
|
|
66
|
+
* @param changedAt - change timestamp
|
|
67
|
+
*/
|
|
68
|
+
setHash(hash: string, changedAt?: number): void;
|
|
69
|
+
/**
|
|
70
|
+
* Change the password of the owning user
|
|
71
|
+
* @param current - current password
|
|
72
|
+
* @param next - new password
|
|
73
|
+
*/
|
|
74
|
+
change(current: string, next: string): Promise<void>;
|
|
75
|
+
get parent(): any;
|
|
76
|
+
toJSON(): Record<string, any>;
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=password.model.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"password.model.d.ts","sourceRoot":"","sources":["../../src/models/password.model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAE9C,OAAO,KAAK,UAAU,MAAM,qBAAqB,CAAC;AAGlD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAE5C,6CAA6C;AAC7C,MAAM,WAAW,cAAc;IAC7B;;;;OAIG;IACH,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CAC3D;AAKD;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,cAAc,GAAG,SAAS,GAAG,IAAI,CAE/E;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI,cAAc,CAElD;AAED,sFAAsF;AACtF,qBAAa,mBAAoB,SAAQ,UAAU,CAAC,SAAS;IAC3D,qCAAqC;IACrC,YAAY,OAAO,GAAE,MAA6C,EAGjE;CACF;AAED;;;GAGG;AACH,eAAO,MAAM,kBAAkB,eAA6B,CAAC;AAE7D;;;GAGG;AACH,qBAAa,QAAQ;IACnB,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAM;IAC1C,gCAAgC;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,kCAAkC;IAClC,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;;OAGG;IACH,SAAS,CAAC,OAAO,IAAI,IAAI,GAAG,SAAS,CAEpC;IAED;;OAEG;IACH,WAAW,IAAI,OAAO,CAErB;IAED;;;;OAIG;IACG,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAU5C;IAED;;;OAGG;IACG,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAMtC;IAED;;;;OAIG;IACH,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,GAAE,MAAmB,GAAG,IAAI,CAG1D;IAED;;;;OAIG;IAEG,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAQzD;IACD,IAAI,MAAM,QAAgD;IAC1D,MAAM,wBAcL;CACF"}
|