@antelopejs/dms 0.15.0 → 0.15.1
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/CHANGELOG.md +28 -0
- package/README.md +1 -1
- package/bin/control/journey.mjs +5 -0
- package/bin/control/session.mjs +1 -0
- package/bin/control/stack.mjs +1 -0
- package/dist/config/internal/state.d.ts +7 -0
- package/dist/config/internal/state.js +9 -0
- package/dist/config/internal/state.js.map +1 -1
- package/dist/config/startup-config.d.ts +1 -0
- package/dist/config/startup-config.js +11 -0
- package/dist/config/startup-config.js.map +1 -1
- package/dist/db/index.d.ts +1 -0
- package/dist/db/index.js +1 -0
- package/dist/db/index.js.map +1 -1
- package/dist/db/models/index.d.ts +1 -0
- package/dist/db/models/index.js +1 -0
- package/dist/db/models/index.js.map +1 -1
- package/dist/db/models/setupToken.model.d.ts +29 -0
- package/dist/db/models/setupToken.model.js +62 -0
- package/dist/db/models/setupToken.model.js.map +1 -0
- package/dist/db/setup-token.d.ts +2 -0
- package/dist/db/setup-token.js +28 -0
- package/dist/db/setup-token.js.map +1 -0
- package/dist/db/tables/index.d.ts +1 -0
- package/dist/db/tables/index.js +1 -0
- package/dist/db/tables/index.js.map +1 -1
- package/dist/db/tables/setupToken.table.d.ts +7 -0
- package/dist/db/tables/setupToken.table.js +34 -0
- package/dist/db/tables/setupToken.table.js.map +1 -0
- package/dist/implementations/dms/page/payloads.js +6 -10
- package/dist/implementations/dms/page/payloads.js.map +1 -1
- package/dist/implementations/dms/page/public-layout.d.ts +2 -0
- package/dist/implementations/dms/page/public-layout.js +45 -0
- package/dist/implementations/dms/page/public-layout.js.map +1 -0
- package/dist/index.d.ts +0 -1
- package/dist/index.js +6 -2
- package/dist/index.js.map +1 -1
- package/dist/pages/settings/users/current-password.js +1 -1
- package/dist/pages/settings/users/current-password.js.map +1 -1
- package/dist/routes/auth/login.d.ts +1 -1
- package/dist/routes/auth/login.js +7 -2
- package/dist/routes/auth/login.js.map +1 -1
- package/dist/routes/auth/password-hash-upgrade.d.ts +2 -0
- package/dist/routes/auth/password-hash-upgrade.js +22 -0
- package/dist/routes/auth/password-hash-upgrade.js.map +1 -0
- package/dist/routes/authentication.d.ts +2 -0
- package/dist/routes/authentication.js +2 -0
- package/dist/routes/authentication.js.map +1 -1
- package/dist/routes/onboarding.d.ts +3 -1
- package/dist/routes/onboarding.js +20 -3
- package/dist/routes/onboarding.js.map +1 -1
- package/dist/utils/ensure-default-tenant.d.ts +2 -1
- package/dist/utils/ensure-default-tenant.js +126 -8
- package/dist/utils/ensure-default-tenant.js.map +1 -1
- package/dist/validation/onboarding/register-admin.schema.d.ts +5 -0
- package/dist/validation/onboarding/register-admin.schema.js +3 -0
- package/dist/validation/onboarding/register-admin.schema.js.map +1 -1
- package/frontend-vue/layers/dms-core/i18n/locales/core-en-GB.json +1 -0
- package/frontend-vue/layers/dms-core/i18n/locales/core-fr-FR.json +1 -0
- package/frontend-vue/layers/dms-core/shared/types/app-config.ts +5 -0
- package/frontend-vue/layers/dms-layout/app/app.config.ts +1 -0
- package/frontend-vue/layers/dms-layout/app/build/components/layout/DashboardSidebar.vue +9 -9
- package/frontend-vue/layers/dms-layout/app/components/layout/AppLogo.vue +1 -0
- package/frontend-vue/layers/dms-layout/app/composables/page/useInstalledModules.ts +78 -0
- package/frontend-vue/layers/dms-layout/app/custom-pages/modules.vue +5 -24
- package/frontend-vue/layers/dms-layout/i18n/locales/layout-en-GB.json +2 -1
- package/frontend-vue/layers/dms-layout/i18n/locales/layout-fr-FR.json +2 -1
- package/frontend-vue/layers/dms-onboarding/app/components/onboarding/steps/register.vue +21 -1
- package/frontend-vue/layers/dms-onboarding/app/custom-pages/onboarding.vue +14 -0
- package/frontend-vue/layers/dms-onboarding/i18n/locales/onboarding-en-GB.json +2 -0
- package/frontend-vue/layers/dms-onboarding/i18n/locales/onboarding-fr-FR.json +2 -0
- package/package.json +3 -3
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -28,7 +28,7 @@ async function assertCurrentPassword(userModel, user, password, now = new Date()
|
|
|
28
28
|
(0, interface_api_util_1.assert)(stored?.password, HTTP_BAD_REQUEST, "error.password_not_set");
|
|
29
29
|
(0, interface_api_util_1.assert)(password, HTTP_BAD_REQUEST, INVALID_CURRENT_PASSWORD);
|
|
30
30
|
await claimAttempt(stored._id, now);
|
|
31
|
-
(0, interface_api_util_1.assert)(stored.
|
|
31
|
+
(0, interface_api_util_1.assert)(await stored.testHashAsync("password", password), HTTP_BAD_REQUEST, INVALID_CURRENT_PASSWORD);
|
|
32
32
|
await (0, interface_database_decorators_1.GetModel)(models_1.SignInAttemptsModel).clearCurrentPasswordAttempts(stored._id);
|
|
33
33
|
}
|
|
34
34
|
async function assertCurrentPasswordIfSet(userModel, user, password) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"current-password.js","sourceRoot":"","sources":["../../../../src/pages/settings/users/current-password.ts"],"names":[],"mappings":";;AA6CA,sDAgBC;AAMD,gEAQC;AA3ED,uEAAwD;AACxD,6FAAqE;AAErE,+CAAyD;AACzD,0CAAuE;AACvE,0CAAsD;AAEtD,MAAM,gBAAgB,GAAG,GAAG,CAAC;AAC7B,MAAM,sBAAsB,GAAG,GAAG,CAAC;AAEnC,MAAM,wBAAwB,GAAG,gCAAgC,CAAC;AAClE,MAAM,iBAAiB,GAAG,0CAA0C,CAAC;AAErE,SAAS,eAAe,CAAC,KAAa,EAAE,OAAe;IACrD,IAAA,2BAAM,EACJ,KAAK,GAAG,OAAO,IAAI,4BAAoB,EACvC,sBAAsB,EACtB,iBAAiB,CAClB,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,YAAY,CAAC,MAAc,EAAE,GAAS;IACnD,MAAM,QAAQ,GAAG,IAAA,wCAAQ,EAAC,4BAAmB,CAAC,CAAC;IAC/C,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,uBAAe,CAAC,CAAC;IACxD,MAAM,UAAU,GAAG,MAAM,QAAQ,CAAC,4BAA4B,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAC9E,eAAe,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;IAC/B,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,4BAA4B,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;IAC9E,MAAM,QAAQ,CAAC,WAAW,CACxB,MAAM,EACN,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,4BAAoB,CAAC,CAC/C,CAAC;IACF,eAAe,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AAC5B,CAAC;AAaM,KAAK,UAAU,qBAAqB,CACzC,SAAoB,EACpB,IAAU,EACV,QAA4B,EAC5B,GAAG,GAAG,IAAI,IAAI,EAAE;IAEhB,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC7C,IAAA,2BAAM,EAAC,MAAM,EAAE,QAAQ,EAAE,gBAAgB,EAAE,wBAAwB,CAAC,CAAC;IACrE,IAAA,2BAAM,EAAC,QAAQ,EAAE,gBAAgB,EAAE,wBAAwB,CAAC,CAAC;IAC7D,MAAM,YAAY,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACpC,IAAA,2BAAM,EACJ,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"current-password.js","sourceRoot":"","sources":["../../../../src/pages/settings/users/current-password.ts"],"names":[],"mappings":";;AA6CA,sDAgBC;AAMD,gEAQC;AA3ED,uEAAwD;AACxD,6FAAqE;AAErE,+CAAyD;AACzD,0CAAuE;AACvE,0CAAsD;AAEtD,MAAM,gBAAgB,GAAG,GAAG,CAAC;AAC7B,MAAM,sBAAsB,GAAG,GAAG,CAAC;AAEnC,MAAM,wBAAwB,GAAG,gCAAgC,CAAC;AAClE,MAAM,iBAAiB,GAAG,0CAA0C,CAAC;AAErE,SAAS,eAAe,CAAC,KAAa,EAAE,OAAe;IACrD,IAAA,2BAAM,EACJ,KAAK,GAAG,OAAO,IAAI,4BAAoB,EACvC,sBAAsB,EACtB,iBAAiB,CAClB,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,YAAY,CAAC,MAAc,EAAE,GAAS;IACnD,MAAM,QAAQ,GAAG,IAAA,wCAAQ,EAAC,4BAAmB,CAAC,CAAC;IAC/C,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,uBAAe,CAAC,CAAC;IACxD,MAAM,UAAU,GAAG,MAAM,QAAQ,CAAC,4BAA4B,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAC9E,eAAe,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;IAC/B,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,4BAA4B,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;IAC9E,MAAM,QAAQ,CAAC,WAAW,CACxB,MAAM,EACN,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,4BAAoB,CAAC,CAC/C,CAAC;IACF,eAAe,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AAC5B,CAAC;AAaM,KAAK,UAAU,qBAAqB,CACzC,SAAoB,EACpB,IAAU,EACV,QAA4B,EAC5B,GAAG,GAAG,IAAI,IAAI,EAAE;IAEhB,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC7C,IAAA,2BAAM,EAAC,MAAM,EAAE,QAAQ,EAAE,gBAAgB,EAAE,wBAAwB,CAAC,CAAC;IACrE,IAAA,2BAAM,EAAC,QAAQ,EAAE,gBAAgB,EAAE,wBAAwB,CAAC,CAAC;IAC7D,MAAM,YAAY,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACpC,IAAA,2BAAM,EACJ,MAAM,MAAM,CAAC,aAAa,CAAC,UAAU,EAAE,QAAQ,CAAC,EAChD,gBAAgB,EAChB,wBAAwB,CACzB,CAAC;IACF,MAAM,IAAA,wCAAQ,EAAC,4BAAmB,CAAC,CAAC,4BAA4B,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AAC/E,CAAC;AAMM,KAAK,UAAU,0BAA0B,CAC9C,SAAoB,EACpB,IAAU,EACV,QAA4B;IAE5B,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC7C,IAAI,CAAC,MAAM,EAAE,QAAQ;QAAE,OAAO;IAC9B,MAAM,qBAAqB,CAAC,SAAS,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;AACzD,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type SessionModel, type UserModel } from "@antelopejs/interface-dms/auth/db";
|
|
2
2
|
import type { ClientOrigin } from "../../utils";
|
|
3
3
|
import { authSchema } from "../../validation";
|
|
4
4
|
import { type LoginOutcome } from "./session-response";
|
|
@@ -2,9 +2,11 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.login = login;
|
|
4
4
|
const interface_api_util_1 = require("@antelopejs/interface-api-util");
|
|
5
|
+
const db_1 = require("@antelopejs/interface-dms/auth/db");
|
|
5
6
|
const hooks_1 = require("../../hooks");
|
|
6
7
|
const validation_1 = require("../../validation");
|
|
7
8
|
const utils_1 = require("../../utils");
|
|
9
|
+
const password_hash_upgrade_1 = require("./password-hash-upgrade");
|
|
8
10
|
const session_response_1 = require("./session-response");
|
|
9
11
|
const fire_and_forget_1 = require("@antelopejs/interface-dms/utils/fire-and-forget");
|
|
10
12
|
const HTTP_UNAUTHORIZED = 401;
|
|
@@ -14,8 +16,10 @@ async function login(userModel, sessionModel, body, userAgent, origin) {
|
|
|
14
16
|
const normalizedEmail = email.toLowerCase();
|
|
15
17
|
(0, utils_1.assertLoginAllowed)(normalizedEmail, origin.ip);
|
|
16
18
|
const user = await userModel.getByEmail(normalizedEmail);
|
|
17
|
-
const isPasswordValid =
|
|
18
|
-
if (
|
|
19
|
+
const isPasswordValid = await (user ?? new db_1.User()).testHashAsync("password", password);
|
|
20
|
+
if (isPasswordValid)
|
|
21
|
+
(0, utils_1.assertLoginAllowed)(normalizedEmail, origin.ip);
|
|
22
|
+
else
|
|
19
23
|
(0, utils_1.recordLoginFailure)(normalizedEmail, origin.ip);
|
|
20
24
|
(0, interface_api_util_1.assert)(user, HTTP_UNAUTHORIZED, INVALID_CREDENTIALS_MESSAGE);
|
|
21
25
|
(0, fire_and_forget_1.fireAndForget)(isPasswordValid
|
|
@@ -23,6 +27,7 @@ async function login(userModel, sessionModel, body, userAgent, origin) {
|
|
|
23
27
|
: (0, hooks_1.recordFailedPassword)(user), "failed password bookkeeping");
|
|
24
28
|
(0, interface_api_util_1.assert)(isPasswordValid, HTTP_UNAUTHORIZED, INVALID_CREDENTIALS_MESSAGE);
|
|
25
29
|
(0, utils_1.clearLoginFailures)(normalizedEmail);
|
|
30
|
+
(0, fire_and_forget_1.fireAndForget)((0, password_hash_upgrade_1.upgradePasswordHash)(userModel, user, password), "password hash upgrade");
|
|
26
31
|
return (0, session_response_1.resolveLoginOutcome)(sessionModel, user, userAgent, origin);
|
|
27
32
|
}
|
|
28
33
|
//# sourceMappingURL=login.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../../src/routes/auth/login.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../../src/routes/auth/login.ts"],"names":[],"mappings":";;AAqBA,sBAmCC;AAxDD,uEAA0E;AAC1E,0DAI2C;AAC3C,uCAAyE;AAEzE,iDAA8C;AAC9C,uCAIqB;AACrB,mEAA8D;AAC9D,yDAA4E;AAC5E,qFAAgF;AAEhF,MAAM,iBAAiB,GAAG,GAAG,CAAC;AAC9B,MAAM,2BAA2B,GAAG,2BAA2B,CAAC;AAEzD,KAAK,UAAU,KAAK,CACzB,SAAoB,EACpB,YAA0B,EAC1B,IAAkD,EAClD,SAAiB,EACjB,MAAoB;IAEpB,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,IAAA,qCAAgB,EAAC,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CACvD,uBAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAC1B,CAAC;IACF,MAAM,eAAe,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;IAC5C,IAAA,0BAAkB,EAAC,eAAe,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;IAC/C,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;IACzD,MAAM,eAAe,GAAG,MAAM,CAAC,IAAI,IAAI,IAAI,SAAI,EAAE,CAAC,CAAC,aAAa,CAC9D,UAAU,EACV,QAAQ,CACT,CAAC;IACF,IAAI,eAAe;QAAE,IAAA,0BAAkB,EAAC,eAAe,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;;QAC/D,IAAA,0BAAkB,EAAC,eAAe,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;IAEpD,IAAA,2BAAM,EAAC,IAAI,EAAE,iBAAiB,EAAE,2BAA2B,CAAC,CAAC;IAC7D,IAAA,+BAAa,EACX,eAAe;QACb,CAAC,CAAC,IAAA,4BAAoB,EAAC,IAAI,CAAC,GAAG,CAAC;QAChC,CAAC,CAAC,IAAA,4BAAoB,EAAC,IAAI,CAAC,EAC9B,6BAA6B,CAC9B,CAAC;IACF,IAAA,2BAAM,EAAC,eAAe,EAAE,iBAAiB,EAAE,2BAA2B,CAAC,CAAC;IACxE,IAAA,0BAAkB,EAAC,eAAe,CAAC,CAAC;IACpC,IAAA,+BAAa,EACX,IAAA,2CAAmB,EAAC,SAAS,EAAE,IAAI,EAAE,QAAQ,CAAC,EAC9C,uBAAuB,CACxB,CAAC;IAEF,OAAO,IAAA,sCAAmB,EAAC,YAAY,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;AACpE,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.upgradePasswordHash = upgradePasswordHash;
|
|
4
|
+
const interface_database_decorators_1 = require("@antelopejs/interface-database-decorators");
|
|
5
|
+
const db_1 = require("@antelopejs/interface-dms/auth/db");
|
|
6
|
+
async function upgradePasswordHash(userModel, user, password) {
|
|
7
|
+
if (!user.isHashOutdated("password"))
|
|
8
|
+
return;
|
|
9
|
+
const testedHash = user.password;
|
|
10
|
+
user.password = password;
|
|
11
|
+
const { _internal } = db_1.UserModel.toDatabase(user);
|
|
12
|
+
const storedHashes = { _internal };
|
|
13
|
+
await userModel.table
|
|
14
|
+
.getAll(user.email, "email")
|
|
15
|
+
.filter((row) => row
|
|
16
|
+
.key("_id")
|
|
17
|
+
.eq(user._id)
|
|
18
|
+
.and((0, interface_database_decorators_1.unlockrequest)(db_1.User, row, "password", []).eq(testedHash)))
|
|
19
|
+
.update(storedHashes)
|
|
20
|
+
.run();
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=password-hash-upgrade.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"password-hash-upgrade.js","sourceRoot":"","sources":["../../../src/routes/auth/password-hash-upgrade.ts"],"names":[],"mappings":";;AAcA,kDAoBC;AAlCD,6FAA0E;AAC1E,0DAAoE;AAa7D,KAAK,UAAU,mBAAmB,CACvC,SAAoB,EACpB,IAAU,EACV,QAAgB;IAEhB,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC;QAAE,OAAO;IAC7C,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC;IACjC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IACzB,MAAM,EAAE,SAAS,EAAE,GAAG,cAAS,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IACjD,MAAM,YAAY,GAA4C,EAAE,SAAS,EAAE,CAAC;IAC5E,MAAM,SAAS,CAAC,KAAK;SAClB,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC;SAC3B,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CACd,GAAG;SACA,GAAG,CAAC,KAAK,CAAC;SACV,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC;SACZ,GAAG,CAAC,IAAA,6CAAa,EAAC,SAAI,EAAE,GAAG,EAAE,UAAU,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAChE;SACA,MAAM,CAAC,YAAY,CAAC;SACpB,GAAG,EAAE,CAAC;AACX,CAAC"}
|
|
@@ -15,6 +15,8 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
17
|
__exportStar(require("./auth/invite"), exports);
|
|
18
|
+
__exportStar(require("./auth/login"), exports);
|
|
19
|
+
__exportStar(require("./auth/password-hash-upgrade"), exports);
|
|
18
20
|
__exportStar(require("./auth/signup"), exports);
|
|
19
21
|
__exportStar(require("./auth/validate-invite-token"), exports);
|
|
20
22
|
//# sourceMappingURL=authentication.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"authentication.js","sourceRoot":"","sources":["../../src/routes/authentication.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,gDAA8B;AAC9B,gDAA8B;AAC9B,+DAA6C"}
|
|
1
|
+
{"version":3,"file":"authentication.js","sourceRoot":"","sources":["../../src/routes/authentication.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,gDAA8B;AAC9B,+CAA6B;AAC7B,+DAA6C;AAC7C,gDAA8B;AAC9B,+DAA6C"}
|
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
import { UserModel } from "@antelopejs/interface-dms/auth/db";
|
|
2
|
-
import { SystemStateModel } from "../db";
|
|
2
|
+
import { SetupTokenModel, SystemStateModel } from "../db";
|
|
3
3
|
import { onboardingRegisterAdminSchema } from "../validation/onboarding";
|
|
4
4
|
declare const PublicOnboardingController_base: import("@antelopejs/interface-api").ControllerClass<object>;
|
|
5
5
|
export declare class PublicOnboardingController extends PublicOnboardingController_base {
|
|
6
6
|
model: SystemStateModel;
|
|
7
|
+
setupTokens: SetupTokenModel;
|
|
7
8
|
getInformations(userModel: UserModel): Promise<{
|
|
8
9
|
has_onboarded: boolean;
|
|
9
10
|
}>;
|
|
10
11
|
postRegister(userModel: UserModel, body: Parameters<typeof onboardingRegisterAdminSchema.parse>[0]): Promise<string[]>;
|
|
12
|
+
private restoreUnusedToken;
|
|
11
13
|
private createOwner;
|
|
12
14
|
private completeOnboarding;
|
|
13
15
|
}
|
|
@@ -41,9 +41,22 @@ class PublicOnboardingController extends (0, interface_api_1.Controller)("/api/o
|
|
|
41
41
|
const data = (0, interface_api_util_1.assertValidation)(body, (v) => onboarding_1.onboardingRegisterAdminSchema.parse(v));
|
|
42
42
|
const users = await userModel.table.slice(0, 1).run();
|
|
43
43
|
(0, interface_api_util_1.assert)(users.length === 0, 400, "error.admin_already_set");
|
|
44
|
-
const
|
|
45
|
-
|
|
46
|
-
|
|
44
|
+
const spentToken = await this.setupTokens.claim(data.setupToken);
|
|
45
|
+
(0, interface_api_util_1.assert)(spentToken, 403, "error.invalid_setup_token");
|
|
46
|
+
try {
|
|
47
|
+
const insertedIds = await this.createOwner(userModel, data);
|
|
48
|
+
await this.completeOnboarding(data);
|
|
49
|
+
return insertedIds;
|
|
50
|
+
}
|
|
51
|
+
catch (error) {
|
|
52
|
+
await this.restoreUnusedToken(userModel, spentToken);
|
|
53
|
+
throw error;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
async restoreUnusedToken(userModel, spentToken) {
|
|
57
|
+
const users = await userModel.table.slice(0, 1).run();
|
|
58
|
+
if (users.length === 0)
|
|
59
|
+
await this.setupTokens.restore(spentToken);
|
|
47
60
|
}
|
|
48
61
|
async createOwner(userModel, data) {
|
|
49
62
|
const insertedIds = await userModel.insert({
|
|
@@ -82,6 +95,10 @@ __decorate([
|
|
|
82
95
|
(0, interface_database_decorators_1.Model)(db_2.SystemStateModel),
|
|
83
96
|
__metadata("design:type", db_2.SystemStateModel)
|
|
84
97
|
], PublicOnboardingController.prototype, "model", void 0);
|
|
98
|
+
__decorate([
|
|
99
|
+
(0, interface_database_decorators_1.Model)(db_2.SetupTokenModel),
|
|
100
|
+
__metadata("design:type", db_2.SetupTokenModel)
|
|
101
|
+
], PublicOnboardingController.prototype, "setupTokens", void 0);
|
|
85
102
|
__decorate([
|
|
86
103
|
(0, interface_api_1.Get)("/informations"),
|
|
87
104
|
__param(0, (0, interface_database_decorators_1.Model)(db_1.UserModel)),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"onboarding.js","sourceRoot":"","sources":["../../src/routes/onboarding.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,6DAA4E;AAC5E,uEAA0E;AAC1E,6FAAkE;AAClE,mEAAwE;AACxE,iFAAkF;AAClF,0DAA8E;AAC9E,
|
|
1
|
+
{"version":3,"file":"onboarding.js","sourceRoot":"","sources":["../../src/routes/onboarding.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,2 +1,3 @@
|
|
|
1
|
+
import { type ProvisioningLeaseConfig } from "../config";
|
|
1
2
|
export declare function ensureDefaultTenantExists(): Promise<boolean>;
|
|
2
|
-
export declare function provisionDefaultTenant(): Promise<void>;
|
|
3
|
+
export declare function provisionDefaultTenant(signal?: AbortSignal, lease?: ProvisioningLeaseConfig): Promise<void>;
|
|
@@ -2,11 +2,16 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ensureDefaultTenantExists = ensureDefaultTenantExists;
|
|
4
4
|
exports.provisionDefaultTenant = provisionDefaultTenant;
|
|
5
|
+
const node_crypto_1 = require("node:crypto");
|
|
6
|
+
const node_os_1 = require("node:os");
|
|
7
|
+
const promises_1 = require("node:timers/promises");
|
|
5
8
|
const logging_1 = require("@antelopejs/interface-core/logging");
|
|
6
9
|
const interface_database_decorators_1 = require("@antelopejs/interface-database-decorators");
|
|
7
10
|
const constants_1 = require("@antelopejs/interface-dms/constants");
|
|
8
11
|
const db_1 = require("@antelopejs/interface-dms/db");
|
|
9
12
|
const tenant_provisioning_1 = require("@antelopejs/interface-dms/tenant-provisioning");
|
|
13
|
+
const config_1 = require("../config");
|
|
14
|
+
const NO_REVISION = { kind: "missing" };
|
|
10
15
|
function buildDefaultTenant() {
|
|
11
16
|
const now = new Date();
|
|
12
17
|
return {
|
|
@@ -24,21 +29,134 @@ async function ensureDefaultTenantExists() {
|
|
|
24
29
|
logging_1.Logging.Info(`Default tenant '${constants_1.DEFAULT_TENANT_ID}' already exists.`);
|
|
25
30
|
return false;
|
|
26
31
|
}
|
|
27
|
-
|
|
32
|
+
try {
|
|
33
|
+
await tenants.insert(buildDefaultTenant());
|
|
34
|
+
}
|
|
35
|
+
catch (error) {
|
|
36
|
+
if (!(await tenants.get(constants_1.DEFAULT_TENANT_ID)))
|
|
37
|
+
throw error;
|
|
38
|
+
logging_1.Logging.Info(`Default tenant '${constants_1.DEFAULT_TENANT_ID}' already exists.`);
|
|
39
|
+
return false;
|
|
40
|
+
}
|
|
28
41
|
logging_1.Logging.Info(`Default tenant '${constants_1.DEFAULT_TENANT_ID}' created.`);
|
|
29
42
|
return true;
|
|
30
43
|
}
|
|
31
|
-
async function
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
44
|
+
async function swapLease(expected, patch) {
|
|
45
|
+
const tenants = (0, interface_database_decorators_1.GetModel)(db_1.TenantModel);
|
|
46
|
+
const next = (0, node_crypto_1.randomUUID)();
|
|
47
|
+
const outcome = await tenants.table
|
|
48
|
+
.atomicMutation(constants_1.DEFAULT_TENANT_ID, {
|
|
49
|
+
type: "update",
|
|
50
|
+
revisionField: "provisioningRevision",
|
|
51
|
+
expectedRevision: expected,
|
|
52
|
+
nextRevision: next,
|
|
53
|
+
patch,
|
|
54
|
+
})
|
|
55
|
+
.run();
|
|
56
|
+
if (outcome === "applied")
|
|
57
|
+
return next;
|
|
58
|
+
if (outcome === "not-applied")
|
|
59
|
+
return undefined;
|
|
60
|
+
const stored = await tenants.get(constants_1.DEFAULT_TENANT_ID);
|
|
61
|
+
return stored?.provisioningRevision === next ? next : undefined;
|
|
62
|
+
}
|
|
63
|
+
function holdLease(claimed, renewEveryMs) {
|
|
64
|
+
let token = claimed;
|
|
65
|
+
let renewal = Promise.resolve();
|
|
66
|
+
const renew = async () => {
|
|
67
|
+
if (!token)
|
|
36
68
|
return;
|
|
69
|
+
try {
|
|
70
|
+
const next = await swapLease(token, {});
|
|
71
|
+
if (next) {
|
|
72
|
+
token = next;
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
const stored = await (0, interface_database_decorators_1.GetModel)(db_1.TenantModel).get(constants_1.DEFAULT_TENANT_ID);
|
|
76
|
+
if (stored?.provisioningRevision !== token)
|
|
77
|
+
token = undefined;
|
|
78
|
+
}
|
|
79
|
+
catch (error) {
|
|
80
|
+
logging_1.Logging.Warn(`Default tenant '${constants_1.DEFAULT_TENANT_ID}' lease renewal failed:`, error);
|
|
81
|
+
}
|
|
82
|
+
};
|
|
83
|
+
const timer = setInterval(() => {
|
|
84
|
+
renewal = renewal.then(renew);
|
|
85
|
+
}, renewEveryMs);
|
|
86
|
+
return {
|
|
87
|
+
async stopRenewing() {
|
|
88
|
+
clearInterval(timer);
|
|
89
|
+
await renewal;
|
|
90
|
+
return token;
|
|
91
|
+
},
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
async function provisionUnderLease(claimed, renewEveryMs) {
|
|
95
|
+
const lease = holdLease(claimed, renewEveryMs);
|
|
96
|
+
let failure;
|
|
97
|
+
try {
|
|
37
98
|
await (0, tenant_provisioning_1.ProvisionTenant)({ tenantId: constants_1.DEFAULT_TENANT_ID, extras: {} });
|
|
38
|
-
await tenants.update(constants_1.DEFAULT_TENANT_ID, { provisioningPending: false });
|
|
39
99
|
}
|
|
40
100
|
catch (error) {
|
|
41
|
-
|
|
101
|
+
failure = { error };
|
|
102
|
+
}
|
|
103
|
+
const token = await lease.stopRenewing();
|
|
104
|
+
if (failure) {
|
|
105
|
+
logging_1.Logging.Error(`Default tenant '${constants_1.DEFAULT_TENANT_ID}' provisioning failed:`, failure.error);
|
|
106
|
+
}
|
|
107
|
+
const finished = token &&
|
|
108
|
+
(await swapLease(token, {
|
|
109
|
+
provisioningHolder: null,
|
|
110
|
+
provisioningPending: failure !== undefined,
|
|
111
|
+
}));
|
|
112
|
+
if (!finished) {
|
|
113
|
+
logging_1.Logging.Warn(`Default tenant '${constants_1.DEFAULT_TENANT_ID}' provisioning lease was lost; another replica took over.`);
|
|
114
|
+
}
|
|
115
|
+
return finished !== undefined || failure !== undefined;
|
|
116
|
+
}
|
|
117
|
+
function createStaleWatch(staleAfterMs) {
|
|
118
|
+
let seen;
|
|
119
|
+
return {
|
|
120
|
+
forget() {
|
|
121
|
+
seen = undefined;
|
|
122
|
+
},
|
|
123
|
+
isStale(revision) {
|
|
124
|
+
const now = performance.now();
|
|
125
|
+
if (seen?.revision !== revision)
|
|
126
|
+
seen = undefined;
|
|
127
|
+
seen ??= { revision, at: now };
|
|
128
|
+
return now - seen.at >= staleAfterMs;
|
|
129
|
+
},
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
async function advanceLease(watch, renewEveryMs) {
|
|
133
|
+
const tenant = await (0, interface_database_decorators_1.GetModel)(db_1.TenantModel).get(constants_1.DEFAULT_TENANT_ID);
|
|
134
|
+
if (!tenant?.provisioningPending)
|
|
135
|
+
return true;
|
|
136
|
+
const stale = watch.isStale(tenant.provisioningRevision);
|
|
137
|
+
if (tenant.provisioningHolder && !stale)
|
|
138
|
+
return false;
|
|
139
|
+
const claimed = await swapLease(tenant.provisioningRevision ?? NO_REVISION, {
|
|
140
|
+
provisioningHolder: holderName(),
|
|
141
|
+
});
|
|
142
|
+
return claimed !== undefined && provisionUnderLease(claimed, renewEveryMs);
|
|
143
|
+
}
|
|
144
|
+
function holderName() {
|
|
145
|
+
return `${(0, node_os_1.hostname)()}:${process.pid}`;
|
|
146
|
+
}
|
|
147
|
+
async function provisionDefaultTenant(signal = new AbortController().signal, lease = (0, config_1.getProvisioningLeaseConfig)()) {
|
|
148
|
+
const { renewEveryMs, staleAfterMs, pollEveryMs } = lease;
|
|
149
|
+
const watch = createStaleWatch(staleAfterMs);
|
|
150
|
+
while (!signal.aborted) {
|
|
151
|
+
try {
|
|
152
|
+
if (await advanceLease(watch, renewEveryMs))
|
|
153
|
+
return;
|
|
154
|
+
}
|
|
155
|
+
catch (error) {
|
|
156
|
+
watch.forget();
|
|
157
|
+
logging_1.Logging.Warn(`Default tenant '${constants_1.DEFAULT_TENANT_ID}' provisioning lease check failed:`, error);
|
|
158
|
+
}
|
|
159
|
+
await (0, promises_1.setTimeout)(pollEveryMs, undefined, { signal }).catch(() => undefined);
|
|
42
160
|
}
|
|
43
161
|
}
|
|
44
162
|
//# sourceMappingURL=ensure-default-tenant.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ensure-default-tenant.js","sourceRoot":"","sources":["../../src/utils/ensure-default-tenant.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"ensure-default-tenant.js","sourceRoot":"","sources":["../../src/utils/ensure-default-tenant.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,6 +4,7 @@ export declare const onboardingRegisterAdminSchema: z.ZodEffects<z.ZodObject<{
|
|
|
4
4
|
firstName: z.ZodPipeline<z.ZodEffects<z.ZodString, string, string>, z.ZodString>;
|
|
5
5
|
lastName: z.ZodPipeline<z.ZodEffects<z.ZodString, string, string>, z.ZodString>;
|
|
6
6
|
password: z.ZodString;
|
|
7
|
+
setupToken: z.ZodOptional<z.ZodString>;
|
|
7
8
|
platformName: z.ZodOptional<z.ZodEffects<z.ZodString, string, string>>;
|
|
8
9
|
language: z.ZodOptional<z.ZodString>;
|
|
9
10
|
}, "strip", z.ZodTypeAny, {
|
|
@@ -13,6 +14,7 @@ export declare const onboardingRegisterAdminSchema: z.ZodEffects<z.ZodObject<{
|
|
|
13
14
|
lastName: string;
|
|
14
15
|
language?: string | undefined;
|
|
15
16
|
platformName?: string | undefined;
|
|
17
|
+
setupToken?: string | undefined;
|
|
16
18
|
}, {
|
|
17
19
|
email: string;
|
|
18
20
|
password: string;
|
|
@@ -20,10 +22,12 @@ export declare const onboardingRegisterAdminSchema: z.ZodEffects<z.ZodObject<{
|
|
|
20
22
|
lastName: string;
|
|
21
23
|
language?: string | undefined;
|
|
22
24
|
platformName?: string | undefined;
|
|
25
|
+
setupToken?: string | undefined;
|
|
23
26
|
}>, {
|
|
24
27
|
email: string;
|
|
25
28
|
name: string;
|
|
26
29
|
password: string;
|
|
30
|
+
setupToken: string | undefined;
|
|
27
31
|
platformName: string | undefined;
|
|
28
32
|
language: string | undefined;
|
|
29
33
|
}, {
|
|
@@ -33,5 +37,6 @@ export declare const onboardingRegisterAdminSchema: z.ZodEffects<z.ZodObject<{
|
|
|
33
37
|
lastName: string;
|
|
34
38
|
language?: string | undefined;
|
|
35
39
|
platformName?: string | undefined;
|
|
40
|
+
setupToken?: string | undefined;
|
|
36
41
|
}>;
|
|
37
42
|
export type OnboardingRegisterAdmin = z.output<typeof onboardingRegisterAdminSchema>;
|
|
@@ -43,6 +43,7 @@ const password_1 = require("../password");
|
|
|
43
43
|
const MAX_NAME_PART_LENGTH = 100;
|
|
44
44
|
const MAX_PLATFORM_NAME_LENGTH = 120;
|
|
45
45
|
const MAX_LANGUAGE_TAG_LENGTH = 35;
|
|
46
|
+
const MAX_SETUP_TOKEN_LENGTH = 256;
|
|
46
47
|
const LANGUAGE_TAG_PATTERN = /^[A-Za-z]{2,3}(?:-[A-Za-z0-9]{2,8})*$/;
|
|
47
48
|
function withoutTags(value) {
|
|
48
49
|
return (0, striptags_1.default)(value).trim();
|
|
@@ -58,6 +59,7 @@ exports.onboardingRegisterAdminSchema = z
|
|
|
58
59
|
firstName: namePartSchema,
|
|
59
60
|
lastName: namePartSchema,
|
|
60
61
|
password: password_1.passwordSchema,
|
|
62
|
+
setupToken: z.string().max(MAX_SETUP_TOKEN_LENGTH).optional(),
|
|
61
63
|
platformName: z
|
|
62
64
|
.string()
|
|
63
65
|
.max(MAX_PLATFORM_NAME_LENGTH)
|
|
@@ -73,6 +75,7 @@ exports.onboardingRegisterAdminSchema = z
|
|
|
73
75
|
email: (0, striptags_1.default)(data.email),
|
|
74
76
|
name: `${data.firstName} ${data.lastName}`,
|
|
75
77
|
password: data.password,
|
|
78
|
+
setupToken: data.setupToken,
|
|
76
79
|
platformName: data.platformName || undefined,
|
|
77
80
|
language: data.language,
|
|
78
81
|
}));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"register-admin.schema.js","sourceRoot":"","sources":["../../../src/validation/onboarding/register-admin.schema.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,0DAAkC;AAClC,uCAAyB;AAEzB,0CAA6C;AAE7C,MAAM,oBAAoB,GAAG,GAAG,CAAC;AACjC,MAAM,wBAAwB,GAAG,GAAG,CAAC;AACrC,MAAM,uBAAuB,GAAG,EAAE,CAAC;AACnC,MAAM,oBAAoB,GAAG,uCAAuC,CAAC;AAErE,SAAS,WAAW,CAAC,KAAa;IAChC,OAAO,IAAA,mBAAS,EAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;AACjC,CAAC;AAGD,MAAM,cAAc,GAAG,CAAC;KACrB,MAAM,EAAE;KACR,GAAG,CAAC,oBAAoB,CAAC;KACzB,SAAS,CAAC,WAAW,CAAC;KACtB,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"register-admin.schema.js","sourceRoot":"","sources":["../../../src/validation/onboarding/register-admin.schema.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,0DAAkC;AAClC,uCAAyB;AAEzB,0CAA6C;AAE7C,MAAM,oBAAoB,GAAG,GAAG,CAAC;AACjC,MAAM,wBAAwB,GAAG,GAAG,CAAC;AACrC,MAAM,uBAAuB,GAAG,EAAE,CAAC;AACnC,MAAM,sBAAsB,GAAG,GAAG,CAAC;AACnC,MAAM,oBAAoB,GAAG,uCAAuC,CAAC;AAErE,SAAS,WAAW,CAAC,KAAa;IAChC,OAAO,IAAA,mBAAS,EAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;AACjC,CAAC;AAGD,MAAM,cAAc,GAAG,CAAC;KACrB,MAAM,EAAE;KACR,GAAG,CAAC,oBAAoB,CAAC;KACzB,SAAS,CAAC,WAAW,CAAC;KACtB,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAQd,QAAA,6BAA6B,GAAG,CAAC;KAC3C,MAAM,CAAC;IACN,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE;IAChC,SAAS,EAAE,cAAc;IACzB,QAAQ,EAAE,cAAc;IACxB,QAAQ,EAAE,yBAAc;IACxB,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC,QAAQ,EAAE;IAC7D,YAAY,EAAE,CAAC;SACZ,MAAM,EAAE;SACR,GAAG,CAAC,wBAAwB,CAAC;SAC7B,SAAS,CAAC,WAAW,CAAC;SACtB,QAAQ,EAAE;IACb,QAAQ,EAAE,CAAC;SACR,MAAM,EAAE;SACR,GAAG,CAAC,uBAAuB,CAAC;SAC5B,KAAK,CAAC,oBAAoB,CAAC;SAC3B,QAAQ,EAAE;CACd,CAAC;KACD,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IACpB,KAAK,EAAE,IAAA,mBAAS,EAAC,IAAI,CAAC,KAAK,CAAC;IAC5B,IAAI,EAAE,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,QAAQ,EAAE;IAC1C,QAAQ,EAAE,IAAI,CAAC,QAAQ;IACvB,UAAU,EAAE,IAAI,CAAC,UAAU;IAC3B,YAAY,EAAE,IAAI,CAAC,YAAY,IAAI,SAAS;IAC5C,QAAQ,EAAE,IAAI,CAAC,QAAQ;CACxB,CAAC,CAAC,CAAC"}
|
|
@@ -64,6 +64,7 @@
|
|
|
64
64
|
"invite_used": "This invitation was already used. Please log in.",
|
|
65
65
|
"onboarding_already_completed": "Onboarding already completed.",
|
|
66
66
|
"admin_already_set": "An administrator account already exists.",
|
|
67
|
+
"invalid_setup_token": "The setup token is missing or wrong. Use the address in the server log, or the value of DMS_SETUP_TOKEN.",
|
|
67
68
|
"user_creation_failed": "The user account could not be created. Please try again.",
|
|
68
69
|
"settings_not_found": "General settings not found.",
|
|
69
70
|
"token_expired": "The validation code has expired.",
|
|
@@ -64,6 +64,7 @@
|
|
|
64
64
|
"invite_used": "Cette invitation a déjà été utilisée. Veuillez vous connecter.",
|
|
65
65
|
"onboarding_already_completed": "L'onboarding a déjà été completé.",
|
|
66
66
|
"admin_already_set": "Un compte administrateur existe déjà.",
|
|
67
|
+
"invalid_setup_token": "Le jeton d'installation est absent ou incorrect. Utilisez l'adresse affichée dans les logs du serveur, ou la valeur de DMS_SETUP_TOKEN.",
|
|
67
68
|
"user_creation_failed": "Le compte utilisateur n'a pas pu être créé. Veuillez réessayer.",
|
|
68
69
|
"settings_not_found": "Les paramètres généraux n'ont pas été trouvés.",
|
|
69
70
|
"token_expired": "Le code de validation a expiré.",
|
|
@@ -14,6 +14,11 @@ export interface DmsLogoSources {
|
|
|
14
14
|
|
|
15
15
|
/** The logos of an instance, one per place it is drawn. */
|
|
16
16
|
export interface DmsBrandingLogo {
|
|
17
|
+
/**
|
|
18
|
+
* The name a screen reader announces for the logo: the application's name.
|
|
19
|
+
* Set it with a logo of your own.
|
|
20
|
+
*/
|
|
21
|
+
alt?: string;
|
|
17
22
|
/** The expanded sidebar and the auth pages. */
|
|
18
23
|
default: DmsLogoSources;
|
|
19
24
|
/** The icon-only sidebar. */
|
|
@@ -13,6 +13,7 @@ import { useSidebarState } from "./sidebarState";
|
|
|
13
13
|
import { useKeyboardPlatform } from "#dms-ui/app/composables/global/keyboardPlatform";
|
|
14
14
|
import { useMediaQuery } from "@vueuse/core";
|
|
15
15
|
import DmsSidebarUserMenu from "./SidebarUserMenu.vue";
|
|
16
|
+
import { useInstalledModuleCount } from "../../../composables/page/useInstalledModules";
|
|
16
17
|
|
|
17
18
|
const MODULES_PATH = "/modules";
|
|
18
19
|
|
|
@@ -205,14 +206,7 @@ watch(
|
|
|
205
206
|
{ immediate: true },
|
|
206
207
|
);
|
|
207
208
|
|
|
208
|
-
const moduleCount =
|
|
209
|
-
const modulesNode =
|
|
210
|
-
siteLayout.siteLayoutTree.value?.children[MODULES_TREE_KEY];
|
|
211
|
-
if (!modulesNode) return 0;
|
|
212
|
-
return modulesNode.childrenOrders.filter(
|
|
213
|
-
(childId) => modulesNode.children[childId]?.isModuleRoot,
|
|
214
|
-
).length;
|
|
215
|
-
});
|
|
209
|
+
const moduleCount = useInstalledModuleCount();
|
|
216
210
|
|
|
217
211
|
const footerItems = computed((): NavigationMenuItem[] => {
|
|
218
212
|
const result: NavigationMenuItem[] = [];
|
|
@@ -297,7 +291,13 @@ const footerItems = computed((): NavigationMenuItem[] => {
|
|
|
297
291
|
"
|
|
298
292
|
:class="isRail(sidebarRail) ? 'size-7' : 'h-12 w-auto'"
|
|
299
293
|
class="object-contain"
|
|
300
|
-
:alt="
|
|
294
|
+
:alt="
|
|
295
|
+
appConfig.branding?.logo?.alt
|
|
296
|
+
? t('navigation.goToBrandHomepage', {
|
|
297
|
+
name: appConfig.branding.logo.alt,
|
|
298
|
+
})
|
|
299
|
+
: t('navigation.goToHomepage')
|
|
300
|
+
"
|
|
301
301
|
/>
|
|
302
302
|
</DmsLink>
|
|
303
303
|
</template>
|