2025-05-02 12:41:41 -07:00
|
|
|
require("dotenv").config();
|
2025-04-16 10:49:46 -07:00
|
|
|
|
|
|
|
|
const GoogleStrategy = require("passport-google-oauth20").Strategy;
|
|
|
|
|
const passport = require("passport");
|
2025-05-02 12:41:41 -07:00
|
|
|
const CustomStrategy = require("passport-custom").Strategy;
|
2025-05-02 15:06:00 -07:00
|
|
|
const axios = require("axios");
|
2025-04-16 10:49:46 -07:00
|
|
|
|
2025-05-07 11:43:16 -07:00
|
|
|
|
|
|
|
|
|
2025-04-16 10:49:46 -07:00
|
|
|
passport.use(
|
2025-05-02 12:41:41 -07:00
|
|
|
new GoogleStrategy(
|
|
|
|
|
{
|
|
|
|
|
clientID: process.env.GOOGLE_CLIENT_ID,
|
|
|
|
|
clientSecret: process.env.GOOGLE_CLIENT_SECRET,
|
|
|
|
|
callbackURL: process.env.GOOGLE_CALLBACK_URL,
|
|
|
|
|
scope: ["profile", "email"],
|
|
|
|
|
},
|
|
|
|
|
function (accessToken, refreshToken, profile, callback) {
|
2025-05-07 11:43:16 -07:00
|
|
|
// console.log("Google Strategy invoked");
|
|
|
|
|
// console.log("Access Token:", accessToken);
|
|
|
|
|
// console.log("Refresh Token:", refreshToken);
|
|
|
|
|
// console.log("Profile:", profile);
|
|
|
|
|
callback(null, { ...profile, role: "instructor" });
|
2025-05-02 12:41:41 -07:00
|
|
|
}
|
|
|
|
|
)
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
passport.use(
|
|
|
|
|
"student-auth",
|
|
|
|
|
new CustomStrategy(async (req, done) => {
|
2025-05-05 18:49:15 -07:00
|
|
|
const { qrNumber, password } = req.body;
|
2025-05-02 15:06:00 -07:00
|
|
|
|
|
|
|
|
console.log("Custom strategy invoked");
|
2025-05-05 18:49:15 -07:00
|
|
|
console.log("Received qrNumber:", qrNumber);
|
2025-05-02 15:06:00 -07:00
|
|
|
console.log("Received password:", password);
|
2025-04-16 10:49:46 -07:00
|
|
|
|
2025-05-02 12:41:41 -07:00
|
|
|
try {
|
2025-05-02 15:06:00 -07:00
|
|
|
console.log("Sending request to external auth service...");
|
2025-08-25 14:23:55 -07:00
|
|
|
console.log(
|
|
|
|
|
`Request URL: ${process.env.ASSIGNMENT_SERVICE_URL}student/verify`
|
|
|
|
|
);
|
2025-05-02 15:06:00 -07:00
|
|
|
const response = await axios.post(
|
2025-08-25 14:23:55 -07:00
|
|
|
`${process.env.ASSIGNMENT_SERVICE_URL}student/verify`,
|
2025-05-02 15:06:00 -07:00
|
|
|
{
|
2025-05-05 18:49:15 -07:00
|
|
|
qrNumber,
|
2025-05-02 15:06:00 -07:00
|
|
|
password,
|
|
|
|
|
}
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
if (response.status === 200 && response.data) {
|
|
|
|
|
user = {
|
|
|
|
|
...response.data,
|
|
|
|
|
role: "student",
|
|
|
|
|
};
|
|
|
|
|
console.log("Authentication successful, user:", user);
|
2025-05-02 12:41:41 -07:00
|
|
|
return done(null, user); // success
|
|
|
|
|
} else {
|
2025-05-02 15:06:00 -07:00
|
|
|
console.log("Authentication failed: Invalid credentials");
|
2025-05-02 12:41:41 -07:00
|
|
|
return done(null, false, { message: "Invalid credentials" });
|
|
|
|
|
}
|
|
|
|
|
} catch (err) {
|
2025-05-02 15:06:00 -07:00
|
|
|
console.error("Error during authentication:", err);
|
2025-05-02 12:41:41 -07:00
|
|
|
return done(err);
|
|
|
|
|
}
|
|
|
|
|
})
|
2025-04-16 10:49:46 -07:00
|
|
|
);
|
|
|
|
|
|
|
|
|
|
passport.serializeUser((user, done) => {
|
2025-05-02 15:06:00 -07:00
|
|
|
console.log("Serializing user:", user);
|
2025-08-25 14:23:55 -07:00
|
|
|
console.log(process.env.NODE_ENV)
|
2025-05-07 11:43:16 -07:00
|
|
|
// done(null, user);
|
2025-05-02 15:06:00 -07:00
|
|
|
done(null, {
|
2025-05-07 14:11:19 -07:00
|
|
|
userId: user.qrcodenumber || user.userId,
|
2025-05-02 15:06:00 -07:00
|
|
|
displayName: user.studentname || user.displayName,
|
|
|
|
|
role: user.role,
|
2025-05-07 11:43:16 -07:00
|
|
|
// emails: user.emails || "none",
|
2025-05-02 15:06:00 -07:00
|
|
|
});
|
2025-04-16 10:49:46 -07:00
|
|
|
});
|
|
|
|
|
|
2025-05-07 11:43:16 -07:00
|
|
|
passport.deserializeUser((user, done) => {
|
|
|
|
|
console.log("Deserializing user:", user);
|
2025-05-02 15:06:00 -07:00
|
|
|
try {
|
|
|
|
|
done(null, user);
|
|
|
|
|
} catch (err) {
|
|
|
|
|
console.error("Error during deserialization:", err);
|
|
|
|
|
done(err);
|
|
|
|
|
}
|
2025-05-02 12:41:41 -07:00
|
|
|
});
|