underpost 2.7.1 → 2.7.2
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/.dockerignore +13 -13
- package/.env.development +7 -7
- package/.env.production +7 -7
- package/.env.test +7 -7
- package/.github/workflows/publish.yml +26 -0
- package/.nycrc +9 -9
- package/.prettierignore +12 -12
- package/.prettierrc +9 -9
- package/.vscode/extensions.json +72 -72
- package/.vscode/settings.json +100 -99
- package/Dockerfile +89 -89
- package/LICENSE +21 -21
- package/README.md +96 -96
- package/bin/db.js +172 -119
- package/bin/deploy.js +582 -661
- package/bin/dns.js +1 -1
- package/bin/file.js +92 -92
- package/bin/index.js +53 -53
- package/bin/install.js +398 -357
- package/bin/shortcut.js +44 -44
- package/bin/ssl.js +65 -64
- package/bin/util.js +182 -182
- package/bin/vs.js +35 -35
- package/conf.js +251 -249
- package/docker-compose.yml +67 -67
- package/jsconfig.json +7 -7
- package/jsdoc.json +32 -32
- package/nodemon.json +6 -6
- package/package.json +137 -132
- package/prometheus.yml +36 -36
- package/setup.sh +24 -24
- package/src/api/core/core.controller.js +69 -69
- package/src/api/core/core.model.js +11 -11
- package/src/api/core/core.router.js +23 -23
- package/src/api/core/core.service.js +29 -29
- package/src/api/crypto/crypto.controller.js +51 -51
- package/src/api/crypto/crypto.model.js +23 -23
- package/src/api/crypto/crypto.router.js +20 -20
- package/src/api/crypto/crypto.service.js +64 -64
- package/src/api/default/default.controller.js +69 -69
- package/src/api/default/default.model.js +20 -20
- package/src/api/default/default.router.js +23 -23
- package/src/api/default/default.service.js +31 -31
- package/src/api/file/file.controller.js +53 -51
- package/src/api/file/file.model.js +19 -19
- package/src/api/file/file.router.js +21 -20
- package/src/api/file/file.service.js +76 -70
- package/src/api/instance/instance.controller.js +69 -69
- package/src/api/instance/instance.model.js +36 -36
- package/src/api/instance/instance.router.js +33 -33
- package/src/api/instance/instance.service.js +48 -48
- package/src/api/test/test.controller.js +59 -59
- package/src/api/test/test.model.js +14 -14
- package/src/api/test/test.router.js +21 -21
- package/src/api/test/test.service.js +35 -35
- package/src/api/user/user.build.js +16 -0
- package/src/api/user/user.controller.js +70 -70
- package/src/api/user/user.model.js +65 -65
- package/src/api/user/user.router.js +345 -345
- package/src/api/user/user.service.js +479 -479
- package/src/api.js +23 -23
- package/src/client/Default.index.js +40 -40
- package/src/client/components/core/Account.js +290 -290
- package/src/client/components/core/AgGrid.js +160 -160
- package/src/client/components/core/Auth.js +19 -19
- package/src/client/components/core/Badge.js +32 -32
- package/src/client/components/core/BlockChain.js +41 -41
- package/src/client/components/core/Blog.js +9 -9
- package/src/client/components/core/BtnIcon.js +101 -94
- package/src/client/components/core/CalendarCore.js +458 -319
- package/src/client/components/core/Chat.js +64 -64
- package/src/client/components/core/ColorPalette.js +5267 -5267
- package/src/client/components/core/CommonJs.js +735 -732
- package/src/client/components/core/Content.js +193 -49
- package/src/client/components/core/Css.js +1064 -1027
- package/src/client/components/core/CssCore.js +817 -796
- package/src/client/components/core/D3Chart.js +44 -44
- package/src/client/components/core/Docs.js +229 -229
- package/src/client/components/core/DropDown.js +164 -164
- package/src/client/components/core/EventsUI.js +46 -54
- package/src/client/components/core/FileExplorer.js +699 -624
- package/src/client/components/core/FullScreen.js +45 -45
- package/src/client/components/core/Input.js +346 -259
- package/src/client/components/core/JoyStick.js +77 -77
- package/src/client/components/core/Keyboard.js +73 -73
- package/src/client/components/core/LoadingAnimation.js +179 -157
- package/src/client/components/core/LogIn.js +187 -181
- package/src/client/components/core/LogOut.js +58 -52
- package/src/client/components/core/Logger.js +26 -26
- package/src/client/components/core/Modal.js +1612 -1596
- package/src/client/components/core/NotificationManager.js +84 -84
- package/src/client/components/core/Panel.js +613 -413
- package/src/client/components/core/PanelForm.js +468 -0
- package/src/client/components/core/Polyhedron.js +162 -162
- package/src/client/components/core/Recover.js +204 -204
- package/src/client/components/core/Responsive.js +53 -53
- package/src/client/components/core/RichText.js +51 -27
- package/src/client/components/core/Router.js +76 -77
- package/src/client/components/core/Scroll.js +34 -0
- package/src/client/components/core/SignUp.js +125 -125
- package/src/client/components/core/SocketIo.js +72 -72
- package/src/client/components/core/Stream.js +113 -113
- package/src/client/components/core/ToggleSwitch.js +87 -87
- package/src/client/components/core/ToolTip.js +26 -26
- package/src/client/components/core/Translate.js +437 -408
- package/src/client/components/core/Validator.js +100 -100
- package/src/client/components/core/VanillaJs.js +460 -457
- package/src/client/components/core/Wallet.js +106 -106
- package/src/client/components/core/Webhook.js +25 -25
- package/src/client/components/core/Worker.js +272 -272
- package/src/client/components/default/CommonDefault.js +29 -29
- package/src/client/components/default/CssDefault.js +13 -13
- package/src/client/components/default/ElementsDefault.js +38 -38
- package/src/client/components/default/LogInDefault.js +41 -41
- package/src/client/components/default/LogOutDefault.js +28 -28
- package/src/client/components/default/MenuDefault.js +389 -389
- package/src/client/components/default/RoutesDefault.js +48 -48
- package/src/client/components/default/SettingsDefault.js +16 -16
- package/src/client/components/default/SignUpDefault.js +9 -9
- package/src/client/components/default/SocketIoDefault.js +54 -54
- package/src/client/components/default/TranslateDefault.js +7 -7
- package/src/client/public/default/assets/mailer/api-user-check.png +0 -0
- package/src/client/public/default/assets/mailer/api-user-invalid-token.png +0 -0
- package/src/client/public/default/assets/mailer/api-user-recover.png +0 -0
- package/src/client/public/default/browserconfig.xml +11 -11
- package/src/client/public/default/manifest.webmanifest +68 -68
- package/src/client/public/default/plantuml/client-conf.svg +1 -0
- package/src/client/public/default/plantuml/client-schema.svg +1 -0
- package/src/client/public/default/plantuml/cron-conf.svg +1 -0
- package/src/client/public/default/plantuml/cron-schema.svg +1 -0
- package/src/client/public/default/plantuml/server-conf.svg +1 -0
- package/src/client/public/default/plantuml/server-schema.svg +1 -0
- package/src/client/public/default/plantuml/ssr-conf.svg +1 -0
- package/src/client/public/default/plantuml/ssr-schema.svg +1 -0
- package/src/client/public/default/sitemap +147 -147
- package/src/client/public/default/yandex-browser-manifest.json +8 -8
- package/src/client/public/doc/sitemap +147 -147
- package/src/client/public/test/sitemap +147 -147
- package/src/client/services/core/core.service.js +170 -152
- package/src/client/services/crypto/crypto.service.js +70 -70
- package/src/client/services/default/default.management.js +345 -345
- package/src/client/services/default/default.service.js +89 -89
- package/src/client/services/file/file.service.js +70 -70
- package/src/client/services/instance/instance.management.js +74 -74
- package/src/client/services/instance/instance.service.js +89 -89
- package/src/client/services/test/test.service.js +70 -70
- package/src/client/services/user/user.management.js +50 -50
- package/src/client/services/user/user.service.js +89 -89
- package/src/client/ssr/Render.js +16 -16
- package/src/client/ssr/body-components/CacheControl.js +114 -113
- package/src/client/ssr/body-components/DefaultSplashScreen.js +79 -79
- package/src/client/ssr/email-components/DefaultRecoverEmail.js +21 -21
- package/src/client/ssr/email-components/DefaultVerifyEmail.js +17 -17
- package/src/client/ssr/head-components/Css.js +241 -241
- package/src/client/ssr/head-components/DefaultScripts.js +3 -3
- package/src/client/ssr/head-components/Microdata.js +11 -11
- package/src/client/ssr/head-components/Production.js +1 -1
- package/src/client/ssr/head-components/PwaDefault.js +59 -59
- package/src/client/ssr/head-components/Seo.js +14 -14
- package/src/client/sw/default.sw.js +201 -201
- package/src/client/sw/template.sw.js +84 -84
- package/src/client.build.js +22 -22
- package/src/client.dev.js +21 -21
- package/src/cron.js +25 -25
- package/src/db/DataBaseProvider.js +34 -34
- package/src/db/mariadb/MariaDB.js +33 -33
- package/src/db/mongo/MongooseDB.js +46 -46
- package/src/dns.js +22 -22
- package/src/index.js +42 -29
- package/src/mailer/EmailRender.js +69 -69
- package/src/mailer/MailerProvider.js +96 -96
- package/src/proxy.js +22 -22
- package/src/runtime/lampp/Lampp.js +69 -44
- package/src/runtime/nginx/Nginx.js +3 -3
- package/src/runtime/xampp/Xampp.js +49 -49
- package/src/server/auth.js +235 -204
- package/src/server/backup.js +101 -94
- package/src/server/client-build-live.js +72 -72
- package/src/server/client-build.js +705 -699
- package/src/server/client-dev-server.js +60 -58
- package/src/server/client-formatted.js +48 -48
- package/src/server/client-icons.js +149 -150
- package/src/server/conf.js +860 -611
- package/src/server/dns.js +98 -98
- package/src/server/downloader.js +42 -42
- package/src/server/logger.js +180 -180
- package/src/server/network.js +122 -122
- package/src/server/peer.js +33 -33
- package/src/server/process.js +66 -66
- package/src/server/prompt-optimizer.js +28 -28
- package/src/server/proxy.js +118 -118
- package/src/server/runtime.js +444 -393
- package/src/server/ssl.js +109 -107
- package/src/server.js +25 -25
- package/src/ws/IoInterface.js +45 -45
- package/src/ws/IoServer.js +39 -39
- package/src/ws/core/channels/core.ws.chat.js +23 -23
- package/src/ws/core/channels/core.ws.mailer.js +35 -35
- package/src/ws/core/channels/core.ws.stream.js +31 -31
- package/src/ws/core/core.ws.connection.js +28 -28
- package/src/ws/core/core.ws.emit.js +14 -14
- package/src/ws/core/core.ws.server.js +24 -24
- package/src/ws/core/management/core.ws.chat.js +8 -8
- package/src/ws/core/management/core.ws.mailer.js +16 -16
- package/src/ws/core/management/core.ws.stream.js +8 -8
- package/src/ws/default/channels/default.ws.main.js +16 -16
- package/src/ws/default/default.ws.connection.js +22 -22
- package/src/ws/default/default.ws.emit.js +14 -14
- package/src/ws/default/default.ws.server.js +20 -20
- package/src/ws/default/management/default.ws.main.js +8 -8
- package/startup.js +11 -11
- package/supervisord-openssh-server.conf +4 -4
- package/test/api.test.js +60 -60
package/src/server/auth.js
CHANGED
|
@@ -1,204 +1,235 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Module for managing identity and authorization
|
|
3
|
-
* @module src/server/auth.js
|
|
4
|
-
* @namespace Auth
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
import dotenv from 'dotenv';
|
|
8
|
-
import jwt from 'jsonwebtoken';
|
|
9
|
-
import { loggerFactory } from './logger.js';
|
|
10
|
-
import crypto from 'crypto';
|
|
11
|
-
import { userRoleEnum } from '../api/user/user.model.js';
|
|
12
|
-
import { validatePassword } from '../client/components/core/CommonJs.js';
|
|
13
|
-
|
|
14
|
-
dotenv.config();
|
|
15
|
-
|
|
16
|
-
const logger = loggerFactory(import.meta);
|
|
17
|
-
|
|
18
|
-
/* The `const config` object is defining parameters related to the hashing process used for password
|
|
19
|
-
security. Here's a breakdown of each property in the `config` object: */
|
|
20
|
-
const config = {
|
|
21
|
-
hashBytes: 32,
|
|
22
|
-
saltBytes: 16,
|
|
23
|
-
iterations: 872791,
|
|
24
|
-
digest: 'sha512',
|
|
25
|
-
};
|
|
26
|
-
|
|
27
|
-
/**
|
|
28
|
-
* @param {String} password - given password to hash
|
|
29
|
-
* @returns {String} the hash corresponding to the password
|
|
30
|
-
* @memberof Auth
|
|
31
|
-
*/
|
|
32
|
-
function hashPassword(password) {
|
|
33
|
-
const { iterations, hashBytes, digest, saltBytes } = config;
|
|
34
|
-
const salt = crypto.randomBytes(saltBytes).toString('hex');
|
|
35
|
-
const hash = crypto.pbkdf2Sync(password, salt, iterations, hashBytes, digest).toString('hex');
|
|
36
|
-
return [salt, hash].join('$');
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
/**
|
|
40
|
-
* @param {String} password - password to verify
|
|
41
|
-
* @param {String} combined - a combined salt + hash returned by hashPassword function
|
|
42
|
-
* @returns {Boolean} true if password correspond to the hash. False otherwise
|
|
43
|
-
* @memberof Auth
|
|
44
|
-
*/
|
|
45
|
-
function verifyPassword(password, combined) {
|
|
46
|
-
const { iterations, hashBytes, digest } = config;
|
|
47
|
-
const [salt, originalHash] = combined.split('$');
|
|
48
|
-
const hash = crypto.pbkdf2Sync(password, salt, iterations, hashBytes, digest).toString('hex');
|
|
49
|
-
return hash === originalHash;
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
// jwt middleware
|
|
53
|
-
|
|
54
|
-
/**
|
|
55
|
-
* The hashJWT function generates a JSON Web Token (JWT) with a specified payload and expiration time.
|
|
56
|
-
* @param payload - The `payload` parameter in the `hashJWT` function is the data that you want to
|
|
57
|
-
* encode into the JSON Web Token (JWT). It typically contains information about the user or any other
|
|
58
|
-
* relevant data that you want to securely transmit.
|
|
59
|
-
* @param expire - The `expire` parameter in the `hashJWT` function is used to specify the expiration
|
|
60
|
-
* time for the JSON Web Token (JWT) being generated. If a value is provided for `expire`, it will be
|
|
61
|
-
* used as the expiration time. If `expire` is not provided (i.e., it
|
|
62
|
-
* @memberof Auth
|
|
63
|
-
*/
|
|
64
|
-
const hashJWT = (payload, expire) =>
|
|
65
|
-
jwt.sign(payload, process.env.JWT_SECRET, { expiresIn: expire !== undefined ? expire : `${process.env.EXPIRE}h` });
|
|
66
|
-
|
|
67
|
-
/**
|
|
68
|
-
* The function `verifyJWT` is used to verify a JSON Web Token (JWT) using a secret key stored in the
|
|
69
|
-
* environment variables.
|
|
70
|
-
* @param token - The `token` parameter is a JSON Web Token (JWT) that is passed to the `verifyJWT`
|
|
71
|
-
* function for verification.
|
|
72
|
-
* @memberof Auth
|
|
73
|
-
*/
|
|
74
|
-
const verifyJWT = (token = '') => jwt.verify(token, process.env.JWT_SECRET);
|
|
75
|
-
|
|
76
|
-
/**
|
|
77
|
-
* The
|
|
78
|
-
*
|
|
79
|
-
* @param req - The `req` parameter in the `
|
|
80
|
-
*
|
|
81
|
-
*
|
|
82
|
-
* headers
|
|
83
|
-
* @
|
|
84
|
-
*
|
|
85
|
-
*
|
|
86
|
-
* @
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
* The `
|
|
117
|
-
*
|
|
118
|
-
*
|
|
119
|
-
*
|
|
120
|
-
*
|
|
121
|
-
*
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
*
|
|
150
|
-
*
|
|
151
|
-
* @param
|
|
152
|
-
*
|
|
153
|
-
*
|
|
154
|
-
*
|
|
155
|
-
*
|
|
156
|
-
*
|
|
157
|
-
*
|
|
158
|
-
*
|
|
159
|
-
*
|
|
160
|
-
*
|
|
161
|
-
*
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
return
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Module for managing identity and authorization
|
|
3
|
+
* @module src/server/auth.js
|
|
4
|
+
* @namespace Auth
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import dotenv from 'dotenv';
|
|
8
|
+
import jwt from 'jsonwebtoken';
|
|
9
|
+
import { loggerFactory } from './logger.js';
|
|
10
|
+
import crypto from 'crypto';
|
|
11
|
+
import { userRoleEnum } from '../api/user/user.model.js';
|
|
12
|
+
import { validatePassword } from '../client/components/core/CommonJs.js';
|
|
13
|
+
|
|
14
|
+
dotenv.config();
|
|
15
|
+
|
|
16
|
+
const logger = loggerFactory(import.meta);
|
|
17
|
+
|
|
18
|
+
/* The `const config` object is defining parameters related to the hashing process used for password
|
|
19
|
+
security. Here's a breakdown of each property in the `config` object: */
|
|
20
|
+
const config = {
|
|
21
|
+
hashBytes: 32,
|
|
22
|
+
saltBytes: 16,
|
|
23
|
+
iterations: 872791,
|
|
24
|
+
digest: 'sha512',
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* @param {String} password - given password to hash
|
|
29
|
+
* @returns {String} the hash corresponding to the password
|
|
30
|
+
* @memberof Auth
|
|
31
|
+
*/
|
|
32
|
+
function hashPassword(password) {
|
|
33
|
+
const { iterations, hashBytes, digest, saltBytes } = config;
|
|
34
|
+
const salt = crypto.randomBytes(saltBytes).toString('hex');
|
|
35
|
+
const hash = crypto.pbkdf2Sync(password, salt, iterations, hashBytes, digest).toString('hex');
|
|
36
|
+
return [salt, hash].join('$');
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* @param {String} password - password to verify
|
|
41
|
+
* @param {String} combined - a combined salt + hash returned by hashPassword function
|
|
42
|
+
* @returns {Boolean} true if password correspond to the hash. False otherwise
|
|
43
|
+
* @memberof Auth
|
|
44
|
+
*/
|
|
45
|
+
function verifyPassword(password, combined) {
|
|
46
|
+
const { iterations, hashBytes, digest } = config;
|
|
47
|
+
const [salt, originalHash] = combined.split('$');
|
|
48
|
+
const hash = crypto.pbkdf2Sync(password, salt, iterations, hashBytes, digest).toString('hex');
|
|
49
|
+
return hash === originalHash;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
// jwt middleware
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* The hashJWT function generates a JSON Web Token (JWT) with a specified payload and expiration time.
|
|
56
|
+
* @param payload - The `payload` parameter in the `hashJWT` function is the data that you want to
|
|
57
|
+
* encode into the JSON Web Token (JWT). It typically contains information about the user or any other
|
|
58
|
+
* relevant data that you want to securely transmit.
|
|
59
|
+
* @param expire - The `expire` parameter in the `hashJWT` function is used to specify the expiration
|
|
60
|
+
* time for the JSON Web Token (JWT) being generated. If a value is provided for `expire`, it will be
|
|
61
|
+
* used as the expiration time. If `expire` is not provided (i.e., it
|
|
62
|
+
* @memberof Auth
|
|
63
|
+
*/
|
|
64
|
+
const hashJWT = (payload, expire) =>
|
|
65
|
+
jwt.sign(payload, process.env.JWT_SECRET, { expiresIn: expire !== undefined ? expire : `${process.env.EXPIRE}h` });
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* The function `verifyJWT` is used to verify a JSON Web Token (JWT) using a secret key stored in the
|
|
69
|
+
* environment variables.
|
|
70
|
+
* @param token - The `token` parameter is a JSON Web Token (JWT) that is passed to the `verifyJWT`
|
|
71
|
+
* function for verification.
|
|
72
|
+
* @memberof Auth
|
|
73
|
+
*/
|
|
74
|
+
const verifyJWT = (token = '') => jwt.verify(token, process.env.JWT_SECRET);
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* The function `getBearerToken` extracts and returns the Bearer token from the Authorization header in
|
|
78
|
+
* a request object.
|
|
79
|
+
* @param req - The `req` parameter in the `getBearerToken` function is typically an object
|
|
80
|
+
* representing the HTTP request. It is commonly used in Node.js applications with frameworks like
|
|
81
|
+
* Express.js. The `req` object contains information about the incoming HTTP request, including
|
|
82
|
+
* headers, body, parameters, and more. In
|
|
83
|
+
* @returns {String} The function `getBearerToken` is returning the Bearer token extracted from the
|
|
84
|
+
* Authorization header in the request object. If the Authorization header starts with 'Bearer ', it
|
|
85
|
+
* will return the token portion of the header (excluding 'Bearer ').
|
|
86
|
+
* @memberof Auth
|
|
87
|
+
*/
|
|
88
|
+
const getBearerToken = (req) => {
|
|
89
|
+
const authHeader = String(req.headers['authorization'] || req.headers['Authorization'] || '');
|
|
90
|
+
if (authHeader.startsWith('Bearer ')) return authHeader.substring(7, authHeader.length);
|
|
91
|
+
return '';
|
|
92
|
+
};
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* The function `getPayloadJWT` extracts and verifies a JWT payload from a request using a bearer
|
|
96
|
+
* token.
|
|
97
|
+
* @param req - The `req` parameter is typically used in web development to represent the HTTP request
|
|
98
|
+
* object. It contains information about the incoming request, such as headers, parameters, and body
|
|
99
|
+
* data. In this context, it seems like the `getPayloadJWT` function is designed to extract and verify
|
|
100
|
+
* a JWT token from
|
|
101
|
+
* @returns {Object} The JWT payload from a request using a bearer
|
|
102
|
+
* @memberof Auth
|
|
103
|
+
*/
|
|
104
|
+
const getPayloadJWT = (req) => verifyJWT(getBearerToken(req));
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* The authMiddleware function checks and verifies the authorization token in the request headers
|
|
108
|
+
* before allowing access to protected routes.
|
|
109
|
+
* @param req - The `req` parameter in the `authMiddleware` function stands for the request object. It
|
|
110
|
+
* contains information about the HTTP request made to the server, including headers, body, parameters,
|
|
111
|
+
* and more. In this context, the function is extracting the authorization token from the request
|
|
112
|
+
* headers to authenticate the user.
|
|
113
|
+
* @param res - The `res` parameter in the `authMiddleware` function is the response object that
|
|
114
|
+
* represents the HTTP response that an Express.js server sends when it receives an HTTP request. It is
|
|
115
|
+
* used to send a response back to the client with status codes, headers, and data.
|
|
116
|
+
* @param next - The `next` parameter in the `authMiddleware` function is a callback function that is
|
|
117
|
+
* used to pass control to the next middleware function in the stack. When called, it invokes the next
|
|
118
|
+
* middleware function in the chain. This is a common pattern in Express.js middleware functions to
|
|
119
|
+
* move to the next middleware
|
|
120
|
+
* @returns {Object} The `req.auth` included JWT payload in request authorization
|
|
121
|
+
* @memberof Auth
|
|
122
|
+
*/
|
|
123
|
+
const authMiddleware = (req, res, next) => {
|
|
124
|
+
try {
|
|
125
|
+
const token = getBearerToken(req);
|
|
126
|
+
if (token) {
|
|
127
|
+
const payload = verifyJWT(token);
|
|
128
|
+
req.auth = payload;
|
|
129
|
+
return next();
|
|
130
|
+
} else
|
|
131
|
+
return res.status(401).json({
|
|
132
|
+
status: 'error',
|
|
133
|
+
message: 'unauthorized: invalid token',
|
|
134
|
+
});
|
|
135
|
+
} catch (error) {
|
|
136
|
+
logger.error(error, error.stack);
|
|
137
|
+
return res.status(400).json({
|
|
138
|
+
status: 'error',
|
|
139
|
+
message: error.message,
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
};
|
|
143
|
+
|
|
144
|
+
/**
|
|
145
|
+
* The `adminGuard` function checks if the user has admin role permission and returns an error message
|
|
146
|
+
* if not.
|
|
147
|
+
* @param req - The `req` parameter typically represents the HTTP request object in Node.js. It
|
|
148
|
+
* contains information about the incoming request such as the request headers, parameters, body, and
|
|
149
|
+
* more. In the context of your `adminGuard` function, `req` is the request object that is being passed
|
|
150
|
+
* to the middleware
|
|
151
|
+
* @param res - The `res` parameter in the `adminGuard` function is the response object in Express.js.
|
|
152
|
+
* It is used to send a response back to the client making the HTTP request.
|
|
153
|
+
* @param next - The `next` parameter in the `adminGuard` function is a callback function that is used
|
|
154
|
+
* to pass control to the next middleware function in the stack. When called, it executes the next
|
|
155
|
+
* middleware function. If there are no more middleware functions in the stack, it will proceed to the
|
|
156
|
+
* route handler.
|
|
157
|
+
* @returns The `adminGuard` function is returning either a 403 status with an error message if the
|
|
158
|
+
* user role is not 'admin', or it is calling the `next()` function to proceed to the next middleware
|
|
159
|
+
* if the user role is 'admin'. If an error occurs during the process, it will log the error and return
|
|
160
|
+
* a 400 status with the error message.
|
|
161
|
+
* @memberof Auth
|
|
162
|
+
*/
|
|
163
|
+
const adminGuard = (req, res, next) => {
|
|
164
|
+
try {
|
|
165
|
+
if (!(userRoleEnum.indexOf(req.auth.user.role) === userRoleEnum.indexOf('admin')))
|
|
166
|
+
return res.status(403).json({ status: 'error', message: 'Insufficient permission' });
|
|
167
|
+
return next();
|
|
168
|
+
} catch (error) {
|
|
169
|
+
logger.error(error, error.stack);
|
|
170
|
+
return res.status(400).json({
|
|
171
|
+
status: 'error',
|
|
172
|
+
message: error.message,
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
};
|
|
176
|
+
|
|
177
|
+
/**
|
|
178
|
+
* The function `moderatorGuard` checks if the user's role is at least a moderator and handles errors
|
|
179
|
+
* accordingly.
|
|
180
|
+
* @param req - The `req` parameter in the `moderatorGuard` function typically represents the HTTP
|
|
181
|
+
* request object, which contains information about the incoming request such as headers, parameters,
|
|
182
|
+
* body, etc. It is commonly used to access data sent from the client to the server.
|
|
183
|
+
* @param res - The `res` parameter in the `moderatorGuard` function is the response object in
|
|
184
|
+
* Express.js. It is used to send a response back to the client making the HTTP request.
|
|
185
|
+
* @param next - The `next` parameter in the `moderatorGuard` function is a callback function that is
|
|
186
|
+
* used to pass control to the next middleware function in the stack. When called, it will execute the
|
|
187
|
+
* next middleware function. In the context of Express.js middleware, `next` is typically called to
|
|
188
|
+
* move to
|
|
189
|
+
* @returns In the `moderatorGuard` function, if the user's role is not a moderator or higher, a 403
|
|
190
|
+
* status with an error message "Insufficient permission" is returned. If there is an error during the
|
|
191
|
+
* process, a 400 status with the error message is returned. If everything is successful, the `next()`
|
|
192
|
+
* function is called to proceed to the next middleware in the chain.
|
|
193
|
+
* @memberof Auth
|
|
194
|
+
*/
|
|
195
|
+
const moderatorGuard = (req, res, next) => {
|
|
196
|
+
try {
|
|
197
|
+
if (!(userRoleEnum.indexOf(req.auth.user.role) <= userRoleEnum.indexOf('moderator')))
|
|
198
|
+
return res.status(403).json({ status: 'error', message: 'Insufficient permission' });
|
|
199
|
+
return next();
|
|
200
|
+
} catch (error) {
|
|
201
|
+
logger.error(error, error.stack);
|
|
202
|
+
return res.status(400).json({
|
|
203
|
+
status: 'error',
|
|
204
|
+
message: error.message,
|
|
205
|
+
});
|
|
206
|
+
}
|
|
207
|
+
};
|
|
208
|
+
|
|
209
|
+
const validatePasswordMiddleware = (req, password) => {
|
|
210
|
+
let errors = [];
|
|
211
|
+
if (req.body && 'password' in req.body) errors = validatePassword(req.body.password);
|
|
212
|
+
if (errors.length > 0)
|
|
213
|
+
return {
|
|
214
|
+
status: 'error',
|
|
215
|
+
message:
|
|
216
|
+
'Password, ' + errors.map((e, i) => (i > 0 ? ', ' : '') + (e[req.lang] ? e[req.lang] : e['en'])).join(''),
|
|
217
|
+
};
|
|
218
|
+
else
|
|
219
|
+
return {
|
|
220
|
+
status: 'success',
|
|
221
|
+
};
|
|
222
|
+
};
|
|
223
|
+
|
|
224
|
+
export {
|
|
225
|
+
authMiddleware,
|
|
226
|
+
hashPassword,
|
|
227
|
+
verifyPassword,
|
|
228
|
+
hashJWT,
|
|
229
|
+
adminGuard,
|
|
230
|
+
moderatorGuard,
|
|
231
|
+
verifyJWT,
|
|
232
|
+
validatePasswordMiddleware,
|
|
233
|
+
getBearerToken,
|
|
234
|
+
getPayloadJWT,
|
|
235
|
+
};
|