49 lines
1.4 KiB
JavaScript
49 lines
1.4 KiB
JavaScript
const DiscordStrategy = require('passport-discord').Strategy;
|
|
const db = require('../db');
|
|
|
|
module.exports = (passport) => {
|
|
passport.use(new DiscordStrategy({
|
|
clientID: process.env.DISCORD_CLIENT_ID,
|
|
clientSecret: process.env.DISCORD_CLIENT_SECRET,
|
|
callbackURL: `${process.env.APP_URL}/auth/discord/callback`,
|
|
scope: ['identify'],
|
|
},
|
|
async (accessToken, refreshToken, profile, done) => {
|
|
try {
|
|
// Admin-Status prüfen
|
|
const rows = await db.query(
|
|
'SELECT discord_id FROM admin_whitelist WHERE discord_id = ?',
|
|
[profile.id]
|
|
);
|
|
const isAdmin = rows.length > 0;
|
|
|
|
const user = {
|
|
id: profile.id,
|
|
username: profile.username,
|
|
avatar: profile.avatar
|
|
? `https://cdn.discordapp.com/avatars/${profile.id}/${profile.avatar}.png`
|
|
: null,
|
|
isAdmin,
|
|
};
|
|
return done(null, user);
|
|
} catch (err) {
|
|
return done(err, null);
|
|
}
|
|
}));
|
|
|
|
passport.serializeUser((user, done) => done(null, user));
|
|
passport.deserializeUser(async (obj, done) => {
|
|
// Admin-Status bei jedem Request neu prüfen (live Whitelist)
|
|
try {
|
|
const rows = await db.query(
|
|
'SELECT discord_id FROM admin_whitelist WHERE discord_id = ?',
|
|
[obj.id]
|
|
);
|
|
obj.isAdmin = rows.length > 0;
|
|
done(null, obj);
|
|
} catch (e) {
|
|
done(null, obj);
|
|
}
|
|
});
|
|
};
|