const passport = require('passport'); const DiscordStrategy = require('passport-discord').Strategy; const fs = require('fs'); const path = require('path'); const setupFilePath = path.join(__dirname, '../data', 'setup.json'); let setupData; try { setupData = JSON.parse(fs.readFileSync(setupFilePath, 'utf-8')); console.log('Setup data loaded:', setupData); } catch (err) { console.error('Error reading setup.json:', err); } const callbackURL = `http://${setupData[0].domain}/auth/discord/callback`; console.log(`Callback URL: ${callbackURL}`); passport.use(new DiscordStrategy({ clientID: setupData[0].discord.clientID, clientSecret: setupData[0].discord.clientSecret, callbackURL: callbackURL }, (accessToken, refreshToken, profile, done) => { console.log('Discord profile received:', profile); fs.readFile(path.join(__dirname, '../data', 'user.json'), 'utf8', (err, data) => { if (err) { console.error('Error reading user.json:', err); return done(err); } let users; try { users = JSON.parse(data); } catch (parseErr) { console.error('Failed to parse user.json:', parseErr); return done(parseErr); } let existingUser = users.find(user => user.id === profile.id); if (existingUser) { console.log('Existing user found:', existingUser); return done(null, existingUser); } const newUser = { id: profile.id, name: profile.username, role: "user" }; users.push(newUser); fs.writeFile(path.join(__dirname, '../data', 'user.json'), JSON.stringify(users, null, 2), 'utf8', (err) => { if (err) { console.error('Error writing to user.json:', err); return done(err); } console.log('New user created:', newUser); done(null, newUser); }); }); })); passport.serializeUser((user, done) => { console.log('Serializing user:', user); done(null, user.id); }); passport.deserializeUser((id, done) => { fs.readFile(path.join(__dirname, '../data', 'user.json'), 'utf8', (err, data) => { if (err) { return done(err); } let users; try { users = JSON.parse(data); } catch (parseErr) { console.error('Failed to parse user data:', parseErr); return done(parseErr); } const user = users.find(user => user.id === id); if (!user) { return done(null, false, { message: 'User not found.' }); } console.log('Deserializing user:', user); done(null, user); }); }); module.exports = passport;