@adaptivestone/framework 5.0.0-beta.3 → 5.0.0-beta.30
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 +1044 -526
- package/LICENCE +1 -1
- package/dist/Cli.d.ts +7 -0
- package/dist/Cli.js +19 -0
- package/dist/Cli.js.map +1 -0
- package/dist/cluster.d.ts +1 -0
- package/dist/cluster.js +18 -0
- package/dist/cluster.js.map +1 -0
- package/dist/commands/CreateUser.d.ts +32 -0
- package/dist/commands/CreateUser.js +83 -0
- package/dist/commands/CreateUser.js.map +1 -0
- package/dist/commands/Documentation.d.ts +5 -0
- package/dist/commands/Documentation.js +15 -0
- package/dist/commands/Documentation.js.map +1 -0
- package/dist/commands/DropIndex.d.ts +16 -0
- package/dist/commands/DropIndex.js +30 -0
- package/dist/commands/DropIndex.js.map +1 -0
- package/dist/commands/GenerateRandomBytes.d.ts +7 -0
- package/dist/commands/GenerateRandomBytes.js +18 -0
- package/dist/commands/GenerateRandomBytes.js.map +1 -0
- package/dist/commands/GenerateTypes.d.ts +11 -0
- package/dist/commands/GenerateTypes.js +52 -0
- package/dist/commands/GenerateTypes.js.map +1 -0
- package/dist/commands/GetOpenApiJson.d.ts +17 -0
- package/dist/commands/GetOpenApiJson.js +272 -0
- package/dist/commands/GetOpenApiJson.js.map +1 -0
- package/dist/commands/SyncIndexes.d.ts +6 -0
- package/dist/commands/SyncIndexes.js +31 -0
- package/dist/commands/SyncIndexes.js.map +1 -0
- package/dist/commands/migration/Create.d.ts +18 -0
- package/dist/commands/migration/Create.js +57 -0
- package/dist/commands/migration/Create.js.map +1 -0
- package/dist/commands/migration/Migrate.d.ts +6 -0
- package/dist/commands/migration/Migrate.js +43 -0
- package/dist/commands/migration/Migrate.js.map +1 -0
- package/dist/config/auth.d.ts +6 -0
- package/dist/config/auth.js +7 -0
- package/dist/config/auth.js.map +1 -0
- package/dist/config/http.d.ts +8 -0
- package/dist/config/http.js +10 -0
- package/dist/config/http.js.map +1 -0
- package/dist/config/i18n.d.ts +13 -0
- package/dist/config/i18n.js +13 -0
- package/dist/config/i18n.js.map +1 -0
- package/dist/config/ipDetector.d.ts +5 -0
- package/dist/config/ipDetector.js +15 -0
- package/dist/config/ipDetector.js.map +1 -0
- package/dist/config/log.d.ts +11 -0
- package/dist/config/log.js +23 -0
- package/dist/config/log.js.map +1 -0
- package/dist/config/mongo.d.ts +4 -0
- package/dist/config/mongo.js +4 -0
- package/dist/config/mongo.js.map +1 -0
- package/dist/config/rateLimiter.d.ts +13 -0
- package/dist/config/rateLimiter.js +17 -0
- package/dist/config/rateLimiter.js.map +1 -0
- package/dist/config/redis.d.ts +5 -0
- package/dist/config/redis.js +5 -0
- package/dist/config/redis.js.map +1 -0
- package/dist/config/validate.d.ts +4 -0
- package/dist/config/validate.js +4 -0
- package/dist/config/validate.js.map +1 -0
- package/dist/controllers/Auth.d.ts +131 -0
- package/dist/controllers/Auth.js +186 -0
- package/dist/controllers/Auth.js.map +1 -0
- package/dist/controllers/Home.d.ts +15 -0
- package/dist/controllers/Home.js +22 -0
- package/dist/controllers/Home.js.map +1 -0
- package/dist/controllers/index.d.ts +16 -0
- package/dist/controllers/index.js +59 -0
- package/dist/controllers/index.js.map +1 -0
- package/dist/folderConfig.d.ts +34 -0
- package/dist/folderConfig.js +14 -0
- package/dist/folderConfig.js.map +1 -0
- package/dist/helpers/appInstance.d.ts +3 -0
- package/dist/helpers/appInstance.js +8 -0
- package/dist/helpers/appInstance.js.map +1 -0
- package/dist/helpers/crypto.d.ts +3 -0
- package/dist/helpers/crypto.js +17 -0
- package/dist/helpers/crypto.js.map +1 -0
- package/dist/helpers/files.d.ts +16 -0
- package/dist/helpers/files.js +76 -0
- package/dist/helpers/files.js.map +1 -0
- package/dist/helpers/logger.d.ts +4 -0
- package/dist/helpers/logger.js +20 -0
- package/dist/helpers/logger.js.map +1 -0
- package/dist/helpers/redis/clearNamespace.d.ts +2 -0
- package/dist/helpers/redis/clearNamespace.js +14 -0
- package/dist/helpers/redis/clearNamespace.js.map +1 -0
- package/dist/helpers/yup.d.ts +13 -0
- package/dist/helpers/yup.js +21 -0
- package/dist/helpers/yup.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -0
- package/dist/models/Lock.d.ts +90 -0
- package/dist/models/Lock.js +97 -0
- package/dist/models/Lock.js.map +1 -0
- package/dist/models/Migration.d.ts +13 -0
- package/dist/models/Migration.js +14 -0
- package/dist/models/Migration.js.map +1 -0
- package/dist/models/Sequence.d.ts +28 -0
- package/dist/models/Sequence.js +19 -0
- package/dist/models/Sequence.js.map +1 -0
- package/dist/models/User.d.ts +656 -0
- package/dist/models/User.js +291 -0
- package/dist/models/User.js.map +1 -0
- package/dist/models/UserOld.d.ts +179 -0
- package/dist/models/UserOld.js +230 -0
- package/dist/models/UserOld.js.map +1 -0
- package/dist/modules/AbstractCommand.d.ts +51 -0
- package/dist/modules/AbstractCommand.js +60 -0
- package/dist/modules/AbstractCommand.js.map +1 -0
- package/dist/modules/AbstractConnector.d.ts +5 -0
- package/dist/modules/AbstractConnector.js +8 -0
- package/dist/modules/AbstractConnector.js.map +1 -0
- package/dist/modules/AbstractController.d.ts +94 -0
- package/dist/modules/AbstractController.js +323 -0
- package/dist/modules/AbstractController.js.map +1 -0
- package/dist/modules/AbstractModel.d.ts +29 -0
- package/dist/modules/AbstractModel.js +42 -0
- package/dist/modules/AbstractModel.js.map +1 -0
- package/dist/modules/Base.d.ts +29 -0
- package/dist/modules/Base.js +58 -0
- package/dist/modules/Base.js.map +1 -0
- package/dist/modules/BaseCli.d.ts +25 -0
- package/dist/modules/BaseCli.js +147 -0
- package/dist/modules/BaseCli.js.map +1 -0
- package/dist/modules/BaseModel.d.ts +55 -0
- package/dist/modules/BaseModel.js +37 -0
- package/dist/modules/BaseModel.js.map +1 -0
- package/dist/server.d.ts +120 -0
- package/dist/server.js +440 -0
- package/dist/server.js.map +1 -0
- package/dist/services/cache/Cache.d.ts +31 -0
- package/dist/services/cache/Cache.js +113 -0
- package/dist/services/cache/Cache.js.map +1 -0
- package/dist/services/documentation/DocumentationGenerator.d.ts +11 -0
- package/dist/services/documentation/DocumentationGenerator.js +130 -0
- package/dist/services/documentation/DocumentationGenerator.js.map +1 -0
- package/dist/services/http/HttpServer.d.ts +35 -0
- package/dist/services/http/HttpServer.js +70 -0
- package/dist/services/http/HttpServer.js.map +1 -0
- package/dist/services/http/middleware/AbstractMiddleware.d.ts +25 -0
- package/dist/services/http/middleware/AbstractMiddleware.js +41 -0
- package/dist/services/http/middleware/AbstractMiddleware.js.map +1 -0
- package/dist/services/http/middleware/Auth.d.ts +9 -0
- package/dist/services/http/middleware/Auth.js +18 -0
- package/dist/services/http/middleware/Auth.js.map +1 -0
- package/dist/services/http/middleware/Cors.d.ts +12 -0
- package/dist/services/http/middleware/Cors.js +36 -0
- package/dist/services/http/middleware/Cors.js.map +1 -0
- package/dist/services/http/middleware/GetUserByToken.d.ts +20 -0
- package/dist/services/http/middleware/GetUserByToken.js +39 -0
- package/dist/services/http/middleware/GetUserByToken.js.map +1 -0
- package/dist/services/http/middleware/I18n.d.ts +30 -0
- package/dist/services/http/middleware/I18n.js +96 -0
- package/dist/services/http/middleware/I18n.js.map +1 -0
- package/dist/services/http/middleware/IpDetector.d.ts +12 -0
- package/dist/services/http/middleware/IpDetector.js +51 -0
- package/dist/services/http/middleware/IpDetector.js.map +1 -0
- package/dist/services/http/middleware/Pagination.d.ts +27 -0
- package/dist/services/http/middleware/Pagination.js +46 -0
- package/dist/services/http/middleware/Pagination.js.map +1 -0
- package/dist/services/http/middleware/PrepareAppInfo.d.ts +8 -0
- package/dist/services/http/middleware/PrepareAppInfo.js +17 -0
- package/dist/services/http/middleware/PrepareAppInfo.js.map +1 -0
- package/dist/services/http/middleware/RateLimiter.d.ts +18 -0
- package/dist/services/http/middleware/RateLimiter.js +106 -0
- package/dist/services/http/middleware/RateLimiter.js.map +1 -0
- package/dist/services/http/middleware/RequestLogger.d.ts +8 -0
- package/dist/services/http/middleware/RequestLogger.js +18 -0
- package/dist/services/http/middleware/RequestLogger.js.map +1 -0
- package/dist/services/http/middleware/RequestParser.d.ts +8 -0
- package/dist/services/http/middleware/RequestParser.js +35 -0
- package/dist/services/http/middleware/RequestParser.js.map +1 -0
- package/dist/services/http/middleware/Role.d.ts +12 -0
- package/dist/services/http/middleware/Role.js +24 -0
- package/dist/services/http/middleware/Role.js.map +1 -0
- package/dist/services/validate/ValidateService.d.ts +31 -0
- package/dist/services/validate/ValidateService.js +95 -0
- package/dist/services/validate/ValidateService.js.map +1 -0
- package/dist/services/validate/drivers/AbstractValidator.d.ts +14 -0
- package/dist/services/validate/drivers/AbstractValidator.js +29 -0
- package/dist/services/validate/drivers/AbstractValidator.js.map +1 -0
- package/dist/services/validate/drivers/CustomValidator.d.ts +14 -0
- package/dist/services/validate/drivers/CustomValidator.js +48 -0
- package/dist/services/validate/drivers/CustomValidator.js.map +1 -0
- package/dist/services/validate/drivers/YupValidator.d.ts +13 -0
- package/dist/services/validate/drivers/YupValidator.js +86 -0
- package/dist/services/validate/drivers/YupValidator.js.map +1 -0
- package/dist/tests/frameworkVitestSetup.d.ts +1 -0
- package/dist/tests/frameworkVitestSetup.js +9 -0
- package/dist/tests/frameworkVitestSetup.js.map +1 -0
- package/dist/tests/globalSetupVitest.d.ts +3 -0
- package/dist/tests/globalSetupVitest.js +29 -0
- package/dist/tests/globalSetupVitest.js.map +1 -0
- package/dist/tests/setupVitest.d.ts +1 -0
- package/dist/tests/setupVitest.js +91 -0
- package/dist/tests/setupVitest.js.map +1 -0
- package/dist/tests/testHelpers.d.ts +340 -0
- package/dist/tests/testHelpers.js +48 -0
- package/dist/tests/testHelpers.js.map +1 -0
- package/package.json +38 -35
- package/Cli.js +0 -22
- package/cluster.js +0 -27
- package/commands/CreateUser.js +0 -75
- package/commands/Documentation.js +0 -17
- package/commands/DropIndex.js +0 -29
- package/commands/GenerateRandomBytes.js +0 -21
- package/commands/GetOpenApiJson.js +0 -325
- package/commands/SyncIndexes.js +0 -39
- package/commands/migration/Create.js +0 -61
- package/commands/migration/Migrate.js +0 -55
- package/config/auth.js +0 -9
- package/config/http.js +0 -9
- package/config/i18n.js +0 -12
- package/config/ipDetector.js +0 -14
- package/config/log.js +0 -22
- package/config/mail.js +0 -29
- package/config/mongo.js +0 -3
- package/config/rateLimiter.js +0 -16
- package/config/redis.js +0 -4
- package/config/validate.js +0 -3
- package/controllers/Auth.js +0 -210
- package/controllers/Home.js +0 -28
- package/controllers/index.js +0 -60
- package/folderConfig.js +0 -14
- package/helpers/files.js +0 -79
- package/helpers/logger.js +0 -17
- package/helpers/redis/clearNamespace.js +0 -14
- package/helpers/yup.js +0 -24
- package/index.js +0 -8
- package/jsconfig.json +0 -9
- package/locales/en/translation.json +0 -27
- package/locales/ru/translation.json +0 -27
- package/migrations/.gitkeep +0 -0
- package/models/Migration.js +0 -15
- package/models/Sequence.js +0 -22
- package/models/User.js +0 -263
- package/modules/AbstractCommand.js +0 -43
- package/modules/AbstractConnector.js +0 -9
- package/modules/AbstractController.js +0 -413
- package/modules/AbstractModel.d.ts +0 -48
- package/modules/AbstractModel.js +0 -88
- package/modules/Base.d.ts +0 -37
- package/modules/Base.js +0 -63
- package/modules/BaseCli.js +0 -97
- package/server.d.ts +0 -98
- package/server.js +0 -429
- package/services/cache/Cache.d.ts +0 -35
- package/services/cache/Cache.js +0 -124
- package/services/documentation/DocumentationGenerator.js +0 -169
- package/services/http/HttpServer.js +0 -96
- package/services/http/middleware/AbstractMiddleware.js +0 -51
- package/services/http/middleware/Auth.js +0 -20
- package/services/http/middleware/Cors.js +0 -46
- package/services/http/middleware/GetUserByToken.js +0 -47
- package/services/http/middleware/I18n.js +0 -117
- package/services/http/middleware/IpDetector.js +0 -59
- package/services/http/middleware/Pagination.js +0 -57
- package/services/http/middleware/PrepareAppInfo.js +0 -18
- package/services/http/middleware/RateLimiter.js +0 -134
- package/services/http/middleware/RequestLogger.js +0 -22
- package/services/http/middleware/RequestParser.js +0 -40
- package/services/http/middleware/Role.js +0 -29
- package/services/messaging/email/index.js +0 -217
- package/services/messaging/email/resources/.gitkeep +0 -1
- package/services/messaging/email/templates/emptyTemplate/html.pug +0 -9
- package/services/messaging/email/templates/emptyTemplate/subject.pug +0 -1
- package/services/messaging/email/templates/emptyTemplate/text.pug +0 -1
- package/services/messaging/email/templates/recovery/html.pug +0 -8
- package/services/messaging/email/templates/recovery/subject.pug +0 -2
- package/services/messaging/email/templates/recovery/text.pug +0 -3
- package/services/messaging/email/templates/verification/html.pug +0 -10
- package/services/messaging/email/templates/verification/subject.pug +0 -1
- package/services/messaging/email/templates/verification/text.pug +0 -1
- package/services/messaging/index.js +0 -3
- package/services/validate/ValidateService.js +0 -157
- package/services/validate/drivers/AbstractValidator.js +0 -37
- package/services/validate/drivers/CustomValidator.js +0 -51
- package/services/validate/drivers/YupValidator.js +0 -103
- package/tests/globalSetupVitest.js +0 -35
- package/tests/setup.js +0 -118
- package/tests/setupVitest.js +0 -109
- package/types/Expand.d.ts +0 -11
- package/types/TFoldersConfig.d.ts +0 -17
- package/views/404.pug +0 -3
- package/views/home.pug +0 -3
- package/views/layouts/base.pug +0 -39
- package/vitest.config.js +0 -16
- /package/{commands → dist/migrations}/.gitkeep +0 -0
package/helpers/logger.js
DELETED
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
/* eslint-disable no-console */
|
|
2
|
-
const levels = ['error', 'warn', 'info', 'http', 'verbose', 'debug', 'silly'];
|
|
3
|
-
|
|
4
|
-
const consoleLogger = (level, message) => {
|
|
5
|
-
if (
|
|
6
|
-
!process.env.LOGGER_CONSOLE_LEVEL ||
|
|
7
|
-
levels.indexOf(process.env.LOGGER_CONSOLE_LEVEL) >= levels.indexOf(level)
|
|
8
|
-
) {
|
|
9
|
-
if (console[level]) {
|
|
10
|
-
console[level](message);
|
|
11
|
-
} else {
|
|
12
|
-
console.log(message);
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
};
|
|
16
|
-
|
|
17
|
-
export { levels, consoleLogger };
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
async function clearNamespace(redisClient, namespace) {
|
|
2
|
-
const deletedKeys = [];
|
|
3
|
-
|
|
4
|
-
const keys = await redisClient.sendCommand(['keys', `*${namespace}*`]);
|
|
5
|
-
|
|
6
|
-
if (keys && keys.length > 0) {
|
|
7
|
-
for (const key of keys) {
|
|
8
|
-
deletedKeys.push(redisClient.sendCommand(['del', key]));
|
|
9
|
-
}
|
|
10
|
-
await Promise.all(deletedKeys);
|
|
11
|
-
}
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
export default clearNamespace;
|
package/helpers/yup.js
DELETED
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import { Schema } from 'yup';
|
|
2
|
-
import { PersistentFile } from 'formidable';
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* Validator for file
|
|
6
|
-
* use as
|
|
7
|
-
* @example
|
|
8
|
-
* request: yup.object().shape({
|
|
9
|
-
* someFile: new YupFile().required(),
|
|
10
|
-
* })
|
|
11
|
-
*/
|
|
12
|
-
class YupFile extends Schema {
|
|
13
|
-
constructor() {
|
|
14
|
-
super({
|
|
15
|
-
type: 'file',
|
|
16
|
-
check: (value) => value.every((item) => item instanceof PersistentFile),
|
|
17
|
-
});
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
export {
|
|
22
|
-
// eslint-disable-next-line import/prefer-default-export
|
|
23
|
-
YupFile,
|
|
24
|
-
};
|
package/index.js
DELETED
package/jsconfig.json
DELETED
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"auth": {
|
|
3
|
-
"userProvided": "User not specified",
|
|
4
|
-
"passwordProvided": "Password must be provided",
|
|
5
|
-
"emailProvided": "Email must be provided",
|
|
6
|
-
"nickNameValid": "Nick name is not valid,only a-z,A-Z,0-9",
|
|
7
|
-
"passwordValid": "Password is not valid,only a-z,A-Z,0-9,!,@,#,$,%,ˆ,&,*,(,),_,+,{,},[,],<,>",
|
|
8
|
-
"emailValid": "Email is not valid",
|
|
9
|
-
"errorUPValid": "User/password not valid",
|
|
10
|
-
"messageSome": "Some server problem. Please try later",
|
|
11
|
-
"errorUExist": "User with such email isn't registered on this site",
|
|
12
|
-
"errorUAlready": "That user already exists",
|
|
13
|
-
"nicknameExists": "User with such nickname already exists",
|
|
14
|
-
"noAccessRights": "No access rights"
|
|
15
|
-
},
|
|
16
|
-
"email": {
|
|
17
|
-
"newPassword": "New password",
|
|
18
|
-
"verify": "Verify email",
|
|
19
|
-
"notVerified": "Your email is not verified",
|
|
20
|
-
"registered": "User with such an email already registered",
|
|
21
|
-
"alreadyVerifiedOrWrongToken": "Your email is already verified or your verification token is wrong",
|
|
22
|
-
"greeating": "Dear user",
|
|
23
|
-
"passwordChanged": "Password changed",
|
|
24
|
-
"passwordRecovery": "Recovery password",
|
|
25
|
-
"emailConfirm": "Email confirmation"
|
|
26
|
-
}
|
|
27
|
-
}
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"auth": {
|
|
3
|
-
"userProvided": "Пользователь не указан",
|
|
4
|
-
"passwordProvided": "Нужно ввести пароль",
|
|
5
|
-
"emailProvided": "Нужно указать Email",
|
|
6
|
-
"nickNameValid": "Неверный формат ника,только a-z,A-Z,0-9",
|
|
7
|
-
"passwordValid": "Неверный формат пароля,только a-z,A-Z,0-9,!,@,#,$,%,ˆ,&,*,(,),_,+,{,},[,],<,>",
|
|
8
|
-
"emailValid": "Неверный формат Email-а",
|
|
9
|
-
"errorUPValid": "Не правильно указаны емэйл или пароль",
|
|
10
|
-
"messageSome": "Проблемы с сервером. Пожалуйста попробуйте позже",
|
|
11
|
-
"errorUExist": "Пользователь с таким эмэйлом не зарегистрирован на этом сайте",
|
|
12
|
-
"errorUAlready": "Такой пользователь уже существует",
|
|
13
|
-
"nicknameExists": "Пользователь с таким никнеймом уже существует",
|
|
14
|
-
"noAccessRights": "Нет прав доступа"
|
|
15
|
-
},
|
|
16
|
-
"email": {
|
|
17
|
-
"newPassword": "Новый пароль",
|
|
18
|
-
"verify": "Подтвердить емэйл",
|
|
19
|
-
"notVerified": "Ваш емэйл не подтверждён",
|
|
20
|
-
"registered": "Пользователь с таким емэйлом уже зарегестрирован",
|
|
21
|
-
"alreadyVerifiedOrWrongToken": "Ваш емэйл уже подтверждён или ваш ключ подтверждения неверный",
|
|
22
|
-
"greeating": "Здравствуйте, пользователь",
|
|
23
|
-
"passwordChanged": "Пароль был изменен",
|
|
24
|
-
"passwordRecovery": "Восстановление пароля",
|
|
25
|
-
"emailConfirm": "Подтверждение Email"
|
|
26
|
-
}
|
|
27
|
-
}
|
package/migrations/.gitkeep
DELETED
|
File without changes
|
package/models/Migration.js
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import AbstractModel from '../modules/AbstractModel.js';
|
|
2
|
-
|
|
3
|
-
class Migration extends AbstractModel {
|
|
4
|
-
// eslint-disable-next-line class-methods-use-this
|
|
5
|
-
get modelSchema() {
|
|
6
|
-
return {
|
|
7
|
-
migrationFile: {
|
|
8
|
-
type: String,
|
|
9
|
-
unique: true,
|
|
10
|
-
},
|
|
11
|
-
};
|
|
12
|
-
}
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
export default Migration;
|
package/models/Sequence.js
DELETED
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import AbstractModel from '../modules/AbstractModel.js';
|
|
2
|
-
|
|
3
|
-
class Sequence extends AbstractModel {
|
|
4
|
-
// eslint-disable-next-line class-methods-use-this
|
|
5
|
-
get modelSchema() {
|
|
6
|
-
return {
|
|
7
|
-
_id: { type: String, required: true },
|
|
8
|
-
seq: { type: Number, default: 1 },
|
|
9
|
-
};
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
static async getSequence(forType) {
|
|
13
|
-
const sequence = await this.findByIdAndUpdate(
|
|
14
|
-
{ _id: forType },
|
|
15
|
-
{ $inc: { seq: 1 } },
|
|
16
|
-
{ new: true, upsert: true },
|
|
17
|
-
);
|
|
18
|
-
return sequence.seq;
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
export default Sequence;
|
package/models/User.js
DELETED
|
@@ -1,263 +0,0 @@
|
|
|
1
|
-
/* eslint-disable no-param-reassign */
|
|
2
|
-
|
|
3
|
-
import { scrypt } from 'node:crypto';
|
|
4
|
-
|
|
5
|
-
import { promisify } from 'node:util';
|
|
6
|
-
import AbstractModel from '../modules/AbstractModel.js';
|
|
7
|
-
|
|
8
|
-
class User extends AbstractModel {
|
|
9
|
-
constructor(app) {
|
|
10
|
-
super(app);
|
|
11
|
-
const authConfig = this.app.getConfig('auth');
|
|
12
|
-
this.hashRounds = authConfig.hashRounds;
|
|
13
|
-
this.saltSecret = authConfig.saltSecret;
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
initHooks() {
|
|
17
|
-
this.mongooseSchema.pre('save', async function userPreSaveHook() {
|
|
18
|
-
if (this.isModified('password')) {
|
|
19
|
-
this.password = await this.constructor.hashPassword(this.password);
|
|
20
|
-
}
|
|
21
|
-
});
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
// eslint-disable-next-line class-methods-use-this
|
|
25
|
-
get modelSchema() {
|
|
26
|
-
return {
|
|
27
|
-
avatar: {
|
|
28
|
-
type: String,
|
|
29
|
-
maxlength: 255,
|
|
30
|
-
},
|
|
31
|
-
name: {
|
|
32
|
-
first: {
|
|
33
|
-
type: String,
|
|
34
|
-
maxlength: 255,
|
|
35
|
-
},
|
|
36
|
-
last: {
|
|
37
|
-
type: String,
|
|
38
|
-
maxlength: 255,
|
|
39
|
-
},
|
|
40
|
-
nick: {
|
|
41
|
-
minlength: 3,
|
|
42
|
-
maxlength: 255,
|
|
43
|
-
type: String,
|
|
44
|
-
index: {
|
|
45
|
-
unique: true,
|
|
46
|
-
partialFilterExpression: { 'name.nick': { $type: 'string' } },
|
|
47
|
-
},
|
|
48
|
-
},
|
|
49
|
-
},
|
|
50
|
-
password: String,
|
|
51
|
-
email: {
|
|
52
|
-
type: String,
|
|
53
|
-
maxlength: 255,
|
|
54
|
-
index: {
|
|
55
|
-
unique: true,
|
|
56
|
-
partialFilterExpression: { email: { $type: 'string' } },
|
|
57
|
-
},
|
|
58
|
-
},
|
|
59
|
-
sessionTokens: [{ token: String, valid: Date }],
|
|
60
|
-
verificationTokens: [{ until: Date, token: String }],
|
|
61
|
-
passwordRecoveryTokens: [{ until: Date, token: String }],
|
|
62
|
-
permissions: [],
|
|
63
|
-
roles: [],
|
|
64
|
-
isVerified: { type: Boolean, default: false },
|
|
65
|
-
locale: { type: String, default: 'en' },
|
|
66
|
-
languages: [String],
|
|
67
|
-
};
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
static async getUserByEmailAndPassword(email, password) {
|
|
71
|
-
const data = await this.findOne({ email: String(email) });
|
|
72
|
-
if (!data) {
|
|
73
|
-
return false;
|
|
74
|
-
}
|
|
75
|
-
const hashedPasswords = await this.hashPassword(password);
|
|
76
|
-
|
|
77
|
-
if (data.password !== hashedPasswords) {
|
|
78
|
-
return false;
|
|
79
|
-
}
|
|
80
|
-
return data;
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
async generateToken() {
|
|
84
|
-
const timestamp = new Date();
|
|
85
|
-
timestamp.setDate(timestamp.getDate() + 30);
|
|
86
|
-
const scryptAsync = promisify(scrypt);
|
|
87
|
-
const data = await scryptAsync(
|
|
88
|
-
this.email + Date.now(),
|
|
89
|
-
this.getSuper().saltSecret,
|
|
90
|
-
this.getSuper().hashRounds,
|
|
91
|
-
);
|
|
92
|
-
const token = data.toString('base64url');
|
|
93
|
-
this.sessionTokens.push({ token, valid: timestamp });
|
|
94
|
-
await this.save();
|
|
95
|
-
return { token, valid: timestamp };
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
getPublic() {
|
|
99
|
-
return {
|
|
100
|
-
avatar: this.avatar,
|
|
101
|
-
name: this.name,
|
|
102
|
-
email: this.email,
|
|
103
|
-
id: this.id,
|
|
104
|
-
isVerified: this.isVerified,
|
|
105
|
-
permissions: this.permissions,
|
|
106
|
-
locale: this.locale,
|
|
107
|
-
};
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
static async hashPassword(password) {
|
|
111
|
-
const scryptAsync = promisify(scrypt);
|
|
112
|
-
const data = await scryptAsync(
|
|
113
|
-
String(password),
|
|
114
|
-
this.getSuper().saltSecret,
|
|
115
|
-
this.getSuper().hashRounds,
|
|
116
|
-
);
|
|
117
|
-
return data.toString('base64url');
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
static async getUserByToken(token) {
|
|
121
|
-
const data = await this.findOne({ 'sessionTokens.token': String(token) });
|
|
122
|
-
return data || false;
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
static async getUserByEmail(email) {
|
|
126
|
-
const data = await this.findOne({ email: String(email) });
|
|
127
|
-
if (!data) {
|
|
128
|
-
return false;
|
|
129
|
-
}
|
|
130
|
-
return data;
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
static async generateUserPasswordRecoveryToken(userMongoose) {
|
|
134
|
-
const date = new Date();
|
|
135
|
-
date.setDate(date.getDate() + 14);
|
|
136
|
-
const scryptAsync = promisify(scrypt);
|
|
137
|
-
const data = await scryptAsync(
|
|
138
|
-
userMongoose.email + Date.now(),
|
|
139
|
-
userMongoose.getSuper().saltSecret,
|
|
140
|
-
userMongoose.getSuper().hashRounds,
|
|
141
|
-
);
|
|
142
|
-
const token = data.toString('base64url');
|
|
143
|
-
// if (err) {
|
|
144
|
-
// this.logger.error("Hash 2 error ", err);
|
|
145
|
-
// reject(err);
|
|
146
|
-
// return;
|
|
147
|
-
// }
|
|
148
|
-
userMongoose.passwordRecoveryTokens = [];
|
|
149
|
-
userMongoose.passwordRecoveryTokens.push({
|
|
150
|
-
until: date,
|
|
151
|
-
token,
|
|
152
|
-
});
|
|
153
|
-
await userMongoose.save();
|
|
154
|
-
return { token, until: date.getTime() };
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
static async getUserByPasswordRecoveryToken(passwordRecoveryToken) {
|
|
158
|
-
const data = await this.findOne({
|
|
159
|
-
passwordRecoveryTokens: {
|
|
160
|
-
$elemMatch: { token: String(passwordRecoveryToken) },
|
|
161
|
-
},
|
|
162
|
-
});
|
|
163
|
-
if (!data) {
|
|
164
|
-
return Promise.reject(new Error('User not exists'));
|
|
165
|
-
}
|
|
166
|
-
// TODO token expiration and remove that token
|
|
167
|
-
|
|
168
|
-
data.passwordRecoveryTokens.pop();
|
|
169
|
-
|
|
170
|
-
const result = await data.save();
|
|
171
|
-
return result;
|
|
172
|
-
}
|
|
173
|
-
|
|
174
|
-
async sendPasswordRecoveryEmail(i18n) {
|
|
175
|
-
const passwordRecoveryToken =
|
|
176
|
-
await User.generateUserPasswordRecoveryToken(this);
|
|
177
|
-
// speed optimisation
|
|
178
|
-
const Mailer = (await import('../services/messaging/email/index.js'))
|
|
179
|
-
.default;
|
|
180
|
-
|
|
181
|
-
const mail = new Mailer(
|
|
182
|
-
this.getSuper().app,
|
|
183
|
-
'recovery',
|
|
184
|
-
{
|
|
185
|
-
link: `${i18n.language}/auth/recovery?password_recovery_token=${passwordRecoveryToken.token}`,
|
|
186
|
-
editor: this.name.nick,
|
|
187
|
-
},
|
|
188
|
-
i18n,
|
|
189
|
-
);
|
|
190
|
-
return mail.send(this.email);
|
|
191
|
-
}
|
|
192
|
-
|
|
193
|
-
static async generateUserVerificationToken(userMongoose) {
|
|
194
|
-
const date = new Date();
|
|
195
|
-
date.setDate(date.getDate() + 14);
|
|
196
|
-
const scryptAsync = promisify(scrypt);
|
|
197
|
-
const data = await scryptAsync(
|
|
198
|
-
userMongoose.email + Date.now(),
|
|
199
|
-
userMongoose.getSuper().saltSecret,
|
|
200
|
-
userMongoose.getSuper().hashRounds,
|
|
201
|
-
);
|
|
202
|
-
const token = data.toString('base64url');
|
|
203
|
-
// if (err) {
|
|
204
|
-
// this.logger.error("Hash 2 error ", err);
|
|
205
|
-
// reject(err);
|
|
206
|
-
// return;
|
|
207
|
-
// }
|
|
208
|
-
userMongoose.verificationTokens = [];
|
|
209
|
-
userMongoose.verificationTokens.push({
|
|
210
|
-
until: date,
|
|
211
|
-
token,
|
|
212
|
-
});
|
|
213
|
-
await userMongoose.save();
|
|
214
|
-
return { token, until: date.getTime() };
|
|
215
|
-
}
|
|
216
|
-
|
|
217
|
-
static async getUserByVerificationToken(verificationToken) {
|
|
218
|
-
const data = await this.findOne({
|
|
219
|
-
verificationTokens: {
|
|
220
|
-
$elemMatch: { token: String(verificationToken) },
|
|
221
|
-
},
|
|
222
|
-
});
|
|
223
|
-
if (!data) {
|
|
224
|
-
return Promise.reject(new Error('User not exists'));
|
|
225
|
-
}
|
|
226
|
-
// TODO token expiration and remove that token
|
|
227
|
-
|
|
228
|
-
data.verificationTokens.pop();
|
|
229
|
-
|
|
230
|
-
const result = await data.save();
|
|
231
|
-
return result;
|
|
232
|
-
}
|
|
233
|
-
|
|
234
|
-
// async removeVerificationToken(verificationToken) {
|
|
235
|
-
// this.mongooseModel.updateOne(
|
|
236
|
-
// {
|
|
237
|
-
// verificationTokens: {
|
|
238
|
-
// $elemMatch: { token: String(verificationToken) },
|
|
239
|
-
// },
|
|
240
|
-
// },
|
|
241
|
-
// { $pop: { verificationTokens: 1 } },
|
|
242
|
-
// );
|
|
243
|
-
// }
|
|
244
|
-
|
|
245
|
-
async sendVerificationEmail(i18n) {
|
|
246
|
-
const verificationToken = await User.generateUserVerificationToken(this);
|
|
247
|
-
// speed optimisation
|
|
248
|
-
const Mailer = (await import('../services/messaging/email/index.js'))
|
|
249
|
-
.default;
|
|
250
|
-
const mail = new Mailer(
|
|
251
|
-
this.getSuper().app,
|
|
252
|
-
'verification',
|
|
253
|
-
{
|
|
254
|
-
link: `${i18n.language}/auth/login?verification_token=${verificationToken.token}`,
|
|
255
|
-
editor: this.name.nick,
|
|
256
|
-
},
|
|
257
|
-
i18n,
|
|
258
|
-
);
|
|
259
|
-
return mail.send(this.email);
|
|
260
|
-
}
|
|
261
|
-
}
|
|
262
|
-
|
|
263
|
-
export default User;
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
import Base from './Base.js';
|
|
2
|
-
|
|
3
|
-
class AbstractCommand extends Base {
|
|
4
|
-
constructor(app, commands, args) {
|
|
5
|
-
super(app);
|
|
6
|
-
this.args = args;
|
|
7
|
-
this.commands = commands;
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
static get description() {
|
|
11
|
-
return 'Command description. PLEASE PROVIDE IT';
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
/**
|
|
15
|
-
* If true, then this command will load models and init mongo connection
|
|
16
|
-
*/
|
|
17
|
-
static isShouldInitModels = true;
|
|
18
|
-
|
|
19
|
-
/**
|
|
20
|
-
* Get mongo connection name
|
|
21
|
-
* @param {String} commandName
|
|
22
|
-
* @param {object} args
|
|
23
|
-
* @returns string
|
|
24
|
-
*/
|
|
25
|
-
static getMongoConnectionName(commandName, args) {
|
|
26
|
-
return `CLI: ${commandName} ${args.join(' ')}`;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
/**
|
|
30
|
-
* Entry point to every command. This method should be overridden
|
|
31
|
-
* @return {Promise<boolean>} resut
|
|
32
|
-
*/
|
|
33
|
-
async run() {
|
|
34
|
-
this.logger.error('You should implement run method');
|
|
35
|
-
return false;
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
static get loggerGroup() {
|
|
39
|
-
return 'command';
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
export default AbstractCommand;
|