Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
49 changes: 49 additions & 0 deletions src/controller/auth/ctrl.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
const { runQuery } = require('../../lib/database.js');
const auth = require('../../lib/authentification.js');
const jwt = require('../../lib/jwt.js');

const registerUser = async (req, res) => {
const sql = 'INSERT INTO user (username, password, displayname) VALUES (?, ?, ?);';
const { username, password, displayname } = req.body;
try {
const encodedPassword = await auth.generate(password);
await runQuery(sql, [username, encodedPassword, displayname]);
res.status(200).send('REGISTER COMPLETE');
} catch (e) {
res.status(500).send(e);
}
}

const logIn = async (req, res) => {
const sql = 'SELECT password FROM user WHERE id = ?;';
const { id, password } = req.body;
try {
const result = await runQuery(sql, [id]);
if (auth.verify(password, result[0].password)) {
const token = jwt.sign({id: id, role: 'admin'});
res.status(200).send(token);
} else {
res.status(400).send('LOGIN FAILED');
}
} catch (e) {
res.status(500).send('INTERNAL SERVER ERROR');
}
}

const logOut = async (req, res) => {
const { id } = req.body;
try {
const token = jwt.sign({id: id, role: 'user'});
res.status(200).send(token);
} catch (e) {
res.status(500).send('INTERNAL SERVER ERROR');
}
}



module.exports = {
registerUser,
logIn,
logOut,
};
12 changes: 12 additions & 0 deletions src/controller/auth/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
const { Router } = require('express');
const ctrl = require('./ctrl');

const router = Router();

router.post('/auth/register', ctrl.registerUser);

router.post('/auth/login', ctrl.logIn);

router.get('/auth/logout', ctrl.logOut);

module.exports = router;
6 changes: 6 additions & 0 deletions src/controller/index.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,10 @@
const { Router } = require('express');
const users = require('./users');
const auth = require('./auth');

const router = Router();

router.use('/api', users);
router.use('/api', auth);

module.exports = router;
69 changes: 69 additions & 0 deletions src/controller/users/ctrl.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
const { runQuery } = require('../../lib/database.js');

const getByID = async (req, res) => {
const sql = 'SELECT * FROM user WHERE id=?;';
const { id } = req.params;

try {
const result = await runQuery(sql, [id]);
if (result.length === 1) {
res.status(200).send(result[0]);
} else {
res.status(400).send('Bad Request');
}
} catch (e) {
res.status(500).send('INTERNAL SERVER ERROR');
}
};

const getAllName = async (req, res) => {
const sql = 'SELECT username FROM user;';
try {
const result = await runQuery(sql, []);
res.status(200).send(result);
} catch (e) {
res.status(500).send('INTERNAL SERVER ERROR');
}
}

const getNameByString = async (req, res) => {
const sql = "SELECT username FROM user WHERE displayname LIKE ?";
const { string } = req.body;
try {
const result = await runQuery(sql, ['%' + string + '%']);
res.status(200).send(result);
} catch (e) {
res.status(500).send(e);
}
}

const modifyNameByID = async (req, res) => {
const sql = 'UPDATE user SET displayname = ? WHERE id = ?;';
const { id } = req.params;
const { newname } = req.body;
try {
await runQuery(sql, [newname, id]);
res.status(200).send('MODIFY COMPLETE');
} catch (e) {
res.status(500).send('INTERNAL SERVER ERROR');
}
}

const deleteByID = async (req, res) => {
const sql = 'DELETE FROM user WHERE id = ?;';
const { id } = req.params;
try {
await runQuery(sql, [id]);
res.status(200).send('DELETE COMPLETE');
} catch (e) {
res.status(500).send('INTERNAL SERVER ERROR');
}
}

module.exports = {
getByID,
getAllName,
getNameByString,
modifyNameByID,
deleteByID,
};
16 changes: 16 additions & 0 deletions src/controller/users/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
const { Router } = require('express');
const ctrl = require('./ctrl');

const router = Router();

router.get('/users/results', ctrl.getNameByString);

router.get('/users', ctrl.getAllName);

router.get('/users/:id', ctrl.getByID);

router.put('/users/:id', ctrl.modifyNameByID);

router.delete('/users/:id', ctrl.deleteByID);

module.exports = router;
2 changes: 1 addition & 1 deletion src/index.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
const app = require('./app');
require('./env');
const app = require('./app');

const PORT = process.env.PORT || 4000;

Expand Down
31 changes: 31 additions & 0 deletions src/lib/jwt.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
const jwt = require('jsonwebtoken');
const SECRET = 'ThisIsSecretCode';

module.exports = {
sign: (user) => {
const payload = {
id: user.id,
role: user.role
}
return jwt.sign(payload, SECRET, {
algorithm: 'HS256',
expiresIn: '7d'
})
},

verify: (token) => {
try {
const decoded = jwt.verify(token, SECRET);
return {
OK: true,
id: decoded.id,
role: decoded.role
}
} catch (e) {
return {
OK: false,
message: err.message
}
}
}
};