import passport from "passport"; import SteamStrategy from "passport-steam"; import { config } from "./index.js"; import User from "../models/User.js"; // Configure HTTP agent with timeout for Steam OpenID import https from "https"; import http from "http"; const httpAgent = new http.Agent({ timeout: 10000, // 10 second timeout keepAlive: true, }); const httpsAgent = new https.Agent({ timeout: 10000, // 10 second timeout keepAlive: true, }); /** * Configure Passport with Steam Strategy */ export const configurePassport = () => { // Serialize user to session passport.serializeUser((user, done) => { done(null, user._id.toString()); }); // Deserialize user from session passport.deserializeUser(async (id, done) => { try { const user = await User.findById(id); done(null, user); } catch (error) { done(error, null); } }); console.log("šŸ”§ Configuring Steam Strategy..."); console.log("Steam Realm:", config.steam.realm); console.log("Steam Return URL:", config.steam.returnURL); console.log( "Steam API Key:", config.steam.apiKey ? "Set (length: " + config.steam.apiKey.length + ")" : "Not Set" ); // Configure Steam Strategy with options try { passport.use( new SteamStrategy( { returnURL: config.steam.returnURL, realm: config.steam.realm, apiKey: config.steam.apiKey, // Add HTTP agents for timeout control agent: httpAgent, profile: true, }, async (identifier, profile, done) => { try { const steamId = profile.id; // Find or create user let user = await User.findOne({ steamId }); if (user) { // Update existing user profile user.username = profile.displayName; user.avatar = profile.photos?.[2]?.value || profile.photos?.[0]?.value || null; user.communityvisibilitystate = profile._json?.communityvisibilitystate || 1; await user.save(); console.log( `āœ… Existing user logged in: ${user.username} (${steamId})` ); } else { // Create new user user = new User({ username: profile.displayName, steamId: steamId, avatar: profile.photos?.[2]?.value || profile.photos?.[0]?.value || null, account_creation: profile._json?.timecreated || Math.floor(Date.now() / 1000), communityvisibilitystate: profile._json?.communityvisibilitystate || 1, balance: 0, staffLevel: 0, }); await user.save(); console.log( `āœ… New user registered: ${user.username} (${steamId})` ); } return done(null, user); } catch (error) { console.error("āŒ Steam authentication error:", error); return done(error, null); } } ) ); console.log("āœ… Steam Strategy registered successfully"); } catch (error) { console.error("āŒ Failed to configure Steam Strategy:", error.message); console.error("This may be due to network issues or invalid configuration"); } console.log("šŸ” Passport configured with Steam strategy"); console.log(`šŸ“ Steam Realm: ${config.steam.realm}`); console.log(`šŸ”™ Return URL: ${config.steam.returnURL}`); console.log(`šŸ”‘ API Key: ${config.steam.apiKey ? "āœ… Set" : "āŒ Not Set"}`); // Important note about Steam OpenID console.log("\nšŸ’” Note: Steam OpenID discovery can sometimes fail due to:"); console.log(" - Network/firewall blocking Steam's OpenID endpoint"); console.log(" - Steam's service being temporarily unavailable"); console.log(" - DNS resolution issues"); console.log( " If /auth/steam fails, try: curl -v https://steamcommunity.com/openid" ); }; export default configurePassport;