serverpreconfigured 1.0.6 → 1.1.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.
Files changed (39) hide show
  1. package/dist/auth/auth.js +2 -1
  2. package/dist/auth/config.js +1 -0
  3. package/dist/database/database.d.ts +2 -1
  4. package/dist/database/database.js +1 -0
  5. package/dist/database/models/User.js +1 -0
  6. package/dist/database/models/WSAuth.js +1 -0
  7. package/dist/expressServer.js +4 -4
  8. package/dist/middlewares/auth.d.ts +1 -0
  9. package/dist/middlewares/auth.js +40 -0
  10. package/dist/middlewares/post.d.ts +1 -0
  11. package/dist/middlewares/post.js +6 -0
  12. package/dist/middlewares/wsauth.d.ts +1 -0
  13. package/dist/middlewares/wsauth.js +54 -0
  14. package/dist/modules/initcors.js +2 -1
  15. package/dist/modules/postreader.js +1 -0
  16. package/dist/modules/sessions.js +2 -1
  17. package/dist/routes/users.js +26 -15
  18. package/dist/routes/wsauth.js +12 -12
  19. package/dist/server.d.ts +7 -5
  20. package/dist/server.js +27 -18
  21. package/dist/sessions/secureget.js +1 -0
  22. package/dist/sessions/secureset.js +1 -0
  23. package/dist/settings/database/database.d.ts +9 -9
  24. package/dist/users/password.js +1 -0
  25. package/dist/users/users.d.ts +1 -0
  26. package/dist/users/users.js +10 -3
  27. package/dist/utils/response.d.ts +1 -0
  28. package/dist/utils/response.js +10 -0
  29. package/dist/utils/string/random.js +1 -0
  30. package/dist/wsauth/wsauth.js +2 -1
  31. package/package.json +2 -2
  32. package/src/middlewares/auth.ts +21 -0
  33. package/src/middlewares/post.ts +4 -0
  34. package/src/middlewares/wsauth.ts +36 -0
  35. package/src/routes/users.ts +17 -6
  36. package/src/routes/wsauth.ts +9 -11
  37. package/src/server.ts +7 -5
  38. package/src/users/users.ts +12 -6
  39. package/src/utils/response.ts +9 -1
package/dist/auth/auth.js CHANGED
@@ -1,9 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.userIsLogged = void 0;
3
4
  const secureget_1 = require("../sessions/secureget");
4
5
  const config_1 = require("./config");
5
6
  function userIsLogged(req) {
6
- let user = secureget_1.getSessionValue(req, config_1.SESSION_LOGGED_DATA);
7
+ let user = (0, secureget_1.getSessionValue)(req, config_1.SESSION_LOGGED_DATA);
7
8
  if (user)
8
9
  return true;
9
10
  return false;
@@ -1,3 +1,4 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SESSION_LOGGED_DATA = void 0;
3
4
  exports.SESSION_LOGGED_DATA = 'email';
@@ -1 +1,2 @@
1
- export declare const dataBase: any;
1
+ import { Sequelize } from "sequelize";
2
+ export declare const dataBase: Sequelize;
@@ -3,6 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.dataBase = void 0;
6
7
  //@ts-ignore
7
8
  //@ts-nocheck
8
9
  const sequelize_1 = require("sequelize");
@@ -1,5 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.User = void 0;
3
4
  const sequelize_1 = require("sequelize");
4
5
  const sequelize_2 = require("sequelize");
5
6
  class User extends sequelize_1.Model {
@@ -1,5 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.WebSocketAuth = void 0;
3
4
  const sequelize_1 = require("sequelize");
4
5
  const sequelize_2 = require("sequelize");
5
6
  class WebSocketAuth extends sequelize_1.Model {
@@ -15,7 +15,7 @@ class ExpressServer {
15
15
  this.authBaseUrl = "";
16
16
  this.wsAuthBaseUrl = "";
17
17
  this.usePort = env_1.default.PORT;
18
- this.app = express_1.default();
18
+ this.app = (0, express_1.default)();
19
19
  this.initModules();
20
20
  }
21
21
  listen(port = null) {
@@ -24,9 +24,9 @@ class ExpressServer {
24
24
  this.app.listen(this.usePort);
25
25
  }
26
26
  initModules() {
27
- sessions_1.initSessions(this.app);
28
- postreader_1.initPostReader(this.app);
29
- initcors_1.initCors(this.app);
27
+ (0, sessions_1.initSessions)(this.app);
28
+ (0, postreader_1.initPostReader)(this.app);
29
+ (0, initcors_1.initCors)(this.app);
30
30
  }
31
31
  initAuthSystem(baseUrl = '/user') {
32
32
  this.authBaseUrl = baseUrl;
@@ -0,0 +1 @@
1
+ export declare function setUserDataMiddleware(req: any, res: any, next: any): Promise<any>;
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.setUserDataMiddleware = void 0;
16
+ const server_1 = require("../server");
17
+ const server_2 = require("../server");
18
+ const server_3 = require("../server");
19
+ const server_4 = require("../server");
20
+ const env_1 = __importDefault(require("../settings/env"));
21
+ const DEBUG = env_1.default.NODE_ENV === 'development' ? true : false;
22
+ function setUserDataMiddleware(req, res, next) {
23
+ return __awaiter(this, void 0, void 0, function* () {
24
+ if (!(0, server_1.userIsLogged)(req))
25
+ return res.status(401).send((0, server_2.JSONResponse)(false, undefined, "User Must Be Logged"));
26
+ try {
27
+ const dealerEmail = (0, server_3.getUserSessionData)(req);
28
+ const dealerId = yield (0, server_4.getUserIdByUserEmail)(dealerEmail);
29
+ req.user = { email: dealerEmail, id: dealerId };
30
+ next();
31
+ }
32
+ catch (e) {
33
+ let more = null;
34
+ if (DEBUG)
35
+ more = e;
36
+ return res.status(500).send((0, server_2.JSONResponse)(false, undefined, "Get dealer data error", more));
37
+ }
38
+ });
39
+ }
40
+ exports.setUserDataMiddleware = setUserDataMiddleware;
@@ -0,0 +1 @@
1
+ export declare function checkAndFilterPostParams(req: any, res: any, next: any): void;
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.checkAndFilterPostParams = void 0;
4
+ function checkAndFilterPostParams(req, res, next) {
5
+ }
6
+ exports.checkAndFilterPostParams = checkAndFilterPostParams;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ const random_1 = require("../utils/string/random");
16
+ const wsauth_1 = require("../wsauth/wsauth");
17
+ const response_1 = require("../utils/response");
18
+ const server_1 = require("../server");
19
+ const meta_sanitizer_1 = __importDefault(require("meta-sanitizer"));
20
+ const DEBUG = true;
21
+ function checkWSAuth(ws, msg) {
22
+ return __awaiter(this, void 0, void 0, function* () {
23
+ try {
24
+ if (ws.userId && ws.connectionToken) {
25
+ if ((yield (0, wsauth_1.checkConnectionAuth)(ws.userId, ws.connectionToken)))
26
+ return true;
27
+ }
28
+ const message = JSON.parse(msg);
29
+ if (message.action === "Authenticate") {
30
+ const token = meta_sanitizer_1.default.justCharsAndNumbers(message.token, false);
31
+ const userId = parseInt(meta_sanitizer_1.default.justNumbers(message.userId, false));
32
+ const connectionToken = (0, random_1.randomString)(35);
33
+ if ((yield (0, server_1.authenticateWS)(userId, token, connectionToken))) {
34
+ ws.userId = userId;
35
+ ws.connectionToken = connectionToken;
36
+ return true;
37
+ }
38
+ else {
39
+ return sendError(false, "Invalid Token or UserID");
40
+ }
41
+ }
42
+ else {
43
+ return sendError(false, "Need auth", "'action'='Authenticate' and must have 'token' and 'userId'");
44
+ }
45
+ }
46
+ catch (e) {
47
+ return sendError(false, "Internal Error", "", e);
48
+ }
49
+ function sendError(isOk, message, errorMessage = "", data = {}) {
50
+ ws.send((0, response_1.WSResponse)(isOk, message, errorMessage, data));
51
+ return false;
52
+ }
53
+ });
54
+ }
@@ -3,10 +3,11 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.initCors = void 0;
6
7
  const cors_1 = __importDefault(require("cors"));
7
8
  const env_1 = __importDefault(require("../settings/env"));
8
9
  function initCors(app) {
9
10
  if (env_1.default.ALLOW_CORS)
10
- app.use(cors_1.default());
11
+ app.use((0, cors_1.default)());
11
12
  }
12
13
  exports.initCors = initCors;
@@ -3,6 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.initPostReader = void 0;
6
7
  const express_1 = __importDefault(require("express"));
7
8
  function initPostReader(app) {
8
9
  app.use(express_1.default.json());
@@ -3,11 +3,12 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.initSessions = void 0;
6
7
  const express_session_1 = __importDefault(require("express-session"));
7
8
  const env_1 = __importDefault(require("../settings/env"));
8
9
  function initSessions(app) {
9
10
  app.set('trust proxy', 1); // trust first proxy
10
- app.use(express_session_1.default({
11
+ app.use((0, express_session_1.default)({
11
12
  secret: 'keyboard cat',
12
13
  resave: false,
13
14
  saveUninitialized: true,
@@ -20,11 +20,14 @@ const auth_1 = require("../auth/auth");
20
20
  const meta_sanitizer_1 = __importDefault(require("meta-sanitizer"));
21
21
  const users_1 = require("../users/users");
22
22
  const users_2 = require("../users/users");
23
+ const env_1 = __importDefault(require("../settings/env"));
24
+ const DEBUG = env_1.default.NODE_ENV === 'development' ? true : false;
23
25
  var LoginErrorCode;
24
26
  (function (LoginErrorCode) {
25
27
  LoginErrorCode[LoginErrorCode["NoError"] = 0] = "NoError";
26
28
  LoginErrorCode[LoginErrorCode["InvalidParams"] = 1] = "InvalidParams";
27
29
  LoginErrorCode[LoginErrorCode["InvalidPassword"] = 2] = "InvalidPassword";
30
+ LoginErrorCode[LoginErrorCode["InternalError"] = 3] = "InternalError";
28
31
  })(LoginErrorCode || (LoginErrorCode = {}));
29
32
  var RegisterUserErrorCode;
30
33
  (function (RegisterUserErrorCode) {
@@ -36,11 +39,11 @@ var RegisterUserErrorCode;
36
39
  const router = express_1.default.Router();
37
40
  router.post('/logout', (req, res) => {
38
41
  let is_ok = false;
39
- if (auth_1.userIsLogged(req)) {
40
- secureset_1.deleteSessionValue(req, config_1.SESSION_LOGGED_DATA);
42
+ if ((0, auth_1.userIsLogged)(req)) {
43
+ (0, secureset_1.deleteSessionValue)(req, config_1.SESSION_LOGGED_DATA);
41
44
  is_ok = true;
42
45
  }
43
- res.send(response_1.JSONResponse(is_ok, 0, is_ok ? "" : "User Must be logged", {}));
46
+ res.send((0, response_1.JSONResponse)(is_ok, 0, is_ok ? "" : "User Must be logged", {}));
44
47
  });
45
48
  router.post('/login', (req, res) => __awaiter(void 0, void 0, void 0, function* () {
46
49
  let email = "";
@@ -50,16 +53,24 @@ router.post('/login', (req, res) => __awaiter(void 0, void 0, void 0, function*
50
53
  password = meta_sanitizer_1.default.queryProtector(req.body.password);
51
54
  }
52
55
  catch (e) {
53
- return res.send(response_1.JSONResponse(false, LoginErrorCode.InvalidParams, "Must have 'email' and 'password' params"));
56
+ return res.send((0, response_1.JSONResponse)(false, LoginErrorCode.InvalidParams, "Must have 'email' and 'password' params"));
54
57
  }
55
58
  if (password == "" || email == "")
56
- return res.send(response_1.JSONResponse(false, LoginErrorCode.InvalidParams, "Must have 'email' and 'password' params"));
57
- const checkPass = yield users_1.checkUserPassword(email, password);
58
- if (checkPass) {
59
- secureset_1.setSessionValue(req, config_1.SESSION_LOGGED_DATA, email);
60
- return res.send(response_1.JSONResponse(true, LoginErrorCode.NoError, "Login Ok"));
59
+ return res.send((0, response_1.JSONResponse)(false, LoginErrorCode.InvalidParams, "Must have 'email' and 'password' params"));
60
+ try {
61
+ const checkPass = yield (0, users_1.checkUserPassword)(email, password);
62
+ if (checkPass) {
63
+ (0, secureset_1.setSessionValue)(req, config_1.SESSION_LOGGED_DATA, email);
64
+ return res.send((0, response_1.JSONResponse)(true, LoginErrorCode.NoError, "Login Ok"));
65
+ }
66
+ return res.send((0, response_1.JSONResponse)(false, LoginErrorCode.InvalidPassword, "Invalid Password"));
67
+ }
68
+ catch (e) {
69
+ let more = null;
70
+ if (DEBUG)
71
+ more = e;
72
+ return res.send((0, response_1.JSONResponse)(false, LoginErrorCode.InternalError, "I-Error", more));
61
73
  }
62
- return res.send(response_1.JSONResponse(false, LoginErrorCode.InvalidPassword, "Invalid Password"));
63
74
  }));
64
75
  router.post('/register', (req, res) => __awaiter(void 0, void 0, void 0, function* () {
65
76
  try {
@@ -67,14 +78,14 @@ router.post('/register', (req, res) => __awaiter(void 0, void 0, void 0, functio
67
78
  let password = meta_sanitizer_1.default.queryProtector(req.body.password || '');
68
79
  let name = meta_sanitizer_1.default.SanitizerEngine(req.body.name || '', true, false, [' ']).sanitizedData;
69
80
  if (email == "" || password == "" || name == "")
70
- return res.send(response_1.JSONResponse(false, RegisterUserErrorCode.InvalidParams, "Invalid params"));
71
- yield users_2.createUser({ first_name: name, email: email, password_string: password });
72
- return res.send(response_1.JSONResponse(true, RegisterUserErrorCode.NoError, "", "REGISTER OK"));
81
+ return res.send((0, response_1.JSONResponse)(false, RegisterUserErrorCode.InvalidParams, "Invalid params"));
82
+ yield (0, users_2.createUser)({ first_name: name, email: email, password_string: password });
83
+ return res.send((0, response_1.JSONResponse)(true, RegisterUserErrorCode.NoError, "", "REGISTER OK"));
73
84
  }
74
85
  catch (e) {
75
86
  if (e === "User exist")
76
- return res.send(response_1.JSONResponse(false, RegisterUserErrorCode.UserExist, "User Exist"));
77
- return res.send(response_1.JSONResponse(false, RegisterUserErrorCode.InternalError, "I-Error"));
87
+ return res.send((0, response_1.JSONResponse)(false, RegisterUserErrorCode.UserExist, "User Exist"));
88
+ return res.send((0, response_1.JSONResponse)(false, RegisterUserErrorCode.InternalError, "I-Error"));
78
89
  }
79
90
  }));
80
91
  exports.default = router;
@@ -12,14 +12,14 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
12
12
  return (mod && mod.__esModule) ? mod : { "default": mod };
13
13
  };
14
14
  Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.router = void 0;
15
16
  const express_1 = __importDefault(require("express"));
16
17
  const response_1 = require("../utils/response");
17
- const auth_1 = require("../auth/auth");
18
18
  const wsauth_1 = require("../wsauth/wsauth");
19
- const users_1 = require("../users/users");
20
- const server_1 = require("../server");
21
- const config_1 = require("../auth/config");
19
+ const env_1 = __importDefault(require("../settings/env"));
20
+ const auth_1 = require("../middlewares/auth");
22
21
  exports.router = express_1.default.Router();
22
+ const DEBUG = env_1.default.NODE_ENV === 'development' ? true : false;
23
23
  var GenerateTokenError;
24
24
  (function (GenerateTokenError) {
25
25
  GenerateTokenError[GenerateTokenError["UserMustBeLogged"] = 1] = "UserMustBeLogged";
@@ -27,19 +27,19 @@ var GenerateTokenError;
27
27
  GenerateTokenError[GenerateTokenError["InternalError"] = 3] = "InternalError";
28
28
  })(GenerateTokenError || (GenerateTokenError = {}));
29
29
  ;
30
- exports.router.post('/gettoken', (req, res) => __awaiter(void 0, void 0, void 0, function* () {
31
- if (!auth_1.userIsLogged(req))
32
- return res.send(response_1.JSONResponse(false, GenerateTokenError.UserMustBeLogged, "User Must Be Logged"));
30
+ exports.router.post('/gettoken', auth_1.setUserDataMiddleware, (req, res) => __awaiter(void 0, void 0, void 0, function* () {
33
31
  try {
34
- let userId = yield users_1.getUserIdByUserEmail(server_1.getSessionValue(req, config_1.SESSION_LOGGED_DATA));
35
- if (userId == NaN)
36
- return res.send(response_1.JSONResponse(false, GenerateTokenError.GetUserError, "Get user error"));
37
- let n = yield wsauth_1.setWSAuthDataNewToken(userId);
38
- return res.send(response_1.JSONResponse(true, 0, "", { token: n.dataValues.token,
32
+ let userId = req.user.id;
33
+ let n = yield (0, wsauth_1.setWSAuthDataNewToken)(userId);
34
+ return res.send((0, response_1.JSONResponse)(true, 0, "", { token: n.dataValues.token,
39
35
  expiration: n.dataValues.expiration,
40
36
  userId: userId
41
37
  }));
42
38
  }
43
39
  catch (e) {
40
+ let more = null;
41
+ if (DEBUG)
42
+ more = e;
43
+ return res.status(500).send((0, response_1.JSONResponse)(false, GenerateTokenError.InternalError, "I-Error", more));
44
44
  }
45
45
  }));
package/dist/server.d.ts CHANGED
@@ -1,12 +1,14 @@
1
- export { userIsLogged } from "./auth/auth";
1
+ export * from "./auth/auth";
2
2
  export { User } from "./database/models/User";
3
3
  export { dataBase } from "./database/database";
4
- export { setSessionValue, deleteSessionValue } from "./sessions/secureset";
5
- export { getSessionValue } from "./sessions/secureget";
6
- export { checkUserPassword } from "./users/users";
4
+ export * from "./sessions/secureset";
5
+ export * from "./sessions/secureget";
6
+ export * from "./users/users";
7
7
  export { WebSocketAuth } from "./database/models/WSAuth";
8
- export { checkWSAuthToken, authenticateWS, checkConnectionAuth } from "./wsauth/wsauth";
8
+ export * from "./wsauth/wsauth";
9
9
  export { randomString } from "./utils/string/random";
10
10
  export { JSONResponse } from "./utils/response";
11
11
  import ExpressServer from "./expressServer";
12
+ export * from "./middlewares/auth";
13
+ export * from "./middlewares/wsauth";
12
14
  export default ExpressServer;
package/dist/server.js CHANGED
@@ -1,31 +1,40 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
2
16
  var __importDefault = (this && this.__importDefault) || function (mod) {
3
17
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
18
  };
5
19
  Object.defineProperty(exports, "__esModule", { value: true });
6
- var auth_1 = require("./auth/auth");
7
- exports.userIsLogged = auth_1.userIsLogged;
20
+ exports.JSONResponse = exports.randomString = exports.WebSocketAuth = exports.dataBase = exports.User = void 0;
21
+ __exportStar(require("./auth/auth"), exports);
8
22
  ;
9
23
  var User_1 = require("./database/models/User");
10
- exports.User = User_1.User;
24
+ Object.defineProperty(exports, "User", { enumerable: true, get: function () { return User_1.User; } });
11
25
  var database_1 = require("./database/database");
12
- exports.dataBase = database_1.dataBase;
13
- var secureset_1 = require("./sessions/secureset");
14
- exports.setSessionValue = secureset_1.setSessionValue;
15
- exports.deleteSessionValue = secureset_1.deleteSessionValue;
16
- var secureget_1 = require("./sessions/secureget");
17
- exports.getSessionValue = secureget_1.getSessionValue;
18
- var users_1 = require("./users/users");
19
- exports.checkUserPassword = users_1.checkUserPassword;
26
+ Object.defineProperty(exports, "dataBase", { enumerable: true, get: function () { return database_1.dataBase; } });
27
+ __exportStar(require("./sessions/secureset"), exports);
28
+ __exportStar(require("./sessions/secureget"), exports);
29
+ __exportStar(require("./users/users"), exports);
20
30
  var WSAuth_1 = require("./database/models/WSAuth");
21
- exports.WebSocketAuth = WSAuth_1.WebSocketAuth;
22
- var wsauth_1 = require("./wsauth/wsauth");
23
- exports.checkWSAuthToken = wsauth_1.checkWSAuthToken;
24
- exports.authenticateWS = wsauth_1.authenticateWS;
25
- exports.checkConnectionAuth = wsauth_1.checkConnectionAuth;
31
+ Object.defineProperty(exports, "WebSocketAuth", { enumerable: true, get: function () { return WSAuth_1.WebSocketAuth; } });
32
+ __exportStar(require("./wsauth/wsauth"), exports);
26
33
  var random_1 = require("./utils/string/random");
27
- exports.randomString = random_1.randomString;
34
+ Object.defineProperty(exports, "randomString", { enumerable: true, get: function () { return random_1.randomString; } });
28
35
  var response_1 = require("./utils/response");
29
- exports.JSONResponse = response_1.JSONResponse;
36
+ Object.defineProperty(exports, "JSONResponse", { enumerable: true, get: function () { return response_1.JSONResponse; } });
30
37
  const expressServer_1 = __importDefault(require("./expressServer"));
38
+ __exportStar(require("./middlewares/auth"), exports);
39
+ __exportStar(require("./middlewares/wsauth"), exports);
31
40
  exports.default = expressServer_1.default;
@@ -1,5 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getSessionValue = void 0;
3
4
  function getSessionValue(req, get) {
4
5
  return req.session[get];
5
6
  }
@@ -1,5 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.deleteSessionValue = exports.setSessionValue = void 0;
3
4
  function setSessionValue(req, to, value) {
4
5
  req.session[to] = value;
5
6
  }
@@ -1,10 +1,10 @@
1
- export declare const dialect: string;
2
- export declare const host: string;
3
- export declare const database: string;
4
- export declare const username: string;
5
- export declare const password: string;
6
- export declare namespace define {
7
- export const underscored: boolean;
8
- export const timestamps: boolean;
1
+ export const dialect: string;
2
+ export const host: string;
3
+ export const database: string;
4
+ export const username: string;
5
+ export const password: string;
6
+ export namespace define {
7
+ const underscored: boolean;
8
+ const timestamps: boolean;
9
9
  }
10
- export declare const logging: boolean;
10
+ export const logging: boolean;
@@ -12,6 +12,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
12
12
  return (mod && mod.__esModule) ? mod : { "default": mod };
13
13
  };
14
14
  Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.checkArgon2Password = exports.createArgon2Hash = void 0;
15
16
  const argon2_1 = __importDefault(require("argon2"));
16
17
  function createArgon2Hash(password_string) {
17
18
  return __awaiter(this, void 0, void 0, function* () {
@@ -1,4 +1,5 @@
1
1
  import { UserCreateInterface } from "./types";
2
+ export declare function getUserSessionData(req: any): string;
2
3
  export declare function getUserById(id: Number): Promise<any>;
3
4
  export declare function getUserByEmail(email: string): Promise<any>;
4
5
  export declare function getUserIdByUserEmail(email: string): Promise<number>;
@@ -9,10 +9,17 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
9
9
  });
10
10
  };
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.checkUserPassword = exports.createUser = exports.isUserExist = exports.deleteUserById = exports.getUserIdByUserEmail = exports.getUserByEmail = exports.getUserById = exports.getUserSessionData = void 0;
12
13
  const database_1 = require("./../database/database");
13
14
  const User_1 = require("./../database/models/User");
14
15
  const password_1 = require("./password");
16
+ const config_1 = require("../auth/config");
17
+ const secureget_1 = require("../sessions/secureget");
15
18
  User_1.User.init(database_1.dataBase);
19
+ function getUserSessionData(req) {
20
+ return (0, secureget_1.getSessionValue)(req, config_1.SESSION_LOGGED_DATA);
21
+ }
22
+ exports.getUserSessionData = getUserSessionData;
16
23
  function getUserById(id) {
17
24
  return __awaiter(this, void 0, void 0, function* () {
18
25
  let result = yield User_1.User.findOne({ where: { id: id.toString() } });
@@ -71,7 +78,7 @@ function createUser(data) {
71
78
  }
72
79
  if (user_exist)
73
80
  throw "User exist";
74
- let hash = yield password_1.createArgon2Hash(data.password_string);
81
+ let hash = yield (0, password_1.createArgon2Hash)(data.password_string);
75
82
  if (!hash)
76
83
  throw "Create argon2 hash error";
77
84
  try {
@@ -93,12 +100,12 @@ function checkUserPassword(email, password_string) {
93
100
  user = yield getUserByEmail(email);
94
101
  }
95
102
  catch (e) {
96
- return false;
103
+ throw e;
97
104
  }
98
105
  if (!user)
99
106
  return false;
100
107
  let hash = user.dataValues.password_hash;
101
- if ((yield password_1.checkArgon2Password(hash, password_string)) == 'Match')
108
+ if ((yield (0, password_1.checkArgon2Password)(hash, password_string)) == 'Match')
102
109
  return true;
103
110
  return false;
104
111
  });
@@ -1 +1,2 @@
1
1
  export declare function JSONResponse(is_ok: boolean, error_code?: number, error_message?: string, data?: any): string;
2
+ export declare function WSResponse(isOK: boolean, message?: string, errorMessage?: string, data?: any): string;
@@ -1,5 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.WSResponse = exports.JSONResponse = void 0;
3
4
  function JSONResponse(is_ok, error_code = 0, error_message = '', data = {}) {
4
5
  const ret_data = {
5
6
  is_ok: is_ok,
@@ -10,3 +11,12 @@ function JSONResponse(is_ok, error_code = 0, error_message = '', data = {}) {
10
11
  return JSON.stringify(ret_data);
11
12
  }
12
13
  exports.JSONResponse = JSONResponse;
14
+ function WSResponse(isOK, message = '', errorMessage = "", data = {}) {
15
+ return JSON.stringify({
16
+ is_ok: isOK,
17
+ message: message,
18
+ error_message: errorMessage,
19
+ data: data
20
+ });
21
+ }
22
+ exports.WSResponse = WSResponse;
@@ -1,5 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.randomString = void 0;
3
4
  function randomString(length) {
4
5
  var result = '';
5
6
  var characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
@@ -9,6 +9,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
9
9
  });
10
10
  };
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.checkConnectionAuth = exports.authenticateWS = exports.checkWSAuthToken = exports.setWSAuthDataNewToken = exports.getWSAuthDataByUserId = void 0;
12
13
  const server_1 = require("../server");
13
14
  const server_2 = require("../server");
14
15
  const random_1 = require("./../utils/string/random");
@@ -29,7 +30,7 @@ function setWSAuthDataNewToken(userId, expiration_hours = 72) {
29
30
  return __awaiter(this, void 0, void 0, function* () {
30
31
  try {
31
32
  let ws = yield getWSAuthDataByUserId(userId);
32
- let token = random_1.randomString(50);
33
+ let token = (0, random_1.randomString)(50);
33
34
  let expiration = new Date();
34
35
  expiration.setTime(expiration.getTime() + expiration_hours * 60 * 60 * 1000);
35
36
  if (!Boolean(ws)) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "serverpreconfigured",
3
- "version": "1.0.6",
3
+ "version": "1.1.0",
4
4
  "description": "\"Pre-configured server with authentication system and database integration\"",
5
5
  "main": "dist/server.js",
6
6
  "keywords": ["server","pre configured","database","authentication"],
@@ -21,7 +21,7 @@
21
21
  "cors": "^2.8.5",
22
22
  "express": "^4.17.3",
23
23
  "express-session": "^1.17.2",
24
- "meta-sanitizer": "^2.0.2",
24
+ "meta-sanitizer": "^2.1.4",
25
25
  "nodemon": "^2.0.15",
26
26
  "pg": "^8.7.3",
27
27
  "pg-hstore": "^2.3.4",
@@ -0,0 +1,21 @@
1
+ import { userIsLogged } from "../server";
2
+ import { JSONResponse } from "../server";
3
+ import { getUserSessionData } from "../server";
4
+ import { getUserIdByUserEmail } from "../server";
5
+ import ENV from "../settings/env";
6
+ const DEBUG=ENV.NODE_ENV==='development'?true:false;
7
+ export async function setUserDataMiddleware(req:any,res:any,next:any){
8
+ if(!userIsLogged(req))
9
+ return res.status(401).send(JSONResponse(false,undefined,"User Must Be Logged"));
10
+ try{
11
+ const dealerEmail=getUserSessionData(req);
12
+ const dealerId=await getUserIdByUserEmail(dealerEmail);
13
+ req.user={email:dealerEmail,id:dealerId};
14
+ next();
15
+ }catch(e){
16
+ let more=null;
17
+ if(DEBUG)
18
+ more=e;
19
+ return res.status(500).send(JSONResponse(false,undefined,"Get dealer data error",more));
20
+ }
21
+ }
@@ -0,0 +1,4 @@
1
+ import meta_sanitizer from "meta-sanitizer";
2
+ export function checkAndFilterPostParams(req:any,res:any,next:any){
3
+
4
+ }
@@ -0,0 +1,36 @@
1
+ import { randomString } from "../utils/string/random";
2
+ import { checkConnectionAuth } from "../wsauth/wsauth";
3
+ import { WSResponse } from "../utils/response";
4
+ import { authenticateWS } from "../server";
5
+ import meta_sanitizer from "meta-sanitizer";
6
+ const DEBUG=true;
7
+ async function checkWSAuth(ws:any,msg:any):Promise<boolean>{
8
+ try{
9
+ if(ws.userId && ws.connectionToken){
10
+ if((await checkConnectionAuth(ws.userId,ws.connectionToken)))
11
+ return true;
12
+ }
13
+ const message=JSON.parse(msg);
14
+ if(message.action==="Authenticate"){
15
+ const token=meta_sanitizer.justCharsAndNumbers(message.token,false);
16
+ const userId=parseInt(meta_sanitizer.justNumbers(message.userId,false));
17
+ const connectionToken=randomString(35);
18
+ if((await authenticateWS(userId,token,connectionToken))){
19
+ ws.userId=userId;
20
+ ws.connectionToken=connectionToken;
21
+ return true;
22
+ }else{
23
+ return sendError(false,"Invalid Token or UserID");
24
+ }
25
+ }else{
26
+ return sendError(false,"Need auth","'action'='Authenticate' and must have 'token' and 'userId'");
27
+ }
28
+ }catch(e){
29
+ return sendError(false,"Internal Error","",e);
30
+ }
31
+
32
+ function sendError(isOk:boolean,message:string,errorMessage:string="",data:any={}){
33
+ ws.send(WSResponse(isOk,message,errorMessage,data));
34
+ return false;
35
+ }
36
+ }
@@ -6,10 +6,13 @@ import { userIsLogged } from "../auth/auth";
6
6
  import meta_sanitizer from 'meta-sanitizer';
7
7
  import { checkUserPassword } from "../users/users";
8
8
  import { createUser } from "../users/users";
9
+ import ENV from "../settings/env";
10
+ const DEBUG=ENV.NODE_ENV==='development'?true:false;
9
11
  enum LoginErrorCode{
10
12
  NoError=0,
11
13
  InvalidParams,
12
14
  InvalidPassword,
15
+ InternalError,
13
16
 
14
17
  }
15
18
  enum RegisterUserErrorCode{
@@ -38,12 +41,20 @@ router.post('/login',async (req,res)=>{
38
41
  }
39
42
  if(password==""||email=="")
40
43
  return res.send(JSONResponse(false,LoginErrorCode.InvalidParams,"Must have 'email' and 'password' params"));
41
- const checkPass=await checkUserPassword(email,password);
42
- if(checkPass){
43
- setSessionValue(req,SESSION_LOGGED_DATA,email);
44
- return res.send(JSONResponse(true,LoginErrorCode.NoError,"Login Ok"));
45
- }
46
- return res.send(JSONResponse(false,LoginErrorCode.InvalidPassword,"Invalid Password"));
44
+ try{
45
+ const checkPass=await checkUserPassword(email,password);
46
+ if(checkPass){
47
+ setSessionValue(req,SESSION_LOGGED_DATA,email);
48
+ return res.send(JSONResponse(true,LoginErrorCode.NoError,"Login Ok"));
49
+ }
50
+ return res.send(JSONResponse(false,LoginErrorCode.InvalidPassword,"Invalid Password"));
51
+ }catch(e){
52
+ let more=null;
53
+ if(DEBUG)
54
+ more=e;
55
+ return res.send(JSONResponse(false,LoginErrorCode.InternalError,"I-Error",more));
56
+ }
57
+
47
58
  });
48
59
  router.post('/register',async (req,res)=>{
49
60
  try{
@@ -1,29 +1,27 @@
1
1
  import express from "express";
2
2
  import { JSONResponse } from "../utils/response";
3
- import { userIsLogged } from "../auth/auth";
4
3
  import { setWSAuthDataNewToken } from "../wsauth/wsauth";
5
- import { getUserIdByUserEmail } from "../users/users";
6
- import { getSessionValue } from "../server";
7
- import { SESSION_LOGGED_DATA } from "../auth/config";
4
+ import ENV from "../settings/env";
5
+ import { setUserDataMiddleware } from "../middlewares/auth";
8
6
  export const router=express.Router();
7
+ const DEBUG=ENV.NODE_ENV==='development'?true:false;
9
8
  enum GenerateTokenError{
10
9
  UserMustBeLogged=1,
11
10
  GetUserError,
12
11
  InternalError,
13
12
  };
14
- router.post('/gettoken',async (req,res)=>{
15
- if(!userIsLogged(req))
16
- return res.send(JSONResponse(false,GenerateTokenError.UserMustBeLogged,"User Must Be Logged"));
13
+ router.post('/gettoken',setUserDataMiddleware,async (req:any,res:any)=>{
17
14
  try{
18
- let userId=await getUserIdByUserEmail(getSessionValue(req,SESSION_LOGGED_DATA));
19
- if(userId==NaN)
20
- return res.send(JSONResponse(false,GenerateTokenError.GetUserError,"Get user error"));
15
+ let userId:number=req.user.id;
21
16
  let n=await setWSAuthDataNewToken(userId);
22
17
  return res.send(JSONResponse(true,0,"",{token:n.dataValues.token,
23
18
  expiration:n.dataValues.expiration,
24
19
  userId:userId
25
20
  }));
26
21
  }catch(e){
27
-
22
+ let more=null;
23
+ if(DEBUG)
24
+ more=e;
25
+ return res.status(500).send(JSONResponse(false,GenerateTokenError.InternalError,"I-Error",more));
28
26
  }
29
27
  });
package/src/server.ts CHANGED
@@ -1,12 +1,14 @@
1
- export { userIsLogged } from "./auth/auth";;
1
+ export * from "./auth/auth";;
2
2
  export { User } from "./database/models/User";
3
3
  export { dataBase } from "./database/database";
4
- export { setSessionValue,deleteSessionValue } from "./sessions/secureset";
5
- export { getSessionValue } from "./sessions/secureget";
6
- export { checkUserPassword } from "./users/users";
4
+ export * from "./sessions/secureset";
5
+ export * from "./sessions/secureget";
6
+ export * from "./users/users";
7
7
  export { WebSocketAuth } from "./database/models/WSAuth";
8
- export { checkWSAuthToken ,authenticateWS,checkConnectionAuth} from "./wsauth/wsauth";
8
+ export * from "./wsauth/wsauth";
9
9
  export { randomString } from "./utils/string/random";
10
10
  export { JSONResponse } from "./utils/response";
11
11
  import ExpressServer from "./expressServer";
12
+ export * from "./middlewares/auth";
13
+ export * from "./middlewares/wsauth";
12
14
  export default ExpressServer;
@@ -2,13 +2,19 @@ import {dataBase} from "./../database/database";
2
2
  import { User } from "./../database/models/User";
3
3
  import { createArgon2Hash,checkArgon2Password } from "./password";
4
4
  import {UserCreateInterface} from "./types";
5
+ import {SESSION_LOGGED_DATA} from "../auth/config";
6
+ import {getSessionValue} from "../sessions/secureget";
5
7
  User.init(dataBase);
6
- export async function getUserById(id:Number){
8
+
9
+ export function getUserSessionData(req:any):string{
10
+ return getSessionValue(req,SESSION_LOGGED_DATA);
11
+ }
12
+ export async function getUserById(id:Number):Promise<any>{
7
13
  let result=await User.findOne({where:{id:id.toString()}});
8
14
  return (result);
9
15
  }
10
16
 
11
- export async function getUserByEmail(email:string){
17
+ export async function getUserByEmail(email:string):Promise<any>{
12
18
  let result=await User.findOne({where:{email:email}});
13
19
  return (result);
14
20
  }
@@ -23,11 +29,11 @@ export async function getUserIdByUserEmail(email:string):Promise<number>{
23
29
  }
24
30
  }
25
31
 
26
- export async function deleteUserById(id:Number){
32
+ export async function deleteUserById(id:Number):Promise<any>{
27
33
  let result=await User.destroy({where:{id:id.toString()}});
28
34
  return result;
29
35
  }
30
- export async function isUserExist(email:string) {
36
+ export async function isUserExist(email:string):Promise<boolean>{
31
37
  try{
32
38
  let user=await getUserByEmail(email);
33
39
  return Boolean(user);
@@ -36,7 +42,7 @@ export async function isUserExist(email:string) {
36
42
  }
37
43
  }
38
44
 
39
- export async function createUser(data:UserCreateInterface){
45
+ export async function createUser(data:UserCreateInterface):Promise<any>{
40
46
  let user_exist=false;
41
47
  try{
42
48
  user_exist=await isUserExist(data.email);
@@ -63,7 +69,7 @@ export async function checkUserPassword(email:string,password_string:string):Pro
63
69
  try{
64
70
  user=await getUserByEmail(email);
65
71
  }catch(e){
66
- return false;
72
+ throw e;
67
73
  }
68
74
  if(!user)
69
75
  return false;
@@ -6,4 +6,12 @@ export function JSONResponse(is_ok:boolean,error_code:number=0,error_message:str
6
6
  data:data,
7
7
  };
8
8
  return JSON.stringify(ret_data);
9
- }
9
+ }
10
+ export function WSResponse(isOK:boolean,message:string='',errorMessage:string="",data:any={}):string{
11
+ return JSON.stringify({
12
+ is_ok:isOK,
13
+ message:message,
14
+ error_message:errorMessage,
15
+ data:data
16
+ });
17
+ }