@adaptivestone/framework 5.0.0-beta.4 → 5.0.0-beta.41
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 +1117 -528
- 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 +20 -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/redis/redisConnection.d.ts +6 -0
- package/dist/helpers/redis/redisConnection.js +48 -0
- package/dist/helpers/redis/redisConnection.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 +95 -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 +123 -0
- package/dist/server.js +468 -0
- package/dist/server.js.map +1 -0
- package/dist/services/cache/Cache.d.ts +31 -0
- package/dist/services/cache/Cache.js +102 -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 +26 -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 +27 -0
- package/dist/services/http/middleware/GetUserByToken.js +47 -0
- package/dist/services/http/middleware/GetUserByToken.js.map +1 -0
- package/dist/services/http/middleware/I18n.d.ts +23 -0
- package/dist/services/http/middleware/I18n.js +61 -0
- package/dist/services/http/middleware/I18n.js.map +1 -0
- package/dist/services/http/middleware/IpDetector.d.ts +14 -0
- package/dist/services/http/middleware/IpDetector.js +55 -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 +26 -0
- package/dist/services/http/middleware/RateLimiter.js +102 -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/i18n/I18n.d.ts +15 -0
- package/dist/services/i18n/I18n.js +58 -0
- package/dist/services/i18n/I18n.js.map +1 -0
- package/dist/services/logging/SentryTransport.d.ts +13 -0
- package/dist/services/logging/SentryTransport.js +121 -0
- package/dist/services/logging/SentryTransport.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 +53 -40
- 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 -92
- 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 -438
- 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/controllers/Auth.js
DELETED
|
@@ -1,210 +0,0 @@
|
|
|
1
|
-
import yup from 'yup';
|
|
2
|
-
import AbstractController from '../modules/AbstractController.js';
|
|
3
|
-
import GetUserByToken from '../services/http/middleware/GetUserByToken.js';
|
|
4
|
-
import RateLimiter from '../services/http/middleware/RateLimiter.js';
|
|
5
|
-
|
|
6
|
-
class Auth extends AbstractController {
|
|
7
|
-
get routes() {
|
|
8
|
-
return {
|
|
9
|
-
post: {
|
|
10
|
-
'/login': {
|
|
11
|
-
handler: this.postLogin,
|
|
12
|
-
request: yup.object().shape({
|
|
13
|
-
email: yup.string().email().required('auth.emailProvided'), // if not provided then error will be generated
|
|
14
|
-
password: yup.string().required('auth.passwordProvided'), // possible to provide values from translation
|
|
15
|
-
}),
|
|
16
|
-
},
|
|
17
|
-
'/register': {
|
|
18
|
-
handler: this.postRegister,
|
|
19
|
-
request: yup.object().shape({
|
|
20
|
-
email: yup
|
|
21
|
-
.string()
|
|
22
|
-
.email('auth.emailValid')
|
|
23
|
-
.required('auth.emailProvided'),
|
|
24
|
-
password: yup
|
|
25
|
-
.string()
|
|
26
|
-
.matches(
|
|
27
|
-
/^[a-zA-Z0-9!@#$%ˆ^&*()_+\-{}[\]<>]+$/,
|
|
28
|
-
'auth.passwordValid',
|
|
29
|
-
)
|
|
30
|
-
.required('auth.passwordProvided'),
|
|
31
|
-
nickName: yup
|
|
32
|
-
.string()
|
|
33
|
-
.matches(/^[a-zA-Z0-9_\-.]+$/, 'auth.nickNameValid'),
|
|
34
|
-
firstName: yup.string(),
|
|
35
|
-
lastName: yup.string(),
|
|
36
|
-
}),
|
|
37
|
-
},
|
|
38
|
-
'/logout': this.postLogout,
|
|
39
|
-
'/verify': this.verifyUser,
|
|
40
|
-
'/send-recovery-email': {
|
|
41
|
-
handler: this.sendPasswordRecoveryEmail,
|
|
42
|
-
request: yup
|
|
43
|
-
.object()
|
|
44
|
-
.shape({ email: yup.string().email().required() }),
|
|
45
|
-
},
|
|
46
|
-
'/recover-password': {
|
|
47
|
-
handler: this.recoverPassword,
|
|
48
|
-
request: yup.object().shape({
|
|
49
|
-
password: yup
|
|
50
|
-
.string()
|
|
51
|
-
.matches(
|
|
52
|
-
/^[a-zA-Z0-9!@#$%ˆ^&*()_+\-{}[\]<>]+$/,
|
|
53
|
-
'auth.passwordValid',
|
|
54
|
-
)
|
|
55
|
-
.required(),
|
|
56
|
-
passwordRecoveryToken: yup.string().required(),
|
|
57
|
-
}),
|
|
58
|
-
},
|
|
59
|
-
'/send-verification': {
|
|
60
|
-
handler: this.sendVerification,
|
|
61
|
-
request: yup
|
|
62
|
-
.object()
|
|
63
|
-
.shape({ email: yup.string().email().required() }),
|
|
64
|
-
},
|
|
65
|
-
},
|
|
66
|
-
};
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
async postLogin(req, res) {
|
|
70
|
-
const User = this.app.getModel('User');
|
|
71
|
-
const user = await User.getUserByEmailAndPassword(
|
|
72
|
-
req.appInfo.request.email, // we do a request casting
|
|
73
|
-
req.appInfo.request.password, // we do a request casting
|
|
74
|
-
);
|
|
75
|
-
if (!user) {
|
|
76
|
-
return res.status(400).json({ message: req.i18n.t('auth.errorUPValid') });
|
|
77
|
-
}
|
|
78
|
-
const { isAuthWithVefificationFlow } = this.app.getConfig('auth');
|
|
79
|
-
if (isAuthWithVefificationFlow && !user.isVerified) {
|
|
80
|
-
return res
|
|
81
|
-
.status(400)
|
|
82
|
-
.json({ message: req.i18n.t('email.notVerified'), notVerified: true });
|
|
83
|
-
}
|
|
84
|
-
const token = await user.generateToken();
|
|
85
|
-
|
|
86
|
-
return res.status(200).json({ data: { token, user: user.getPublic() } });
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
async postRegister(req, res) {
|
|
90
|
-
const User = req.appInfo.app.getModel('User');
|
|
91
|
-
let user = await User.getUserByEmail(req.appInfo.request.email);
|
|
92
|
-
if (user) {
|
|
93
|
-
return res.status(400).json({ message: req.i18n.t('email.registered') });
|
|
94
|
-
}
|
|
95
|
-
if (req.appInfo.request.nickName) {
|
|
96
|
-
user = await User.findOne({ 'name.nick': req.appInfo.request.nickName });
|
|
97
|
-
if (user) {
|
|
98
|
-
return res
|
|
99
|
-
.status(400)
|
|
100
|
-
.json({ message: req.i18n.t('auth.nicknameExists') });
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
user = await User.create({
|
|
105
|
-
email: req.appInfo.request.email,
|
|
106
|
-
password: req.appInfo.request.password,
|
|
107
|
-
name: {
|
|
108
|
-
first: req.appInfo.request.firstName,
|
|
109
|
-
last: req.appInfo.request.lastName,
|
|
110
|
-
nick: req.appInfo.request.nickName,
|
|
111
|
-
},
|
|
112
|
-
});
|
|
113
|
-
|
|
114
|
-
const { isAuthWithVefificationFlow } = this.app.getConfig('auth');
|
|
115
|
-
if (isAuthWithVefificationFlow) {
|
|
116
|
-
const answer = await user.sendVerificationEmail(req.i18n).catch((e) => {
|
|
117
|
-
this.logger.error(e);
|
|
118
|
-
});
|
|
119
|
-
if (!answer) {
|
|
120
|
-
return res.status(500).json();
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
return res.status(201).json();
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
// eslint-disable-next-line class-methods-use-this
|
|
127
|
-
async postLogout(req, res) {
|
|
128
|
-
// todo remove token
|
|
129
|
-
return res.status(200).json();
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
async verifyUser(req, res) {
|
|
133
|
-
const User = req.appInfo.app.getModel('User');
|
|
134
|
-
let user;
|
|
135
|
-
try {
|
|
136
|
-
user = await User.getUserByVerificationToken(
|
|
137
|
-
req.query.verification_token,
|
|
138
|
-
);
|
|
139
|
-
} catch (e) {
|
|
140
|
-
return res.status(400).json({
|
|
141
|
-
message: req.i18n.t('email.alreadyVerifiedOrWrongToken'),
|
|
142
|
-
});
|
|
143
|
-
}
|
|
144
|
-
this.logger.debug(`Verify user user is :${user}`);
|
|
145
|
-
if (!user) {
|
|
146
|
-
return res.status(400).json({
|
|
147
|
-
message: req.i18n.t('email.alreadyVerifiedOrWrongToken'),
|
|
148
|
-
});
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
user.isVerified = true;
|
|
152
|
-
await user.save();
|
|
153
|
-
return res.status(200).json();
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
async sendPasswordRecoveryEmail(req, res) {
|
|
157
|
-
const User = req.appInfo.app.getModel('User');
|
|
158
|
-
try {
|
|
159
|
-
const user = await User.getUserByEmail(req.appInfo.request.email);
|
|
160
|
-
if (!user) {
|
|
161
|
-
return res
|
|
162
|
-
.status(400)
|
|
163
|
-
.json({ message: req.i18n.t('auth.errorUExist') });
|
|
164
|
-
}
|
|
165
|
-
await user.sendPasswordRecoveryEmail(req.i18n);
|
|
166
|
-
return res.status(200).json();
|
|
167
|
-
} catch (e) {
|
|
168
|
-
this.logger.error(e);
|
|
169
|
-
return res.status(400).json({ message: req.i18n.t('auth.errorUExist') });
|
|
170
|
-
}
|
|
171
|
-
}
|
|
172
|
-
|
|
173
|
-
async recoverPassword(req, res) {
|
|
174
|
-
const User = this.app.getModel('User');
|
|
175
|
-
const user = await User.getUserByPasswordRecoveryToken(
|
|
176
|
-
req.appInfo.request.passwordRecoveryToken,
|
|
177
|
-
).catch((e) => {
|
|
178
|
-
this.logger.error(e);
|
|
179
|
-
});
|
|
180
|
-
|
|
181
|
-
if (!user) {
|
|
182
|
-
return res
|
|
183
|
-
.status(400)
|
|
184
|
-
.json({ message: req.i18n.t('password.wrongToken') });
|
|
185
|
-
}
|
|
186
|
-
|
|
187
|
-
this.logger.debug(`Password recovery user is :${user}`);
|
|
188
|
-
|
|
189
|
-
user.password = req.appInfo.request.password;
|
|
190
|
-
user.isVerified = true;
|
|
191
|
-
await user.save();
|
|
192
|
-
return res.status(200).json();
|
|
193
|
-
}
|
|
194
|
-
|
|
195
|
-
async sendVerification(req, res) {
|
|
196
|
-
const User = this.app.getModel('User');
|
|
197
|
-
const user = await User.getUserByEmail(req.appInfo.request.email);
|
|
198
|
-
if (!user) {
|
|
199
|
-
return res.status(400).json({ message: req.i18n.t('auth.errorUExist') });
|
|
200
|
-
}
|
|
201
|
-
await user.sendVerificationEmail(req.i18n);
|
|
202
|
-
return res.status(200).json();
|
|
203
|
-
}
|
|
204
|
-
|
|
205
|
-
static get middleware() {
|
|
206
|
-
return new Map([['/{*splat}', [GetUserByToken, RateLimiter]]]);
|
|
207
|
-
}
|
|
208
|
-
}
|
|
209
|
-
|
|
210
|
-
export default Auth;
|
package/controllers/Home.js
DELETED
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import AbstractController from '../modules/AbstractController.js';
|
|
2
|
-
import GetUserByToken from '../services/http/middleware/GetUserByToken.js';
|
|
3
|
-
|
|
4
|
-
class Home extends AbstractController {
|
|
5
|
-
get routes() {
|
|
6
|
-
return {
|
|
7
|
-
get: {
|
|
8
|
-
'/': this.home,
|
|
9
|
-
},
|
|
10
|
-
};
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
// eslint-disable-next-line class-methods-use-this
|
|
14
|
-
async home(req, res) {
|
|
15
|
-
return res.json({ message: 'Home' });
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
// eslint-disable-next-line class-methods-use-this
|
|
19
|
-
getHttpPath() {
|
|
20
|
-
return '/';
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
static get middleware() {
|
|
24
|
-
return new Map([['/{*splat}', [GetUserByToken]]]);
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
export default Home;
|
package/controllers/index.js
DELETED
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
import path from 'node:path';
|
|
2
|
-
import * as url from 'node:url';
|
|
3
|
-
import Base from '../modules/Base.js';
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* Class do autoloading a http controllers
|
|
7
|
-
*/
|
|
8
|
-
class ControllerManager extends Base {
|
|
9
|
-
constructor(app) {
|
|
10
|
-
super(app);
|
|
11
|
-
this.controllers = {};
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
/**
|
|
15
|
-
* Load controllers
|
|
16
|
-
*/
|
|
17
|
-
async initControllers() {
|
|
18
|
-
const dirname = url.fileURLToPath(new URL('.', import.meta.url));
|
|
19
|
-
const controllersToLoad = await this.getFilesPathWithInheritance(
|
|
20
|
-
dirname,
|
|
21
|
-
this.app.foldersConfig.controllers,
|
|
22
|
-
);
|
|
23
|
-
|
|
24
|
-
controllersToLoad.sort((a, b) => {
|
|
25
|
-
if (a.file.toLowerCase().endsWith('index.js')) {
|
|
26
|
-
if (b.file.toLowerCase().endsWith('index.js')) {
|
|
27
|
-
return 0;
|
|
28
|
-
}
|
|
29
|
-
return -1;
|
|
30
|
-
}
|
|
31
|
-
return 0;
|
|
32
|
-
});
|
|
33
|
-
const controllers = [];
|
|
34
|
-
for (const controller of controllersToLoad) {
|
|
35
|
-
controllers.push(
|
|
36
|
-
import(controller.path).then(({ default: ControllerModule }) => {
|
|
37
|
-
const contollerName = ControllerModule.name.toLowerCase();
|
|
38
|
-
let prefix = path.dirname(controller.file);
|
|
39
|
-
if (prefix === '.') {
|
|
40
|
-
prefix = '';
|
|
41
|
-
}
|
|
42
|
-
const controllePath = prefix
|
|
43
|
-
? `${prefix}/${contollerName}`
|
|
44
|
-
: contollerName;
|
|
45
|
-
this.controllers[controllePath] = new ControllerModule(
|
|
46
|
-
this.app,
|
|
47
|
-
prefix,
|
|
48
|
-
);
|
|
49
|
-
}),
|
|
50
|
-
);
|
|
51
|
-
}
|
|
52
|
-
await Promise.all(controllers);
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
static get loggerGroup() {
|
|
56
|
-
return 'controller';
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
export default ControllerManager;
|
package/folderConfig.js
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import path from 'node:path';
|
|
2
|
-
|
|
3
|
-
export default {
|
|
4
|
-
folders: {
|
|
5
|
-
config: path.resolve('./config'),
|
|
6
|
-
models: path.resolve('./models'),
|
|
7
|
-
controllers: path.resolve('./controllers'),
|
|
8
|
-
views: path.resolve('./views'),
|
|
9
|
-
locales: path.resolve('./locales'),
|
|
10
|
-
emails: path.resolve('./services/messaging/email/templates'),
|
|
11
|
-
commands: path.resolve('./commands'),
|
|
12
|
-
migrations: path.resolve('./migrations'),
|
|
13
|
-
},
|
|
14
|
-
};
|
package/helpers/files.js
DELETED
|
@@ -1,79 +0,0 @@
|
|
|
1
|
-
import { promises as fs } from 'node:fs';
|
|
2
|
-
import { join } from 'node:path';
|
|
3
|
-
|
|
4
|
-
const getFilesPathWithInheritance = async ({
|
|
5
|
-
internalFolder,
|
|
6
|
-
externalFolder,
|
|
7
|
-
logger,
|
|
8
|
-
loggerFileType = '',
|
|
9
|
-
filter: { startWithCapital = true, notTests = true, notHidden = true } = {},
|
|
10
|
-
}) => {
|
|
11
|
-
const [internalFiles, externalFiles] = await Promise.all([
|
|
12
|
-
fs.readdir(internalFolder, { recursive: true, withFileTypes: true }),
|
|
13
|
-
fs.readdir(externalFolder, { recursive: true, withFileTypes: true }),
|
|
14
|
-
]);
|
|
15
|
-
|
|
16
|
-
const filterIndexFile = (fileDirent) => {
|
|
17
|
-
if (!fileDirent.isFile()) {
|
|
18
|
-
return false;
|
|
19
|
-
}
|
|
20
|
-
const fileArray = fileDirent.name.split('/');
|
|
21
|
-
const file = fileArray[fileArray.length - 1];
|
|
22
|
-
if (startWithCapital && file[0] !== file[0].toUpperCase()) {
|
|
23
|
-
// not start with capital
|
|
24
|
-
return false;
|
|
25
|
-
}
|
|
26
|
-
if (notTests && file.endsWith('.test.js')) {
|
|
27
|
-
return false;
|
|
28
|
-
}
|
|
29
|
-
if (notHidden && file[0] === '.') {
|
|
30
|
-
// not start with dot
|
|
31
|
-
return false;
|
|
32
|
-
}
|
|
33
|
-
return true;
|
|
34
|
-
};
|
|
35
|
-
|
|
36
|
-
const internalFilesString = internalFiles
|
|
37
|
-
.filter(filterIndexFile)
|
|
38
|
-
.map((fileDirent) =>
|
|
39
|
-
join(fileDirent.parentPath, fileDirent.name)
|
|
40
|
-
.replace(`${internalFolder}/`, '')
|
|
41
|
-
.replace(`${internalFolder}`, ''),
|
|
42
|
-
);
|
|
43
|
-
const externalFilesString = externalFiles
|
|
44
|
-
.filter(filterIndexFile)
|
|
45
|
-
.map((fileDirent) =>
|
|
46
|
-
join(fileDirent.parentPath, fileDirent.name)
|
|
47
|
-
.replace(`${externalFolder}/`, '')
|
|
48
|
-
.replace(`${externalFolder}`, ''),
|
|
49
|
-
);
|
|
50
|
-
|
|
51
|
-
const filesToLoad = [];
|
|
52
|
-
for (const file of internalFilesString) {
|
|
53
|
-
if (externalFilesString.includes(file)) {
|
|
54
|
-
logger(
|
|
55
|
-
`Skipping register INTERNAL file '${file}' ${
|
|
56
|
-
loggerFileType ? `of type ${loggerFileType}` : ''
|
|
57
|
-
} as it override by EXTERNAL ONE`,
|
|
58
|
-
);
|
|
59
|
-
} else {
|
|
60
|
-
filesToLoad.push({
|
|
61
|
-
path: join(internalFolder, file),
|
|
62
|
-
file,
|
|
63
|
-
});
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
for (const file of externalFilesString) {
|
|
68
|
-
filesToLoad.push({
|
|
69
|
-
path: join(externalFolder, file),
|
|
70
|
-
file,
|
|
71
|
-
});
|
|
72
|
-
}
|
|
73
|
-
return filesToLoad;
|
|
74
|
-
};
|
|
75
|
-
|
|
76
|
-
export {
|
|
77
|
-
// eslint-disable-next-line import/prefer-default-export
|
|
78
|
-
getFilesPathWithInheritance,
|
|
79
|
-
};
|
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;
|