@adaptivestone/framework 5.0.0-beta.4 → 5.0.0-beta.40
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 +1107 -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/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 +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 +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 +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 +118 -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 +14 -0
- package/dist/services/logging/SentryTransport.js +57 -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 +45 -39
- 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
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
import { appInstance } from "../helpers/appInstance.js";
|
|
2
|
+
import { scryptAsync } from "../helpers/crypto.js";
|
|
3
|
+
import AbstractModel from "../modules/AbstractModel.js";
|
|
4
|
+
/**
|
|
5
|
+
* @deprecated use User Model instead of UserOld
|
|
6
|
+
*/
|
|
7
|
+
class UserOld extends AbstractModel {
|
|
8
|
+
constructor(app) {
|
|
9
|
+
console.warn('UserOld model is deprecated. Please use User Model instead of UserOld');
|
|
10
|
+
super(app);
|
|
11
|
+
}
|
|
12
|
+
initHooks() {
|
|
13
|
+
this.mongooseSchema.pre('save', async function userPreSaveHook() {
|
|
14
|
+
if (this.isModified('password')) {
|
|
15
|
+
// @ts-expect-error badtypes
|
|
16
|
+
this.password = await this.constructor.hashPassword(this.password);
|
|
17
|
+
}
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
get modelSchema() {
|
|
21
|
+
return {
|
|
22
|
+
avatar: {
|
|
23
|
+
type: String,
|
|
24
|
+
maxlength: 255,
|
|
25
|
+
},
|
|
26
|
+
name: {
|
|
27
|
+
first: {
|
|
28
|
+
type: String,
|
|
29
|
+
maxlength: 255,
|
|
30
|
+
},
|
|
31
|
+
last: {
|
|
32
|
+
type: String,
|
|
33
|
+
maxlength: 255,
|
|
34
|
+
},
|
|
35
|
+
nick: {
|
|
36
|
+
minlength: 3,
|
|
37
|
+
maxlength: 255,
|
|
38
|
+
type: String,
|
|
39
|
+
index: {
|
|
40
|
+
unique: true,
|
|
41
|
+
partialFilterExpression: { 'name.nick': { $type: 'string' } },
|
|
42
|
+
},
|
|
43
|
+
},
|
|
44
|
+
},
|
|
45
|
+
password: String,
|
|
46
|
+
email: {
|
|
47
|
+
type: String,
|
|
48
|
+
maxlength: 255,
|
|
49
|
+
index: {
|
|
50
|
+
unique: true,
|
|
51
|
+
partialFilterExpression: { email: { $type: 'string' } },
|
|
52
|
+
},
|
|
53
|
+
},
|
|
54
|
+
sessionTokens: [{ token: String, valid: Date }],
|
|
55
|
+
verificationTokens: [{ until: Date, token: String }],
|
|
56
|
+
passwordRecoveryTokens: [{ until: Date, token: String }],
|
|
57
|
+
permissions: [],
|
|
58
|
+
roles: [],
|
|
59
|
+
isVerified: { type: Boolean, default: false },
|
|
60
|
+
locale: { type: String, default: 'en' },
|
|
61
|
+
languages: [String],
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
static async getUserByEmailAndPassword(email, password) {
|
|
65
|
+
const data = await this.findOne({ email: String(email) });
|
|
66
|
+
if (!data) {
|
|
67
|
+
return false;
|
|
68
|
+
}
|
|
69
|
+
const hashedPasswords = await this.hashPassword(password);
|
|
70
|
+
if (data.password !== hashedPasswords) {
|
|
71
|
+
return false;
|
|
72
|
+
}
|
|
73
|
+
return data;
|
|
74
|
+
}
|
|
75
|
+
async generateToken() {
|
|
76
|
+
const { saltSecret, hashRounds } = appInstance.getConfig('auth');
|
|
77
|
+
const timestamp = new Date();
|
|
78
|
+
timestamp.setDate(timestamp.getDate() + 30);
|
|
79
|
+
const data = await scryptAsync(this.email + Date.now(), saltSecret, hashRounds);
|
|
80
|
+
const token = data.toString('base64url');
|
|
81
|
+
this.sessionTokens.push({ token, valid: timestamp });
|
|
82
|
+
await this.save();
|
|
83
|
+
return { token, valid: timestamp };
|
|
84
|
+
}
|
|
85
|
+
getPublic() {
|
|
86
|
+
return {
|
|
87
|
+
avatar: this.avatar,
|
|
88
|
+
name: this.name,
|
|
89
|
+
email: this.email,
|
|
90
|
+
id: this.id,
|
|
91
|
+
isVerified: this.isVerified,
|
|
92
|
+
permissions: this.permissions,
|
|
93
|
+
locale: this.locale,
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
static async hashPassword(password) {
|
|
97
|
+
const { saltSecret, hashRounds } = appInstance.getConfig('auth');
|
|
98
|
+
const data = await scryptAsync(String(password), saltSecret, hashRounds);
|
|
99
|
+
return data.toString('base64url');
|
|
100
|
+
}
|
|
101
|
+
static async getUserByToken(token) {
|
|
102
|
+
const data = await this.findOne({
|
|
103
|
+
'sessionTokens.token': String(token),
|
|
104
|
+
});
|
|
105
|
+
return data || false;
|
|
106
|
+
}
|
|
107
|
+
static async getUserByEmail(email) {
|
|
108
|
+
const data = await this.findOne({ email: String(email) });
|
|
109
|
+
if (!data) {
|
|
110
|
+
return false;
|
|
111
|
+
}
|
|
112
|
+
return data;
|
|
113
|
+
}
|
|
114
|
+
static async generateUserPasswordRecoveryToken(userMongoose) {
|
|
115
|
+
const { saltSecret, hashRounds } = appInstance.getConfig('auth');
|
|
116
|
+
const date = new Date();
|
|
117
|
+
date.setDate(date.getDate() + 14);
|
|
118
|
+
const data = await scryptAsync(userMongoose.email + Date.now(), saltSecret, hashRounds);
|
|
119
|
+
const token = data.toString('base64url');
|
|
120
|
+
// if (err) {
|
|
121
|
+
// this.logger.error("Hash 2 error ", err);
|
|
122
|
+
// reject(err);
|
|
123
|
+
// return;
|
|
124
|
+
// }
|
|
125
|
+
userMongoose.passwordRecoveryTokens = [];
|
|
126
|
+
userMongoose.passwordRecoveryTokens.push({
|
|
127
|
+
until: date,
|
|
128
|
+
token,
|
|
129
|
+
});
|
|
130
|
+
await userMongoose.save();
|
|
131
|
+
return { token, until: date.getTime() };
|
|
132
|
+
}
|
|
133
|
+
static async getUserByPasswordRecoveryToken(passwordRecoveryToken) {
|
|
134
|
+
const data = await this.findOne({
|
|
135
|
+
passwordRecoveryTokens: {
|
|
136
|
+
$elemMatch: { token: String(passwordRecoveryToken) },
|
|
137
|
+
},
|
|
138
|
+
});
|
|
139
|
+
if (!data) {
|
|
140
|
+
return Promise.reject(new Error('User not exists'));
|
|
141
|
+
}
|
|
142
|
+
// TODO token expiration and remove that token
|
|
143
|
+
data.passwordRecoveryTokens.pop();
|
|
144
|
+
const result = await data.save();
|
|
145
|
+
return result;
|
|
146
|
+
}
|
|
147
|
+
async sendPasswordRecoveryEmail(i18n) {
|
|
148
|
+
const passwordRecoveryToken = await UserOld.generateUserPasswordRecoveryToken(this);
|
|
149
|
+
// speed optimisation
|
|
150
|
+
try {
|
|
151
|
+
// @ts-expect-error module is optional
|
|
152
|
+
const Mailer = (await import('@adaptivestone/framework-module-email'))
|
|
153
|
+
.default;
|
|
154
|
+
const mail = new Mailer(this.getSuper().app, 'recovery', {
|
|
155
|
+
link: `${i18n.language}/auth/recovery?password_recovery_token=${passwordRecoveryToken.token}`,
|
|
156
|
+
editor: this.name.nick,
|
|
157
|
+
}, i18n);
|
|
158
|
+
return mail.send(this.email);
|
|
159
|
+
}
|
|
160
|
+
catch {
|
|
161
|
+
const error = 'Mailer not found. Please install @adaptivestone/framework-module-email in order to use it';
|
|
162
|
+
this.getSuper().logger?.error(error);
|
|
163
|
+
return false;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
static async generateUserVerificationToken(userMongoose) {
|
|
167
|
+
const { saltSecret, hashRounds } = appInstance.getConfig('auth');
|
|
168
|
+
const date = new Date();
|
|
169
|
+
date.setDate(date.getDate() + 14);
|
|
170
|
+
const data = await scryptAsync(userMongoose.email + Date.now(), saltSecret, hashRounds);
|
|
171
|
+
const token = data.toString('base64url');
|
|
172
|
+
// if (err) {
|
|
173
|
+
// this.logger.error("Hash 2 error ", err);
|
|
174
|
+
// reject(err);
|
|
175
|
+
// return;
|
|
176
|
+
// }
|
|
177
|
+
userMongoose.verificationTokens = [];
|
|
178
|
+
userMongoose.verificationTokens.push({
|
|
179
|
+
until: date,
|
|
180
|
+
token,
|
|
181
|
+
});
|
|
182
|
+
await userMongoose.save();
|
|
183
|
+
return { token, until: date.getTime() };
|
|
184
|
+
}
|
|
185
|
+
static async getUserByVerificationToken(verificationToken) {
|
|
186
|
+
const data = await this.findOne({
|
|
187
|
+
verificationTokens: {
|
|
188
|
+
$elemMatch: { token: String(verificationToken) },
|
|
189
|
+
},
|
|
190
|
+
});
|
|
191
|
+
if (!data) {
|
|
192
|
+
return Promise.reject(new Error('User not exists'));
|
|
193
|
+
}
|
|
194
|
+
// TODO token expiration and remove that token
|
|
195
|
+
data.verificationTokens.pop();
|
|
196
|
+
const result = await data.save();
|
|
197
|
+
return result;
|
|
198
|
+
}
|
|
199
|
+
// async removeVerificationToken(verificationToken) {
|
|
200
|
+
// this.mongooseModel.updateOne(
|
|
201
|
+
// {
|
|
202
|
+
// verificationTokens: {
|
|
203
|
+
// $elemMatch: { token: String(verificationToken) },
|
|
204
|
+
// },
|
|
205
|
+
// },
|
|
206
|
+
// { $pop: { verificationTokens: 1 } },
|
|
207
|
+
// );
|
|
208
|
+
// }
|
|
209
|
+
async sendVerificationEmail(i18n) {
|
|
210
|
+
const verificationToken = await UserOld.generateUserVerificationToken(this);
|
|
211
|
+
// speed optimisation
|
|
212
|
+
try {
|
|
213
|
+
// @ts-expect-error module is optional
|
|
214
|
+
const Mailer = (await import('@adaptivestone/framework-module-email'))
|
|
215
|
+
.default;
|
|
216
|
+
const mail = new Mailer(this.getSuper().app, 'verification', {
|
|
217
|
+
link: `${i18n.language}/auth/login?verification_token=${verificationToken.token}`,
|
|
218
|
+
editor: this.name.nick,
|
|
219
|
+
}, i18n);
|
|
220
|
+
return mail.send(this.email);
|
|
221
|
+
}
|
|
222
|
+
catch {
|
|
223
|
+
const error = 'Mailer not found. Please install @adaptivestone/framework-module-email in order to use it';
|
|
224
|
+
this.getSuper().logger?.error(error);
|
|
225
|
+
return false;
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
export default UserOld;
|
|
230
|
+
//# sourceMappingURL=UserOld.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UserOld.js","sourceRoot":"","sources":["../../src/models/UserOld.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import type { IApp } from '../server.ts';
|
|
2
|
+
import Base from './Base.ts';
|
|
3
|
+
import type { ParseArgsOptionsConfigExtended } from './BaseCli.ts';
|
|
4
|
+
type TypeMap = {
|
|
5
|
+
string: string;
|
|
6
|
+
boolean: boolean;
|
|
7
|
+
};
|
|
8
|
+
export type CommandArgumentToTypes<T extends Record<string, ParseArgsOptionsConfigExtended>> = {
|
|
9
|
+
[K in keyof T as T[K] extends {
|
|
10
|
+
required: true;
|
|
11
|
+
} | {
|
|
12
|
+
default: never;
|
|
13
|
+
} ? K : never]-?: TypeMap[T[K]['type']];
|
|
14
|
+
} & {
|
|
15
|
+
[K in keyof T as T[K] extends {
|
|
16
|
+
required: true;
|
|
17
|
+
} | {
|
|
18
|
+
default: never;
|
|
19
|
+
} ? never : K]?: TypeMap[T[K]['type']];
|
|
20
|
+
};
|
|
21
|
+
declare class AbstractCommand extends Base {
|
|
22
|
+
commands: Record<string, string>;
|
|
23
|
+
args: Record<string, unknown>;
|
|
24
|
+
constructor(app: IApp, commands: Record<string, string>, args: Record<string, unknown>);
|
|
25
|
+
static get description(): string;
|
|
26
|
+
/**
|
|
27
|
+
* If true, then this command will load models and init mongo connection
|
|
28
|
+
*/
|
|
29
|
+
static isShouldInitModels: boolean;
|
|
30
|
+
/**
|
|
31
|
+
* If true, then this command will get model paths with inheritance
|
|
32
|
+
*/
|
|
33
|
+
static isShouldGetModelPaths: boolean;
|
|
34
|
+
/**
|
|
35
|
+
* Get mongo connection name
|
|
36
|
+
* @param {String} commandName
|
|
37
|
+
* @param {object} args
|
|
38
|
+
*/
|
|
39
|
+
static getMongoConnectionName(commandName: string, args: Record<string, unknown>): string;
|
|
40
|
+
/**
|
|
41
|
+
* You able to add command arguments for parsing there.
|
|
42
|
+
* @see https://nodejs.org/api/util.html#utilparseargsconfig in config.options plus extended with description and required
|
|
43
|
+
*/
|
|
44
|
+
static get commandArguments(): Record<string, ParseArgsOptionsConfigExtended>;
|
|
45
|
+
/**
|
|
46
|
+
* Entry point to every command. This method should be overridden
|
|
47
|
+
*/
|
|
48
|
+
run(): Promise<boolean>;
|
|
49
|
+
static get loggerGroup(): string;
|
|
50
|
+
}
|
|
51
|
+
export default AbstractCommand;
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { createHash } from 'node:crypto';
|
|
2
|
+
import Base from "./Base.js";
|
|
3
|
+
class AbstractCommand extends Base {
|
|
4
|
+
commands;
|
|
5
|
+
args;
|
|
6
|
+
constructor(app, commands, args) {
|
|
7
|
+
super(app);
|
|
8
|
+
this.args = args;
|
|
9
|
+
this.commands = commands;
|
|
10
|
+
}
|
|
11
|
+
static get description() {
|
|
12
|
+
return 'Command description. PLEASE PROVIDE IT';
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* If true, then this command will load models and init mongo connection
|
|
16
|
+
*/
|
|
17
|
+
static isShouldInitModels = true;
|
|
18
|
+
/**
|
|
19
|
+
* If true, then this command will get model paths with inheritance
|
|
20
|
+
*/
|
|
21
|
+
static isShouldGetModelPaths = true;
|
|
22
|
+
/**
|
|
23
|
+
* Get mongo connection name
|
|
24
|
+
* @param {String} commandName
|
|
25
|
+
* @param {object} args
|
|
26
|
+
*/
|
|
27
|
+
static getMongoConnectionName(commandName, args) {
|
|
28
|
+
let name = `CLI: ${commandName} ${JSON.stringify(args)}`;
|
|
29
|
+
// https://github.com/mongodb/specifications/blob/master/source/mongodb-handshake/handshake.md?plain=1#L460
|
|
30
|
+
if (name.length >= 64) {
|
|
31
|
+
// this is a limit of connection name
|
|
32
|
+
console.warn(`CLI: ${commandName} mongo connection string more then 128 symbols. Switching to hash`);
|
|
33
|
+
const hash = createHash('sha256')
|
|
34
|
+
.update(JSON.stringify(args))
|
|
35
|
+
.digest('hex')
|
|
36
|
+
.substring(0, 32);
|
|
37
|
+
name = `CLI: ${commandName} ${hash}`;
|
|
38
|
+
}
|
|
39
|
+
return name;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* You able to add command arguments for parsing there.
|
|
43
|
+
* @see https://nodejs.org/api/util.html#utilparseargsconfig in config.options plus extended with description and required
|
|
44
|
+
*/
|
|
45
|
+
static get commandArguments() {
|
|
46
|
+
return {};
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Entry point to every command. This method should be overridden
|
|
50
|
+
*/
|
|
51
|
+
async run() {
|
|
52
|
+
this.logger?.error('You should implement run method');
|
|
53
|
+
return false;
|
|
54
|
+
}
|
|
55
|
+
static get loggerGroup() {
|
|
56
|
+
return 'command';
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
export default AbstractCommand;
|
|
60
|
+
//# sourceMappingURL=AbstractCommand.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AbstractCommand.js","sourceRoot":"","sources":["../../src/modules/AbstractCommand.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,OAAO,IAAI,MAAM,WAAW,CAAC;AAoB7B,MAAM,eAAgB,SAAQ,IAAI;IAChC,QAAQ,CAAyB;IAEjC,IAAI,CAA0B;IAE9B,YACE,GAAS,EACT,QAAgC,EAChC,IAA6B;QAE7B,KAAK,CAAC,GAAG,CAAC,CAAC;QACX,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;IAED,MAAM,KAAK,WAAW;QACpB,OAAO,wCAAwC,CAAC;IAClD,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,kBAAkB,GAAG,IAAI,CAAC;IAEjC;;OAEG;IACH,MAAM,CAAC,qBAAqB,GAAG,IAAI,CAAC;IAEpC;;;;OAIG;IACH,MAAM,CAAC,sBAAsB,CAC3B,WAAmB,EACnB,IAA6B;QAE7B,IAAI,IAAI,GAAG,QAAQ,WAAW,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;QACzD,2GAA2G;QAC3G,IAAI,IAAI,CAAC,MAAM,IAAI,EAAE,EAAE,CAAC;YACtB,qCAAqC;YACrC,OAAO,CAAC,IAAI,CACV,QAAQ,WAAW,mEAAmE,CACvF,CAAC;YACF,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC;iBAC9B,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;iBAC5B,MAAM,CAAC,KAAK,CAAC;iBACb,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACpB,IAAI,GAAG,QAAQ,WAAW,IAAI,IAAI,EAAE,CAAC;QACvC,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;OAGG;IACH,MAAM,KAAK,gBAAgB;QAIzB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,GAAG;QACP,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,iCAAiC,CAAC,CAAC;QACtD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,KAAK,WAAW;QACpB,OAAO,SAAS,CAAC;IACnB,CAAC;;AAGH,eAAe,eAAe,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AbstractConnector.js","sourceRoot":"","sources":["../../src/modules/AbstractConnector.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,MAAM,iBAAkB,SAAQ,IAAI;IAClC,MAAM,KAAK,WAAW;QACpB,OAAO,WAAW,CAAC;IACrB,CAAC;CACF;AAED,eAAe,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import type { IRouter } from 'express';
|
|
2
|
+
import type { IApp } from '../server.ts';
|
|
3
|
+
import type AbstractMiddleware from '../services/http/middleware/AbstractMiddleware.ts';
|
|
4
|
+
import Base from './Base.ts';
|
|
5
|
+
type MiddlewareWithParamsTuple = [
|
|
6
|
+
typeof AbstractMiddleware,
|
|
7
|
+
Record<string, unknown>
|
|
8
|
+
];
|
|
9
|
+
export type TMiddleware = Array<typeof AbstractMiddleware | MiddlewareWithParamsTuple>;
|
|
10
|
+
type RouteObject = {
|
|
11
|
+
handler: Function;
|
|
12
|
+
description?: string;
|
|
13
|
+
middleware?: TMiddleware | null;
|
|
14
|
+
request?: (unknown & {
|
|
15
|
+
fields: unknown;
|
|
16
|
+
}) | null;
|
|
17
|
+
query?: (unknown & {
|
|
18
|
+
fields: unknown;
|
|
19
|
+
}) | null;
|
|
20
|
+
};
|
|
21
|
+
export type RouteParams = {
|
|
22
|
+
[method: string]: {
|
|
23
|
+
[path: string]: RouteObject | Function;
|
|
24
|
+
};
|
|
25
|
+
};
|
|
26
|
+
/**
|
|
27
|
+
* Abstract controller. You should extend any controller from them.
|
|
28
|
+
* Place you cintroller into controller folder and it be inited in auto way.
|
|
29
|
+
* By default name of route will be controller name not file name. But please name it in same ways.
|
|
30
|
+
* You can overwrite base controllers byt creating controllers with tha same file name (yes file name, not class name)
|
|
31
|
+
* In most cases you will want to have a 'home' route that not include controller name. For this case please check ' getHttpPath'
|
|
32
|
+
*/
|
|
33
|
+
declare class AbstractController extends Base {
|
|
34
|
+
prefix: string;
|
|
35
|
+
router: IRouter;
|
|
36
|
+
constructor(app: IApp, prefix: string, isExpressMergeParams?: boolean);
|
|
37
|
+
/**
|
|
38
|
+
* Parse middlewares to be an object.
|
|
39
|
+
*/
|
|
40
|
+
parseMiddlewares(middlewareMap: Map<string, TMiddleware>, httpPath: string): {
|
|
41
|
+
name: string;
|
|
42
|
+
method: string;
|
|
43
|
+
path: string;
|
|
44
|
+
fullPath: string;
|
|
45
|
+
params: {};
|
|
46
|
+
relatedQueryParameters: import("yup").ObjectSchema<{}, import("yup").AnyObject, {}, "">;
|
|
47
|
+
authParams: {
|
|
48
|
+
name: string;
|
|
49
|
+
type: string;
|
|
50
|
+
in: string;
|
|
51
|
+
description: string;
|
|
52
|
+
}[];
|
|
53
|
+
MiddlewareFunction: typeof AbstractMiddleware;
|
|
54
|
+
}[];
|
|
55
|
+
/**
|
|
56
|
+
* Object with routes. Routes relative to controller
|
|
57
|
+
* @example
|
|
58
|
+
* return {
|
|
59
|
+
* post: {
|
|
60
|
+
* "/someUrl": {
|
|
61
|
+
* handler: this.postSomeUrl,
|
|
62
|
+
* request: yup.object().shape({
|
|
63
|
+
* count: yup.number().max(100)required(),
|
|
64
|
+
* })
|
|
65
|
+
* }
|
|
66
|
+
* },
|
|
67
|
+
* };
|
|
68
|
+
*/
|
|
69
|
+
get routes(): RouteParams;
|
|
70
|
+
/**
|
|
71
|
+
* Array of middlewares to append for route
|
|
72
|
+
* You should provide path relative to controller and then array of middlewares to apply.
|
|
73
|
+
* Order is matter.
|
|
74
|
+
* Be default path apply to ANY' method, but you can preattach 'METHOD' into patch to scope patch to this METHOD
|
|
75
|
+
* @example
|
|
76
|
+
* return new Map([
|
|
77
|
+
* ['/{*splat}', [GetUserByToken]] // for any method for this controller
|
|
78
|
+
* ['POST/', [Auth]] // for POST method
|
|
79
|
+
* ['/superSecretMethod', [OnlySuperSecretUsers]] // route with ANY method
|
|
80
|
+
* ['PUT/superSecretMathod', [OnlySuperSecretAdmin]] // route with PUT method
|
|
81
|
+
* ]);
|
|
82
|
+
*/
|
|
83
|
+
static get middleware(): Map<string, TMiddleware>;
|
|
84
|
+
/**
|
|
85
|
+
* Get constructor name that can include preix
|
|
86
|
+
*/
|
|
87
|
+
getConstructorName(): string;
|
|
88
|
+
/**
|
|
89
|
+
* Get http path with inheritance of path
|
|
90
|
+
*/
|
|
91
|
+
getHttpPath(): string;
|
|
92
|
+
static get loggerGroup(): string;
|
|
93
|
+
}
|
|
94
|
+
export default AbstractController;
|