diff --git a/assignment-service/routes/StudentRouter.js b/assignment-service/routes/StudentRouter.js index a84b271..6dcf37b 100644 --- a/assignment-service/routes/StudentRouter.js +++ b/assignment-service/routes/StudentRouter.js @@ -10,10 +10,12 @@ studentRouter.post("/save", (req, res) => {}); studentRouter.post("/deploy", (req, res) => {}); -studentRouter.post("/verify/", async (req, res) => { +studentRouter.post("/verify", async (req, res) => { try { - const assignmentId = req.body.id; + const assignmentId = req.body.assignmentId; const password = req.body.password; + console.log("Received request to verify assignment."); + console.log("Request body:", req.body); console.log( "Accessing assignment with ID:", assignmentId, @@ -35,13 +37,18 @@ studentRouter.post("/verify/", async (req, res) => { response.data.passwordhash ); + console.log("Password validation result:", isPasswordValid); + if (!isPasswordValid || !response.data) { + console.log("Invalid id or password."); return res.status(401).json({ error: "Invalid id and password" }); } + console.log("Verification successful. Sending response."); res.status(response.status).json(response.data); } catch (error) { console.error("Error fetching assignment details:", error.message); + console.error("Error details:", error); res.status(error.response?.status || 500).json({ error: error.message }); } }); diff --git a/auth-service/.env.development b/auth-service/.env.development index 74b17a1..91cdcab 100644 --- a/auth-service/.env.development +++ b/auth-service/.env.development @@ -5,6 +5,6 @@ GOOGLE_CLIENT_SECRET="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" GOOGLE_CALLBACK_URL="http://localhost:8080/auth/google/callback" LOGIN_REDIRECT_URL="http://localhost:5173/" ACCEPTED_ORIGINS=http://localhost:3000,http://localhost:8081,http://localhost:3001,http://localhost:5173 -DB_USER_SERVICE_URL="http://js-user-db-service:3100/" +DB_USER_SERVICE_URL="http://localhost:3100/" AUTH_SESSION_KEY="f3f4d8e6b17a4b3abdc8e9a2c0457aaf91c0d5f6e3b7a9c8df624bd71ea35f42" PORT=8080 \ No newline at end of file diff --git a/auth-service/passport.js b/auth-service/passport.js index 2f32e34..1b6b835 100644 --- a/auth-service/passport.js +++ b/auth-service/passport.js @@ -3,6 +3,7 @@ require("dotenv").config(); const GoogleStrategy = require("passport-google-oauth20").Strategy; const passport = require("passport"); const CustomStrategy = require("passport-custom").Strategy; +const axios = require("axios"); passport.use( new GoogleStrategy( @@ -13,7 +14,7 @@ passport.use( scope: ["profile", "email"], }, function (accessToken, refreshToken, profile, callback) { - callback(null, profile); + callback(null, {...profile, role: "instructor"}); } ) ); @@ -21,31 +22,56 @@ passport.use( passport.use( "student-auth", new CustomStrategy(async (req, done) => { - const { assignment, password } = req.body; + const { assignmentId, password } = req.body; + + console.log("Custom strategy invoked"); + console.log("Received assignmentId:", assignmentId); + console.log("Received password:", password); try { - // Call your external auth service - const response = await axios.post("http://localhost:8082/student/verify", { - assignment, - password, - }); + console.log("Sending request to external auth service..."); + const response = await axios.post( + "http://localhost:8082/student/verify", + { + assignmentId, + password, + } + ); - if (response.data && response.data.success) { - const user = response.data.user; + if (response.status === 200 && response.data) { + user = { + ...response.data, + role: "student", + }; + console.log("Authentication successful, user:", user); return done(null, user); // success } else { + console.log("Authentication failed: Invalid credentials"); return done(null, false, { message: "Invalid credentials" }); } } catch (err) { + console.error("Error during authentication:", err); return done(err); } }) ); passport.serializeUser((user, done) => { - done(null, user); + // done(null, user); + console.log("Serializing user:", user); + done(null, { + id: user.assignmentid || user.emal, + displayName: user.studentname || user.displayName, + role: user.role, + }); }); -passport.deserializeUser((user, done) => { - done(null, user); +passport.deserializeUser(async (user, done) => { + try { + console.log("Deserializing user:", user); + done(null, user); + } catch (err) { + console.error("Error during deserialization:", err); + done(err); + } }); diff --git a/auth-service/routes/auth.js b/auth-service/routes/auth.js index 3c8e9de..47e848b 100644 --- a/auth-service/routes/auth.js +++ b/auth-service/routes/auth.js @@ -11,6 +11,8 @@ router.get( ); router.get("/current_user", (req, res) => { + console.log("Current user endpoint hit"); + console.log("Request user:", req.user); if (req.isAuthenticated()) { console.log("Authenticated user:", req.user); res.json(req.user); @@ -52,19 +54,47 @@ router.get("/login/failed", (req, res) => { router.get("/google", passport.authenticate("google", ["profile", "email"])); -router.post("/student/login", (req, res) => { +router.post( + "/student/login", passport.authenticate("student-auth"), - (req, res) => { - res.json({ - message: "Authenticated via external service", - user: req.user, + (req, res) => { + console.log("Student login endpoint hit"); + + if (req.user) { + console.log("Authenticated user:", req.user); + console.log("Processing student login..."); + + // Optional: augment user object (doesn't affect session unless you reserialize) + req.user.userId = req.user.assignmentid; + req.user.role = "student"; + + req.logIn(req.user, function(err) { + if (err) return next(err); + + console.log('is authenticated?: ' + req.isAuthenticated()); + + return res.json({ + success: true, + message: 'Successful Login', + user: req.user + }); }); - }; -}); + + } else { + console.log("Authentication failed"); + res.status(401).json({ error: true, message: "Authentication failed" }); + } + } +); router.get("/logout", (req, res) => { - req.logOut(); - res.redirect(process.env.LOGIN_REDIRECT_URL); + + req.logout((err) => { + if (err) { + return next(err); + } + res.redirect(process.env.LOGIN_REDIRECT_URL); + }); }); module.exports = router; diff --git a/auth-service/server.js b/auth-service/server.js index 8e92dce..f9ac814 100644 --- a/auth-service/server.js +++ b/auth-service/server.js @@ -6,10 +6,14 @@ const passport = require("passport"); const passportSetup = require("./passport"); const authRoute = require("./routes/auth"); const session = require("express-session"); +const bodyParser = require("body-parser"); const app = express(); +app.use(bodyParser.json()); // or express.json() +app.use(bodyParser.urlencoded({ extended: true })); app.use( + session({ secret: process.env.AUTH_SESSION_KEY, resave: false, @@ -31,6 +35,9 @@ app.use( }) ) + +app.use(express.json()); + app.use("/auth", authRoute); const port = process.env.PORT || 8080;