diff --git a/backend/config/app.config.js b/backend/config/app.config.js index 6970701d800720b6ef086d7f798865b34a87b7e2..bfb56191aef46e819d558e23094578bbc137f074 100644 --- a/backend/config/app.config.js +++ b/backend/config/app.config.js @@ -1,5 +1,5 @@ module.exports = { 'secret': 'much-secret-such-key-wow', ROLEs: ['Master Admin Diskominfo', 'Admin Diskominfo', 'Admin Dinas', 'Member Dinas'], - jwtExpireTime: 300 + jwtExpireTime: 3000 }; \ No newline at end of file diff --git a/backend/controller/userController.js b/backend/controller/userController.js new file mode 100644 index 0000000000000000000000000000000000000000..ce694477cece99718ebc9843d2716e9d55a73f15 --- /dev/null +++ b/backend/controller/userController.js @@ -0,0 +1,120 @@ +const models = require('../models'); +const User = models.user; +const Role = models.role; +var bcrypt = require('bcryptjs'); + +exports.fetchAll = (req, res) => { + User.findAll({ + attributes: ['id', 'name'], + include: [{ + model: Role, + attributes: ['id', 'name'] + }] + }).then(user => { + res.status(200).json({ + "description": "Users data", + "users": user + }) + }).catch(err => { + res.status(500).json({ + "description": "Error", + "error": err + }); + }) +} + +exports.createUser = (req, res) => { + User.create({ + name: req.body.name, + email: req.body.email, + username: req.body.username, + password: bcrypt.hashSync(req.body.password), + }).then(user => { + Role.findOne({ + where: { + name: req.body.role + } + }).then(role => { + user.setRole(role).then(() => { + res.send("User created successfully!"); + }) + }).catch(err => { + res.status(500).send('Error -> ' + err); + }); + }).catch(err => { + res.status(500).send('Error -> ' + err); + }); +} + +exports.editUser = (req, res) => { + User.findOne({ + where: { + id: req.body.id + } + }).then(user => { + Role.findOne({ + where: { + name: req.body.role + } + }).then(role => { + user.setRole(role).then(() => { + user.update( + { + name: req.body.name, + email: req.body.email, + username: req.body.username, + password: bcrypt.hashSync(req.body.password) + }, + { + fields: ['name', 'email', 'username', 'password'] + } + ).then(() => { + res.send("User edited successfully!"); + }).catch(err => { + res.status(500).send('Error -> ' + err); + }); + }).catch(err => { + res.status(500).send('Error -> ' + err); + }); + }).catch(err => { + res.status(500).send('Error -> ' + err); + }); + }).catch(err => { + res.status(500).send('Error -> ' + err); + }); +} + +exports.deleteUser = (req, res) => { + User.destroy({ + where: { + id: req.body.id + } + }).then(() => { + res.send("User deleted successfully!"); + }).catch(err => { + res.status(500).send('Error -> ' + err); + }); +} + +exports.viewDetail = (req, res) => { + User.findOne({ + where: { + id: req.body.id + }, + attributes: ['id', 'name', 'email', 'username', 'password'], + include: [{ + model: Role, + attributes: ['id', 'name'] + }] + }).then(users => { + res.status(200).json({ + "description": "Users data", + "users": users + }) + }).catch(err => { + res.status(500).json({ + "description": "Error", + "error": err + }); + }) +} \ No newline at end of file diff --git a/backend/package.json b/backend/package.json index c0aa3d1bca7732b8c76997d361f4c46a25e15579..3102b5c4f3ddc96a0a976a25bb2704e398cd23bb 100644 --- a/backend/package.json +++ b/backend/package.json @@ -5,7 +5,7 @@ "main": "index.js", "scripts": { "start": "node app.js", - "test": "mocha --timeout 10000" + "test": "mocha --timeout 10000 --exit" }, "keywords": [], "author": "", diff --git a/backend/router/router.js b/backend/router/router.js index dd5efcd028636a232bdffe83d74b535d6a712b4c..a0ea45d9c6e436c809c8039b8f2a797cb806f43f 100644 --- a/backend/router/router.js +++ b/backend/router/router.js @@ -5,9 +5,16 @@ const tokenHandler = require('./jwtTokenHandler'); module.exports = function(app) { const authController = require('../controller/authController.js'); const testController = require('../controller/testController.js'); + const userController = require('../controller/userController.js'); app.post('/api/auth/signup', [verifySignUp.checkDuplicateUserNameOrEmail, verifySignUp.checkRolesExisted], authController.signup); app.post('/api/auth/login', authController.signin); app.get('/api/test/admin', [verifyJwtToken.verifyToken, verifyJwtToken.isAdmin, tokenHandler.extendJwtToken, tokenHandler.saveTokenToUser], testController.adminContent); app.get('/api/test/member', [verifyJwtToken.verifyToken, tokenHandler.extendJwtToken, tokenHandler.saveTokenToUser], testController.memberContent); + + app.post('/api/user/all', [verifyJwtToken.verifyToken, verifyJwtToken.isAdmin], userController.fetchAll); + app.post('/api/user/create', [verifyJwtToken.verifyToken, verifyJwtToken.isAdmin], userController.createUser); + app.post('/api/user/edit', [verifyJwtToken.verifyToken, verifyJwtToken.isAdmin], userController.editUser); + app.post('/api/user/delete', [verifyJwtToken.verifyToken, verifyJwtToken.isAdmin], userController.deleteUser); + app.post('/api/user/detail', [verifyJwtToken.verifyToken, verifyJwtToken.isAdmin], userController.viewDetail); } \ No newline at end of file diff --git a/backend/test/user_test.js b/backend/test/user_test.js index 84588a65db30406b564ffc3b19a5651f4fd7d73a..a58feba949eb7740be5a8e75bc1eef877e682ac8 100644 --- a/backend/test/user_test.js +++ b/backend/test/user_test.js @@ -7,6 +7,7 @@ const User = models.user; let app = require('../app.js') let should = chai.should(); let expect = chai.expect; +var bcrypt = require('bcryptjs') chai.use(chaiHttp); @@ -24,7 +25,7 @@ describe('Users', () => { "name": "Komi Shouko", "username": "komisama", "email":"komi@gmail.com", - "role":"Member Dinas", + "role":"Master Admin Diskominfo", "password":"komisama" }; chai.request('http://127.0.0.1:8081') @@ -37,6 +38,234 @@ describe('Users', () => { expect(res.text).to.equal('User registered successfully!'); done(); }); + + }); + }); +}); + +describe("Create user", () => { + it("Creating user", (done) => { + User.findOne({ + where: { + username:"komisama" + }, + attributes: ['id'] + }).then(result => { + console.log("Find done"); + let user = { + "username":"komisama", + "password":"komisama" + }; + chai.request('http://127.0.0.1:8081') + .post('/api/auth/login') + .send(user) + .then(res => { + console.log("sign done"); + let req = { + "userId":result.id, + "name":"Udin", + "username":"udin", + "email":"udin@udin.com", + "password":"udin", + "role":"Master Admin Diskominfo" + }; + console.log(req) + chai.request('http://127.0.0.1:8081') + .post('/api/user/create') + .set('x-access-token', res.body.accessToken) + .send(req) + .end((err, res)=>{ + console.log(res.text); + should.exist(res); + res.should.have.status(200); + expect(res.text).to.equal('User created successfully!'); + done(); + }); + }).catch(err => { + res.status(500).send('Error -> ' + err); + }); + }).catch(err => { + res.status(500).send('Error -> ' + err); + }); + }); +}); + +describe("Fetch 'em All", () => { + it('Fetch all user', (done) =>{ + User.findOne({ + where: { + username:"komisama" + }, + attributes: ['id'] + }).then(result => { + console.log("Find done"); + let user = { + "username":"komisama", + "password":"komisama" + }; + chai.request('http://127.0.0.1:8081') + .post('/api/auth/login') + .send(user) + .then(res => { + console.log("sign done"); + let req = { + "userId":result.id + }; + console.log(req) + chai.request('http://127.0.0.1:8081') + .post('/api/user/all') + .set('x-access-token', res.body.accessToken) + .send(req) + .end((err, res)=>{ + console.log(res.text); + should.exist(res); + res.should.have.status(200); + expect(res.body.users[1].name).to.equal('Komi Shouko'); + expect(res.body.users[1].role.id).to.equal(1); + expect(res.body.users[1].role.name).to.equal("Master Admin Diskominfo"); + done(); + }); + }).catch(err => { + res.status(500).send('Error -> ' + err); + }); + }).catch(err => { + res.status(500).send('Error -> ' + err); + }); + }); +}); + +describe("Edit user", () => { + it("Editing user", (done) => { + User.findOne({ + where: { + username:"komisama" + }, + attributes: ['id'] + }).then(result => { + console.log("Find done"); + let user = { + "username":"komisama", + "password":"komisama" + }; + chai.request('http://127.0.0.1:8081') + .post('/api/auth/login') + .send(user) + .then(res => { + console.log("sign done"); + let req = { + "userId":result.id, + "id":result.id, + "name":"Di-Komix Aja", + "username":"komisama", + "email":"komix@yahoo.com", + "password":"komisama", + "role":"Master Admin Diskominfo" + }; + console.log(req) + chai.request('http://127.0.0.1:8081') + .post('/api/user/edit') + .set('x-access-token', res.body.accessToken) + .send(req) + .end((err, res)=>{ + console.log(res.text); + should.exist(res); + res.should.have.status(200); + expect(res.text).to.equal('User edited successfully!'); + done(); + }); + }).catch(err => { + res.status(500).send('Error -> ' + err); + }); + }).catch(err => { + res.status(500).send('Error -> ' + err); + }); + }); +}); + +describe("View detail", () => { + it("Detail user", (done) => { + User.findOne({ + where: { + username:"komisama" + }, + attributes: ['id'] + }).then(result => { + console.log("Find done"); + let user = { + "username":"komisama", + "password":"komisama" + }; + chai.request('http://127.0.0.1:8081') + .post('/api/auth/login') + .send(user) + .then(res => { + console.log("sign done"); + let req = { + "userId":result.id, + "id":result.id + }; + console.log(req) + chai.request('http://127.0.0.1:8081') + .post('/api/user/detail') + .set('x-access-token', res.body.accessToken) + .send(req) + .end((err, res)=>{ + console.log(res.text); + should.exist(res); + res.should.have.status(200); + expect(res.body.users.name).to.equal('Di-Komix Aja'); + expect(res.body.users.email).to.equal('komix@yahoo.com'); + expect(res.body.users.username).to.equal('komisama'); + done(); + }); + }).catch(err => { + res.status(500).send('Error -> ' + err); + }); + }).catch(err => { + res.status(500).send('Error -> ' + err); + }); + }); +}); + +describe("Delete User", () => { + it("Delete user", (done) => { + User.findOne({ + where: { + username:"komisama" + }, + attributes: ['id'] + }).then(result => { + console.log("Find done"); + let user = { + "username":"komisama", + "password":"komisama" + }; + chai.request('http://127.0.0.1:8081') + .post('/api/auth/login') + .send(user) + .then(res => { + console.log("sign done"); + let req = { + "userId":result.id, + "id":result.id + }; + console.log(req) + chai.request('http://127.0.0.1:8081') + .post('/api/user/delete') + .set('x-access-token', res.body.accessToken) + .send(req) + .end((err, res)=>{ + console.log(res.text); + should.exist(res); + res.should.have.status(200); + expect(res.text).to.equal('User deleted successfully!'); + done(); + }); + }).catch(err => { + res.status(500).send('Error -> ' + err); + }); + }).catch(err => { + res.status(500).send('Error -> ' + err); }); }); -}); \ No newline at end of file +});