beech-api 3.8.0 → 3.9.75
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/LICENSE +21 -21
- package/README.md +1715 -1244
- package/index.js +2 -2
- package/package.json +92 -83
- package/packages/cli/beech +9 -10
- package/packages/cli/bin/beech-app.js +389 -389
- package/packages/cli/bin/beech-service.js +262 -132
- package/packages/cli/core/auth/Credentials.js +174 -147
- package/packages/cli/core/auth/Passport.js +664 -592
- package/packages/cli/core/auth/_Request.js +12 -12
- package/packages/cli/core/configure/_gitignore +16 -15
- package/packages/cli/core/configure/_sequelizerc +9 -9
- package/packages/cli/core/configure/app.config-basic.js +55 -55
- package/packages/cli/core/configure/app.config-sequelize.js +88 -88
- package/packages/cli/core/configure/beech.config.js +9 -9
- package/packages/cli/core/configure/global.config-basic.js +8 -8
- package/packages/cli/core/configure/global.config-sequelize.js +8 -8
- package/packages/cli/core/configure/jest.config.js +6 -6
- package/packages/cli/core/configure/jsconfig.json +8 -7
- package/packages/cli/core/configure/passport.config.js +97 -97
- package/packages/cli/core/databases/mysql.js +94 -95
- package/packages/cli/core/databases/sequelize.js +187 -179
- package/packages/cli/core/databases/test.js +251 -170
- package/packages/cli/core/file-walk/file-walk.js +35 -35
- package/packages/cli/core/generator/_endpoints +15 -15
- package/packages/cli/core/generator/_endpoints_basic +42 -42
- package/packages/cli/core/generator/_help +26 -18
- package/packages/cli/core/generator/_help_create +10 -10
- package/packages/cli/core/generator/_help_service +10 -10
- package/packages/cli/core/generator/_helpers +9 -9
- package/packages/cli/core/generator/_helpers_basic +22 -22
- package/packages/cli/core/generator/_models +6 -29
- package/packages/cli/core/generator/_models_basic +13 -22
- package/packages/cli/core/generator/_package +23 -20
- package/packages/cli/core/generator/_scheduler +32 -22
- package/packages/cli/core/generator/_spec +29 -29
- package/packages/cli/core/generator/index.js +1081 -738
- package/packages/cli/core/helpers/2fa.js +106 -85
- package/packages/cli/core/helpers/math.js +115 -103
- package/packages/cli/core/helpers/poolEntity.js +103 -59
- package/packages/cli/core/index.js +264 -188
- package/packages/cli/core/middleware/express/duplicateRequest.js +16 -12
- package/packages/cli/core/middleware/express/jwtCheckAllow.js +86 -68
- package/packages/cli/core/middleware/express/rateLimit.js +29 -17
- package/packages/cli/core/middleware/express/slowDown.js +2 -2
- package/packages/cli/core/middleware/index.js +6 -6
- package/packages/cli/core/middleware/origin/guard/advance.js +75 -74
- package/packages/cli/core/middleware/origin/whitelist/cors.js +94 -94
- package/packages/cli/core/services/http.express.js +481 -441
- package/packages/cli/core/test/check-node.js +21 -0
- package/packages/cli/core/test/utils.js +7 -7
- package/packages/cli/entry +10 -0
- package/packages/lib/index.js +6 -6
- package/packages/lib/src/endpoint.js +947 -532
- package/packages/lib/src/guard.js +60 -60
- package/packages/lib/src/salt.js +3 -3
- package/packages/lib/src/schema.js +96 -93
- package/packages/lib/src/specificExpress.js +7 -7
- package/packages/lib/src/user.js +271 -271
|
@@ -1,147 +1,174 @@
|
|
|
1
|
-
const passport = require("passport");
|
|
2
|
-
const fs = require("fs");
|
|
3
|
-
const { checkRoleMiddleware } = require("../middleware/express/jwtCheckAllow");
|
|
4
|
-
const passport_config_file = appRoot + "/passport.config.js";
|
|
5
|
-
var passport_config;
|
|
6
|
-
if (fs.existsSync(passport_config_file)) {
|
|
7
|
-
passport_config = require(passport_config_file);
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
const byPassCredentials = (options, _res = {}, _next = () => {}) => {
|
|
11
|
-
if(!options.length) {
|
|
12
|
-
if(passport_config.jwt_broken_role ? passport_config.jwt_broken_role.length > 0 : false) {
|
|
13
|
-
// CASE: jwt_broken_role DEFUALT is set
|
|
14
|
-
return
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
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
|
-
|
|
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
|
-
|
|
1
|
+
const passport = require("passport");
|
|
2
|
+
const fs = require("fs");
|
|
3
|
+
const { checkRoleMiddleware } = require("../middleware/express/jwtCheckAllow");
|
|
4
|
+
const passport_config_file = appRoot + "/passport.config.js";
|
|
5
|
+
var passport_config;
|
|
6
|
+
if (fs.existsSync(passport_config_file)) {
|
|
7
|
+
passport_config = require(passport_config_file);
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
const byPassCredentials = (options, _res = {}, _next = () => {}) => {
|
|
11
|
+
if(!options.length) {
|
|
12
|
+
if(passport_config.jwt_broken_role ? passport_config.jwt_broken_role.length > 0 : false) {
|
|
13
|
+
// CASE: jwt_broken_role DEFUALT is set
|
|
14
|
+
return credentials(options, _res, () => {
|
|
15
|
+
return checkRoleMiddleware(passport_config.jwt_broken_role)(options, _res, _next);
|
|
16
|
+
});
|
|
17
|
+
} else {
|
|
18
|
+
if(!Object.keys(options).length) {
|
|
19
|
+
return [credentials];
|
|
20
|
+
} else {
|
|
21
|
+
if("headers" in options) {
|
|
22
|
+
// CASE: Only Credentials
|
|
23
|
+
return [credentials(options, _res, _next)];
|
|
24
|
+
} else {
|
|
25
|
+
// CASE: jwt_broken_role DEFUALT is not set
|
|
26
|
+
return [credentials];
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
} else {
|
|
31
|
+
// CASE: options Credentials is set
|
|
32
|
+
return [credentials, checkRoleMiddleware(options)];
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
const credentials = (req, res, next) => {
|
|
37
|
+
if (passport_config.jwt_allow === true) {
|
|
38
|
+
const auth_endpoint = (passport_config.auth_endpoint) ? (passport_config.auth_endpoint[ 0 ] === "/" ? passport_config.auth_endpoint : "/" + passport_config.auth_endpoint) : "/authentication";
|
|
39
|
+
const slashOneIsHash = auth_endpoint.split("/")[1];
|
|
40
|
+
if(req.params === undefined) {
|
|
41
|
+
// Request is not valid
|
|
42
|
+
console.log("\n[101m REQUEST|OPTION [0m Error: Request is not valid, missing params.");
|
|
43
|
+
return;
|
|
44
|
+
} else {
|
|
45
|
+
// Check first HASH equal Authentication
|
|
46
|
+
if(slashOneIsHash == req.params.hash) {
|
|
47
|
+
// Bypass authentication for auth endpoint
|
|
48
|
+
return next();
|
|
49
|
+
} else {
|
|
50
|
+
return passport.authenticate("jwt", {
|
|
51
|
+
session: false,
|
|
52
|
+
}, (err, user, info) => {
|
|
53
|
+
// error check
|
|
54
|
+
if (err) {
|
|
55
|
+
console.log(err, info);
|
|
56
|
+
return res.status(401).json({
|
|
57
|
+
code: 401,
|
|
58
|
+
error: "UNAUTHORIZED",
|
|
59
|
+
message: {
|
|
60
|
+
name: "WrongTokenError",
|
|
61
|
+
message: "token error.",
|
|
62
|
+
},
|
|
63
|
+
/* dev: { err, info }, */ // for dev info
|
|
64
|
+
});
|
|
65
|
+
} else {
|
|
66
|
+
// anything token check
|
|
67
|
+
if (!user) {
|
|
68
|
+
if (info) {
|
|
69
|
+
if (info.name == "TokenExpiredError") {
|
|
70
|
+
return res.status(401).json({
|
|
71
|
+
code: 401,
|
|
72
|
+
status: "TOKEN_EXPIRED",
|
|
73
|
+
message: info,
|
|
74
|
+
});
|
|
75
|
+
} else if (info.name == "Error") {
|
|
76
|
+
return res.status(401).json({
|
|
77
|
+
code: 401,
|
|
78
|
+
status: "NO_AUTH_TOKEN",
|
|
79
|
+
message: {
|
|
80
|
+
name: "NoTokenError",
|
|
81
|
+
message: "No auth token",
|
|
82
|
+
},
|
|
83
|
+
});
|
|
84
|
+
} else if (info.name == "SyntaxError") {
|
|
85
|
+
return res.status(401).json({
|
|
86
|
+
code: 401,
|
|
87
|
+
status: "PAYLOAD_SYNTAX_ERROR",
|
|
88
|
+
message: {
|
|
89
|
+
name: "SyntaxError",
|
|
90
|
+
message: "Unexpected token < in JSON at position 0",
|
|
91
|
+
},
|
|
92
|
+
});
|
|
93
|
+
} else if (info.name == "JsonWebTokenError") {
|
|
94
|
+
return res.status(401).json({
|
|
95
|
+
code: 401,
|
|
96
|
+
status: "INVALID_TOKEN",
|
|
97
|
+
message: {
|
|
98
|
+
name: "JsonWebTokenError",
|
|
99
|
+
message: "invalid token.",
|
|
100
|
+
},
|
|
101
|
+
});
|
|
102
|
+
} else {
|
|
103
|
+
return res.status(401).json({
|
|
104
|
+
code: 401,
|
|
105
|
+
status: "OTHER_TOKEN_ERR",
|
|
106
|
+
message: {
|
|
107
|
+
name: "OtherTokenError",
|
|
108
|
+
message: String(info),
|
|
109
|
+
},
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
} else {
|
|
113
|
+
return res.status(401).json({
|
|
114
|
+
code: 401,
|
|
115
|
+
status: "UNAUTHORIZED_USER",
|
|
116
|
+
message: info || {
|
|
117
|
+
name: "TokenError",
|
|
118
|
+
message: String(info),
|
|
119
|
+
},
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
} else {
|
|
123
|
+
// Perfectly user jwt
|
|
124
|
+
return next();
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
)(req, res, next);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
} else {
|
|
132
|
+
// Bypass authentication
|
|
133
|
+
return next();
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
const credentialsGuard = (req, res, next) => {
|
|
138
|
+
checkAppKey(req, res, (err) => {
|
|
139
|
+
if (!err) {
|
|
140
|
+
// Perfectly
|
|
141
|
+
next();
|
|
142
|
+
} else {
|
|
143
|
+
// Bad Request
|
|
144
|
+
return res.status(400).json({
|
|
145
|
+
code: 400,
|
|
146
|
+
status: 'BAD_REQUEST',
|
|
147
|
+
message: "Bad request.",
|
|
148
|
+
info: err,
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
function checkAppKey(req, res, cb) {
|
|
155
|
+
if (_passport_config_.app_key_allow) {
|
|
156
|
+
if (req.headers.app_key) {
|
|
157
|
+
if (_config_.main_config.app_key == req.headers.app_key) {
|
|
158
|
+
// Perfectly
|
|
159
|
+
cb(null, true);
|
|
160
|
+
} else {
|
|
161
|
+
// Wrong App key
|
|
162
|
+
cb({ status: "BAD_VALUE", message: "Bad with wrong key." }, false);
|
|
163
|
+
}
|
|
164
|
+
} else {
|
|
165
|
+
// No App key
|
|
166
|
+
cb({ status: "BAD_ENTITY", message: "Bad with app entity key." }, false);
|
|
167
|
+
}
|
|
168
|
+
} else {
|
|
169
|
+
// App key not allow, bypass
|
|
170
|
+
cb(null, true);
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
module.exports = { byPassCredentials, credentials, credentialsGuard };
|