| @@ -1,2 +1,3 @@ | |||
| node_modules/ | |||
| loggerFiles/ | |||
| public/loggerFiles | |||
| @@ -1,5 +1,4 @@ | |||
| const mongoose = require('mongoose') | |||
| const Joi = require('joi') | |||
| const userSchema = new mongoose.Schema({ | |||
| name: { | |||
| @@ -24,19 +23,6 @@ const userSchema = new mongoose.Schema({ | |||
| }] | |||
| }) | |||
| userSchema.statics.joiValidate = async function(obj) { | |||
| const schema = Joi.object({ | |||
| name: Joi.string().min(2).required(), | |||
| password: Joi.string().min(8).regex(/[a-zA-Z0-9]{3,30}/).required(), | |||
| email: Joi.string().email().required(), | |||
| role: Joi.string() | |||
| }) | |||
| const validation = schema.validate(obj); | |||
| return validation.error | |||
| } | |||
| // userSchema.pre('save', async function(next) { | |||
| // const user = this | |||
| // console.log('pre hash: ' + user.password) | |||
| @@ -1,16 +1,15 @@ | |||
| const bcrypt = require("bcryptjs/dist/bcrypt") | |||
| const User = require("../database/models/user") | |||
| const { getUserValidator } = require("../validators/users") | |||
| const getUsers = async (req, res, next) => { | |||
| try { | |||
| const allUsers = await User.find({}) | |||
| return res.status(200).send(allUsers) | |||
| } catch (e) { | |||
| next(e) | |||
| } | |||
| const allUsers = await User.find({}) | |||
| return res.status(200).send(allUsers) | |||
| } | |||
| const getUser = async (req, res, next) => { | |||
| const result = getUserValidator.validate(req.body) | |||
| console.log(result) | |||
| try { | |||
| const id = req.params.id | |||
| if (!id) { | |||
| @@ -34,7 +33,7 @@ const createUser = async (req, res, next) => { | |||
| return res.status(400).send('Object cant be empty') | |||
| } | |||
| const err = await User.joiValidate(userModel) | |||
| const err = getUserValidator.validate(userModel).error | |||
| if (err) { | |||
| return res.status(401).send(err.message) | |||
| } | |||
| @@ -56,7 +55,8 @@ const updateUser = async (req, res, next) => { | |||
| if (Object.entries(objBody).length == 0) { | |||
| return res.status(400).send('Invalid input parameters') | |||
| } | |||
| const err = await User.joiValidate(objBody) | |||
| const err = getUserValidator.validate(objBody).error | |||
| if (err) { | |||
| return res.status(400).send(err.message) | |||
| } | |||
| @@ -6,8 +6,8 @@ const loggerWinston = winston.createLogger({ | |||
| format: winston.format.json(), | |||
| defaultMeta: { service: 'user-service' }, | |||
| transports: [ | |||
| new winston.transports.File({ filename: 'loggerFiles/error.log', level: 'error' }), | |||
| new winston.transports.File({ filename: 'loggerFiles/all.log', level: 'silly' }), | |||
| new winston.transports.File({ filename: '../public/loggerFiles/error.log', level: 'error' }), | |||
| new winston.transports.File({ filename: '../public/loggerFiles/all.log', level: 'silly' }), | |||
| ], | |||
| }); | |||
| @@ -1,7 +1,7 @@ | |||
| const config = require('config') //Default configuration file | |||
| const express = require('express') | |||
| const app = express() | |||
| const path = require('path') | |||
| const port = process.env.NODE_ENV === 'production' ? 80 : 3000 | |||
| const port = process.env.NODE_ENV === 'production' ? 80 : 3001 | |||
| require('./database/mongoose') | |||
| const userRouter = require('./routes/user') | |||
| const tokenRouter = require('./routes/token') | |||
| @@ -11,14 +11,24 @@ const { errorLogger, errorResponder } = require('./middleware/errorHandling.js') | |||
| const requestLogging = require('./middleware/requestLogging.js') | |||
| const cors = require('cors') //Cross-origin resource sharing | |||
| const helmet = require('helmet') //Basic protection against attacks like XSS | |||
| const config = require('config') //Default configuration file | |||
| const fs = require('fs') | |||
| const path = require('path') | |||
| const routesDirectory = path.resolve(__dirname) + '\\routes\\' | |||
| // console.log(config.util.getEnv('NODE_ENV')) | |||
| app.use(errorLogger); | |||
| app.use(errorResponder); | |||
| app.use(express.json()) | |||
| app.use('/api-docs', swaggerUI.serve, swaggerUI.setup(docs)) | |||
| app.use(requestLogging) | |||
| app.use(cors()) | |||
| app.use(helmet()) | |||
| fs.readdirSync(routesDirectory).forEach(route => { | |||
| app.use(require(routesDirectory + route)) | |||
| }) | |||
| app.use(userRouter) | |||
| app.use(tokenRouter) | |||
| @@ -30,9 +40,6 @@ app.get('/', (req, res) => { | |||
| } | |||
| }) | |||
| app.use(errorLogger); | |||
| app.use(errorResponder); | |||
| app.listen(port, () => { | |||
| console.log('Server is up on port ' + port) | |||
| }) | |||
| @@ -0,0 +1,12 @@ | |||
| const Joi = require("joi"); | |||
| const schema = { | |||
| getUserValidator: Joi.object({ | |||
| name: Joi.string().min(2).required(), | |||
| password: Joi.string().min(8).regex(/[a-zA-Z0-9]{3,30}/).required(), | |||
| email: Joi.string().email().required(), | |||
| role: Joi.string() | |||
| }) | |||
| } | |||
| module.exports = schema | |||