lbry-wunderbot/web/controlPanel.js
2018-05-20 21:14:43 +02:00

76 lines
2.1 KiB
JavaScript

import Discord from "discord.js";
import express from "express";
import session from "express-session";
import passport from "passport";
import DiscordStrat from "passport-discord";
import config from "config";
const app = express();
const host = process.env.HOST || "127.0.0.1";
const port = process.env.PORT || 3000;
// Setup passport for discord usage
passport.serializeUser((user, done) => {
done(null, user);
});
passport.deserializeUser((obj, done) => {
done(null, obj);
});
const scopes = ["identify", "guilds"];
passport.use(
new DiscordStrat(
{
clientID: config.get("Web.clientID"),
clientSecret: config.get("Web.clientSecret"),
callbackURL: "http://localhost:3000/callback",
scope: scopes
},
(accessToken, refreshToken, profile, done) => {
process.nextTick(() => done(null, profile));
}
)
);
// Function to check authentication status
function checkAuth(req, res, next) {
if (req.isAuthenticated()) return next();
res.send("not logged in :(");
}
// Returns all the guilds a user can control
function canControlGuilds(guilds) {
return guilds.filter(g => {
gp = new Discord.Permissions(null, g.permissions);
return gp.has("MANAGE_GUILD");
});
}
// Lets get some sessions going!
app.use(
session({
secret: "keyboard cat",
resave: false,
saveUninitialized: true
})
);
app.use(passport.initialize());
app.use(passport.session());
// Standard routes
app.get("/login", passport.authenticate("discord", { scope: scopes }), (req, res) => {});
app.get(
"/callback",
passport.authenticate("discord", { failureRedirect: "/me" }),
(req, res) => {
res.redirect("/me");
} // auth success
);
app.get("/logout", (req, res) => {
req.logout();
res.redirect("/");
});
app.get("/me", checkAuth, (req, res) => {
res.json(req.user);
});
// Time to run?!
module.exports = async function run(client) {
app.listen(port, host);
console.log(`Webserver listening on ${host}:${port}`); // eslint-disable-line no-console
};