V1.0.0.beta-15 Update
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!
This commit is contained in:
2024-07-26 19:41:22 +02:00
parent 44631acfc6
commit 74850e5a4a
12 changed files with 319 additions and 354 deletions

View File

@@ -1,96 +1,95 @@
const passport = require('passport');
const DiscordStrategy = require('passport-discord').Strategy;
const fs = require('fs');
const fs = require('fs').promises;
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);
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;
}
}
const callbackURL = `http://${setupData[0].domain}/auth/discord/callback`;
console.log(`Callback URL: ${callbackURL}`);
async function initializePassport() {
const setupData = await loadSetupData();
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);
if (!setupData || !setupData[0]) {
console.error('Setup data is not loaded or has an incorrect structure.');
return;
}
fs.readFile(path.join(__dirname, '../data', 'user.json'), 'utf8', (err, data) => {
if (err) {
console.error('Error reading user.json:', err);
return done(err);
}
const discordConfig = setupData[0].discord;
if (!discordConfig || !discordConfig.clientID || !discordConfig.clientSecret) {
console.error('Discord configuration is missing clientID or clientSecret.');
return;
}
let users;
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 {
users = JSON.parse(data);
} catch (parseErr) {
console.error('Failed to parse user.json:', parseErr);
return done(parseErr);
}
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);
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);
if (existingUser) {
return done(null, existingUser);
}
console.log('New user created:', newUser);
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);
});
});
}));
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);
} catch (err) {
console.error('Error handling user data:', err);
done(err);
}
}));
let users;
passport.serializeUser((user, done) => {
console.log('Serializing user:', user);
done(null, user.id);
});
passport.deserializeUser(async (id, done) => {
try {
users = JSON.parse(data);
} catch (parseErr) {
console.error('Failed to parse user data:', parseErr);
return done(parseErr);
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);
}
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);
});
});
}
initializePassport();
module.exports = passport;