57 lines
1.5 KiB
JavaScript
57 lines
1.5 KiB
JavaScript
|
const jsonwebtoken = require("jsonwebtoken");
|
||
|
const { jwtSecret } = require("./config");
|
||
|
|
||
|
function createToken({ username, avatarURL, discordID, guildAccess }) {
|
||
|
return new Promise((resolve, reject) => {
|
||
|
jsonwebtoken.sign({ username, avatarURL, discordID, guildAccess }, jwtSecret, (err, token) => {
|
||
|
if (err)
|
||
|
return reject(err);
|
||
|
|
||
|
resolve(token);
|
||
|
});
|
||
|
});
|
||
|
}
|
||
|
|
||
|
function decodeToken(token) {
|
||
|
return new Promise((resolve, reject) => {
|
||
|
jsonwebtoken.verify(token, jwtSecret, (err, token) => {
|
||
|
if (err)
|
||
|
return reject(err);
|
||
|
|
||
|
resolve(token);
|
||
|
});
|
||
|
});
|
||
|
}
|
||
|
|
||
|
function checkAuth(callback) {
|
||
|
return async (req, res) => {
|
||
|
const token = req.get("authorization");
|
||
|
if (token) {
|
||
|
let user;
|
||
|
try {
|
||
|
user = await decodeToken(token);
|
||
|
} catch(e) {
|
||
|
res.status(403).send({ error: true, message: "ERROR_FORBIDDEN" });
|
||
|
return;
|
||
|
}
|
||
|
if (user) {
|
||
|
req.user = user;
|
||
|
req.authenticated = true;
|
||
|
return await callback(req, res);
|
||
|
} else {
|
||
|
res.status(401).send({ error: true, message: "ERROR_UNAUTHORIZED" });
|
||
|
return;
|
||
|
}
|
||
|
} else {
|
||
|
res.status(401).send({ error: true, message: "ERROR_UNAUTHORIZED" });
|
||
|
return;
|
||
|
}
|
||
|
};
|
||
|
}
|
||
|
|
||
|
module.exports = {
|
||
|
createToken,
|
||
|
decodeToken,
|
||
|
checkAuth
|
||
|
};
|