@churchsoln/dbms 1.0.47 → 1.0.49
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/Dockerfile +21 -21
- package/Makefile +132 -132
- package/app.js +37 -37
- package/config/config.js +33 -33
- package/config/errorCodes.js +65 -65
- package/config/errorMsgs.js +82 -82
- package/constants/index.js +94 -94
- package/controllers/church.js +100 -100
- package/controllers/index.js +6 -6
- package/controllers/master.js +138 -138
- package/controllers/migration.js +24 -24
- package/controllers/seed.js +33 -33
- package/db-setup.js +87 -87
- package/deployment/docker-compose.local.yml +64 -64
- package/deployment/docker-compose.yml +62 -62
- package/deployment/nginx/nginx-certs/localhost.crt +22 -22
- package/deployment/nginx/nginx-certs/localhost.key +28 -28
- package/deployment/nginx/nginx.local.conf +72 -72
- package/middlewares/church-filter.js +16 -16
- package/migrations/church/20221226151615-create-province.js +27 -27
- package/migrations/church/20221226151616-create-city.js +41 -41
- package/migrations/church/20221226151617-create-subRole.js +25 -25
- package/migrations/church/20221226151618-create-membership.js +68 -68
- package/migrations/church/20221226151619-create-member.js +140 -140
- package/migrations/church/20221227151615-create-user.js +60 -60
- package/migrations/church/20230826140644-create-eventsUpdates.js +29 -29
- package/migrations/church/20230904143429-create-ministries.js +26 -26
- package/migrations/church/20231021160018-create-gallery.js +28 -28
- package/migrations/church/20231105074019-create-feedback.js +28 -28
- package/migrations/church/20231111113342-create-banner.js +29 -29
- package/migrations/church/20231216105640-create-directoryBoard.js +31 -31
- package/migrations/church/20240214160101-create-volunteer.js +31 -31
- package/migrations/church/20240330111437-create-download.js +29 -29
- package/migrations/church/20240427170617-create-links.js +26 -26
- package/migrations/church/20240815170617-create-userTransfer.js +63 -63
- package/migrations/church/20240815170620-create-subRolePermission.js +40 -40
- package/migrations/church/20240915170620-create-transferType.js +25 -25
- package/migrations/church/20240917170620-create-accounts.js +27 -27
- package/migrations/church/20240918170621-create-church.js +54 -54
- package/migrations/church/20240918170622-create-group.js +61 -61
- package/migrations/church/20240918170623-create-groupMembers.js +74 -74
- package/migrations/church/20240918170627-create-pledge.js +96 -96
- package/migrations/church/20240919170627-create-contributionBatch.js +42 -42
- package/migrations/church/20240919170628-create-contributionTransaction.js +82 -82
- package/migrations/church/20240919170629-create-contributionTransactionLine.js +74 -74
- package/migrations/church/20240919170630-update-groupMembers.js +77 -77
- package/migrations/church/20241204170631-create-pledgeAccount.js +55 -55
- package/migrations/church/20241204170632-create-memberStatus.js +26 -0
- package/migrations/church/20241204170633-update-member.js +33 -0
- package/migrations/church/20241204170634-update-membership.js +33 -0
- package/migrations/church/20241204170635-update-pledge.js +33 -0
- package/migrations/church/20241204170636-update-contributionTransactionLine.js +33 -0
- package/migrations/common/20221226140655-create-subscriptionPlan.js +31 -31
- package/migrations/common/20221226143006-create-role.js +25 -25
- package/migrations/common/20240815170619-create-permission.js +27 -27
- package/migrations/common/20240815170620-create-church.js +56 -56
- package/migrations/common/20240815170621-create-churchDomain.js +40 -40
- package/migrations/common/20240918170621-create-churchPermission.js +53 -53
- package/migrations/common/20240918170622-create-user.js +35 -35
- package/migrations/common/20240918170627-create-subscriptionPlanPermission.js +53 -53
- package/models/church/accounts.js +23 -27
- package/models/church/banner.js +29 -29
- package/models/church/church.js +62 -62
- package/models/church/city.js +23 -23
- package/models/church/contributionBatch.js +45 -45
- package/models/church/contributionTransaction.js +90 -90
- package/models/church/contributionTransactionLine.js +81 -80
- package/models/church/directoryBoard.js +33 -33
- package/models/church/download.js +35 -35
- package/models/church/eventsUpdates.js +29 -29
- package/models/church/feedback.js +27 -27
- package/models/church/gallery.js +33 -33
- package/models/church/group.js +78 -78
- package/models/church/groupMembers.js +73 -73
- package/models/church/index.js +30 -30
- package/models/church/links.js +22 -22
- package/models/church/member.js +161 -171
- package/models/church/memberStatus.js +22 -0
- package/models/church/membership.js +80 -81
- package/models/church/ministries.js +16 -16
- package/models/church/pledge.js +65 -65
- package/models/church/pledgeAccount.js +45 -37
- package/models/church/province.js +23 -23
- package/models/church/subRole.js +21 -21
- package/models/church/subRolePermission.js +22 -22
- package/models/church/transferType.js +15 -15
- package/models/church/user.js +78 -78
- package/models/church/userTransfer.js +45 -45
- package/models/church/volunteer.js +33 -33
- package/models/common/church.js +58 -58
- package/models/common/churchDomain.js +21 -21
- package/models/common/churchPermission.js +26 -26
- package/models/common/index.js +40 -40
- package/models/common/permission.js +17 -17
- package/models/common/role.js +15 -15
- package/models/common/subscriptionPlan.js +34 -34
- package/models/common/subscriptionPlanPermission.js +33 -33
- package/models/common/user.js +39 -39
- package/package.json +41 -41
- package/public/swagger/church.json +521 -521
- package/public/swagger/master.json +537 -537
- package/public/swagger/migration.json +83 -83
- package/public/swagger/seed.json +98 -98
- package/queues/db-create.js +9 -9
- package/queues/index.js +5 -5
- package/queues/master.js +9 -9
- package/queues/migration.js +9 -9
- package/queues/seed.js +9 -9
- package/redis/config.js +5 -5
- package/routes/index.js +30 -30
- package/routes/v1/church.js +45 -45
- package/routes/v1/index.js +7 -7
- package/routes/v1/master.js +68 -68
- package/routes/v1/migration.js +10 -10
- package/routes/v1/seed.js +12 -12
- package/seeders/church/20241005124245-province.js +101 -101
- package/seeders/church/20241005124547-city.js +87 -87
- package/seeders/church/20241005131418-transferType.js +40 -40
- package/seeders/church/20241005131419-memberStatus.js +34 -0
- package/seeders/common/20241005123516-subscriptionPlan.js +43 -43
- package/seeders/common/20241005124105-role.js +38 -38
- package/seeders/common/20241005153047-permission.js +252 -242
- package/seeders/common/20241005153048-user.js +48 -48
- package/services/church.js +312 -312
- package/services/index.js +6 -6
- package/services/master.js +344 -344
- package/services/migration.js +30 -30
- package/services/seed.js +39 -39
- package/utils/churchManager.js +98 -98
- package/utils/crypto.js +40 -40
- package/utils/docUpload.js +51 -51
- package/utils/encryptDecrypt.js +26 -26
- package/utils/index.js +33 -33
- package/utils/logger.js +104 -104
- package/utils/response.js +108 -108
- package/utils/swagger.js +25 -25
- package/utils/verifyToken.js +58 -58
- package/validators/church.js +154 -154
- package/validators/index.js +3 -3
- package/validators/master.js +152 -152
- package/workers/db-create.js +37 -37
- package/workers/index.js +4 -4
- package/workers/master.js +50 -50
- package/workers/migrations.js +63 -63
- package/workers/seed.js +85 -85
package/utils/logger.js
CHANGED
|
@@ -1,104 +1,104 @@
|
|
|
1
|
-
require("winston-daily-rotate-file");
|
|
2
|
-
var winston = require("winston");
|
|
3
|
-
var requestId = guid();
|
|
4
|
-
//Generate a random request ID for identification
|
|
5
|
-
function guid() {
|
|
6
|
-
var text = "";
|
|
7
|
-
var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
|
|
8
|
-
|
|
9
|
-
for (var i = 0; i < 32; i++)
|
|
10
|
-
text += possible.charAt(Math.floor(Math.random() * possible.length));
|
|
11
|
-
return text;
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
class CustomLogger {
|
|
15
|
-
constructor() {
|
|
16
|
-
this.logger = null;
|
|
17
|
-
winston.loggers.add("logger", {
|
|
18
|
-
transports: [
|
|
19
|
-
//new files will be generated each day, the date patter indicates the frequency of creating a file.
|
|
20
|
-
new winston.transports.DailyRotateFile({
|
|
21
|
-
name: "debug-log",
|
|
22
|
-
filename: "logs/API-Logger-%DATE%.log",
|
|
23
|
-
prepend: true,
|
|
24
|
-
datePattern: "YYYY-MM-DD",
|
|
25
|
-
format: winston.format.printf(
|
|
26
|
-
(info) =>
|
|
27
|
-
`${this.getFormattedDate()} | ${requestId} | [${info.level}] | ${
|
|
28
|
-
info.message
|
|
29
|
-
}`
|
|
30
|
-
),
|
|
31
|
-
}),
|
|
32
|
-
],
|
|
33
|
-
});
|
|
34
|
-
this.logger = winston.loggers.get("logger");
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
//Get the file name and line number from which the log is called on
|
|
38
|
-
_getCallerFile() {
|
|
39
|
-
var originalFunc = Error.prepareStackTrace;
|
|
40
|
-
|
|
41
|
-
var callerfile;
|
|
42
|
-
try {
|
|
43
|
-
var err = new Error();
|
|
44
|
-
var currentfile;
|
|
45
|
-
var number;
|
|
46
|
-
|
|
47
|
-
Error.prepareStackTrace = function (err, stack) {
|
|
48
|
-
return stack;
|
|
49
|
-
};
|
|
50
|
-
currentfile = err.stack.shift().getFileName();
|
|
51
|
-
while (err.stack.length) {
|
|
52
|
-
var st = err.stack.shift();
|
|
53
|
-
callerfile = st.getFileName();
|
|
54
|
-
number = st.getLineNumber();
|
|
55
|
-
if (currentfile !== callerfile) break;
|
|
56
|
-
}
|
|
57
|
-
} catch (e) {
|
|
58
|
-
throw Error(e);
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
Error.prepareStackTrace = originalFunc;
|
|
62
|
-
return callerfile.replace(__dirname, "") + "(" + number + ")";
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
//Get a formatted date
|
|
66
|
-
getFormattedDate() {
|
|
67
|
-
let date = new Date();
|
|
68
|
-
let day = date.getDate();
|
|
69
|
-
let month = date.getMonth() + 1;
|
|
70
|
-
let year = date.getFullYear();
|
|
71
|
-
let hours = date.getHours();
|
|
72
|
-
let minutes = date.getMinutes();
|
|
73
|
-
|
|
74
|
-
minutes = minutes < 10 ? "0" + minutes : minutes;
|
|
75
|
-
let strTime = hours + ":" + minutes;
|
|
76
|
-
return day + "/" + month + "/" + year + " " + strTime;
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
//Write an error log
|
|
80
|
-
error(message) {
|
|
81
|
-
this.fileStack = this._getCallerFile();
|
|
82
|
-
this.logger.error(message);
|
|
83
|
-
return true;
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
//Write an info log
|
|
87
|
-
info(message) {
|
|
88
|
-
this.fileStack = this._getCallerFile();
|
|
89
|
-
this.logger.info(message);
|
|
90
|
-
return true;
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
//Function used as an express middleware to capture incoming IP address and request ID
|
|
94
|
-
requestDetails(loggerInstance) {
|
|
95
|
-
return function (req, res, next) {
|
|
96
|
-
//this.clientIPAddress = get_ip(req).clientIp
|
|
97
|
-
requestId = guid();
|
|
98
|
-
req.appLogger = loggerInstance;
|
|
99
|
-
next();
|
|
100
|
-
};
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
module.exports = new CustomLogger();
|
|
1
|
+
require("winston-daily-rotate-file");
|
|
2
|
+
var winston = require("winston");
|
|
3
|
+
var requestId = guid();
|
|
4
|
+
//Generate a random request ID for identification
|
|
5
|
+
function guid() {
|
|
6
|
+
var text = "";
|
|
7
|
+
var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
|
|
8
|
+
|
|
9
|
+
for (var i = 0; i < 32; i++)
|
|
10
|
+
text += possible.charAt(Math.floor(Math.random() * possible.length));
|
|
11
|
+
return text;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
class CustomLogger {
|
|
15
|
+
constructor() {
|
|
16
|
+
this.logger = null;
|
|
17
|
+
winston.loggers.add("logger", {
|
|
18
|
+
transports: [
|
|
19
|
+
//new files will be generated each day, the date patter indicates the frequency of creating a file.
|
|
20
|
+
new winston.transports.DailyRotateFile({
|
|
21
|
+
name: "debug-log",
|
|
22
|
+
filename: "logs/API-Logger-%DATE%.log",
|
|
23
|
+
prepend: true,
|
|
24
|
+
datePattern: "YYYY-MM-DD",
|
|
25
|
+
format: winston.format.printf(
|
|
26
|
+
(info) =>
|
|
27
|
+
`${this.getFormattedDate()} | ${requestId} | [${info.level}] | ${
|
|
28
|
+
info.message
|
|
29
|
+
}`
|
|
30
|
+
),
|
|
31
|
+
}),
|
|
32
|
+
],
|
|
33
|
+
});
|
|
34
|
+
this.logger = winston.loggers.get("logger");
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
//Get the file name and line number from which the log is called on
|
|
38
|
+
_getCallerFile() {
|
|
39
|
+
var originalFunc = Error.prepareStackTrace;
|
|
40
|
+
|
|
41
|
+
var callerfile;
|
|
42
|
+
try {
|
|
43
|
+
var err = new Error();
|
|
44
|
+
var currentfile;
|
|
45
|
+
var number;
|
|
46
|
+
|
|
47
|
+
Error.prepareStackTrace = function (err, stack) {
|
|
48
|
+
return stack;
|
|
49
|
+
};
|
|
50
|
+
currentfile = err.stack.shift().getFileName();
|
|
51
|
+
while (err.stack.length) {
|
|
52
|
+
var st = err.stack.shift();
|
|
53
|
+
callerfile = st.getFileName();
|
|
54
|
+
number = st.getLineNumber();
|
|
55
|
+
if (currentfile !== callerfile) break;
|
|
56
|
+
}
|
|
57
|
+
} catch (e) {
|
|
58
|
+
throw Error(e);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
Error.prepareStackTrace = originalFunc;
|
|
62
|
+
return callerfile.replace(__dirname, "") + "(" + number + ")";
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
//Get a formatted date
|
|
66
|
+
getFormattedDate() {
|
|
67
|
+
let date = new Date();
|
|
68
|
+
let day = date.getDate();
|
|
69
|
+
let month = date.getMonth() + 1;
|
|
70
|
+
let year = date.getFullYear();
|
|
71
|
+
let hours = date.getHours();
|
|
72
|
+
let minutes = date.getMinutes();
|
|
73
|
+
|
|
74
|
+
minutes = minutes < 10 ? "0" + minutes : minutes;
|
|
75
|
+
let strTime = hours + ":" + minutes;
|
|
76
|
+
return day + "/" + month + "/" + year + " " + strTime;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
//Write an error log
|
|
80
|
+
error(message) {
|
|
81
|
+
this.fileStack = this._getCallerFile();
|
|
82
|
+
this.logger.error(message);
|
|
83
|
+
return true;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
//Write an info log
|
|
87
|
+
info(message) {
|
|
88
|
+
this.fileStack = this._getCallerFile();
|
|
89
|
+
this.logger.info(message);
|
|
90
|
+
return true;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
//Function used as an express middleware to capture incoming IP address and request ID
|
|
94
|
+
requestDetails(loggerInstance) {
|
|
95
|
+
return function (req, res, next) {
|
|
96
|
+
//this.clientIPAddress = get_ip(req).clientIp
|
|
97
|
+
requestId = guid();
|
|
98
|
+
req.appLogger = loggerInstance;
|
|
99
|
+
next();
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
module.exports = new CustomLogger();
|
package/utils/response.js
CHANGED
|
@@ -1,108 +1,108 @@
|
|
|
1
|
-
const responseStatus = require("../config/errorCodes");
|
|
2
|
-
const messageTypes = require("../config/errorMsgs");
|
|
3
|
-
const { encryptData } = require("./encryptDecrypt");
|
|
4
|
-
// response class
|
|
5
|
-
class Response {
|
|
6
|
-
// triggering a success response
|
|
7
|
-
async success(req, res, status, data = null, message = "success") {
|
|
8
|
-
let ip =
|
|
9
|
-
req.headers["x-forwarded-for"] ||
|
|
10
|
-
req.connection.remoteAddress ||
|
|
11
|
-
req.socket.remoteAddress ||
|
|
12
|
-
(req.connection.socket ? req.connection.socket.remoteAddress : null);
|
|
13
|
-
if (status == responseStatus.HTTP_OK) {
|
|
14
|
-
req.appLogger.info(
|
|
15
|
-
`Method: ${req.method} | Status: ${status} | IP : ${ip} | URL : ${
|
|
16
|
-
req.protocol
|
|
17
|
-
}://${req.get("host")}${req.originalUrl} | Request Body : ${JSON.stringify(
|
|
18
|
-
req.body ? req.body : {}
|
|
19
|
-
)} | Response : ${JSON.stringify(data)}`
|
|
20
|
-
);
|
|
21
|
-
const encryptedResponse = await encryptData({ message, data });
|
|
22
|
-
return res.status(status).json(encryptedResponse);
|
|
23
|
-
} else if (status == responseStatus.HTTP_INTERNAL_SERVER_ERROR) {
|
|
24
|
-
req.appLogger.error(
|
|
25
|
-
`Method: ${req.method} | Status: ${status} | IP : ${ip} | URL : ${
|
|
26
|
-
req.protocol
|
|
27
|
-
}://${req.get("host")}${req.originalUrl} | Request Body : ${JSON.stringify(
|
|
28
|
-
req.body ? req.body : {}
|
|
29
|
-
)} | Error : ${message}`
|
|
30
|
-
);
|
|
31
|
-
const encryptedResponse = await encryptData(JSON.stringify({ message }));
|
|
32
|
-
return res.status(status).json(encryptedResponse);
|
|
33
|
-
} else {
|
|
34
|
-
req.appLogger.error(
|
|
35
|
-
`Method: ${req.method} | Status: ${status} | IP : ${ip} | URL : ${
|
|
36
|
-
req.protocol
|
|
37
|
-
}://${req.get("host")}${req.originalUrl} | Request Body : ${JSON.stringify(
|
|
38
|
-
req.body ? req.body : {}
|
|
39
|
-
)} | Error : ${message}`
|
|
40
|
-
);
|
|
41
|
-
const encryptedResponse = await encryptData({ message, data });
|
|
42
|
-
return res.status(status).json(encryptedResponse);
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
// triggering a error response
|
|
46
|
-
async error(req, res, status, message) {
|
|
47
|
-
let ip =
|
|
48
|
-
req.headers["x-forwarded-for"] ||
|
|
49
|
-
req.connection.remoteAddress ||
|
|
50
|
-
req.socket.remoteAddress ||
|
|
51
|
-
(req.connection.socket ? req.connection.socket.remoteAddress : null);
|
|
52
|
-
req.appLogger.error(
|
|
53
|
-
`Method: ${req.method} | Status: ${status} | IP : ${ip} | URL : ${
|
|
54
|
-
req.protocol
|
|
55
|
-
}://${req.get("host")}${req.originalUrl} | Request Body : ${JSON.stringify(
|
|
56
|
-
req.body ? req.body : {}
|
|
57
|
-
)} | Error : ${message}`
|
|
58
|
-
);
|
|
59
|
-
const encryptedResponse = await encryptData({ message });
|
|
60
|
-
return res.status(status).json(encryptedResponse);
|
|
61
|
-
}
|
|
62
|
-
// triggering a invalid response
|
|
63
|
-
async invalid(req, res, status, message) {
|
|
64
|
-
let ip =
|
|
65
|
-
req.headers["x-forwarded-for"] ||
|
|
66
|
-
req.connection.remoteAddress ||
|
|
67
|
-
req.socket.remoteAddress ||
|
|
68
|
-
(req.connection.socket ? req.connection.socket.remoteAddress : null);
|
|
69
|
-
req.appLogger.error(
|
|
70
|
-
`Method: ${req.method} | Status: ${status} | IP : ${ip} | URL : ${
|
|
71
|
-
req.protocol
|
|
72
|
-
}://${req.get("host")}${req.originalUrl} | Request Body : ${JSON.stringify(
|
|
73
|
-
req.body ? req.body : {}
|
|
74
|
-
)} | Error : ${message}`
|
|
75
|
-
);
|
|
76
|
-
const encryptedResponse = await encryptData({ message });
|
|
77
|
-
return res.status(status).json(encryptedResponse);
|
|
78
|
-
}
|
|
79
|
-
// triggering a joi error response
|
|
80
|
-
async joierrors(req, res, err) {
|
|
81
|
-
let ip =
|
|
82
|
-
req.headers["x-forwarded-for"] ||
|
|
83
|
-
req.connection.remoteAddress ||
|
|
84
|
-
req.socket.remoteAddress ||
|
|
85
|
-
(req.connection.socket ? req.connection.socket.remoteAddress : null);
|
|
86
|
-
let error = err.details.reduce((prev, curr) => {
|
|
87
|
-
prev[curr.path[0]] = curr.message.replace(/"/g, "");
|
|
88
|
-
return prev;
|
|
89
|
-
}, {});
|
|
90
|
-
let message =
|
|
91
|
-
Object.values(error).join(", ") +
|
|
92
|
-
", " +
|
|
93
|
-
messageTypes[responseStatus.HTTP_UNPROCESSABLE_ENTITY];
|
|
94
|
-
let status = responseStatus.HTTP_UNPROCESSABLE_ENTITY;
|
|
95
|
-
req.appLogger.error(
|
|
96
|
-
`Method: ${req.method} | Status: ${status} | IP : ${ip} | URL : ${
|
|
97
|
-
req.protocol
|
|
98
|
-
}://${req.get("host")}${req.originalUrl} | Request Body : ${JSON.stringify(
|
|
99
|
-
req.body ? req.body : {}
|
|
100
|
-
)} | BadRequestError : ${JSON.stringify(error)}`
|
|
101
|
-
);
|
|
102
|
-
const encryptedResponse = await encryptData({ message });
|
|
103
|
-
return res.status(status).json(encryptedResponse);
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
// exporting the module
|
|
108
|
-
module.exports = new Response();
|
|
1
|
+
const responseStatus = require("../config/errorCodes");
|
|
2
|
+
const messageTypes = require("../config/errorMsgs");
|
|
3
|
+
const { encryptData } = require("./encryptDecrypt");
|
|
4
|
+
// response class
|
|
5
|
+
class Response {
|
|
6
|
+
// triggering a success response
|
|
7
|
+
async success(req, res, status, data = null, message = "success") {
|
|
8
|
+
let ip =
|
|
9
|
+
req.headers["x-forwarded-for"] ||
|
|
10
|
+
req.connection.remoteAddress ||
|
|
11
|
+
req.socket.remoteAddress ||
|
|
12
|
+
(req.connection.socket ? req.connection.socket.remoteAddress : null);
|
|
13
|
+
if (status == responseStatus.HTTP_OK) {
|
|
14
|
+
req.appLogger.info(
|
|
15
|
+
`Method: ${req.method} | Status: ${status} | IP : ${ip} | URL : ${
|
|
16
|
+
req.protocol
|
|
17
|
+
}://${req.get("host")}${req.originalUrl} | Request Body : ${JSON.stringify(
|
|
18
|
+
req.body ? req.body : {}
|
|
19
|
+
)} | Response : ${JSON.stringify(data)}`
|
|
20
|
+
);
|
|
21
|
+
const encryptedResponse = await encryptData({ message, data });
|
|
22
|
+
return res.status(status).json(encryptedResponse);
|
|
23
|
+
} else if (status == responseStatus.HTTP_INTERNAL_SERVER_ERROR) {
|
|
24
|
+
req.appLogger.error(
|
|
25
|
+
`Method: ${req.method} | Status: ${status} | IP : ${ip} | URL : ${
|
|
26
|
+
req.protocol
|
|
27
|
+
}://${req.get("host")}${req.originalUrl} | Request Body : ${JSON.stringify(
|
|
28
|
+
req.body ? req.body : {}
|
|
29
|
+
)} | Error : ${message}`
|
|
30
|
+
);
|
|
31
|
+
const encryptedResponse = await encryptData(JSON.stringify({ message }));
|
|
32
|
+
return res.status(status).json(encryptedResponse);
|
|
33
|
+
} else {
|
|
34
|
+
req.appLogger.error(
|
|
35
|
+
`Method: ${req.method} | Status: ${status} | IP : ${ip} | URL : ${
|
|
36
|
+
req.protocol
|
|
37
|
+
}://${req.get("host")}${req.originalUrl} | Request Body : ${JSON.stringify(
|
|
38
|
+
req.body ? req.body : {}
|
|
39
|
+
)} | Error : ${message}`
|
|
40
|
+
);
|
|
41
|
+
const encryptedResponse = await encryptData({ message, data });
|
|
42
|
+
return res.status(status).json(encryptedResponse);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
// triggering a error response
|
|
46
|
+
async error(req, res, status, message) {
|
|
47
|
+
let ip =
|
|
48
|
+
req.headers["x-forwarded-for"] ||
|
|
49
|
+
req.connection.remoteAddress ||
|
|
50
|
+
req.socket.remoteAddress ||
|
|
51
|
+
(req.connection.socket ? req.connection.socket.remoteAddress : null);
|
|
52
|
+
req.appLogger.error(
|
|
53
|
+
`Method: ${req.method} | Status: ${status} | IP : ${ip} | URL : ${
|
|
54
|
+
req.protocol
|
|
55
|
+
}://${req.get("host")}${req.originalUrl} | Request Body : ${JSON.stringify(
|
|
56
|
+
req.body ? req.body : {}
|
|
57
|
+
)} | Error : ${message}`
|
|
58
|
+
);
|
|
59
|
+
const encryptedResponse = await encryptData({ message });
|
|
60
|
+
return res.status(status).json(encryptedResponse);
|
|
61
|
+
}
|
|
62
|
+
// triggering a invalid response
|
|
63
|
+
async invalid(req, res, status, message) {
|
|
64
|
+
let ip =
|
|
65
|
+
req.headers["x-forwarded-for"] ||
|
|
66
|
+
req.connection.remoteAddress ||
|
|
67
|
+
req.socket.remoteAddress ||
|
|
68
|
+
(req.connection.socket ? req.connection.socket.remoteAddress : null);
|
|
69
|
+
req.appLogger.error(
|
|
70
|
+
`Method: ${req.method} | Status: ${status} | IP : ${ip} | URL : ${
|
|
71
|
+
req.protocol
|
|
72
|
+
}://${req.get("host")}${req.originalUrl} | Request Body : ${JSON.stringify(
|
|
73
|
+
req.body ? req.body : {}
|
|
74
|
+
)} | Error : ${message}`
|
|
75
|
+
);
|
|
76
|
+
const encryptedResponse = await encryptData({ message });
|
|
77
|
+
return res.status(status).json(encryptedResponse);
|
|
78
|
+
}
|
|
79
|
+
// triggering a joi error response
|
|
80
|
+
async joierrors(req, res, err) {
|
|
81
|
+
let ip =
|
|
82
|
+
req.headers["x-forwarded-for"] ||
|
|
83
|
+
req.connection.remoteAddress ||
|
|
84
|
+
req.socket.remoteAddress ||
|
|
85
|
+
(req.connection.socket ? req.connection.socket.remoteAddress : null);
|
|
86
|
+
let error = err.details.reduce((prev, curr) => {
|
|
87
|
+
prev[curr.path[0]] = curr.message.replace(/"/g, "");
|
|
88
|
+
return prev;
|
|
89
|
+
}, {});
|
|
90
|
+
let message =
|
|
91
|
+
Object.values(error).join(", ") +
|
|
92
|
+
", " +
|
|
93
|
+
messageTypes[responseStatus.HTTP_UNPROCESSABLE_ENTITY];
|
|
94
|
+
let status = responseStatus.HTTP_UNPROCESSABLE_ENTITY;
|
|
95
|
+
req.appLogger.error(
|
|
96
|
+
`Method: ${req.method} | Status: ${status} | IP : ${ip} | URL : ${
|
|
97
|
+
req.protocol
|
|
98
|
+
}://${req.get("host")}${req.originalUrl} | Request Body : ${JSON.stringify(
|
|
99
|
+
req.body ? req.body : {}
|
|
100
|
+
)} | BadRequestError : ${JSON.stringify(error)}`
|
|
101
|
+
);
|
|
102
|
+
const encryptedResponse = await encryptData({ message });
|
|
103
|
+
return res.status(status).json(encryptedResponse);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
// exporting the module
|
|
108
|
+
module.exports = new Response();
|
package/utils/swagger.js
CHANGED
|
@@ -1,25 +1,25 @@
|
|
|
1
|
-
const options = {
|
|
2
|
-
explorer: true,
|
|
3
|
-
swaggerOptions: {
|
|
4
|
-
persistAuthorization: true,
|
|
5
|
-
urls: [
|
|
6
|
-
{
|
|
7
|
-
url: "/dbms/api/public/swagger/church.json",
|
|
8
|
-
name: "Church APIs",
|
|
9
|
-
},
|
|
10
|
-
{
|
|
11
|
-
url: "/dbms/api/public/swagger/migration.json",
|
|
12
|
-
name: "Migration APIs",
|
|
13
|
-
},
|
|
14
|
-
{
|
|
15
|
-
url: "/dbms/api/public/swagger/seed.json",
|
|
16
|
-
name: "Seed APIs",
|
|
17
|
-
},
|
|
18
|
-
{
|
|
19
|
-
url: "/dbms/api/public/swagger/master.json",
|
|
20
|
-
name: "Master APIs",
|
|
21
|
-
},
|
|
22
|
-
],
|
|
23
|
-
},
|
|
24
|
-
};
|
|
25
|
-
module.exports = options;
|
|
1
|
+
const options = {
|
|
2
|
+
explorer: true,
|
|
3
|
+
swaggerOptions: {
|
|
4
|
+
persistAuthorization: true,
|
|
5
|
+
urls: [
|
|
6
|
+
{
|
|
7
|
+
url: "/dbms/api/public/swagger/church.json",
|
|
8
|
+
name: "Church APIs",
|
|
9
|
+
},
|
|
10
|
+
{
|
|
11
|
+
url: "/dbms/api/public/swagger/migration.json",
|
|
12
|
+
name: "Migration APIs",
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
url: "/dbms/api/public/swagger/seed.json",
|
|
16
|
+
name: "Seed APIs",
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
url: "/dbms/api/public/swagger/master.json",
|
|
20
|
+
name: "Master APIs",
|
|
21
|
+
},
|
|
22
|
+
],
|
|
23
|
+
},
|
|
24
|
+
};
|
|
25
|
+
module.exports = options;
|
package/utils/verifyToken.js
CHANGED
|
@@ -1,58 +1,58 @@
|
|
|
1
|
-
const jwt = require("jsonwebtoken");
|
|
2
|
-
const errorCodes = require("../config/errorCodes");
|
|
3
|
-
const errorMessages = require("../config/errorMsgs");
|
|
4
|
-
const commonDb = require("../models/common");
|
|
5
|
-
const cryptr = require("./crypto");
|
|
6
|
-
const response = require("./response");
|
|
7
|
-
|
|
8
|
-
const verifyToken = async (req, res, next) => {
|
|
9
|
-
let token = req.headers["x-access-token"] || req.headers["token"];
|
|
10
|
-
if (token) {
|
|
11
|
-
token = token.replace("Bearer ", "");
|
|
12
|
-
return jwt.verify(token, process.env.JWT_SECRET, async (err, payload) => {
|
|
13
|
-
if (err) {
|
|
14
|
-
response.invalid(
|
|
15
|
-
req,
|
|
16
|
-
res,
|
|
17
|
-
errorCodes.HTTP_UNAUTHORIZED,
|
|
18
|
-
errorMessages[errorCodes.HTTP_UNAUTHORIZED]
|
|
19
|
-
);
|
|
20
|
-
} else {
|
|
21
|
-
let { id } = payload;
|
|
22
|
-
if (!id) {
|
|
23
|
-
return response.invalid(
|
|
24
|
-
req,
|
|
25
|
-
res,
|
|
26
|
-
errorCodes.HTTP_UNAUTHORIZED,
|
|
27
|
-
errorMessages[errorCodes.HTTP_UNAUTHORIZED]
|
|
28
|
-
);
|
|
29
|
-
}
|
|
30
|
-
id = cryptr.decrypt(id);
|
|
31
|
-
const userData = await commonDb.user.findOne({
|
|
32
|
-
where: { id, status: true },
|
|
33
|
-
attributes: commonDb.user.selectedFields,
|
|
34
|
-
raw: true,
|
|
35
|
-
});
|
|
36
|
-
if (!userData)
|
|
37
|
-
return response.invalid(
|
|
38
|
-
req,
|
|
39
|
-
res,
|
|
40
|
-
errorCodes.HTTP_UNAUTHORIZED,
|
|
41
|
-
errorMessages[errorCodes.HTTP_UNAUTHORIZED]
|
|
42
|
-
);
|
|
43
|
-
req.user = {};
|
|
44
|
-
req.user = { ...userData, token };
|
|
45
|
-
next();
|
|
46
|
-
}
|
|
47
|
-
});
|
|
48
|
-
} else {
|
|
49
|
-
response.invalid(
|
|
50
|
-
req,
|
|
51
|
-
res,
|
|
52
|
-
errorCodes.HTTP_UNAUTHORIZED,
|
|
53
|
-
errorMessages[errorCodes.HTTP_UNAUTHORIZED]
|
|
54
|
-
);
|
|
55
|
-
}
|
|
56
|
-
};
|
|
57
|
-
|
|
58
|
-
module.exports = verifyToken;
|
|
1
|
+
const jwt = require("jsonwebtoken");
|
|
2
|
+
const errorCodes = require("../config/errorCodes");
|
|
3
|
+
const errorMessages = require("../config/errorMsgs");
|
|
4
|
+
const commonDb = require("../models/common");
|
|
5
|
+
const cryptr = require("./crypto");
|
|
6
|
+
const response = require("./response");
|
|
7
|
+
|
|
8
|
+
const verifyToken = async (req, res, next) => {
|
|
9
|
+
let token = req.headers["x-access-token"] || req.headers["token"];
|
|
10
|
+
if (token) {
|
|
11
|
+
token = token.replace("Bearer ", "");
|
|
12
|
+
return jwt.verify(token, process.env.JWT_SECRET, async (err, payload) => {
|
|
13
|
+
if (err) {
|
|
14
|
+
response.invalid(
|
|
15
|
+
req,
|
|
16
|
+
res,
|
|
17
|
+
errorCodes.HTTP_UNAUTHORIZED,
|
|
18
|
+
errorMessages[errorCodes.HTTP_UNAUTHORIZED]
|
|
19
|
+
);
|
|
20
|
+
} else {
|
|
21
|
+
let { id } = payload;
|
|
22
|
+
if (!id) {
|
|
23
|
+
return response.invalid(
|
|
24
|
+
req,
|
|
25
|
+
res,
|
|
26
|
+
errorCodes.HTTP_UNAUTHORIZED,
|
|
27
|
+
errorMessages[errorCodes.HTTP_UNAUTHORIZED]
|
|
28
|
+
);
|
|
29
|
+
}
|
|
30
|
+
id = cryptr.decrypt(id);
|
|
31
|
+
const userData = await commonDb.user.findOne({
|
|
32
|
+
where: { id, status: true },
|
|
33
|
+
attributes: commonDb.user.selectedFields,
|
|
34
|
+
raw: true,
|
|
35
|
+
});
|
|
36
|
+
if (!userData)
|
|
37
|
+
return response.invalid(
|
|
38
|
+
req,
|
|
39
|
+
res,
|
|
40
|
+
errorCodes.HTTP_UNAUTHORIZED,
|
|
41
|
+
errorMessages[errorCodes.HTTP_UNAUTHORIZED]
|
|
42
|
+
);
|
|
43
|
+
req.user = {};
|
|
44
|
+
req.user = { ...userData, token };
|
|
45
|
+
next();
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
} else {
|
|
49
|
+
response.invalid(
|
|
50
|
+
req,
|
|
51
|
+
res,
|
|
52
|
+
errorCodes.HTTP_UNAUTHORIZED,
|
|
53
|
+
errorMessages[errorCodes.HTTP_UNAUTHORIZED]
|
|
54
|
+
);
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
module.exports = verifyToken;
|