beech-api 3.5.12 → 3.7.0
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/README.md +400 -185
- package/index.js +2 -3
- package/package.json +9 -6
- package/packages/cli/beech +2 -2
- package/packages/cli/bin/{beech.js → beech-app.js} +86 -28
- package/packages/cli/bin/beech-service.js +40 -212
- package/packages/cli/core/auth/Credentials.js +76 -35
- package/packages/cli/core/auth/Passport.js +318 -188
- package/packages/cli/core/auth/_Request.js +12 -0
- package/packages/cli/core/configure/_gitignore +9 -1
- package/packages/cli/core/configure/app.config-basic.js +10 -10
- package/packages/cli/core/configure/app.config-sequelize.js +12 -12
- package/packages/cli/core/configure/beech.config.js +8 -0
- package/packages/cli/core/configure/global.config-basic.js +4 -4
- package/packages/cli/core/configure/global.config-sequelize.js +4 -4
- package/packages/cli/core/configure/passport.config.js +5 -15
- package/packages/cli/core/databases/mysql.js +53 -29
- package/packages/cli/core/databases/sequelize.js +135 -107
- package/packages/cli/core/databases/test.js +168 -0
- package/packages/cli/core/file-walk/file-walk.js +31 -14
- package/packages/cli/core/generator/_add-on +15 -2
- package/packages/cli/core/generator/_endpoints +15 -82
- package/packages/cli/core/generator/_endpoints_basic +39 -0
- package/packages/cli/core/generator/_help +12 -11
- package/packages/cli/core/generator/_help_create +11 -0
- package/packages/cli/core/generator/{_service → _help_service} +4 -1
- package/packages/cli/core/generator/_models +20 -15
- package/packages/cli/core/generator/{_basic-models → _models_basic} +0 -2
- package/packages/cli/core/generator/_package +4 -3
- package/packages/cli/core/generator/index.js +302 -95
- package/packages/cli/core/helpers/math.js +55 -0
- package/packages/cli/core/helpers/poolEntity.js +31 -0
- package/packages/cli/core/index.js +96 -28
- package/packages/cli/core/origin/index.js +2 -0
- package/packages/cli/core/origin/whitelist/cors.js +91 -0
- package/packages/cli/core/services/http.express.js +338 -203
- package/packages/cli/core/test/utils.js +5 -5
- package/packages/lib/index.js +4 -0
- package/packages/lib/src/endpoint.js +98 -0
- package/packages/lib/src/salt.js +3 -0
- package/packages/lib/src/schema.js +62 -0
- package/packages/lib/src/user.js +196 -0
- package/packages/package.json +4 -7
- package/packages/cli/core/generator/_create +0 -7
- package/packages/lib/beech.js +0 -136
- package/packages/lib/salt.js +0 -3
- package/packages/src-/Add-on.js +0 -9
- package/packages/src-/endpoints/hello-endpoints.js +0 -118
- package/packages/src-/endpoints/test2-endpoints.js +0 -75
- package/packages/src-/endpoints/testSequalize-endpoints.js +0 -23
- package/packages/src-/helpers/Test2.js +0 -11
- package/packages/src-/helpers/my/Test.js +0 -11
- package/packages/src-/helpers/my/Test2.js +0 -11
- package/packages/src-/helpers/my/Test3.js +0 -11
- package/packages/src-/helpers/my/Test4.js +0 -11
- package/packages/src-/models/Jubu.js +0 -29
- package/packages/src-/models/Jubu2.js +0 -20
- package/packages/src-/models/Map_master.js +0 -22
- package/packages/src-/models/Test.js +0 -29
- package/packages/src-/models/Test2.js +0 -29
- package/packages/src-/models/User2Sequelize.js +0 -23
- package/packages/src-/models/Users-sqlite.js +0 -21
- package/packages/src-/models/Users.js +0 -53
- package/packages/src-/models/Uuuuuxxx.js +0 -23
- package/packages/src-/models/xxx/Uuuuuxxx.js +0 -23
- /package/packages/cli/core/generator/{_basic-helpers → _helpers_basic} +0 -0
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
const fs = require("fs");
|
|
2
1
|
const appRoot = require("app-root-path");
|
|
2
|
+
const { performance } = require("perf_hooks");
|
|
3
3
|
const moduleAlias = require("module-alias");
|
|
4
4
|
moduleAlias.addAlias("@", appRoot + "/src");
|
|
5
5
|
const _express_ = require("express");
|
|
@@ -8,6 +8,7 @@ const cors = require("cors");
|
|
|
8
8
|
global.endpoint = _express_.Router();
|
|
9
9
|
const cookieParser = require("cookie-parser");
|
|
10
10
|
const bodyParser = require("body-parser");
|
|
11
|
+
const methodOverride = require("method-override");
|
|
11
12
|
const expressSession = require("express-session");
|
|
12
13
|
const expressValidator = require("express-validator");
|
|
13
14
|
const globalVariable = require(appRoot + "/global.config.js");
|
|
@@ -16,33 +17,46 @@ globalVariable.init();
|
|
|
16
17
|
global._config_ = require(appRoot + "/app.config");
|
|
17
18
|
const mySqlDbConnect = require("./databases/mysql");
|
|
18
19
|
const SequelizeDbConnect = require("./databases/sequelize");
|
|
20
|
+
// database test
|
|
21
|
+
const {
|
|
22
|
+
testConnectInProcess,
|
|
23
|
+
filterDbIsTrue,
|
|
24
|
+
disConnectTestDB,
|
|
25
|
+
} = require("./databases/test");
|
|
19
26
|
// create global sequelize object
|
|
20
27
|
const { QueryTypes, DataTypes, Op } = require("sequelize");
|
|
21
28
|
global.QueryTypes = QueryTypes;
|
|
22
29
|
global.DataTypes = DataTypes;
|
|
23
30
|
global.Op = Op;
|
|
24
|
-
//
|
|
25
|
-
|
|
26
|
-
const
|
|
31
|
+
// allow whitelist cors
|
|
32
|
+
_app_.use(cors({ origin: true, credentials: true }));
|
|
33
|
+
const { whitelist, sign } = require("./origin/index");
|
|
27
34
|
// View engine
|
|
28
35
|
_app_.use(bodyParser.json());
|
|
29
36
|
_app_.use(bodyParser.urlencoded({ extended: true }));
|
|
37
|
+
_app_.use(methodOverride());
|
|
30
38
|
_app_.use(cookieParser());
|
|
31
|
-
_app_.use(
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
39
|
+
_app_.use(
|
|
40
|
+
expressSession({
|
|
41
|
+
secret: "surprise you mother f*cker",
|
|
42
|
+
resave: true,
|
|
43
|
+
saveUninitialized: true,
|
|
44
|
+
})
|
|
45
|
+
);
|
|
36
46
|
_app_.use(expressValidator());
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
res.
|
|
42
|
-
|
|
43
|
-
|
|
47
|
+
// Dev. activity
|
|
48
|
+
_app_.use((req, res, next) => {
|
|
49
|
+
console.log("Request URL:", req.method, req.originalUrl);
|
|
50
|
+
var t0 = performance.now();
|
|
51
|
+
res.on("finish", () => {
|
|
52
|
+
var t1 = performance.now();
|
|
53
|
+
console.log(`Responded with status : ${res.statusCode} (${(t1 - t0).toFixed(2)}ms)`);
|
|
54
|
+
});
|
|
44
55
|
next();
|
|
45
56
|
});
|
|
57
|
+
// engine import
|
|
58
|
+
const httpExpress = require("./services/http.express");
|
|
59
|
+
const fileWalk = require("./file-walk/file-walk");
|
|
46
60
|
// passport initialization
|
|
47
61
|
const authPassport = require("./auth/Passport");
|
|
48
62
|
const passport = require("passport");
|
|
@@ -58,12 +72,6 @@ passport.deserializeUser((user, done) => {
|
|
|
58
72
|
const walk = require("walk");
|
|
59
73
|
let jsfiles = [];
|
|
60
74
|
let walker = walk.walk(appRoot + "/src/endpoints", { followLinks: false });
|
|
61
|
-
// check add-on file exists ?
|
|
62
|
-
if (fs.existsSync(appRoot + "/src/Add-on.js")) {
|
|
63
|
-
if (_config_.addOn) {
|
|
64
|
-
jsfiles.push(appRoot + "/src/Add-on.js");
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
75
|
// Walk file on push
|
|
68
76
|
walker.on("file", (root, stat, next) => {
|
|
69
77
|
jsfiles.push(root + "/" + stat.name);
|
|
@@ -76,14 +84,74 @@ walker.on("end", () => {
|
|
|
76
84
|
// Initialize the application
|
|
77
85
|
init = async (jsfiles) => {
|
|
78
86
|
try {
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
87
|
+
const testConnectToDB = new Promise((resolve) => {
|
|
88
|
+
filterDbIsTrue(_config_.database_config, (err, dbTruthy) => {
|
|
89
|
+
if (err) {
|
|
90
|
+
throw ("Config file crash.", err);
|
|
91
|
+
}
|
|
92
|
+
// leave data to disconnect database
|
|
93
|
+
let leaveDataForDisconnect = dbTruthy.slice(0);
|
|
94
|
+
// check db connect truthy length ?
|
|
95
|
+
if (dbTruthy.length > 0) {
|
|
96
|
+
testConnectInProcess(dbTruthy, dbTruthy.length, (err, result, dbs) => {
|
|
97
|
+
if (err) {
|
|
98
|
+
throw ("[101m Failed [0m Database connect failed.", err);
|
|
99
|
+
}
|
|
100
|
+
if (result) {
|
|
101
|
+
// Disconnect database
|
|
102
|
+
disConnectTestDB(leaveDataForDisconnect, dbs, (err, disResult) => {
|
|
103
|
+
if (err) {
|
|
104
|
+
throw ("[101m Failed [0m Testing Database connect failed.", err);
|
|
105
|
+
}
|
|
106
|
+
if (disResult) {
|
|
107
|
+
// Disconnect and Next to real
|
|
108
|
+
resolve(true);
|
|
109
|
+
} else {
|
|
110
|
+
throw err;
|
|
111
|
+
}
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
});
|
|
115
|
+
} else {
|
|
116
|
+
// Not ON connect, Next to real
|
|
117
|
+
resolve(true);
|
|
118
|
+
}
|
|
119
|
+
});
|
|
120
|
+
});
|
|
121
|
+
Promise.all([testConnectToDB]).then(async (x) => {
|
|
122
|
+
if (x[0]) {
|
|
123
|
+
await (pool_base == "basic"
|
|
124
|
+
? new Promise((resolve) => resolve(mySqlDbConnect.connect()))
|
|
125
|
+
: new Promise((resolve) => resolve(SequelizeDbConnect.connect())));
|
|
126
|
+
await whitelist(async (lists, originSensitive) => {
|
|
127
|
+
await _app_.use((req, res, next) => {
|
|
128
|
+
sign(req, res, lists, originSensitive, (err) => {
|
|
129
|
+
if (!err) {
|
|
130
|
+
next();
|
|
131
|
+
} else {
|
|
132
|
+
throw err;
|
|
133
|
+
}
|
|
134
|
+
});
|
|
135
|
+
});
|
|
136
|
+
await authPassport.init().then(async (x) => {
|
|
137
|
+
if (x[0]) {
|
|
138
|
+
throw x[0];
|
|
139
|
+
} else {
|
|
140
|
+
await new Promise((resolve) => resolve(fileWalk.fileWalk(jsfiles)));
|
|
141
|
+
await new Promise((resolve) => {
|
|
142
|
+
httpExpress.expressStart().then((expss) => {
|
|
143
|
+
resolve(expss);
|
|
144
|
+
});
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
});
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
});
|
|
83
151
|
} catch (error) {
|
|
84
152
|
console.log("[101m Compile failed [0m", error);
|
|
85
153
|
throw error;
|
|
86
154
|
}
|
|
87
|
-
}
|
|
155
|
+
};
|
|
88
156
|
// use router
|
|
89
|
-
_app_.use(endpoint);
|
|
157
|
+
_app_.use(endpoint);
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
const fs = require("fs");
|
|
2
|
+
const appRoot = require("app-root-path");
|
|
3
|
+
function whitelist(cb) {
|
|
4
|
+
var whitelists = [];
|
|
5
|
+
const getWhitelists = new Promise((resolve) => {
|
|
6
|
+
if (fs.existsSync(appRoot + "/beech.config.js")) {
|
|
7
|
+
fs.readFile(appRoot + "/beech.config.js", "utf8", (err, e) => {
|
|
8
|
+
if (!err) {
|
|
9
|
+
let defineConfig = eval(e).defineConfig;
|
|
10
|
+
let origin = defineConfig.server.origin;
|
|
11
|
+
let originSensitive = defineConfig.server.originSensitive;
|
|
12
|
+
let allAllow = origin.filter((allow) => {
|
|
13
|
+
return allow == "*";
|
|
14
|
+
});
|
|
15
|
+
if (allAllow.length) {
|
|
16
|
+
resolve([whitelists, originSensitive]);
|
|
17
|
+
} else {
|
|
18
|
+
resolve([origin, originSensitive]);
|
|
19
|
+
}
|
|
20
|
+
} else {
|
|
21
|
+
// error resolve default whitelist
|
|
22
|
+
resolve([whitelists, originSensitive]);
|
|
23
|
+
}
|
|
24
|
+
});
|
|
25
|
+
} else {
|
|
26
|
+
resolve([whitelists, originSensitive]);
|
|
27
|
+
}
|
|
28
|
+
});
|
|
29
|
+
// promise all
|
|
30
|
+
Promise.all([getWhitelists]).then((final) => {
|
|
31
|
+
cb(final[0][0], final[0][1]);
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
function sign(req, res, whitelist, originSensitive, cb) {
|
|
36
|
+
try {
|
|
37
|
+
const origin = req.headers.origin;
|
|
38
|
+
let doYouSignSomeOrigin = false;
|
|
39
|
+
//var host = req.get("host");
|
|
40
|
+
console.log("Request from origin:", origin || "localhost");
|
|
41
|
+
|
|
42
|
+
if (whitelist.length > 0) {
|
|
43
|
+
whitelist.forEach((val, k) => {
|
|
44
|
+
if (origin) {
|
|
45
|
+
if (origin.indexOf(val) > -1) {
|
|
46
|
+
doYouSignSomeOrigin = true;
|
|
47
|
+
if (originSensitive) {
|
|
48
|
+
res.setHeader("Access-Control-Allow-Origin", val);
|
|
49
|
+
} else {
|
|
50
|
+
res.setHeader("Access-Control-Allow-Origin", origin);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
if (whitelist.length == k + 1) {
|
|
55
|
+
if (!doYouSignSomeOrigin) {
|
|
56
|
+
res.setHeader(
|
|
57
|
+
"Access-Control-Allow-Origin",
|
|
58
|
+
"http://localhost:" + _config_.main_config.app_port
|
|
59
|
+
);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
} else {
|
|
64
|
+
res.setHeader("Access-Control-Allow-Origin", origin);
|
|
65
|
+
}
|
|
66
|
+
// Request methods you wish to allow
|
|
67
|
+
res.setHeader(
|
|
68
|
+
"Access-Control-Allow-Methods",
|
|
69
|
+
"GET, POST, OPTIONS, PUT, PATCH, DELETE"
|
|
70
|
+
);
|
|
71
|
+
// Request headers you wish to allow
|
|
72
|
+
res.setHeader(
|
|
73
|
+
"Access-Control-Allow-Headers",
|
|
74
|
+
"X-Requested-With",
|
|
75
|
+
"Content-Type",
|
|
76
|
+
"Accept",
|
|
77
|
+
"Authorization",
|
|
78
|
+
"Origin",
|
|
79
|
+
"application/json; charset=utf-8"
|
|
80
|
+
);
|
|
81
|
+
// Set to true if you need the website to include cookies in the requests sent
|
|
82
|
+
// to the API (e.g. in case you use sessions)
|
|
83
|
+
res.setHeader("Access-Control-Allow-Credentials", true);
|
|
84
|
+
// callback
|
|
85
|
+
cb(null);
|
|
86
|
+
} catch (error) {
|
|
87
|
+
cb(error);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
module.exports = { whitelist, sign };
|