All checks were successful
continuous-integration/drone/push Build is passing
Note: We appreciate your feedback and bug reports to continue improving our platform. Thank you for your continued support!
96 lines
2.8 KiB
JavaScript
96 lines
2.8 KiB
JavaScript
const passport = require('passport');
|
|
const DiscordStrategy = require('passport-discord').Strategy;
|
|
const fs = require('fs').promises;
|
|
const path = require('path');
|
|
|
|
const setupFilePath = path.join(__dirname, '../data', 'setup.json');
|
|
|
|
async function loadSetupData() {
|
|
try {
|
|
const setupFileContent = await fs.readFile(setupFilePath, 'utf-8');
|
|
return JSON.parse(setupFileContent);
|
|
} catch (err) {
|
|
console.error('Error reading setup.json:', err);
|
|
return null;
|
|
}
|
|
}
|
|
|
|
async function initializePassport() {
|
|
const setupData = await loadSetupData();
|
|
|
|
if (!setupData || !setupData[0]) {
|
|
console.error('Setup data is not loaded or has an incorrect structure.');
|
|
return;
|
|
}
|
|
|
|
const discordConfig = setupData[0].discord;
|
|
if (!discordConfig || !discordConfig.clientID || !discordConfig.clientSecret) {
|
|
console.error('Discord configuration is missing clientID or clientSecret.');
|
|
return;
|
|
}
|
|
|
|
const callbackURL = `http://${setupData[0].domain}/auth/discord/callback`;
|
|
|
|
passport.use(new DiscordStrategy({
|
|
clientID: discordConfig.clientID,
|
|
clientSecret: discordConfig.clientSecret,
|
|
callbackURL: callbackURL,
|
|
scope: ['identify', 'email']
|
|
}, async (accessToken, refreshToken, profile, done) => {
|
|
try {
|
|
const userFilePath = path.join(__dirname, '../data', 'user.json');
|
|
const data = await fs.readFile(userFilePath, 'utf8');
|
|
let users = JSON.parse(data);
|
|
|
|
let existingUser = users.find(user => user.id === profile.id);
|
|
|
|
if (existingUser) {
|
|
return done(null, existingUser);
|
|
}
|
|
|
|
const newUser = {
|
|
id: profile.id,
|
|
name: profile.username,
|
|
role: "user"
|
|
};
|
|
|
|
users.push(newUser);
|
|
|
|
await fs.writeFile(userFilePath, JSON.stringify(users, null, 2), 'utf8');
|
|
done(null, newUser);
|
|
|
|
} catch (err) {
|
|
console.error('Error handling user data:', err);
|
|
done(err);
|
|
}
|
|
}));
|
|
|
|
passport.serializeUser((user, done) => {
|
|
console.log('Serializing user:', user);
|
|
done(null, user.id);
|
|
});
|
|
|
|
passport.deserializeUser(async (id, done) => {
|
|
try {
|
|
const userFilePath = path.join(__dirname, '../data', 'user.json');
|
|
const data = await fs.readFile(userFilePath, 'utf8');
|
|
const users = JSON.parse(data);
|
|
|
|
const user = users.find(user => user.id === id);
|
|
|
|
if (!user) {
|
|
return done(null, false, { message: 'User not found.' });
|
|
}
|
|
|
|
done(null, user);
|
|
} catch (err) {
|
|
console.error('Error deserializing user:', err);
|
|
done(err);
|
|
}
|
|
});
|
|
}
|
|
|
|
initializePassport();
|
|
|
|
module.exports = passport;
|