bridgecord/tokens.js

57 lines
1.5 KiB
JavaScript
Raw Normal View History

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
};