From 53174a5880244d1bd336b06dbe610d8f67674ca4 Mon Sep 17 00:00:00 2001 From: hamdiolad Date: Sun, 21 Apr 2024 21:50:37 +0200 Subject: [PATCH 01/55] folders done --- backend/config/db.js | 17 +++++ backend/controllers/userController.js | 97 ++++++++++++++++++++++++++ backend/middleware/authenticateUser.js | 16 +++++ backend/models/userModel.js | 0 backend/routes/userRoutes.js | 0 5 files changed, 130 insertions(+) create mode 100644 backend/config/db.js create mode 100644 backend/controllers/userController.js create mode 100644 backend/middleware/authenticateUser.js create mode 100644 backend/models/userModel.js create mode 100644 backend/routes/userRoutes.js diff --git a/backend/config/db.js b/backend/config/db.js new file mode 100644 index 000000000..3cbc49324 --- /dev/null +++ b/backend/config/db.js @@ -0,0 +1,17 @@ +import mongoose from "mongoose"; + +import dotenv from "dotenv"; + +dotenv.config(); + +export const connectDB = async () => { + try { + const conn = await mongoose.connect(process.env.MONGO_URI); + + console.log(`Mongo DB Connected: ${conn.connection.host}`); + } catch (error) { + console.log(error); + + process.exit(1); + } +}; diff --git a/backend/controllers/userController.js b/backend/controllers/userController.js new file mode 100644 index 000000000..ab6b9f48c --- /dev/null +++ b/backend/controllers/userController.js @@ -0,0 +1,97 @@ +import { UserModel } from "../models/userModel"; + +import asyncHandler from "express-async-handler"; + +import bcrypt from "bcrypt"; + +import jwt from "jsonwebtoken"; + +// @desc Register new user +// @route POST api/register +// @access Public + +export const registerUserController = asyncHandler(async (req, res) => { + const { username, password, email } = req.body; + + try { + if (!username || !email || !password) { + res.status(400); + + throw new Error("Please add all fields"); + } + + const existingUser = await UserModel.findOne({ + $or: [{ username }, { email }], + }); + if (existingUser) { + res.status(400); + throw new Error( + `User with ${ + existingUser.username === username ? "username" : "email" + } already exists` + ); + } + + const salt = bcrypt.genSaltSync(10); + + const hashedPassword = bcrypt.hashSync(password, salt); + + const newUser = new UserModel({ + username, + email, + password: hashedPassword, + }); + + await newUser.save(); + + res.status(201).json({ + success: true, + response: { + username: newUser.username, + email: newUser.email, + id: newUser._id, + accessToken: newUser.accessToken, + }, + }); + } catch (e) { + res.status(500).json({ success: false, response: e.message }); + } +}); + +// @desc Login Existing User +// @route POST api/login +// @access Public + +export const loginUserController = asyncHandler(async (req, res) => { + const { username, password } = req.body; + + try { + console.log("Username:", username); + console.log("Password:", password); + + const user = await UserModel.findOne({ username }); + if (!user) { + return res + .status(401) + .json({ success: false, response: "User not found" }); + } + + const isMatch = await bcrypt.compare(password, user.password); + if (!isMatch) { + return res + .status(401) + .json({ success: false, response: "Incorrect password" }); + } + + res.status(200).json({ + success: true, + response: { + username: user.username, + id: user._id, + accessToken: user.accessToken, + }, + }); + } catch (e) { + res.status(500).json({ success: false, response: e.message }); + } +}); diff --git a/backend/middleware/authenticateUser.js b/backend/middleware/authenticateUser.js new file mode 100644 index 000000000..f8ec3db20 --- /dev/null +++ b/backend/middleware/authenticateUser.js @@ -0,0 +1,16 @@ +import { UserModel } from "../models/userModel"; + +export const authenticateUser = async (req, res, next) => { + const accessToken = req.header("Authorization"); + try { + const user = await UserModel.findOne({ accessToken: accessToken }); + if (user) { + req.user = user; + next(); + } else { + res.status(401).json({ success: false, response: "Please log in" }); + } + } catch (e) { + res.status(500).json({ success: false, response: e.message }); + } +}; diff --git a/backend/models/userModel.js b/backend/models/userModel.js new file mode 100644 index 000000000..e69de29bb diff --git a/backend/routes/userRoutes.js b/backend/routes/userRoutes.js new file mode 100644 index 000000000..e69de29bb From ffcaee07072152c89614dc987c65f4eac4b450df Mon Sep 17 00:00:00 2001 From: hamdiolad Date: Sun, 21 Apr 2024 22:56:18 +0200 Subject: [PATCH 02/55] backend --- backend/.gitignore | 3 ++- backend/config/db.js | 2 +- backend/controllers/userController.js | 14 ++--------- backend/models/userModel.js | 36 +++++++++++++++++++++++++++ backend/package.json | 1 + backend/routes/userRoutes.js | 11 ++++++++ backend/server.js | 34 ++++++++++++++++++------- netlify.toml | 9 +++++++ package.json | 15 +++++++++++ 9 files changed, 102 insertions(+), 23 deletions(-) diff --git a/backend/.gitignore b/backend/.gitignore index 25c8fdbab..8f5e467c8 100644 --- a/backend/.gitignore +++ b/backend/.gitignore @@ -1,2 +1,3 @@ node_modules -package-lock.json \ No newline at end of file +package-lock.json +.env \ No newline at end of file diff --git a/backend/config/db.js b/backend/config/db.js index 3cbc49324..8f7273c4d 100644 --- a/backend/config/db.js +++ b/backend/config/db.js @@ -6,7 +6,7 @@ dotenv.config(); export const connectDB = async () => { try { - const conn = await mongoose.connect(process.env.MONGO_URI); + const conn = await mongoose.connect(process.env.MONGO_URL); console.log(`Mongo DB Connected: ${conn.connection.host}`); } catch (error) { diff --git a/backend/controllers/userController.js b/backend/controllers/userController.js index ab6b9f48c..15425482d 100644 --- a/backend/controllers/userController.js +++ b/backend/controllers/userController.js @@ -1,14 +1,8 @@ import { UserModel } from "../models/userModel"; - import asyncHandler from "express-async-handler"; - import bcrypt from "bcrypt"; - -import jwt from "jsonwebtoken"; - -// @desc Register new user -// @route POST api/register -// @access Public +const jwt = require("jsonwebtoken"); +//import jwt from "jsonwebtoken"; export const registerUserController = asyncHandler(async (req, res) => { const { username, password, email } = req.body; @@ -58,10 +52,6 @@ export const registerUserController = asyncHandler(async (req, res) => { } }); -// @desc Login Existing User -// @route POST api/login -// @access Public - export const loginUserController = asyncHandler(async (req, res) => { const { username, password } = req.body; diff --git a/backend/models/userModel.js b/backend/models/userModel.js index e69de29bb..18bca5c3d 100644 --- a/backend/models/userModel.js +++ b/backend/models/userModel.js @@ -0,0 +1,36 @@ +import mongoose from "mongoose"; +import crypto from "crypto"; + +const { Schema } = mongoose; + +const userSchema = new Schema( + { + username: { + type: String, + required: true, + unique: true, + minlength: 2, + }, + + password: { + type: String, + required: true, + minlength: 6, + }, + email: { + type: String, + required: true, + unique: true, + }, + + accessToken: { + type: String, + default: () => crypto.randomBytes(128).toString("hex"), + }, + }, + { + timestamps: true, + } +); + +export const UserModel = mongoose.model("User", userSchema); diff --git a/backend/package.json b/backend/package.json index 8de5c4ce0..fd2f0f6a7 100644 --- a/backend/package.json +++ b/backend/package.json @@ -8,6 +8,7 @@ }, "author": "", "license": "ISC", + "type": "module", "dependencies": { "@babel/core": "^7.17.9", "@babel/node": "^7.16.8", diff --git a/backend/routes/userRoutes.js b/backend/routes/userRoutes.js index e69de29bb..c7b6060b4 100644 --- a/backend/routes/userRoutes.js +++ b/backend/routes/userRoutes.js @@ -0,0 +1,11 @@ +import express from "express"; +import { + registerUserController, + loginUserController, +} from "../controllers/userController"; + +const router = express.Router(); + +router.post("/register", registerUserController); +router.post("/login", loginUserController); +export default router; diff --git a/backend/server.js b/backend/server.js index 2d7ae8aa1..a6332943a 100644 --- a/backend/server.js +++ b/backend/server.js @@ -1,24 +1,40 @@ +import mongoose from "mongoose"; import express from "express"; import cors from "cors"; -import mongoose from "mongoose"; +import dotenv from "dotenv"; +import expressListEndpoints from "express-list-endpoints"; +import userRoutes from "./routes/userRoutes"; +import { connectDB } from "./config/db"; + +dotenv.config(); -const mongoUrl = process.env.MONGO_URL || "mongodb://localhost/project-mongo"; +const mongoUrl = process.env.MONGO_URL || "mongodb://localhost/project-auth"; mongoose.connect(mongoUrl, { useNewUrlParser: true, useUnifiedTopology: true }); mongoose.Promise = Promise; -// Defines the port the app will run on. Defaults to 8080, but can be overridden -// when starting the server. Example command to overwrite PORT env variable value: -// PORT=9000 npm start -const port = process.env.PORT || 8080; +const port = process.env.PORT || 6060; const app = express(); -// Add middlewares to enable cors and json body parsing app.use(cors()); app.use(express.json()); +app.use(express.urlencoded({ extended: false })); +app.use(userRoutes); + +connectDB(); // Moved the connectDB function call here + +app.use((err, req, res, next) => { + const statusCode = err.statusCode || 500; + res.status(statusCode).json({ + message: err.message, + stack: process.env.NODE_ENV === "production" ? "🥞" : err.stack, + }); +}); -// Start defining your routes here app.get("/", (req, res) => { - res.send("Hello Technigo!"); + const endpoints = expressListEndpoints(app); + res.json(endpoints); + console.log("List of Endpoints:"); + console.log(endpoints); }); // Start the server diff --git a/netlify.toml b/netlify.toml index 95443a1f3..7f606a4ef 100644 --- a/netlify.toml +++ b/netlify.toml @@ -4,3 +4,12 @@ base = "frontend/" publish = "build/" command = "npm run build" + +base = "frontend" +publish = "dist" +command = "npm run build" + +[[redirects]] +from = "/*" +to = "/index.html" +status = 200 \ No newline at end of file diff --git a/package.json b/package.json index d774b8cc3..5c49ba69a 100644 --- a/package.json +++ b/package.json @@ -3,5 +3,20 @@ "version": "1.0.0", "scripts": { "postinstall": "npm install --prefix backend" + }, + "dependencies": { + "@babel/core": "^7.24.4", + "@babel/node": "^7.23.9", + "@babel/preset-env": "^7.24.4", + "bcrypt": "^5.1.1", + "cors": "^2.8.5", + "crypto": "^1.0.1", + "dotenv": "^16.4.5", + "express": "^4.19.2", + "express-async-handler": "^1.2.0", + "express-list-endpoints": "^6.0.0", + "jsonwebtoken": "^9.0.2", + "mongoose": "^8.3.2", + "nodemon": "^3.1.0" } } From 8017a70c1d371e5f32eec0a7355f86ad9129d541 Mon Sep 17 00:00:00 2001 From: hamdiolad Date: Mon, 22 Apr 2024 10:30:34 +0200 Subject: [PATCH 03/55] changed some codes --- backend/authenticateUser.js | 21 +++++ backend/config/db.js | 17 ---- backend/controllers/userController.js | 87 ------------------- backend/middleware/authenticateUser.js | 16 ---- backend/models/userModel.js | 7 +- backend/routes/userRoutes.js | 113 +++++++++++++++++++++++-- backend/server.js | 29 ++----- 7 files changed, 136 insertions(+), 154 deletions(-) create mode 100644 backend/authenticateUser.js delete mode 100644 backend/config/db.js delete mode 100644 backend/controllers/userController.js delete mode 100644 backend/middleware/authenticateUser.js diff --git a/backend/authenticateUser.js b/backend/authenticateUser.js new file mode 100644 index 000000000..cb95008a0 --- /dev/null +++ b/backend/authenticateUser.js @@ -0,0 +1,21 @@ +import { UserModel } from "../models/UserModel"; + +export const authenticateUser = async (req, res, next) => { + const accessToken = req.header("Authorization"); + + if ( + req.headers.authorization && + req.headers.authorization.startsWith("Bearer") + ) + try { + const user = await UserModel.findOne({ accessToken: accessToken }); + if (user) { + req.user = user; + next(); + } else { + res.status(401).json({ success: false, response: "please log in" }); + } + } catch (e) { + res.status(500).json({ success: false, response: e.message }); + } +}; diff --git a/backend/config/db.js b/backend/config/db.js deleted file mode 100644 index 8f7273c4d..000000000 --- a/backend/config/db.js +++ /dev/null @@ -1,17 +0,0 @@ -import mongoose from "mongoose"; - -import dotenv from "dotenv"; - -dotenv.config(); - -export const connectDB = async () => { - try { - const conn = await mongoose.connect(process.env.MONGO_URL); - - console.log(`Mongo DB Connected: ${conn.connection.host}`); - } catch (error) { - console.log(error); - - process.exit(1); - } -}; diff --git a/backend/controllers/userController.js b/backend/controllers/userController.js deleted file mode 100644 index 15425482d..000000000 --- a/backend/controllers/userController.js +++ /dev/null @@ -1,87 +0,0 @@ -import { UserModel } from "../models/userModel"; -import asyncHandler from "express-async-handler"; -import bcrypt from "bcrypt"; -const jwt = require("jsonwebtoken"); -//import jwt from "jsonwebtoken"; - -export const registerUserController = asyncHandler(async (req, res) => { - const { username, password, email } = req.body; - - try { - if (!username || !email || !password) { - res.status(400); - - throw new Error("Please add all fields"); - } - - const existingUser = await UserModel.findOne({ - $or: [{ username }, { email }], - }); - if (existingUser) { - res.status(400); - throw new Error( - `User with ${ - existingUser.username === username ? "username" : "email" - } already exists` - ); - } - - const salt = bcrypt.genSaltSync(10); - - const hashedPassword = bcrypt.hashSync(password, salt); - - const newUser = new UserModel({ - username, - email, - password: hashedPassword, - }); - - await newUser.save(); - - res.status(201).json({ - success: true, - response: { - username: newUser.username, - email: newUser.email, - id: newUser._id, - accessToken: newUser.accessToken, - }, - }); - } catch (e) { - res.status(500).json({ success: false, response: e.message }); - } -}); - -export const loginUserController = asyncHandler(async (req, res) => { - const { username, password } = req.body; - - try { - console.log("Username:", username); - console.log("Password:", password); - - const user = await UserModel.findOne({ username }); - if (!user) { - return res - .status(401) - .json({ success: false, response: "User not found" }); - } - - const isMatch = await bcrypt.compare(password, user.password); - if (!isMatch) { - return res - .status(401) - .json({ success: false, response: "Incorrect password" }); - } - - res.status(200).json({ - success: true, - response: { - username: user.username, - id: user._id, - accessToken: user.accessToken, - }, - }); - } catch (e) { - res.status(500).json({ success: false, response: e.message }); - } -}); diff --git a/backend/middleware/authenticateUser.js b/backend/middleware/authenticateUser.js deleted file mode 100644 index f8ec3db20..000000000 --- a/backend/middleware/authenticateUser.js +++ /dev/null @@ -1,16 +0,0 @@ -import { UserModel } from "../models/userModel"; - -export const authenticateUser = async (req, res, next) => { - const accessToken = req.header("Authorization"); - try { - const user = await UserModel.findOne({ accessToken: accessToken }); - if (user) { - req.user = user; - next(); - } else { - res.status(401).json({ success: false, response: "Please log in" }); - } - } catch (e) { - res.status(500).json({ success: false, response: e.message }); - } -}; diff --git a/backend/models/userModel.js b/backend/models/userModel.js index 18bca5c3d..f9f67ee3f 100644 --- a/backend/models/userModel.js +++ b/backend/models/userModel.js @@ -9,23 +9,22 @@ const userSchema = new Schema( type: String, required: true, unique: true, - minlength: 2, + minlenght: 2, }, - password: { type: String, required: true, - minlength: 6, + minlenght: 6, }, email: { type: String, required: true, unique: true, }, - accessToken: { type: String, default: () => crypto.randomBytes(128).toString("hex"), + required: false, }, }, { diff --git a/backend/routes/userRoutes.js b/backend/routes/userRoutes.js index c7b6060b4..2a2c55c53 100644 --- a/backend/routes/userRoutes.js +++ b/backend/routes/userRoutes.js @@ -1,11 +1,112 @@ import express from "express"; -import { - registerUserController, - loginUserController, -} from "../controllers/userController"; +import bcrypt from "bcrypt"; +import jwt from "jsonwebtoken"; + +import { UserModel } from "./models/UserModel"; +import asyncHandler from "express-async-handler"; +import dotenv from "dotenv"; +import { authenticateUser } from "../authenticateUser"; +dotenv.config(); const router = express.Router(); -router.post("/register", registerUserController); -router.post("/login", loginUserController); +const geneerateToken = (user) => { + return jwt.sign({ id: user._id }, process.env.JWT_SECRET, { + expiresIn: "24h", + }); +}; + +router.post( + "/register", + asyncHandler(async (req, res) => { + const { username, password, email } = req.body; + try { + if (!username || !password || !email) { + res.status(400); + throw new Error("please add all fields"); + } + const existingUser = await UserModel.findOne({ + $or: [{ username }, { email }], + }); + if (existingUser) { + res.status(400); + throw new Error( + `user with ${ + existingUser.username === username ? "username" : "email" + } already exists` + ); + } + const salt = bcrypt.genSaltSync(10); + const hashedPassword = bcrypt.hashSync(password, salt); + const newUser = new UserModel({ + username, + email, + password: hashedPassword, + }); + await newUser.save(); + res.status(201).json({ + success: true, + response: { + username: newUser.username, + email: newUser.email, + id: newUser._id, + accessToken: geneerateToken(newUser), + }, + }); + } catch (e) { + res.status(500).json({ success: false, response: e.message }); + } + }) +); + +router.post( + "/login", + asyncHandler(async (req, res) => { + const { username, password } = req.body; + try { + const user = await UserModel.findOne({ username }); + if (!user) { + return res + .status(401) + .json({ success: false, response: "user not found" }); + } + const isMatch = await bcrypt.compare(password, user.password); + if (!isMatch) { + return res + .status(401) + .json({ success: false, response: "incorrect password" }); + } + res.status(200).json({ + success: true, + response: { + username: user.username, + email: user.email, + id: user._id, + accessToken: geneerateToken(user), + }, + }); + } catch (error) { + res.status(500).json({ + success: false, + response: { + message: error.message, + }, + }); + } + }) +); + +router.get( + "/logged-in", + authenticateUser, + asyncHandler(async (req, res) => { + res.status(200).json({ + success: true, + response: { + message: "user is logged in", + }, + }); + }) +); + export default router; diff --git a/backend/server.js b/backend/server.js index a6332943a..472a32a5f 100644 --- a/backend/server.js +++ b/backend/server.js @@ -1,18 +1,12 @@ -import mongoose from "mongoose"; -import express from "express"; +import express, { urlencoded } from "express"; import cors from "cors"; +import mongoose from "mongoose"; import dotenv from "dotenv"; -import expressListEndpoints from "express-list-endpoints"; -import userRoutes from "./routes/userRoutes"; -import { connectDB } from "./config/db"; - dotenv.config(); +import userRoutes from "./routes/userRoutes"; const mongoUrl = process.env.MONGO_URL || "mongodb://localhost/project-auth"; mongoose.connect(mongoUrl, { useNewUrlParser: true, useUnifiedTopology: true }); -mongoose.Promise = Promise; - -const port = process.env.PORT || 6060; const app = express(); app.use(cors()); @@ -20,23 +14,10 @@ app.use(express.json()); app.use(express.urlencoded({ extended: false })); app.use(userRoutes); -connectDB(); // Moved the connectDB function call here - -app.use((err, req, res, next) => { - const statusCode = err.statusCode || 500; - res.status(statusCode).json({ - message: err.message, - stack: process.env.NODE_ENV === "production" ? "🥞" : err.stack, - }); -}); - +// Start defining your routes here app.get("/", (req, res) => { - const endpoints = expressListEndpoints(app); - res.json(endpoints); - console.log("List of Endpoints:"); - console.log(endpoints); + res.send("Hello Technigo!"); }); - // Start the server app.listen(port, () => { console.log(`Server running on http://localhost:${port}`); From ba44833b3aa9409a907d369b71934413f855bcd2 Mon Sep 17 00:00:00 2001 From: hamdiolad Date: Mon, 22 Apr 2024 11:35:02 +0200 Subject: [PATCH 04/55] backend code added --- backend/routes/userRoutes.js | 3 ++- backend/server.js | 4 +++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/backend/routes/userRoutes.js b/backend/routes/userRoutes.js index 2a2c55c53..c380d1ce9 100644 --- a/backend/routes/userRoutes.js +++ b/backend/routes/userRoutes.js @@ -2,7 +2,8 @@ import express from "express"; import bcrypt from "bcrypt"; import jwt from "jsonwebtoken"; -import { UserModel } from "./models/UserModel"; +import { UserModel } from "../../models/UserModel.js"; + import asyncHandler from "express-async-handler"; import dotenv from "dotenv"; import { authenticateUser } from "../authenticateUser"; diff --git a/backend/server.js b/backend/server.js index 472a32a5f..0c66fc90d 100644 --- a/backend/server.js +++ b/backend/server.js @@ -3,11 +3,13 @@ import cors from "cors"; import mongoose from "mongoose"; import dotenv from "dotenv"; dotenv.config(); -import userRoutes from "./routes/userRoutes"; +import userRoutes from "./routes/userRoutes.js"; const mongoUrl = process.env.MONGO_URL || "mongodb://localhost/project-auth"; mongoose.connect(mongoUrl, { useNewUrlParser: true, useUnifiedTopology: true }); + const app = express(); +const port = process.env.PORT || 9090; // Define the port app.use(cors()); app.use(express.json()); From 9aa44822edffae8f529e2a1de9612acdeef62034 Mon Sep 17 00:00:00 2001 From: hamdiolad Date: Mon, 22 Apr 2024 12:59:40 +0200 Subject: [PATCH 05/55] frontend folder created --- backend/authenticateUser.js | 2 +- backend/models/userModel.js | 8 +++++--- backend/routes/userRoutes.js | 5 +++-- frontend/src/components/LogIn.jsx | 0 frontend/src/components/LogOut.jsx | 0 frontend/src/components/LogedInComponet.jsx | 0 frontend/src/components/SignUp.jsx | 0 frontend/src/components/UserStore.jsx | 0 frontend/src/pages/LandingPage.jsx | 0 frontend/src/pages/LogedInPage.jsx | 0 frontend/src/routes/RoutesComp.jsx | 0 11 files changed, 9 insertions(+), 6 deletions(-) create mode 100644 frontend/src/components/LogIn.jsx create mode 100644 frontend/src/components/LogOut.jsx create mode 100644 frontend/src/components/LogedInComponet.jsx create mode 100644 frontend/src/components/SignUp.jsx create mode 100644 frontend/src/components/UserStore.jsx create mode 100644 frontend/src/pages/LandingPage.jsx create mode 100644 frontend/src/pages/LogedInPage.jsx create mode 100644 frontend/src/routes/RoutesComp.jsx diff --git a/backend/authenticateUser.js b/backend/authenticateUser.js index cb95008a0..753250ea4 100644 --- a/backend/authenticateUser.js +++ b/backend/authenticateUser.js @@ -1,4 +1,4 @@ -import { UserModel } from "../models/UserModel"; +import UserModel from "./models/userModel.js"; export const authenticateUser = async (req, res, next) => { const accessToken = req.header("Authorization"); diff --git a/backend/models/userModel.js b/backend/models/userModel.js index f9f67ee3f..02b66ea09 100644 --- a/backend/models/userModel.js +++ b/backend/models/userModel.js @@ -9,12 +9,12 @@ const userSchema = new Schema( type: String, required: true, unique: true, - minlenght: 2, + minlength: 2, // corrected typo: minlenght -> minlength }, password: { type: String, required: true, - minlenght: 6, + minlength: 6, }, email: { type: String, @@ -32,4 +32,6 @@ const userSchema = new Schema( } ); -export const UserModel = mongoose.model("User", userSchema); +const UserModel = mongoose.model("User", userSchema); + +export default UserModel; diff --git a/backend/routes/userRoutes.js b/backend/routes/userRoutes.js index c380d1ce9..5d024062f 100644 --- a/backend/routes/userRoutes.js +++ b/backend/routes/userRoutes.js @@ -2,11 +2,12 @@ import express from "express"; import bcrypt from "bcrypt"; import jwt from "jsonwebtoken"; -import { UserModel } from "../../models/UserModel.js"; +import UserModel from "../models/userModel.js"; import asyncHandler from "express-async-handler"; import dotenv from "dotenv"; -import { authenticateUser } from "../authenticateUser"; +import { authenticateUser } from "../authenticateUser.js"; + dotenv.config(); const router = express.Router(); diff --git a/frontend/src/components/LogIn.jsx b/frontend/src/components/LogIn.jsx new file mode 100644 index 000000000..e69de29bb diff --git a/frontend/src/components/LogOut.jsx b/frontend/src/components/LogOut.jsx new file mode 100644 index 000000000..e69de29bb diff --git a/frontend/src/components/LogedInComponet.jsx b/frontend/src/components/LogedInComponet.jsx new file mode 100644 index 000000000..e69de29bb diff --git a/frontend/src/components/SignUp.jsx b/frontend/src/components/SignUp.jsx new file mode 100644 index 000000000..e69de29bb diff --git a/frontend/src/components/UserStore.jsx b/frontend/src/components/UserStore.jsx new file mode 100644 index 000000000..e69de29bb diff --git a/frontend/src/pages/LandingPage.jsx b/frontend/src/pages/LandingPage.jsx new file mode 100644 index 000000000..e69de29bb diff --git a/frontend/src/pages/LogedInPage.jsx b/frontend/src/pages/LogedInPage.jsx new file mode 100644 index 000000000..e69de29bb diff --git a/frontend/src/routes/RoutesComp.jsx b/frontend/src/routes/RoutesComp.jsx new file mode 100644 index 000000000..e69de29bb From 9863e67e2018a51a947340ae249458cb09c0e686 Mon Sep 17 00:00:00 2001 From: hamdiolad Date: Mon, 22 Apr 2024 17:40:11 +0200 Subject: [PATCH 06/55] more code added --- frontend/index.html | 2 +- frontend/package.json | 9 +- frontend/src/App.jsx | 13 ++- frontend/src/components/LogIn.jsx | 78 +++++++++++++++++ frontend/src/components/LogOut.jsx | 24 +++++ frontend/src/components/LogedInComponet.jsx | 50 +++++++++++ frontend/src/components/SignUp.jsx | 64 ++++++++++++++ frontend/src/components/UserStore.jsx | 15 ++++ frontend/src/index.css | 97 ++++++++++++++++++++- frontend/src/main.jsx | 18 ++-- frontend/src/pages/LandingPage.jsx | 19 ++++ frontend/src/pages/LogedInPage.jsx | 11 +++ frontend/src/routes/RoutesComp.jsx | 10 +++ frontend/vite.config.js | 16 +++- package.json | 3 +- 15 files changed, 410 insertions(+), 19 deletions(-) diff --git a/frontend/index.html b/frontend/index.html index 0c589eccd..79c470191 100644 --- a/frontend/index.html +++ b/frontend/index.html @@ -1,4 +1,4 @@ - + diff --git a/frontend/package.json b/frontend/package.json index e9c95b79f..0a79d9855 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -10,13 +10,18 @@ "preview": "vite preview" }, "dependencies": { + "lottie-react": "^2.4.0", "react": "^18.2.0", - "react-dom": "^18.2.0" + "react-dom": "^18.2.0", + "react-router-dom": "^6.22.3", + "styled-components": "^6.1.8", + "zustand": "^4.5.2" }, "devDependencies": { - "@types/react": "^18.2.15", + "@types/react": "^18.2.79", "@types/react-dom": "^18.2.7", "@vitejs/plugin-react": "^4.0.3", + "@vitejs/plugin-react-refresh": "^1.3.6", "eslint": "^8.45.0", "eslint-plugin-react": "^7.32.2", "eslint-plugin-react-hooks": "^4.6.0", diff --git a/frontend/src/App.jsx b/frontend/src/App.jsx index 1091d4310..1a764d61a 100644 --- a/frontend/src/App.jsx +++ b/frontend/src/App.jsx @@ -1,3 +1,14 @@ +import { BrowserRouter, Routes } from "react-router-dom"; +import { routes } from "./routes/RoutesComp"; + export const App = () => { - return
Find me in src/app.jsx!
; + return ( +
+ +
+ {routes} +
+
+
+ ); }; diff --git a/frontend/src/components/LogIn.jsx b/frontend/src/components/LogIn.jsx index e69de29bb..8e2b9dbfe 100644 --- a/frontend/src/components/LogIn.jsx +++ b/frontend/src/components/LogIn.jsx @@ -0,0 +1,78 @@ +import { useEffect } from "react"; +import { useNavigate } from "react-router-dom"; +import { userStore } from "./UserStore"; + +const apiEnv = import.meta.env.VITE_BACKEND_API; + +export const Login = () => { + const { + username, + setUsername, + password, + setPassword, + user, + setUser, + setAccessToken, + } = userStore(); + const navigate = useNavigate(); + + const handleLogin = async () => { + if (!username || !password) { + alert("Please enter both username and password"); + return; + } + + try { + const response = await fetch(`${apiEnv}/login`, { + method: "POST", + headers: { + "Content-Type": "application/json", + }, + body: JSON.stringify({ username, password }), + }); + console.log(response); + + if (response.ok) { + const data = await response.json(); + + setAccessToken(data.accessToken); + + setUser(data); + + localStorage.setItem("accessToken", data.accessToken); + setUsername(""); + setPassword(""); + + alert("Login successful!"); + navigate("/logged-in"); + } else { + const errorData = await response.json(); + alert(`Login failed: ${errorData.error}`); + } + } catch (error) { + alert("Error during login:", error.message); + } + }; + + useEffect(() => { + console.log("User:", user); + }, [user]); + + return ( +
+ setUsername(e.target.value)} + /> + setPassword(e.target.value)} + /> + +
+ ); +}; diff --git a/frontend/src/components/LogOut.jsx b/frontend/src/components/LogOut.jsx index e69de29bb..958a2f57b 100644 --- a/frontend/src/components/LogOut.jsx +++ b/frontend/src/components/LogOut.jsx @@ -0,0 +1,24 @@ +import { useNavigate } from "react-router-dom"; +import { userStore } from "./UserStore"; + +export const Logout = () => { + const navigate = useNavigate(); + + const { setAccessToken, setIsLoggedIn, setUser } = userStore(); + + const handleLogOut = () => { + setUser(null); + setAccessToken(null); + setIsLoggedIn(false); + localStorage.removeItem("accessToken"); + + alert("Log out successful!"); + navigate("/"); + }; + + return ( + <> + + + ); +}; diff --git a/frontend/src/components/LogedInComponet.jsx b/frontend/src/components/LogedInComponet.jsx index e69de29bb..ef50034ab 100644 --- a/frontend/src/components/LogedInComponet.jsx +++ b/frontend/src/components/LogedInComponet.jsx @@ -0,0 +1,50 @@ +import { useNavigate } from "react-router-dom"; +import { useEffect } from "react"; +import { userStore } from "./UserStore"; + +const apiEnv = import.meta.env.VITE_BACKEND_API; + +export const LogedInComp = () => { + const { accessToken, isLoggedIn, setIsLoggedIn } = userStore(); + + const navigate = useNavigate(); + + useEffect(() => { + const fetchLoggedInData = async () => { + try { + const response = await fetch(`${apiEnv}/logged-in`, { + headers: { + "Content-Type": "application/json", + Authorization: `${accessToken}`, + }, + }); + + if (response.ok) { + const data = await response.json(); + console.log(data); + + setIsLoggedIn(true); + } else { + console.error("Failed to fetch authenticated content"); + navigate("/"); + } + } catch (error) { + console.error("Error fetching authenticated content:", error); + } + }; + + fetchLoggedInData(); + }); + + return ( + isLoggedIn && ( +
+ AI Generated Image +

Congratulations! You are logged in. Here is a cute puppy for you!

+
+ ) + ); +}; diff --git a/frontend/src/components/SignUp.jsx b/frontend/src/components/SignUp.jsx index e69de29bb..08501e884 100644 --- a/frontend/src/components/SignUp.jsx +++ b/frontend/src/components/SignUp.jsx @@ -0,0 +1,64 @@ +import { useState } from "react"; + +const apiEnv = import.meta.env.VITE_BACKEND_API; + +export const SignUp = () => { + const [email, setEmail] = useState(""); + const [username, setUsername] = useState(""); + const [password, setPassword] = useState(""); + + const handleSignup = async () => { + try { + console.log("URL:", `${apiEnv}/register`); + console.log("Request Body:", { email, username, password }); + + const response = await fetch(`${apiEnv}/register`, { + method: "POST", + headers: { + "Content-Type": "application/json", + }, + + body: JSON.stringify({ email, username, password }), + }); + + if (response.ok) { + alert("Signup was successful, please log in!"); + setEmail(""); + setUsername(""); + setPassword(""); + } else { + const data = await response.json(); + console.log(data); + alert("Signup failed:" + data.message); + } + } catch (error) { + alert("Error during registration:", error); + } + }; + + return ( + <> +
+ setEmail(e.target.value)} + /> + setUsername(e.target.value)} + /> + setPassword(e.target.value)} + /> + +
+ + ); +}; diff --git a/frontend/src/components/UserStore.jsx b/frontend/src/components/UserStore.jsx index e69de29bb..d8f3c20f6 100644 --- a/frontend/src/components/UserStore.jsx +++ b/frontend/src/components/UserStore.jsx @@ -0,0 +1,15 @@ +import { create } from "zustand"; + +export const userStore = create((set) => ({ + username: "", + password: "", + accessToken: null, + user: null, + isLoggedIn: false, + + setUsername: (username) => set({ username }), + setPassword: (password) => set({ password }), + setAccessToken: (accessToken) => set({ accessToken }), + setUser: (user) => set({ user }), + setIsLoggedIn: (isLoggedIn) => set({ isLoggedIn }), +})); diff --git a/frontend/src/index.css b/frontend/src/index.css index 3e560a674..ebc53cae4 100644 --- a/frontend/src/index.css +++ b/frontend/src/index.css @@ -10,4 +10,99 @@ code { font-family: source-code-pro, Menlo, Monaco, Consolas, "Courier New", monospace; -} \ No newline at end of file +} + +body { + display: flex; + justify-content: center; + place-items: center; + min-width: 320px; + min-height: 100vh; + background-color: #a9ddc1; +} + +p { + margin: 5px; +} + +.wrapper { + display: flex; + flex-direction: column; + gap: 3rem; + padding: 2rem; +} + +.logged-in-content img { + max-width: 100%; +} + +.logged-in-wrapper { + display: flex; + flex-direction: column; + align-items: center; + gap: 1rem; + max-width: 250px; + background-color: #d4aeb1; + border-radius: 5px; + padding: 1rem; + text-align: center; +} + +.login-container { + display: flex; + flex-direction: column; + align-items: center; + padding: 1rem; + background-color: #e4c1c3; + border-radius: 5px; +} + +.login-form { + display: flex; + flex-direction: column; + align-items: center; +} + +.signup-container { + display: flex; + flex-direction: column; + align-items: center; + padding: 1rem; + background-color: #e5c1c4; + border-radius: 5px; +} + +.signup-form { + display: flex; + flex-direction: column; + align-items: center; +} + +input { + padding: 10px; + margin-bottom: 10px; + border-radius: 5px; + border: none; + width: 70%; +} + +button { + padding: 10px; + margin-bottom: 10px; + border-radius: 20px; + border: none; + width: 70%; + background-color: rgb(64, 0, 255); + color: white; + font-weight: 700; +} + +button:hover { + background-color: #3a5640; + cursor: pointer; +} + +p { + font-weight: 700; + color: white; +} diff --git a/frontend/src/main.jsx b/frontend/src/main.jsx index 51294f399..d52240c56 100644 --- a/frontend/src/main.jsx +++ b/frontend/src/main.jsx @@ -1,10 +1,10 @@ -import React from "react"; -import ReactDOM from "react-dom/client"; -import { App } from "./App.jsx"; -import "./index.css"; +//import React from "react"; +//import ReactDOM from "react-dom/client"; +//import { App } from "./App.jsx"; +//import "./index.css"; -ReactDOM.createRoot(document.getElementById("root")).render( - - - -); +//ReactDOM.createRoot(document.getElementById("root")).render( +// +// +// +//); diff --git a/frontend/src/pages/LandingPage.jsx b/frontend/src/pages/LandingPage.jsx index e69de29bb..0f162df41 100644 --- a/frontend/src/pages/LandingPage.jsx +++ b/frontend/src/pages/LandingPage.jsx @@ -0,0 +1,19 @@ +import { Login } from "../components/LogIn"; +import { SignUp } from "../components/SignUp"; + +export const LandingPage = () => { + return ( + <> +
+

Please login:

+ +
+ +
+

No account?

+

Please sign up:

+ +
+ + ); +}; diff --git a/frontend/src/pages/LogedInPage.jsx b/frontend/src/pages/LogedInPage.jsx index e69de29bb..b47d9d046 100644 --- a/frontend/src/pages/LogedInPage.jsx +++ b/frontend/src/pages/LogedInPage.jsx @@ -0,0 +1,11 @@ +import { LogedInComp } from "../components/LogedInComponet"; +import { Logout } from "../components/LogOut"; + +export const LogedInPage = () => { + return ( +
+ + +
+ ); +}; diff --git a/frontend/src/routes/RoutesComp.jsx b/frontend/src/routes/RoutesComp.jsx index e69de29bb..838be0fca 100644 --- a/frontend/src/routes/RoutesComp.jsx +++ b/frontend/src/routes/RoutesComp.jsx @@ -0,0 +1,10 @@ +import { Route } from "react-router-dom"; +import { LandingPage } from "../pages/LandingPage"; +import { LogedInPage } from "../pages/LogedInPage"; + +export const routes = ( + <> + }> + }> + +); diff --git a/frontend/vite.config.js b/frontend/vite.config.js index 5a33944a9..ef5932009 100644 --- a/frontend/vite.config.js +++ b/frontend/vite.config.js @@ -1,7 +1,15 @@ -import { defineConfig } from 'vite' -import react from '@vitejs/plugin-react' +//import { defineConfig } from 'vite' +//import react from '@vitejs/plugin-react' + +// https://vitejs.dev/config/ +//export default defineConfig({ +// plugins: [react()], +//}) + +import { defineConfig } from "vite"; +import reactRefresh from "@vitejs/plugin-react-refresh"; // https://vitejs.dev/config/ export default defineConfig({ - plugins: [react()], -}) + plugins: [reactRefresh()], +}); diff --git a/package.json b/package.json index 5c49ba69a..2b3f3bebb 100644 --- a/package.json +++ b/package.json @@ -17,6 +17,7 @@ "express-list-endpoints": "^6.0.0", "jsonwebtoken": "^9.0.2", "mongoose": "^8.3.2", - "nodemon": "^3.1.0" + "nodemon": "^3.1.0", + "react-router-dom": "^6.22.3" } } From 0de07d29bcf51c4158bf95425d25612fdb2063e6 Mon Sep 17 00:00:00 2001 From: hamdiolad Date: Tue, 23 Apr 2024 19:23:09 +0200 Subject: [PATCH 07/55] frontend done --- frontend/package.json | 1 + frontend/src/components/LogedInComponet.jsx | 53 +++++++++++++++++++++ frontend/src/index.css | 51 +++++++++++++++++++- package.json | 1 + 4 files changed, 105 insertions(+), 1 deletion(-) diff --git a/frontend/package.json b/frontend/package.json index 0a79d9855..5845066d7 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -10,6 +10,7 @@ "preview": "vite preview" }, "dependencies": { + "axios": "^1.6.8", "lottie-react": "^2.4.0", "react": "^18.2.0", "react-dom": "^18.2.0", diff --git a/frontend/src/components/LogedInComponet.jsx b/frontend/src/components/LogedInComponet.jsx index ef50034ab..d10a362ee 100644 --- a/frontend/src/components/LogedInComponet.jsx +++ b/frontend/src/components/LogedInComponet.jsx @@ -1,9 +1,61 @@ +import axios from "axios"; import { useNavigate } from "react-router-dom"; import { useEffect } from "react"; import { userStore } from "./UserStore"; const apiEnv = import.meta.env.VITE_BACKEND_API; +export const LogedInComp = () => { + const { accessToken, isLoggedIn, setIsLoggedIn } = userStore(); + const navigate = useNavigate(); + + useEffect(() => { + const fetchLoggedInData = async () => { + try { + const response = await axios.get(`${apiEnv}/logged-in`, { + headers: { + "Content-Type": "application/json", + Authorization: `${accessToken}`, + }, + }); + + if (response.status === 200) { + const data = response.data; + console.log(data); + setIsLoggedIn(true); + } else { + console.error("Failed to fetch authenticated content"); + navigate("/"); + } + } catch (error) { + console.error("Error fetching authenticated content:", error); + navigate("/"); + } + }; + + fetchLoggedInData(); + }, [accessToken, isLoggedIn, setIsLoggedIn, navigate]); + + return ( + isLoggedIn && ( +
+ AI Generated Image +

Congratulations! You are logged in. Here is a cute puppy for you!

+
+ ) + ); +}; + +/*import { useNavigate } from "react-router-dom"; +import { useEffect } from "react"; +import { userStore } from "./UserStore"; + +const apiEnv = import.meta.env.VITE_BACKEND_API; + export const LogedInComp = () => { const { accessToken, isLoggedIn, setIsLoggedIn } = userStore(); @@ -48,3 +100,4 @@ export const LogedInComp = () => { ) ); }; +*/ diff --git a/frontend/src/index.css b/frontend/src/index.css index ebc53cae4..3c8e8bf7f 100644 --- a/frontend/src/index.css +++ b/frontend/src/index.css @@ -12,7 +12,55 @@ code { monospace; } -body { +/* styles.css */ + +/* Wrapper */ +.wrapper { + display: flex; + justify-content: center; + align-items: center; + height: 100vh; +} + +/* Form Container */ +.form-container { + background-color: #fff; + border-radius: 8px; + box-shadow: 0 0 10px rgba(0, 0, 0, 0.1); + padding: 20px; +} + +/* Form */ +.form { + display: flex; + flex-direction: column; + gap: 10px; +} + +/* Input Fields */ +.form input { + padding: 10px; + border: 1px solid #ccc; + border-radius: 5px; + outline: none; +} + +/* Button */ +.form button { + padding: 10px 20px; + background-color: #007bff; + color: #fff; + border: none; + border-radius: 5px; + cursor: pointer; +} + +/* Button Hover */ +.form button:hover { + background-color: #0056b3; +} + +/*body { display: flex; justify-content: center; place-items: center; @@ -106,3 +154,4 @@ p { font-weight: 700; color: white; } +*/ diff --git a/package.json b/package.json index 2b3f3bebb..0c2a246cd 100644 --- a/package.json +++ b/package.json @@ -2,6 +2,7 @@ "name": "project-auth-parent", "version": "1.0.0", "scripts": { + "dev": "vite", "postinstall": "npm install --prefix backend" }, "dependencies": { From ed61c262f5d1e11961ea153e54fcf1c9b33c51dd Mon Sep 17 00:00:00 2001 From: hamdiolad Date: Tue, 23 Apr 2024 21:55:47 +0200 Subject: [PATCH 08/55] debugging --- frontend/src/axiosConfig.js | 8 +++ frontend/src/components/LogedInComponet.jsx | 58 ++++++++++++++++++++- package.json | 1 + 3 files changed, 65 insertions(+), 2 deletions(-) create mode 100644 frontend/src/axiosConfig.js diff --git a/frontend/src/axiosConfig.js b/frontend/src/axiosConfig.js new file mode 100644 index 000000000..78ad49a12 --- /dev/null +++ b/frontend/src/axiosConfig.js @@ -0,0 +1,8 @@ +// api.js +import axios from "axios"; + +const api = axios.create({ + baseURL: "http://localhost:9090/", // Update with your backend server URL +}); + +export default api; diff --git a/frontend/src/components/LogedInComponet.jsx b/frontend/src/components/LogedInComponet.jsx index d10a362ee..b8aeabec3 100644 --- a/frontend/src/components/LogedInComponet.jsx +++ b/frontend/src/components/LogedInComponet.jsx @@ -1,4 +1,58 @@ -import axios from "axios"; +import axios from "axios"; // Import Axios library +import { useNavigate } from "react-router-dom"; +import { useEffect } from "react"; +import { userStore } from "./UserStore"; + +const apiEnv = import.meta.env.VITE_BACKEND_API; + +export const LogedInComp = () => { + const { accessToken, isLoggedIn, setIsLoggedIn } = userStore(); + const navigate = useNavigate(); + + useEffect(() => { + const fetchLoggedInData = async () => { + try { + // Make a GET request using Axios with the access token in the headers + const response = await axios.get(`${apiEnv}/logged-in`, { + headers: { + "Content-Type": "application/json", + Authorization: `${accessToken}`, + }, + }); + + // Check if the response status is 200 (OK) + if (response.status === 200) { + const data = response.data; // Extract data from the response + console.log(data); // Log the data to the console + setIsLoggedIn(true); // Set isLoggedIn state to true + } else { + console.error("Failed to fetch authenticated content"); + navigate("/"); // Navigate to the home page if fetching fails + } + } catch (error) { + console.error("Error fetching authenticated content:", error); + navigate("/"); // Navigate to the home page in case of an error + } + }; + + fetchLoggedInData(); // Call the fetchLoggedInData function + }, [accessToken, isLoggedIn, setIsLoggedIn, navigate]); // Dependencies for the useEffect hook + + return ( + isLoggedIn && ( // Render content only if the user is logged in +
+ AI Generated Image +

Congratulations! You are logged in. Here is a cute puppy for you!

+
+ ) + ); +}; + +/*import axios from "axios"; import { useNavigate } from "react-router-dom"; import { useEffect } from "react"; import { userStore } from "./UserStore"; @@ -50,7 +104,7 @@ export const LogedInComp = () => { ); }; -/*import { useNavigate } from "react-router-dom"; +import { useNavigate } from "react-router-dom"; import { useEffect } from "react"; import { userStore } from "./UserStore"; diff --git a/package.json b/package.json index 0c2a246cd..2542e7f9b 100644 --- a/package.json +++ b/package.json @@ -9,6 +9,7 @@ "@babel/core": "^7.24.4", "@babel/node": "^7.23.9", "@babel/preset-env": "^7.24.4", + "axios": "^1.6.8", "bcrypt": "^5.1.1", "cors": "^2.8.5", "crypto": "^1.0.1", From 7b37b1cb41a3a3ee8c5931ff4d76eb0690880dd0 Mon Sep 17 00:00:00 2001 From: hamdiolad Date: Tue, 23 Apr 2024 23:02:32 +0200 Subject: [PATCH 09/55] css added --- bash.exe.stackdump | 41 +++++++++++++++++++++ frontend/package.json | 2 +- frontend/src/App.jsx | 3 ++ frontend/src/components/LogIn.jsx | 2 + frontend/src/components/LogOut.jsx | 2 + frontend/src/components/LogedInComponet.jsx | 2 + frontend/src/components/SignUp.jsx | 2 + frontend/src/index.css | 31 +++++++--------- frontend/src/main.jsx | 18 ++++----- frontend/src/pages/LandingPage.jsx | 2 + frontend/src/pages/LogedInPage.jsx | 2 + frontend/src/routes/RoutesComp.jsx | 2 + 12 files changed, 82 insertions(+), 27 deletions(-) create mode 100644 bash.exe.stackdump diff --git a/bash.exe.stackdump b/bash.exe.stackdump new file mode 100644 index 000000000..15faa3ea6 --- /dev/null +++ b/bash.exe.stackdump @@ -0,0 +1,41 @@ +Stack trace: +Frame Function Args +0007FFFFCD30 00021006118E (0002102A6010, 000210272B51, 00000000005C, 0007FFFFB6E0) msys-2.0.dll+0x2118E +0007FFFFCD30 0002100469BA (0007FFFFC790, 000200000000, 000700000000, 000700000001) msys-2.0.dll+0x69BA +0007FFFFCD30 0002100469F2 (000000000000, 000000000000, 00000000005C, 000700000003) msys-2.0.dll+0x69F2 +0007FFFFCD30 000210101C61 (000210177A63, 000800007568, 000000000000, 0002102752E0) msys-2.0.dll+0xC1C61 +0007FFFFCD30 000210101C79 (0002101778B0, 0007FFFFC8F8, 000000000004, 0007FFFFC910) msys-2.0.dll+0xC1C79 +0007FFFFCD30 000210104644 (0007FFFFCD30, 000000000000, 0007FFFFC910, 0002102752E0) msys-2.0.dll+0xC4644 +0007FFFFCD30 000210059095 (000000000004, 000000000004, 0007FFFFCA68, 0000FFFFFFFF) msys-2.0.dll+0x19095 +0007FFFFCD30 000210059865 (000800000000, 000800006F28, 000000000000, 000000030201) msys-2.0.dll+0x19865 +0007FFFFCD30 000210059D77 (00021017DA35, 000000000000, 000000000000, 000000000000) msys-2.0.dll+0x19D77 +0007FFFFCD30 00021005A0B6 (000000000000, 0007FFFFCD30, FFFFFFFFFFFFFFC6, 000700000000) msys-2.0.dll+0x1A0B6 +0007FFFFCD30 000210047151 (000000000000, 000000000000, 000000000000, 000000000000) msys-2.0.dll+0x7151 +0007FFFFFFF0 000210045C86 (000000000000, 000000000000, 000000000000, 000000000000) msys-2.0.dll+0x5C86 +0007FFFFFFF0 000210045D34 (000000000000, 000000000000, 000000000000, 000000000000) msys-2.0.dll+0x5D34 +End of stack trace +Loaded modules: +000100400000 bash.exe +7FF997AF0000 ntdll.dll +7FF9967C0000 KERNEL32.DLL +7FF9950C0000 KERNELBASE.dll +7FF991C30000 apphelp.dll +7FF996B40000 USER32.dll +7FF9954A0000 win32u.dll +7FF995AA0000 GDI32.dll +7FF9956B0000 gdi32full.dll +7FF994EB0000 msvcp_win.dll +7FF995590000 ucrtbase.dll +000210040000 msys-2.0.dll +7FF996890000 advapi32.dll +7FF9959F0000 msvcrt.dll +7FF995940000 sechost.dll +7FF995470000 bcrypt.dll +7FF995E10000 RPCRT4.dll +7FF994560000 CRYPTBASE.DLL +7FF994E30000 bcryptPrimitives.dll +7FF995F30000 IMM32.DLL +7FF980520000 netapi32.dll +7FF980500000 SAMCLI.DLL +7FF9888E0000 SAMLIB.dll +7FF9938E0000 NETUTILS.DLL diff --git a/frontend/package.json b/frontend/package.json index 5845066d7..ea51431de 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -14,7 +14,7 @@ "lottie-react": "^2.4.0", "react": "^18.2.0", "react-dom": "^18.2.0", - "react-router-dom": "^6.22.3", + "react-router-dom": "^6.23.0", "styled-components": "^6.1.8", "zustand": "^4.5.2" }, diff --git a/frontend/src/App.jsx b/frontend/src/App.jsx index 1a764d61a..2cd115875 100644 --- a/frontend/src/App.jsx +++ b/frontend/src/App.jsx @@ -1,5 +1,8 @@ +// eslint-disable-next-line no-unused-vars +import React from "react"; import { BrowserRouter, Routes } from "react-router-dom"; import { routes } from "./routes/RoutesComp"; +import "./index.css"; export const App = () => { return ( diff --git a/frontend/src/components/LogIn.jsx b/frontend/src/components/LogIn.jsx index 8e2b9dbfe..aaae780b3 100644 --- a/frontend/src/components/LogIn.jsx +++ b/frontend/src/components/LogIn.jsx @@ -1,3 +1,5 @@ +// eslint-disable-next-line no-unused-vars +import React from "react"; import { useEffect } from "react"; import { useNavigate } from "react-router-dom"; import { userStore } from "./UserStore"; diff --git a/frontend/src/components/LogOut.jsx b/frontend/src/components/LogOut.jsx index 958a2f57b..d3a8ccf1e 100644 --- a/frontend/src/components/LogOut.jsx +++ b/frontend/src/components/LogOut.jsx @@ -1,3 +1,5 @@ +// eslint-disable-next-line no-unused-vars +import React from "react"; import { useNavigate } from "react-router-dom"; import { userStore } from "./UserStore"; diff --git a/frontend/src/components/LogedInComponet.jsx b/frontend/src/components/LogedInComponet.jsx index b8aeabec3..9af080dd3 100644 --- a/frontend/src/components/LogedInComponet.jsx +++ b/frontend/src/components/LogedInComponet.jsx @@ -1,3 +1,5 @@ +/* eslint-disable no-unused-vars */ +import React from "react"; import axios from "axios"; // Import Axios library import { useNavigate } from "react-router-dom"; import { useEffect } from "react"; diff --git a/frontend/src/components/SignUp.jsx b/frontend/src/components/SignUp.jsx index 08501e884..9bbc76cd5 100644 --- a/frontend/src/components/SignUp.jsx +++ b/frontend/src/components/SignUp.jsx @@ -1,3 +1,5 @@ +// eslint-disable-next-line no-unused-vars +import React from "react"; import { useState } from "react"; const apiEnv = import.meta.env.VITE_BACKEND_API; diff --git a/frontend/src/index.css b/frontend/src/index.css index 3c8e8bf7f..4224c955f 100644 --- a/frontend/src/index.css +++ b/frontend/src/index.css @@ -12,9 +12,9 @@ code { monospace; } -/* styles.css */ +/* styles.css + -/* Wrapper */ .wrapper { display: flex; justify-content: center; @@ -22,7 +22,6 @@ code { height: 100vh; } -/* Form Container */ .form-container { background-color: #fff; border-radius: 8px; @@ -30,14 +29,14 @@ code { padding: 20px; } -/* Form */ + .form { display: flex; flex-direction: column; gap: 10px; } -/* Input Fields */ + .form input { padding: 10px; border: 1px solid #ccc; @@ -45,7 +44,6 @@ code { outline: none; } -/* Button */ .form button { padding: 10px 20px; background-color: #007bff; @@ -55,18 +53,18 @@ code { cursor: pointer; } -/* Button Hover */ + Button Hover .form button:hover { background-color: #0056b3; -} +}*/ -/*body { +body { display: flex; justify-content: center; place-items: center; min-width: 320px; min-height: 100vh; - background-color: #a9ddc1; + background-color: #aaa2a9; } p { @@ -90,7 +88,7 @@ p { align-items: center; gap: 1rem; max-width: 250px; - background-color: #d4aeb1; + background-color: #865959; border-radius: 5px; padding: 1rem; text-align: center; @@ -101,7 +99,7 @@ p { flex-direction: column; align-items: center; padding: 1rem; - background-color: #e4c1c3; + background-color: #f7fffb; border-radius: 5px; } @@ -116,7 +114,7 @@ p { flex-direction: column; align-items: center; padding: 1rem; - background-color: #e5c1c4; + background-color: #f7fffb; border-radius: 5px; } @@ -141,17 +139,16 @@ button { border: none; width: 70%; background-color: rgb(64, 0, 255); - color: white; + color: rgb(255, 255, 255); font-weight: 700; } button:hover { - background-color: #3a5640; + background-color: #c5bce0; cursor: pointer; } p { font-weight: 700; - color: white; + color: rgb(0, 0, 0); } -*/ diff --git a/frontend/src/main.jsx b/frontend/src/main.jsx index d52240c56..51294f399 100644 --- a/frontend/src/main.jsx +++ b/frontend/src/main.jsx @@ -1,10 +1,10 @@ -//import React from "react"; -//import ReactDOM from "react-dom/client"; -//import { App } from "./App.jsx"; -//import "./index.css"; +import React from "react"; +import ReactDOM from "react-dom/client"; +import { App } from "./App.jsx"; +import "./index.css"; -//ReactDOM.createRoot(document.getElementById("root")).render( -// -// -// -//); +ReactDOM.createRoot(document.getElementById("root")).render( + + + +); diff --git a/frontend/src/pages/LandingPage.jsx b/frontend/src/pages/LandingPage.jsx index 0f162df41..599225637 100644 --- a/frontend/src/pages/LandingPage.jsx +++ b/frontend/src/pages/LandingPage.jsx @@ -1,3 +1,5 @@ +// eslint-disable-next-line no-unused-vars +import React from "react"; import { Login } from "../components/LogIn"; import { SignUp } from "../components/SignUp"; diff --git a/frontend/src/pages/LogedInPage.jsx b/frontend/src/pages/LogedInPage.jsx index b47d9d046..8eeb4127d 100644 --- a/frontend/src/pages/LogedInPage.jsx +++ b/frontend/src/pages/LogedInPage.jsx @@ -1,3 +1,5 @@ +// eslint-disable-next-line no-unused-vars +import React from "react"; import { LogedInComp } from "../components/LogedInComponet"; import { Logout } from "../components/LogOut"; diff --git a/frontend/src/routes/RoutesComp.jsx b/frontend/src/routes/RoutesComp.jsx index 838be0fca..311f4c357 100644 --- a/frontend/src/routes/RoutesComp.jsx +++ b/frontend/src/routes/RoutesComp.jsx @@ -1,3 +1,5 @@ +// eslint-disable-next-line no-unused-vars +import React from "react"; import { Route } from "react-router-dom"; import { LandingPage } from "../pages/LandingPage"; import { LogedInPage } from "../pages/LogedInPage"; From 2c82404c17a8bab1b8def7f91f4f9404d3cc1c7f Mon Sep 17 00:00:00 2001 From: hamdiolad Date: Tue, 23 Apr 2024 23:30:53 +0200 Subject: [PATCH 10/55] debugging --- frontend/src/index.css | 50 ++---------------------------------------- 1 file changed, 2 insertions(+), 48 deletions(-) diff --git a/frontend/src/index.css b/frontend/src/index.css index 4224c955f..6b553b0aa 100644 --- a/frontend/src/index.css +++ b/frontend/src/index.css @@ -12,52 +12,6 @@ code { monospace; } -/* styles.css - - -.wrapper { - display: flex; - justify-content: center; - align-items: center; - height: 100vh; -} - -.form-container { - background-color: #fff; - border-radius: 8px; - box-shadow: 0 0 10px rgba(0, 0, 0, 0.1); - padding: 20px; -} - - -.form { - display: flex; - flex-direction: column; - gap: 10px; -} - - -.form input { - padding: 10px; - border: 1px solid #ccc; - border-radius: 5px; - outline: none; -} - -.form button { - padding: 10px 20px; - background-color: #007bff; - color: #fff; - border: none; - border-radius: 5px; - cursor: pointer; -} - - Button Hover -.form button:hover { - background-color: #0056b3; -}*/ - body { display: flex; justify-content: center; @@ -99,7 +53,7 @@ p { flex-direction: column; align-items: center; padding: 1rem; - background-color: #f7fffb; + background-color: #8dab9c; border-radius: 5px; } @@ -114,7 +68,7 @@ p { flex-direction: column; align-items: center; padding: 1rem; - background-color: #f7fffb; + background-color: #8dab9c; border-radius: 5px; } From 7984ff7c40fe09d401b8d51cbdddb6e59dedf1a7 Mon Sep 17 00:00:00 2001 From: hamdiolad Date: Tue, 23 Apr 2024 23:46:09 +0200 Subject: [PATCH 11/55] . --- netlify.toml | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) diff --git a/netlify.toml b/netlify.toml index 7f606a4ef..02013ac34 100644 --- a/netlify.toml +++ b/netlify.toml @@ -1,15 +1,9 @@ -# This file tells netlify where the code for this project is and -# how it should build the JavaScript assets to deploy from. [build] - base = "frontend/" - publish = "build/" - command = "npm run build" - -base = "frontend" -publish = "dist" -command = "npm run build" + base = "frontend/" + publish = "dist/" + command = "npm run build" [[redirects]] -from = "/*" -to = "/index.html" -status = 200 \ No newline at end of file + from = "/*" + to = "/index.html" + status = 200 From 2058523bd8a40b2a750b76b679ca693255937fec Mon Sep 17 00:00:00 2001 From: hamdiolad Date: Tue, 23 Apr 2024 23:58:03 +0200 Subject: [PATCH 12/55] uppdated packagejson --- backend/package.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/backend/package.json b/backend/package.json index fd2f0f6a7..3f5640f1c 100644 --- a/backend/package.json +++ b/backend/package.json @@ -4,7 +4,8 @@ "description": "Starter project to get up and running with express quickly", "scripts": { "start": "babel-node server.js", - "dev": "nodemon server.js --exec babel-node" + "dev": "nodemon server.js --exec babel-node", + "build": "babel src -d dist" }, "author": "", "license": "ISC", From ea768af517a8f69fa3e3f9741cf982f995166a16 Mon Sep 17 00:00:00 2001 From: hamdiolad Date: Wed, 24 Apr 2024 00:25:22 +0200 Subject: [PATCH 13/55] . --- backend/package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/backend/package.json b/backend/package.json index 3f5640f1c..aa2be7c93 100644 --- a/backend/package.json +++ b/backend/package.json @@ -11,6 +11,7 @@ "license": "ISC", "type": "module", "dependencies": { + "dotenv": "^16.4.5", "@babel/core": "^7.17.9", "@babel/node": "^7.16.8", "@babel/preset-env": "^7.16.11", From 0a55925f1d48374d824e7e39c4fd8a989f6f665f Mon Sep 17 00:00:00 2001 From: hamdiolad Date: Wed, 24 Apr 2024 00:34:00 +0200 Subject: [PATCH 14/55] packagejson --- backend/package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/backend/package.json b/backend/package.json index aa2be7c93..021ece8e6 100644 --- a/backend/package.json +++ b/backend/package.json @@ -11,6 +11,7 @@ "license": "ISC", "type": "module", "dependencies": { + "bcrypt": "^5.0.0", "dotenv": "^16.4.5", "@babel/core": "^7.17.9", "@babel/node": "^7.16.8", From d796bd85df7a1d3f494b977e14df854c4c6ad3c7 Mon Sep 17 00:00:00 2001 From: hamdiolad Date: Wed, 24 Apr 2024 00:42:30 +0200 Subject: [PATCH 15/55] fixing dependecies --- backend/package.json | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/backend/package.json b/backend/package.json index 021ece8e6..81f18d9c6 100644 --- a/backend/package.json +++ b/backend/package.json @@ -11,13 +11,14 @@ "license": "ISC", "type": "module", "dependencies": { - "bcrypt": "^5.0.0", - "dotenv": "^16.4.5", "@babel/core": "^7.17.9", "@babel/node": "^7.16.8", "@babel/preset-env": "^7.16.11", + "bcrypt": "^5.0.0", "cors": "^2.8.5", + "dotenv": "^16.4.5", "express": "^4.17.3", + "jsonwebtoken": "^9.0.2", "mongoose": "^8.0.0", "nodemon": "^3.0.1" } From 261825eb0e83f7848973ebb38c53eec88a84c300 Mon Sep 17 00:00:00 2001 From: hamdiolad Date: Wed, 24 Apr 2024 00:45:29 +0200 Subject: [PATCH 16/55] . --- backend/package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/backend/package.json b/backend/package.json index 81f18d9c6..9beac0c8e 100644 --- a/backend/package.json +++ b/backend/package.json @@ -18,6 +18,7 @@ "cors": "^2.8.5", "dotenv": "^16.4.5", "express": "^4.17.3", + "express-async-handler": "^1.2.0", "jsonwebtoken": "^9.0.2", "mongoose": "^8.0.0", "nodemon": "^3.0.1" From b02bd9a8015c9468e8935905d8d36a0540147a9e Mon Sep 17 00:00:00 2001 From: hamdiolad Date: Wed, 24 Apr 2024 00:51:59 +0200 Subject: [PATCH 17/55] mongodb --- backend/package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/backend/package.json b/backend/package.json index 9beac0c8e..e6a16ed8f 100644 --- a/backend/package.json +++ b/backend/package.json @@ -20,6 +20,7 @@ "express": "^4.17.3", "express-async-handler": "^1.2.0", "jsonwebtoken": "^9.0.2", + "mongodb": "^6.5.0", "mongoose": "^8.0.0", "nodemon": "^3.0.1" } From 542e18f5d615d70352e9e4866853f6a613c581f5 Mon Sep 17 00:00:00 2001 From: hamdiolad Date: Wed, 24 Apr 2024 01:10:44 +0200 Subject: [PATCH 18/55] errors --- backend/server.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/backend/server.js b/backend/server.js index 0c66fc90d..30f317a72 100644 --- a/backend/server.js +++ b/backend/server.js @@ -6,7 +6,9 @@ dotenv.config(); import userRoutes from "./routes/userRoutes.js"; const mongoUrl = process.env.MONGO_URL || "mongodb://localhost/project-auth"; -mongoose.connect(mongoUrl, { useNewUrlParser: true, useUnifiedTopology: true }); +//mongoose.connect(mongoUrl, { useNewUrlParser: true, useUnifiedTopology: true }); + +mongoose.connect(mongoUrl); const app = express(); const port = process.env.PORT || 9090; // Define the port From 58200d1495502b9de593c38c944e4e26123297c6 Mon Sep 17 00:00:00 2001 From: hamdiolad Date: Thu, 25 Apr 2024 19:12:14 +0200 Subject: [PATCH 19/55] env added --- frontend/.gitignore | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/frontend/.gitignore b/frontend/.gitignore index 265f50c92..6254213ab 100644 --- a/frontend/.gitignore +++ b/frontend/.gitignore @@ -23,4 +23,5 @@ dist-ssr *.sln *.sw? -package-lock.json \ No newline at end of file +package-lock.json +.env \ No newline at end of file From 1b0385df2e7c6b413480d16248ece64101e8000c Mon Sep 17 00:00:00 2001 From: hamdiolad Date: Thu, 25 Apr 2024 22:24:01 +0200 Subject: [PATCH 20/55] fixed env issues --- backend/server.js | 44 ++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 42 insertions(+), 2 deletions(-) diff --git a/backend/server.js b/backend/server.js index 30f317a72..5d88c7cb1 100644 --- a/backend/server.js +++ b/backend/server.js @@ -1,4 +1,43 @@ -import express, { urlencoded } from "express"; +import express from "express"; +import cors from "cors"; +import mongoose from "mongoose"; // Add this line +import dotenv from "dotenv"; +import userRoutes from "./routes/userRoutes.js"; + +dotenv.config(); + +const app = express(); +const port = process.env.PORT || 9090; + +// Middleware +app.use(cors()); +app.use(express.json()); +app.use(express.urlencoded({ extended: true })); +app.use(userRoutes); + +// Routes +app.get("/", (req, res) => { + res.send("Hello Technigo!"); +}); + +// Database connection +mongoose + .connect(process.env.MONGODB_URI, { + useNewUrlParser: true, + useUnifiedTopology: true, + }) + .then(() => { + console.log("Connected to MongoDB Atlas"); + // Start the server after successfully connecting to the database + app.listen(port, () => { + console.log(`Server running on http://localhost:${port}`); + }); + }) + .catch((error) => { + console.error("Error connecting to MongoDB Atlas:", error); + }); + +/*import express, { urlencoded } from "express"; import cors from "cors"; import mongoose from "mongoose"; import dotenv from "dotenv"; @@ -6,7 +45,7 @@ dotenv.config(); import userRoutes from "./routes/userRoutes.js"; const mongoUrl = process.env.MONGO_URL || "mongodb://localhost/project-auth"; -//mongoose.connect(mongoUrl, { useNewUrlParser: true, useUnifiedTopology: true }); +mongoose.connect(mongoUrl, { useNewUrlParser: true, useUnifiedTopology: true }); mongoose.connect(mongoUrl); @@ -26,3 +65,4 @@ app.get("/", (req, res) => { app.listen(port, () => { console.log(`Server running on http://localhost:${port}`); }); +*/ From 6a9a56d9a026d68cd5a4905959ed3bd245434ddc Mon Sep 17 00:00:00 2001 From: hamdiolad Date: Thu, 25 Apr 2024 22:29:04 +0200 Subject: [PATCH 21/55] frontedn env --- frontend/src/components/LogedInComponet.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/components/LogedInComponet.jsx b/frontend/src/components/LogedInComponet.jsx index 9af080dd3..ff861ee12 100644 --- a/frontend/src/components/LogedInComponet.jsx +++ b/frontend/src/components/LogedInComponet.jsx @@ -48,7 +48,7 @@ export const LogedInComp = () => { alt="AI Generated Image" style={{ width: "50vh", height: "auto" }} /> -

Congratulations! You are logged in. Here is a cute puppy for you!

+

Congratulations! You are logged in!

) ); From d607679a032f888102d5305c525cb46d26bfe67e Mon Sep 17 00:00:00 2001 From: hamdiolad Date: Thu, 25 Apr 2024 22:34:51 +0200 Subject: [PATCH 22/55] . --- frontend/src/components/LogedInComponet.jsx | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/frontend/src/components/LogedInComponet.jsx b/frontend/src/components/LogedInComponet.jsx index ff861ee12..3df74a0d3 100644 --- a/frontend/src/components/LogedInComponet.jsx +++ b/frontend/src/components/LogedInComponet.jsx @@ -1,4 +1,4 @@ -/* eslint-disable no-unused-vars */ +/* import React from "react"; import axios from "axios"; // Import Axios library import { useNavigate } from "react-router-dom"; @@ -53,8 +53,9 @@ export const LogedInComp = () => { ) ); }; +*/ -/*import axios from "axios"; +import axios from "axios"; import { useNavigate } from "react-router-dom"; import { useEffect } from "react"; import { userStore } from "./UserStore"; @@ -100,12 +101,13 @@ export const LogedInComp = () => { alt="AI Generated Image" style={{ width: "50vh", height: "auto" }} /> -

Congratulations! You are logged in. Here is a cute puppy for you!

+

Congratulations! You are logged in!

) ); }; +/* import { useNavigate } from "react-router-dom"; import { useEffect } from "react"; import { userStore } from "./UserStore"; From 9f27a496a5d83633624cfec424acd71f941f7b96 Mon Sep 17 00:00:00 2001 From: hamdiolad Date: Thu, 25 Apr 2024 22:52:45 +0200 Subject: [PATCH 23/55] test --- frontend/src/components/LogedInComponet.jsx | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/frontend/src/components/LogedInComponet.jsx b/frontend/src/components/LogedInComponet.jsx index 3df74a0d3..3afcf4670 100644 --- a/frontend/src/components/LogedInComponet.jsx +++ b/frontend/src/components/LogedInComponet.jsx @@ -1,12 +1,8 @@ -/* -import React from "react"; -import axios from "axios"; // Import Axios library +import axios from "axios"; import { useNavigate } from "react-router-dom"; import { useEffect } from "react"; import { userStore } from "./UserStore"; -const apiEnv = import.meta.env.VITE_BACKEND_API; - export const LogedInComp = () => { const { accessToken, isLoggedIn, setIsLoggedIn } = userStore(); const navigate = useNavigate(); @@ -14,6 +10,12 @@ export const LogedInComp = () => { useEffect(() => { const fetchLoggedInData = async () => { try { + // Access the VITE_BACKEND_API environment variable using import.meta.env + const apiEnv = import.meta.env.VITE_BACKEND_API; + // Ensure the API URL is defined + if (!apiEnv) { + throw new Error("Backend API URL is not defined."); + } // Make a GET request using Axios with the access token in the headers const response = await axios.get(`${apiEnv}/logged-in`, { headers: { @@ -53,8 +55,8 @@ export const LogedInComp = () => { ) ); }; -*/ +/* import axios from "axios"; import { useNavigate } from "react-router-dom"; import { useEffect } from "react"; From 413bd8d3b977233aa30fe8a0cb2492ff86e3f731 Mon Sep 17 00:00:00 2001 From: hamdiolad Date: Thu, 25 Apr 2024 23:33:51 +0200 Subject: [PATCH 24/55] env --- backend/server.js | 4 +- frontend/src/axiosConfig.js | 2 +- frontend/src/components/LogedInComponet.jsx | 59 --------------------- 3 files changed, 3 insertions(+), 62 deletions(-) diff --git a/backend/server.js b/backend/server.js index 5d88c7cb1..98892a63c 100644 --- a/backend/server.js +++ b/backend/server.js @@ -23,8 +23,8 @@ app.get("/", (req, res) => { // Database connection mongoose .connect(process.env.MONGODB_URI, { - useNewUrlParser: true, - useUnifiedTopology: true, + //useNewUrlParser: true, + //useUnifiedTopology: true, }) .then(() => { console.log("Connected to MongoDB Atlas"); diff --git a/frontend/src/axiosConfig.js b/frontend/src/axiosConfig.js index 78ad49a12..25af1f751 100644 --- a/frontend/src/axiosConfig.js +++ b/frontend/src/axiosConfig.js @@ -2,7 +2,7 @@ import axios from "axios"; const api = axios.create({ - baseURL: "http://localhost:9090/", // Update with your backend server URL + baseURL: "https://project-auth-3.onrender.com/", // Update with your backend server URL }); export default api; diff --git a/frontend/src/components/LogedInComponet.jsx b/frontend/src/components/LogedInComponet.jsx index 3afcf4670..d2a5ff5a1 100644 --- a/frontend/src/components/LogedInComponet.jsx +++ b/frontend/src/components/LogedInComponet.jsx @@ -3,65 +3,6 @@ import { useNavigate } from "react-router-dom"; import { useEffect } from "react"; import { userStore } from "./UserStore"; -export const LogedInComp = () => { - const { accessToken, isLoggedIn, setIsLoggedIn } = userStore(); - const navigate = useNavigate(); - - useEffect(() => { - const fetchLoggedInData = async () => { - try { - // Access the VITE_BACKEND_API environment variable using import.meta.env - const apiEnv = import.meta.env.VITE_BACKEND_API; - // Ensure the API URL is defined - if (!apiEnv) { - throw new Error("Backend API URL is not defined."); - } - // Make a GET request using Axios with the access token in the headers - const response = await axios.get(`${apiEnv}/logged-in`, { - headers: { - "Content-Type": "application/json", - Authorization: `${accessToken}`, - }, - }); - - // Check if the response status is 200 (OK) - if (response.status === 200) { - const data = response.data; // Extract data from the response - console.log(data); // Log the data to the console - setIsLoggedIn(true); // Set isLoggedIn state to true - } else { - console.error("Failed to fetch authenticated content"); - navigate("/"); // Navigate to the home page if fetching fails - } - } catch (error) { - console.error("Error fetching authenticated content:", error); - navigate("/"); // Navigate to the home page in case of an error - } - }; - - fetchLoggedInData(); // Call the fetchLoggedInData function - }, [accessToken, isLoggedIn, setIsLoggedIn, navigate]); // Dependencies for the useEffect hook - - return ( - isLoggedIn && ( // Render content only if the user is logged in -
- AI Generated Image -

Congratulations! You are logged in!

-
- ) - ); -}; - -/* -import axios from "axios"; -import { useNavigate } from "react-router-dom"; -import { useEffect } from "react"; -import { userStore } from "./UserStore"; - const apiEnv = import.meta.env.VITE_BACKEND_API; export const LogedInComp = () => { From 41f58730a1f10f28133711ea4446fe31d5c4737b Mon Sep 17 00:00:00 2001 From: hamdiolad Date: Thu, 25 Apr 2024 23:47:19 +0200 Subject: [PATCH 25/55] mongo --- backend/server.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/backend/server.js b/backend/server.js index 98892a63c..973caf220 100644 --- a/backend/server.js +++ b/backend/server.js @@ -16,9 +16,7 @@ app.use(express.urlencoded({ extended: true })); app.use(userRoutes); // Routes -app.get("/", (req, res) => { - res.send("Hello Technigo!"); -}); +app.get("/", (req, res) => {}); // Database connection mongoose From a0cfa659dbe85a5644f3e0fa96cbc2195d531a81 Mon Sep 17 00:00:00 2001 From: hamdiolad Date: Thu, 25 Apr 2024 23:54:03 +0200 Subject: [PATCH 26/55] debug --- backend/server.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/backend/server.js b/backend/server.js index 973caf220..98892a63c 100644 --- a/backend/server.js +++ b/backend/server.js @@ -16,7 +16,9 @@ app.use(express.urlencoded({ extended: true })); app.use(userRoutes); // Routes -app.get("/", (req, res) => {}); +app.get("/", (req, res) => { + res.send("Hello Technigo!"); +}); // Database connection mongoose From b35859654ad1a329577face3e61552bbfe42de54 Mon Sep 17 00:00:00 2001 From: hamdiolad Date: Thu, 25 Apr 2024 23:58:57 +0200 Subject: [PATCH 27/55] mongodb atlas --- backend/server.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/backend/server.js b/backend/server.js index 98892a63c..5d88c7cb1 100644 --- a/backend/server.js +++ b/backend/server.js @@ -23,8 +23,8 @@ app.get("/", (req, res) => { // Database connection mongoose .connect(process.env.MONGODB_URI, { - //useNewUrlParser: true, - //useUnifiedTopology: true, + useNewUrlParser: true, + useUnifiedTopology: true, }) .then(() => { console.log("Connected to MongoDB Atlas"); From 1c4139fbdd00492d343fc68e2c65e34214f7216a Mon Sep 17 00:00:00 2001 From: hamdiolad Date: Fri, 26 Apr 2024 00:19:32 +0200 Subject: [PATCH 28/55] error --- backend/routes/userRoutes.js | 132 ++++++++++++++++++++++++++++++++++- 1 file changed, 131 insertions(+), 1 deletion(-) diff --git a/backend/routes/userRoutes.js b/backend/routes/userRoutes.js index 5d024062f..89ab9943a 100644 --- a/backend/routes/userRoutes.js +++ b/backend/routes/userRoutes.js @@ -2,6 +2,135 @@ import express from "express"; import bcrypt from "bcrypt"; import jwt from "jsonwebtoken"; +import UserModel from "../models/userModel.js"; // Make sure to import your user model here + +import asyncHandler from "express-async-handler"; +import dotenv from "dotenv"; +import { authenticateUser } from "../authenticateUser.js"; // If you have an authentication middleware, import it here + +dotenv.config(); + +const router = express.Router(); + +const generateToken = (user) => { + // Function to generate JWT token + return jwt.sign({ id: user._id }, process.env.JWT_SECRET, { + expiresIn: "24h", + }); +}; + +// Route for user registration +router.post( + "/register", + asyncHandler(async (req, res) => { + const { username, password, email } = req.body; + try { + // Check if all required fields are provided + if (!username || !password || !email) { + res.status(400); + throw new Error("Please provide all fields"); + } + // Check if user with the same username or email already exists + const existingUser = await UserModel.findOne({ + $or: [{ username }, { email }], + }); + if (existingUser) { + res.status(400); + throw new Error( + `User with ${ + existingUser.username === username ? "username" : "email" + } already exists` + ); + } + // Hash the password + const salt = bcrypt.genSaltSync(10); + const hashedPassword = bcrypt.hashSync(password, salt); + // Create a new user + const newUser = new UserModel({ + username, + email, + password: hashedPassword, + }); + await newUser.save(); + // Respond with success message and token + res.status(201).json({ + success: true, + response: { + username: newUser.username, + email: newUser.email, + id: newUser._id, + accessToken: generateToken(newUser), + }, + }); + } catch (e) { + // Handle any errors + res.status(500).json({ success: false, response: e.message }); + } + }) +); + +// Route for user login +router.post( + "/login", + asyncHandler(async (req, res) => { + const { username, password } = req.body; + try { + // Find user by username + const user = await UserModel.findOne({ username }); + if (!user) { + return res + .status(401) + .json({ success: false, response: "User not found" }); + } + // Compare passwords + const isMatch = await bcrypt.compare(password, user.password); + if (!isMatch) { + return res + .status(401) + .json({ success: false, response: "Incorrect password" }); + } + // Respond with success message and token + res.status(200).json({ + success: true, + response: { + username: user.username, + email: user.email, + id: user._id, + accessToken: generateToken(user), + }, + }); + } catch (error) { + // Handle any errors + res.status(500).json({ + success: false, + response: { + message: error.message, + }, + }); + } + }) +); + +// Sample route accessible only to logged-in users +router.get( + "/logged-in", + authenticateUser, // Authentication middleware to verify JWT token + asyncHandler(async (req, res) => { + res.status(200).json({ + success: true, + response: { + message: "User is logged in", + }, + }); + }) +); + +export default router; + +/*import express from "express"; +import bcrypt from "bcrypt"; +import jwt from "jsonwebtoken"; + import UserModel from "../models/userModel.js"; import asyncHandler from "express-async-handler"; @@ -12,7 +141,7 @@ dotenv.config(); const router = express.Router(); -const geneerateToken = (user) => { +const generateToken = (user) => { return jwt.sign({ id: user._id }, process.env.JWT_SECRET, { expiresIn: "24h", }); @@ -112,3 +241,4 @@ router.get( ); export default router; +*/ From d322c8e2e70595e3c01c718b574cf6c326080a84 Mon Sep 17 00:00:00 2001 From: hamdiolad Date: Fri, 26 Apr 2024 00:35:36 +0200 Subject: [PATCH 29/55] fixed error on env --- backend/server.js | 1 + 1 file changed, 1 insertion(+) diff --git a/backend/server.js b/backend/server.js index 5d88c7cb1..d0fd07df6 100644 --- a/backend/server.js +++ b/backend/server.js @@ -21,6 +21,7 @@ app.get("/", (req, res) => { }); // Database connection + mongoose .connect(process.env.MONGODB_URI, { useNewUrlParser: true, From cc6153c6b8bc472646e1acca186b378e6e7826d1 Mon Sep 17 00:00:00 2001 From: hamdiolad Date: Fri, 26 Apr 2024 00:38:09 +0200 Subject: [PATCH 30/55] fixed --- frontend/src/components/LogOut.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/components/LogOut.jsx b/frontend/src/components/LogOut.jsx index d3a8ccf1e..106cdf12f 100644 --- a/frontend/src/components/LogOut.jsx +++ b/frontend/src/components/LogOut.jsx @@ -20,7 +20,7 @@ export const Logout = () => { return ( <> - + ); }; From 7109afb5f1db5402673dad948bd5467938820627 Mon Sep 17 00:00:00 2001 From: hamdiolad Date: Fri, 26 Apr 2024 00:45:10 +0200 Subject: [PATCH 31/55] added code to serve --- backend/server.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/backend/server.js b/backend/server.js index d0fd07df6..015a164ef 100644 --- a/backend/server.js +++ b/backend/server.js @@ -3,8 +3,10 @@ import cors from "cors"; import mongoose from "mongoose"; // Add this line import dotenv from "dotenv"; import userRoutes from "./routes/userRoutes.js"; +import path from "path"; +//dotenv.config(); -dotenv.config(); +dotenv.config({ path: path.join(__dirname, ".env") }); const app = express(); const port = process.env.PORT || 9090; From 4c22c1a29c00fa2b2b33919e252c4a65d2708b41 Mon Sep 17 00:00:00 2001 From: hamdiolad Date: Fri, 26 Apr 2024 00:50:57 +0200 Subject: [PATCH 32/55] done i hope --- backend/server.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/backend/server.js b/backend/server.js index 015a164ef..95686a7db 100644 --- a/backend/server.js +++ b/backend/server.js @@ -4,8 +4,11 @@ import mongoose from "mongoose"; // Add this line import dotenv from "dotenv"; import userRoutes from "./routes/userRoutes.js"; import path from "path"; +import { fileURLToPath } from "url"; //dotenv.config(); +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); dotenv.config({ path: path.join(__dirname, ".env") }); const app = express(); From 9bda6cd06956760407cf7e5b563e32b661762cc6 Mon Sep 17 00:00:00 2001 From: hamdiolad Date: Fri, 26 Apr 2024 01:04:13 +0200 Subject: [PATCH 33/55] .. --- backend/server.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/backend/server.js b/backend/server.js index 95686a7db..81fc79369 100644 --- a/backend/server.js +++ b/backend/server.js @@ -27,6 +27,8 @@ app.get("/", (req, res) => { // Database connection +console.log("MONGODB_URI:", process.env.MONGODB_URI); + mongoose .connect(process.env.MONGODB_URI, { useNewUrlParser: true, From 4705ccfe1d99d07c758758f2173eb3592ac9b8a5 Mon Sep 17 00:00:00 2001 From: hamdiolad Date: Fri, 26 Apr 2024 01:41:35 +0200 Subject: [PATCH 34/55] code added --- backend/package.json | 2 +- backend/server.js | 56 +++++++++++++++++++++++++++++++++++++------- 2 files changed, 49 insertions(+), 9 deletions(-) diff --git a/backend/package.json b/backend/package.json index e6a16ed8f..c37392d5b 100644 --- a/backend/package.json +++ b/backend/package.json @@ -21,7 +21,7 @@ "express-async-handler": "^1.2.0", "jsonwebtoken": "^9.0.2", "mongodb": "^6.5.0", - "mongoose": "^8.0.0", + "mongoose": "^8.3.2", "nodemon": "^3.0.1" } } diff --git a/backend/server.js b/backend/server.js index 81fc79369..8d597ba55 100644 --- a/backend/server.js +++ b/backend/server.js @@ -1,15 +1,10 @@ import express from "express"; import cors from "cors"; -import mongoose from "mongoose"; // Add this line +import mongoose from "mongoose"; import dotenv from "dotenv"; import userRoutes from "./routes/userRoutes.js"; -import path from "path"; -import { fileURLToPath } from "url"; -//dotenv.config(); -const __filename = fileURLToPath(import.meta.url); -const __dirname = path.dirname(__filename); -dotenv.config({ path: path.join(__dirname, ".env") }); +dotenv.config(); const app = express(); const port = process.env.PORT || 9090; @@ -26,8 +21,53 @@ app.get("/", (req, res) => { }); // Database connection +const uri = process.env.MONGODB_URI; +if (!uri) { + console.error("MONGODB_URI is not defined in the environment variables."); + process.exit(1); +} -console.log("MONGODB_URI:", process.env.MONGODB_URI); +mongoose + .connect(process.env.MONGODB_URI, { + useNewUrlParser: true, + useUnifiedTopology: true, + }) + .then(() => { + console.log("Connected to MongoDB Atlas"); + // Start the server after successfully connecting to the database + app.listen(port, () => { + console.log(`Server running on http://localhost:${port}`); + }); + }) + .catch((error) => { + console.error("Error connecting to MongoDB Atlas:", error); + process.exit(1); + }); + +/*import express from "express"; +import cors from "cors"; +import mongoose from "mongoose"; // Add this line +import dotenv from "dotenv"; +import userRoutes from "./routes/userRoutes.js"; + +dotenv.config(); + +const app = express(); +const port = process.env.PORT || 9090; + +// Middleware +app.use(cors()); +app.use(express.json()); +app.use(express.urlencoded({ extended: true })); +app.use(userRoutes); + +// Routes +app.get("/", (req, res) => { + res.send("Hello Technigo!"); +}); + +// Database connection +//console.log('MONGODB_URI:', process.env.MONGODB_URI); mongoose .connect(process.env.MONGODB_URI, { From d305fd9216378ffd26d1e209d56069c5a8840c0b Mon Sep 17 00:00:00 2001 From: hamdiolad Date: Fri, 26 Apr 2024 01:46:58 +0200 Subject: [PATCH 35/55] test --- backend/server.js | 5 ----- 1 file changed, 5 deletions(-) diff --git a/backend/server.js b/backend/server.js index 8d597ba55..4e8040b5b 100644 --- a/backend/server.js +++ b/backend/server.js @@ -21,11 +21,6 @@ app.get("/", (req, res) => { }); // Database connection -const uri = process.env.MONGODB_URI; -if (!uri) { - console.error("MONGODB_URI is not defined in the environment variables."); - process.exit(1); -} mongoose .connect(process.env.MONGODB_URI, { From 3947c30d7793fb18890851dab1bc8bfeec91290c Mon Sep 17 00:00:00 2001 From: hamdiolad Date: Fri, 26 Apr 2024 02:01:25 +0200 Subject: [PATCH 36/55] dotenv --- backend/server.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/backend/server.js b/backend/server.js index 4e8040b5b..9a37c2d0f 100644 --- a/backend/server.js +++ b/backend/server.js @@ -4,9 +4,8 @@ import mongoose from "mongoose"; import dotenv from "dotenv"; import userRoutes from "./routes/userRoutes.js"; -dotenv.config(); - const app = express(); +dotenv.config().parsed; const port = process.env.PORT || 9090; // Middleware From a05c939f32494c5ed7e085d06b569bd3a64cf0c2 Mon Sep 17 00:00:00 2001 From: hamdiolad Date: Fri, 26 Apr 2024 02:05:35 +0200 Subject: [PATCH 37/55] ..... --- backend/server.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/backend/server.js b/backend/server.js index 9a37c2d0f..36b6f5b09 100644 --- a/backend/server.js +++ b/backend/server.js @@ -4,8 +4,9 @@ import mongoose from "mongoose"; import dotenv from "dotenv"; import userRoutes from "./routes/userRoutes.js"; -const app = express(); dotenv.config().parsed; + +const app = express(); const port = process.env.PORT || 9090; // Middleware From 16632c7a920fbeb02fdc6f19644171b8b1b341e0 Mon Sep 17 00:00:00 2001 From: hamdiolad Date: Fri, 26 Apr 2024 02:12:10 +0200 Subject: [PATCH 38/55] server.js --- backend/server.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/server.js b/backend/server.js index 36b6f5b09..94c723196 100644 --- a/backend/server.js +++ b/backend/server.js @@ -4,7 +4,7 @@ import mongoose from "mongoose"; import dotenv from "dotenv"; import userRoutes from "./routes/userRoutes.js"; -dotenv.config().parsed; +dotenv.config({ path: "./backed/.env" }); const app = express(); const port = process.env.PORT || 9090; From 7d28ee117d3dca2108271f701cc9131c4245fa07 Mon Sep 17 00:00:00 2001 From: hamdiolad Date: Fri, 26 Apr 2024 02:30:13 +0200 Subject: [PATCH 39/55] debugging serverjs --- backend/server.js | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/backend/server.js b/backend/server.js index 94c723196..b359bbaec 100644 --- a/backend/server.js +++ b/backend/server.js @@ -4,7 +4,28 @@ import mongoose from "mongoose"; import dotenv from "dotenv"; import userRoutes from "./routes/userRoutes.js"; -dotenv.config({ path: "./backed/.env" }); +import { fileURLToPath } from "url"; +import path from "path"; + +// Get the directory path of the current module +const __dirname = path.dirname(fileURLToPath(import.meta.url)); + +// Load environment variables from the .env file +dotenv.config({ path: path.join(__dirname, ".env") }); + +// Access environment variables +const mongodbUri = process.env.MONGODB_URI; +const jwtSecret = process.env.JWT_SECRET; + +// Use the variables in your application +//console.log(`MongoDB URI: ${mongodbUri}`); +//console.log(`Server Port: ${port}`); +//console.log(`JWT Secret: ${jwtSecret}`); + +//const dotenv = require("dotenv"); +//const path = require("path"); +//dotenv.config({ path: __dirname + "/.env" }); +//console.log(fullPath); const app = express(); const port = process.env.PORT || 9090; From 8cbe929294d73722ca46a580608dd57b54ad1a2b Mon Sep 17 00:00:00 2001 From: hamdiolad Date: Fri, 26 Apr 2024 02:33:29 +0200 Subject: [PATCH 40/55] mmmm --- backend/server.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/backend/server.js b/backend/server.js index b359bbaec..eb7ff1674 100644 --- a/backend/server.js +++ b/backend/server.js @@ -14,8 +14,8 @@ const __dirname = path.dirname(fileURLToPath(import.meta.url)); dotenv.config({ path: path.join(__dirname, ".env") }); // Access environment variables -const mongodbUri = process.env.MONGODB_URI; -const jwtSecret = process.env.JWT_SECRET; +//const mongodbUri = process.env.MONGODB_URI; +//const jwtSecret = process.env.JWT_SECRET; // Use the variables in your application //console.log(`MongoDB URI: ${mongodbUri}`); @@ -45,8 +45,8 @@ app.get("/", (req, res) => { mongoose .connect(process.env.MONGODB_URI, { - useNewUrlParser: true, - useUnifiedTopology: true, + //useNewUrlParser: true, + //useUnifiedTopology: true, }) .then(() => { console.log("Connected to MongoDB Atlas"); From 6a1f8f415c38f1f687c2602625f8b79c635d9cb3 Mon Sep 17 00:00:00 2001 From: hamdiolad Date: Fri, 26 Apr 2024 02:40:56 +0200 Subject: [PATCH 41/55] fixed error --- backend/server.js | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/backend/server.js b/backend/server.js index eb7ff1674..10a9758d6 100644 --- a/backend/server.js +++ b/backend/server.js @@ -4,14 +4,15 @@ import mongoose from "mongoose"; import dotenv from "dotenv"; import userRoutes from "./routes/userRoutes.js"; -import { fileURLToPath } from "url"; -import path from "path"; +//import { fileURLToPath } from "url"; +//import path from "path"; // Get the directory path of the current module -const __dirname = path.dirname(fileURLToPath(import.meta.url)); +//const __dirname = path.dirname(fileURLToPath(import.meta.url)); // Load environment variables from the .env file -dotenv.config({ path: path.join(__dirname, ".env") }); +dotenv.config(); +//({ path: path.join(__dirname, ".env") }); // Access environment variables //const mongodbUri = process.env.MONGODB_URI; From f70bb7ca91150056fd041c2047700601f855c04e Mon Sep 17 00:00:00 2001 From: hamdiolad Date: Fri, 26 Apr 2024 03:15:04 +0200 Subject: [PATCH 42/55] endpints edited --- backend/package.json | 1 + backend/server.js | 6 +++++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/backend/package.json b/backend/package.json index c37392d5b..a42b3c455 100644 --- a/backend/package.json +++ b/backend/package.json @@ -19,6 +19,7 @@ "dotenv": "^16.4.5", "express": "^4.17.3", "express-async-handler": "^1.2.0", + "express-list-endpoints": "^7.1.0", "jsonwebtoken": "^9.0.2", "mongodb": "^6.5.0", "mongoose": "^8.3.2", diff --git a/backend/server.js b/backend/server.js index 10a9758d6..66db88678 100644 --- a/backend/server.js +++ b/backend/server.js @@ -1,4 +1,5 @@ import express from "express"; +import expressListEndpoints from "express-list-endpoints"; import cors from "cors"; import mongoose from "mongoose"; import dotenv from "dotenv"; @@ -39,7 +40,10 @@ app.use(userRoutes); // Routes app.get("/", (req, res) => { - res.send("Hello Technigo!"); + const endpoints = expressListEndpoints(app); + res.json(endpoints); + console.log("List of Endpoints:"); + console.log(endpoints); }); // Database connection From 64594c5c5f8da9d8d468e917c4532fc7a48464ad Mon Sep 17 00:00:00 2001 From: hamdiolad Date: Fri, 26 Apr 2024 04:03:03 +0200 Subject: [PATCH 43/55] done --- backend/server.js | 93 ------------------------------ frontend/src/components/SignUp.jsx | 4 +- 2 files changed, 3 insertions(+), 94 deletions(-) diff --git a/backend/server.js b/backend/server.js index 66db88678..35049bfca 100644 --- a/backend/server.js +++ b/backend/server.js @@ -5,29 +5,7 @@ import mongoose from "mongoose"; import dotenv from "dotenv"; import userRoutes from "./routes/userRoutes.js"; -//import { fileURLToPath } from "url"; -//import path from "path"; - -// Get the directory path of the current module -//const __dirname = path.dirname(fileURLToPath(import.meta.url)); - -// Load environment variables from the .env file dotenv.config(); -//({ path: path.join(__dirname, ".env") }); - -// Access environment variables -//const mongodbUri = process.env.MONGODB_URI; -//const jwtSecret = process.env.JWT_SECRET; - -// Use the variables in your application -//console.log(`MongoDB URI: ${mongodbUri}`); -//console.log(`Server Port: ${port}`); -//console.log(`JWT Secret: ${jwtSecret}`); - -//const dotenv = require("dotenv"); -//const path = require("path"); -//dotenv.config({ path: __dirname + "/.env" }); -//console.log(fullPath); const app = express(); const port = process.env.PORT || 9090; @@ -64,74 +42,3 @@ mongoose console.error("Error connecting to MongoDB Atlas:", error); process.exit(1); }); - -/*import express from "express"; -import cors from "cors"; -import mongoose from "mongoose"; // Add this line -import dotenv from "dotenv"; -import userRoutes from "./routes/userRoutes.js"; - -dotenv.config(); - -const app = express(); -const port = process.env.PORT || 9090; - -// Middleware -app.use(cors()); -app.use(express.json()); -app.use(express.urlencoded({ extended: true })); -app.use(userRoutes); - -// Routes -app.get("/", (req, res) => { - res.send("Hello Technigo!"); -}); - -// Database connection -//console.log('MONGODB_URI:', process.env.MONGODB_URI); - -mongoose - .connect(process.env.MONGODB_URI, { - useNewUrlParser: true, - useUnifiedTopology: true, - }) - .then(() => { - console.log("Connected to MongoDB Atlas"); - // Start the server after successfully connecting to the database - app.listen(port, () => { - console.log(`Server running on http://localhost:${port}`); - }); - }) - .catch((error) => { - console.error("Error connecting to MongoDB Atlas:", error); - }); - -/*import express, { urlencoded } from "express"; -import cors from "cors"; -import mongoose from "mongoose"; -import dotenv from "dotenv"; -dotenv.config(); -import userRoutes from "./routes/userRoutes.js"; - -const mongoUrl = process.env.MONGO_URL || "mongodb://localhost/project-auth"; -mongoose.connect(mongoUrl, { useNewUrlParser: true, useUnifiedTopology: true }); - -mongoose.connect(mongoUrl); - -const app = express(); -const port = process.env.PORT || 9090; // Define the port - -app.use(cors()); -app.use(express.json()); -app.use(express.urlencoded({ extended: false })); -app.use(userRoutes); - -// Start defining your routes here -app.get("/", (req, res) => { - res.send("Hello Technigo!"); -}); -// Start the server -app.listen(port, () => { - console.log(`Server running on http://localhost:${port}`); -}); -*/ diff --git a/frontend/src/components/SignUp.jsx b/frontend/src/components/SignUp.jsx index 9bbc76cd5..435442bd3 100644 --- a/frontend/src/components/SignUp.jsx +++ b/frontend/src/components/SignUp.jsx @@ -2,7 +2,7 @@ import React from "react"; import { useState } from "react"; -const apiEnv = import.meta.env.VITE_BACKEND_API; +//const apiEnv = import.meta.env.VITE_BACKEND_API; export const SignUp = () => { const [email, setEmail] = useState(""); @@ -11,6 +11,8 @@ export const SignUp = () => { const handleSignup = async () => { try { + const apiEnv = import.meta.env.VITE_BACKEND_API; + console.log("URL:", `${apiEnv}/register`); console.log("Request Body:", { email, username, password }); From ebb013b511a3b9f252cc744fe7e2e12d06045af6 Mon Sep 17 00:00:00 2001 From: hamdiolad Date: Fri, 26 Apr 2024 04:23:20 +0200 Subject: [PATCH 44/55] . --- frontend/src/components/SignUp.jsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/frontend/src/components/SignUp.jsx b/frontend/src/components/SignUp.jsx index 435442bd3..e3a44d31a 100644 --- a/frontend/src/components/SignUp.jsx +++ b/frontend/src/components/SignUp.jsx @@ -11,7 +11,8 @@ export const SignUp = () => { const handleSignup = async () => { try { - const apiEnv = import.meta.env.VITE_BACKEND_API; + //const apiEnv = import.meta.env.VITE_BACKEND_API; + const apiEnv = "https://project-auth-3.onrender.com"; console.log("URL:", `${apiEnv}/register`); console.log("Request Body:", { email, username, password }); From 0256a5afdef52f0baceea3964ceeb0006c438944 Mon Sep 17 00:00:00 2001 From: hamdiolad Date: Fri, 26 Apr 2024 04:40:57 +0200 Subject: [PATCH 45/55] .. --- frontend/src/components/SignUp.jsx | 76 ++++++++++++++++++++++++++++-- 1 file changed, 72 insertions(+), 4 deletions(-) diff --git a/frontend/src/components/SignUp.jsx b/frontend/src/components/SignUp.jsx index e3a44d31a..87f247f5e 100644 --- a/frontend/src/components/SignUp.jsx +++ b/frontend/src/components/SignUp.jsx @@ -2,19 +2,86 @@ import React from "react"; import { useState } from "react"; +export const SignUp = () => { + const [email, setEmail] = useState(""); + const [username, setUsername] = useState(""); + const [password, setPassword] = useState(""); + + const handleSignup = async () => { + try { + const apiEnv = "https://project-auth-3.onrender.com"; // Backend API URL + const url = `${apiEnv}/register`; // Construct the complete URL + + console.log("URL:", url); // Log the constructed URL + console.log("Request Body:", { email, username, password }); + + const response = await fetch(url, { + method: "POST", + headers: { + "Content-Type": "application/json", + }, + body: JSON.stringify({ email, username, password }), + }); + + if (response.ok) { + alert("Signup was successful, please log in!"); + setEmail(""); + setUsername(""); + setPassword(""); + } else { + const data = await response.json(); + console.log(data); + alert("Signup failed: " + data.message); + } + } catch (error) { + alert("Error during registration: " + error.message); + } + }; + + return ( +
+ setEmail(e.target.value)} + /> + setUsername(e.target.value)} + /> + setPassword(e.target.value)} + /> + +
+ ); +}; + +/* //const apiEnv = import.meta.env.VITE_BACKEND_API; export const SignUp = () => { const [email, setEmail] = useState(""); const [username, setUsername] = useState(""); const [password, setPassword] = useState(""); - + `${apiEnv} const handleSignup = async () => { try { - //const apiEnv = import.meta.env.VITE_BACKEND_API; - const apiEnv = "https://project-auth-3.onrender.com"; + + + + const apiEnv = "https://project-auth-3.onrender.com"; // Backend API URL + + const url = `${apiEnv}/register`; // Construct the complete URL + + console.log("URL:", url); // Log the constructed URL - console.log("URL:", `${apiEnv}/register`); console.log("Request Body:", { email, username, password }); const response = await fetch(`${apiEnv}/register`, { @@ -67,3 +134,4 @@ export const SignUp = () => { ); }; +*/ From 1d57f8b452bccd44824ebd36bf51404e055712d1 Mon Sep 17 00:00:00 2001 From: hamdiolad Date: Fri, 26 Apr 2024 04:49:08 +0200 Subject: [PATCH 46/55] login --- frontend/src/components/LogIn.jsx | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/frontend/src/components/LogIn.jsx b/frontend/src/components/LogIn.jsx index aaae780b3..6f75e4aa5 100644 --- a/frontend/src/components/LogIn.jsx +++ b/frontend/src/components/LogIn.jsx @@ -4,7 +4,7 @@ import { useEffect } from "react"; import { useNavigate } from "react-router-dom"; import { userStore } from "./UserStore"; -const apiEnv = import.meta.env.VITE_BACKEND_API; +//const apiEnv = import.meta.env.VITE_BACKEND_API; export const Login = () => { const { @@ -25,6 +25,10 @@ export const Login = () => { } try { + const apiEnv = "https://project-auth-3.onrender.com"; // Backend API URL + //const url = `${apiEnv}/login`; // Construct the complete URL + //console.log("URL:", url); // Log the constructed URL + const response = await fetch(`${apiEnv}/login`, { method: "POST", headers: { From cfe618ac4675bf27662b6a03b05bde23da25fc5f Mon Sep 17 00:00:00 2001 From: hamdiolad Date: Fri, 26 Apr 2024 05:12:21 +0200 Subject: [PATCH 47/55] log out page --- frontend/src/components/LogOut.jsx | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/frontend/src/components/LogOut.jsx b/frontend/src/components/LogOut.jsx index 106cdf12f..8490ecbbe 100644 --- a/frontend/src/components/LogOut.jsx +++ b/frontend/src/components/LogOut.jsx @@ -1,12 +1,20 @@ // eslint-disable-next-line no-unused-vars -import React from "react"; +import React, { useEffect } from "react"; import { useNavigate } from "react-router-dom"; import { userStore } from "./UserStore"; export const Logout = () => { const navigate = useNavigate(); + const { isLoggedIn, setAccessToken, setIsLoggedIn, setUser } = userStore(); - const { setAccessToken, setIsLoggedIn, setUser } = userStore(); + useEffect(() => { + // Ensure that the Logout component remains visible even after logging in + // by checking the isLoggedIn state and taking appropriate action + if (isLoggedIn) { + // Redirect to the appropriate route after logout + navigate("/"); + } + }, [isLoggedIn, navigate]); const handleLogOut = () => { setUser(null); From b91438f6cbe696c4b0269a30aa75b314f80010ad Mon Sep 17 00:00:00 2001 From: hamdiolad Date: Fri, 26 Apr 2024 05:30:58 +0200 Subject: [PATCH 48/55] log out page --- frontend/src/components/LogOut.jsx | 16 ++++------------ 1 file changed, 4 insertions(+), 12 deletions(-) diff --git a/frontend/src/components/LogOut.jsx b/frontend/src/components/LogOut.jsx index 8490ecbbe..f679555a2 100644 --- a/frontend/src/components/LogOut.jsx +++ b/frontend/src/components/LogOut.jsx @@ -1,20 +1,11 @@ // eslint-disable-next-line no-unused-vars -import React, { useEffect } from "react"; +import React from "react"; import { useNavigate } from "react-router-dom"; import { userStore } from "./UserStore"; export const Logout = () => { const navigate = useNavigate(); - const { isLoggedIn, setAccessToken, setIsLoggedIn, setUser } = userStore(); - - useEffect(() => { - // Ensure that the Logout component remains visible even after logging in - // by checking the isLoggedIn state and taking appropriate action - if (isLoggedIn) { - // Redirect to the appropriate route after logout - navigate("/"); - } - }, [isLoggedIn, navigate]); + const { setAccessToken, setIsLoggedIn, setUser } = userStore(); const handleLogOut = () => { setUser(null); @@ -23,7 +14,8 @@ export const Logout = () => { localStorage.removeItem("accessToken"); alert("Log out successful!"); - navigate("/"); + navigate("/logged-in"); + //navigate("/"); }; return ( From 4cba9765bd7c9fcc6274ead3cc02c730f37afaa7 Mon Sep 17 00:00:00 2001 From: hamdiolad Date: Fri, 26 Apr 2024 05:55:38 +0200 Subject: [PATCH 49/55] p --- frontend/src/components/LogOut.jsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/frontend/src/components/LogOut.jsx b/frontend/src/components/LogOut.jsx index f679555a2..c32b05c30 100644 --- a/frontend/src/components/LogOut.jsx +++ b/frontend/src/components/LogOut.jsx @@ -1,10 +1,10 @@ // eslint-disable-next-line no-unused-vars import React from "react"; -import { useNavigate } from "react-router-dom"; +//import { useNavigate } from "react-router-dom"; import { userStore } from "./UserStore"; export const Logout = () => { - const navigate = useNavigate(); + // const navigate = useNavigate(); const { setAccessToken, setIsLoggedIn, setUser } = userStore(); const handleLogOut = () => { @@ -14,7 +14,7 @@ export const Logout = () => { localStorage.removeItem("accessToken"); alert("Log out successful!"); - navigate("/logged-in"); + //navigate("/logged-in"); //navigate("/"); }; From 6760dde905092fb468255ccdcd78b08efe60a2b9 Mon Sep 17 00:00:00 2001 From: hamdiolad Date: Fri, 26 Apr 2024 06:05:03 +0200 Subject: [PATCH 50/55] loggot --- frontend/src/components/LogOut.jsx | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/frontend/src/components/LogOut.jsx b/frontend/src/components/LogOut.jsx index c32b05c30..e82ccb5e0 100644 --- a/frontend/src/components/LogOut.jsx +++ b/frontend/src/components/LogOut.jsx @@ -1,18 +1,20 @@ // eslint-disable-next-line no-unused-vars import React from "react"; -//import { useNavigate } from "react-router-dom"; +import { useNavigate } from "react-router-dom"; import { userStore } from "./UserStore"; export const Logout = () => { - // const navigate = useNavigate(); - const { setAccessToken, setIsLoggedIn, setUser } = userStore(); + const navigate = useNavigate(); + const logout = userStore((state) => state.handleLogout); + //const { setAccessToken, setIsLoggedIn, setUser } = userStore(); const handleLogOut = () => { - setUser(null); - setAccessToken(null); - setIsLoggedIn(false); - localStorage.removeItem("accessToken"); - + //setUser(null); + //setAccessToken(null); + //setIsLoggedIn(false); + //localStorage.removeItem("accessToken"); + logout(); // This should clear the token and update the isLoggedIn state. + navigate("/"); // Redirect the user to the login page. alert("Log out successful!"); //navigate("/logged-in"); //navigate("/"); From 096dbae917a257ac05dcbfb5aeabb751c6209e41 Mon Sep 17 00:00:00 2001 From: hamdiolad Date: Fri, 26 Apr 2024 06:17:55 +0200 Subject: [PATCH 51/55] log --- frontend/src/components/LogOut.jsx | 35 +++++++++++++++--------------- 1 file changed, 18 insertions(+), 17 deletions(-) diff --git a/frontend/src/components/LogOut.jsx b/frontend/src/components/LogOut.jsx index e82ccb5e0..fb6feba9e 100644 --- a/frontend/src/components/LogOut.jsx +++ b/frontend/src/components/LogOut.jsx @@ -5,24 +5,25 @@ import { userStore } from "./UserStore"; export const Logout = () => { const navigate = useNavigate(); - const logout = userStore((state) => state.handleLogout); - //const { setAccessToken, setIsLoggedIn, setUser } = userStore(); + const { logout, setAccessToken, setIsLoggedIn, setUser } = userStore(); - const handleLogOut = () => { - //setUser(null); - //setAccessToken(null); - //setIsLoggedIn(false); - //localStorage.removeItem("accessToken"); - logout(); // This should clear the token and update the isLoggedIn state. - navigate("/"); // Redirect the user to the login page. - alert("Log out successful!"); - //navigate("/logged-in"); - //navigate("/"); + const handleLogOut = async () => { + try { + // Call logout function to clear authentication state + await logout(); + + // Clear local user data (if needed) + setUser(null); + setAccessToken(null); + setIsLoggedIn(false); + + // Redirect to the login page + navigate("/"); + } catch (error) { + console.error("Logout error:", error); + // Handle any errors that occur during logout + } }; - return ( - <> - - - ); + return ; }; From 4eb5372c13ba30364d1103749cd29275fa15e91e Mon Sep 17 00:00:00 2001 From: hamdiolad Date: Fri, 26 Apr 2024 06:22:47 +0200 Subject: [PATCH 52/55] ... --- frontend/src/components/LogOut.jsx | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/frontend/src/components/LogOut.jsx b/frontend/src/components/LogOut.jsx index fb6feba9e..2c97fde73 100644 --- a/frontend/src/components/LogOut.jsx +++ b/frontend/src/components/LogOut.jsx @@ -5,23 +5,17 @@ import { userStore } from "./UserStore"; export const Logout = () => { const navigate = useNavigate(); - const { logout, setAccessToken, setIsLoggedIn, setUser } = userStore(); - - const handleLogOut = async () => { - try { - // Call logout function to clear authentication state - await logout(); + const { setAccessToken, setIsLoggedIn, setUser } = userStore(); + const handleLogOut = () => { + { // Clear local user data (if needed) setUser(null); setAccessToken(null); - setIsLoggedIn(false); + setIsLoggedIn(true); // Redirect to the login page navigate("/"); - } catch (error) { - console.error("Logout error:", error); - // Handle any errors that occur during logout } }; From 79e0b65a4270e72a13682998fc6b61a9907c4044 Mon Sep 17 00:00:00 2001 From: hamdiolad Date: Fri, 26 Apr 2024 06:28:21 +0200 Subject: [PATCH 53/55] o --- frontend/src/components/LogOut.jsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/frontend/src/components/LogOut.jsx b/frontend/src/components/LogOut.jsx index 2c97fde73..cb5b91538 100644 --- a/frontend/src/components/LogOut.jsx +++ b/frontend/src/components/LogOut.jsx @@ -1,10 +1,10 @@ // eslint-disable-next-line no-unused-vars import React from "react"; -import { useNavigate } from "react-router-dom"; +//import { useNavigate } from "react-router-dom"; import { userStore } from "./UserStore"; export const Logout = () => { - const navigate = useNavigate(); + //const navigate = useNavigate(); const { setAccessToken, setIsLoggedIn, setUser } = userStore(); const handleLogOut = () => { @@ -15,7 +15,7 @@ export const Logout = () => { setIsLoggedIn(true); // Redirect to the login page - navigate("/"); + //navigate(""); } }; From 0784bae93fa66e4c3901a448415ac47be034e73e Mon Sep 17 00:00:00 2001 From: hamdiolad Date: Fri, 26 Apr 2024 06:33:56 +0200 Subject: [PATCH 54/55] fix --- frontend/src/components/LogedInComponet.jsx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/frontend/src/components/LogedInComponet.jsx b/frontend/src/components/LogedInComponet.jsx index d2a5ff5a1..7dc59fd99 100644 --- a/frontend/src/components/LogedInComponet.jsx +++ b/frontend/src/components/LogedInComponet.jsx @@ -1,3 +1,5 @@ +// eslint-disable-next-line no-unused-vars +import React from "react"; import axios from "axios"; import { useNavigate } from "react-router-dom"; import { useEffect } from "react"; From e9d64d5fb2acb8c1d3fd14e1332b7645afdb0f2d Mon Sep 17 00:00:00 2001 From: hamdiolad Date: Fri, 26 Apr 2024 06:40:06 +0200 Subject: [PATCH 55/55] log out done --- frontend/src/components/LogedInComponet.jsx | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/frontend/src/components/LogedInComponet.jsx b/frontend/src/components/LogedInComponet.jsx index 7dc59fd99..e5ed43b2f 100644 --- a/frontend/src/components/LogedInComponet.jsx +++ b/frontend/src/components/LogedInComponet.jsx @@ -40,13 +40,8 @@ export const LogedInComp = () => { return ( isLoggedIn && ( -
- AI Generated Image -

Congratulations! You are logged in!

+
+

YAY! You are logged in!

) );