| node_modules/ | node_modules/ | ||||
| loggerFiles/ | loggerFiles/ | ||||
| public/loggerFiles |
| const mongoose = require('mongoose') | const mongoose = require('mongoose') | ||||
| const Joi = require('joi') | |||||
| const userSchema = new mongoose.Schema({ | const userSchema = new mongoose.Schema({ | ||||
| name: { | name: { | ||||
| }] | }] | ||||
| }) | }) | ||||
| 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) { | // userSchema.pre('save', async function(next) { | ||||
| // const user = this | // const user = this | ||||
| // console.log('pre hash: ' + user.password) | // console.log('pre hash: ' + user.password) |
| const bcrypt = require("bcryptjs/dist/bcrypt") | const bcrypt = require("bcryptjs/dist/bcrypt") | ||||
| const User = require("../database/models/user") | const User = require("../database/models/user") | ||||
| const { getUserValidator } = require("../validators/users") | |||||
| const getUsers = async (req, res, next) => { | 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 getUser = async (req, res, next) => { | ||||
| const result = getUserValidator.validate(req.body) | |||||
| console.log(result) | |||||
| try { | try { | ||||
| const id = req.params.id | const id = req.params.id | ||||
| if (!id) { | if (!id) { | ||||
| return res.status(400).send('Object cant be empty') | return res.status(400).send('Object cant be empty') | ||||
| } | } | ||||
| const err = await User.joiValidate(userModel) | |||||
| const err = getUserValidator.validate(userModel).error | |||||
| if (err) { | if (err) { | ||||
| return res.status(401).send(err.message) | return res.status(401).send(err.message) | ||||
| } | } | ||||
| if (Object.entries(objBody).length == 0) { | if (Object.entries(objBody).length == 0) { | ||||
| return res.status(400).send('Invalid input parameters') | return res.status(400).send('Invalid input parameters') | ||||
| } | } | ||||
| const err = await User.joiValidate(objBody) | |||||
| const err = getUserValidator.validate(objBody).error | |||||
| if (err) { | if (err) { | ||||
| return res.status(400).send(err.message) | return res.status(400).send(err.message) | ||||
| } | } |
| format: winston.format.json(), | format: winston.format.json(), | ||||
| defaultMeta: { service: 'user-service' }, | defaultMeta: { service: 'user-service' }, | ||||
| transports: [ | 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' }), | |||||
| ], | ], | ||||
| }); | }); | ||||
| const config = require('config') //Default configuration file | |||||
| const express = require('express') | const express = require('express') | ||||
| const app = 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') | require('./database/mongoose') | ||||
| const userRouter = require('./routes/user') | const userRouter = require('./routes/user') | ||||
| const tokenRouter = require('./routes/token') | const tokenRouter = require('./routes/token') | ||||
| const requestLogging = require('./middleware/requestLogging.js') | const requestLogging = require('./middleware/requestLogging.js') | ||||
| const cors = require('cors') //Cross-origin resource sharing | const cors = require('cors') //Cross-origin resource sharing | ||||
| const helmet = require('helmet') //Basic protection against attacks like XSS | 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(express.json()) | ||||
| app.use('/api-docs', swaggerUI.serve, swaggerUI.setup(docs)) | app.use('/api-docs', swaggerUI.serve, swaggerUI.setup(docs)) | ||||
| app.use(requestLogging) | app.use(requestLogging) | ||||
| app.use(cors()) | app.use(cors()) | ||||
| app.use(helmet()) | app.use(helmet()) | ||||
| fs.readdirSync(routesDirectory).forEach(route => { | |||||
| app.use(require(routesDirectory + route)) | |||||
| }) | |||||
| app.use(userRouter) | app.use(userRouter) | ||||
| app.use(tokenRouter) | app.use(tokenRouter) | ||||
| } | } | ||||
| }) | }) | ||||
| app.use(errorLogger); | |||||
| app.use(errorResponder); | |||||
| app.listen(port, () => { | app.listen(port, () => { | ||||
| console.log('Server is up on port ' + port) | console.log('Server is up on port ' + port) | ||||
| }) | }) |
| 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 |