| module.exports = { | |||||
| Admin : 'Admin', | |||||
| User: 'User' | |||||
| } |
| type: String, | type: String, | ||||
| required: true | required: true | ||||
| }, | }, | ||||
| role: { | |||||
| type: String | |||||
| }, | |||||
| tokens: [{ | tokens: [{ | ||||
| token: { | token: { | ||||
| type: String, | type: String, | ||||
| name: Joi.string().min(2).required(), | name: Joi.string().min(2).required(), | ||||
| password: Joi.string().min(8).regex(/[a-zA-Z0-9]{3,30}/).required(), | password: Joi.string().min(8).regex(/[a-zA-Z0-9]{3,30}/).required(), | ||||
| email: Joi.string().email().required(), | email: Joi.string().email().required(), | ||||
| role: Joi.string() | |||||
| }) | }) | ||||
| const validation = schema.validate(obj); | const validation = schema.validate(obj); |
| const jwt = require('jsonwebtoken') | const jwt = require('jsonwebtoken') | ||||
| const User = require('../database/models/user') | |||||
| const Role = require('../database/models/roles') | |||||
| const auth = async (req, res, next) => { | const auth = async (req, res, next) => { | ||||
| try { | try { | ||||
| next() | next() | ||||
| } | } | ||||
| module.exports = auth | |||||
| const authRole = async (req, res, next) => { | |||||
| try { | |||||
| const token = req.header('Authorization').replace('Bearer ', '') | |||||
| if(!token) { | |||||
| return res.status(404).send('Invalid token!') | |||||
| } | |||||
| const findUser = await User.findOne({ 'tokens.token': token }) | |||||
| if(!findUser) { | |||||
| return res.status(404).send('No user has the token provided!') | |||||
| } | |||||
| if(findUser['role'] === Role.Admin) { | |||||
| console.log('User is admin!') | |||||
| next() | |||||
| } | |||||
| else { | |||||
| return res.status(401).send('Not authorized!') | |||||
| } | |||||
| } catch(e) { | |||||
| next(e) | |||||
| } | |||||
| } | |||||
| module.exports = { auth, authRole } |
| const express = require('express') | const express = require('express') | ||||
| const endpoints = require('../endpoints/user') | const endpoints = require('../endpoints/user') | ||||
| const router = new express.Router() | const router = new express.Router() | ||||
| const auth = require('../middleware/auth') | |||||
| /** | /** | ||||
| * @openapi | * @openapi | ||||
| * 500: | * 500: | ||||
| * description: Internal server error. | * description: Internal server error. | ||||
| */ | */ | ||||
| router.get('/users', endpoints.getUsers) | |||||
| router.get('/users', auth.authRole, endpoints.getUsers) | |||||
| /** | /** | ||||
| * @openapi | * @openapi |