diff --git a/app.js b/app.js
index 600621e..7a0c994 100644
--- a/app.js
+++ b/app.js
@@ -1,4 +1,4 @@
-if(process.env.NODE_ENV != "production"){
+if (process.env.NODE_ENV != "production") {
require('dotenv').config();
}
const express = require("express");
@@ -16,43 +16,42 @@ const passport = require("passport");
const LocalStrategy = require("passport-local");
const User = require("./models/user.js");
const userRouter = require("./routes/user.js");
-/* if you want to run the project and do not have .env files configured , please uncomment the next
-two commented codes and comment down this code await mongoose.connect(dbUrl); You project will run succesfully*/
const MONGO_URL = "mongodb://mongo:27017/wanderlust"; // used with docker
// const MONGO_URL = "mongodb://127.0.0.1:27017/wanderlust"; // use for local db
-const dbUrl =process.env.ATLASDB_URL;
+const dbUrl = process.env.ATLASDB_URL;
+
main()
.then(() => {
console.log("connected to DB");
}).catch((err) => {
console.log(err);
});
-async function main(){
+
+async function main() {
await mongoose.connect(MONGO_URL);
// await mongoose.connect(dbUrl);
}
-app.set("view engine","ejs");
+app.set("view engine", "ejs");
app.set("views", path.join(__dirname, "views"));
-app.use(express.urlencoded({extended:true}));
+app.use(express.urlencoded({ extended: true }));
app.use(methodOverride("_method"));
app.engine('ejs', ejsMate);
-app.use(express.static(path.join(__dirname,"/public")));
+app.use(express.static(path.join(__dirname, "/public")));
+
const sessionOptions = {
secret: "mysupersecretcode",
resave: false,
saveUninitialized: true,
cookie: {
- expires: Date.now()+7*24*60*60*1000,
- maxAge: 7*24*60*60*1000,
+ expires: Date.now() + 7 * 24 * 60 * 60 * 1000,
+ maxAge: 7 * 24 * 60 * 60 * 1000,
httpOnly: true,
},
};
-/*app.get("/", (req,res) => {
- res.send("Hi,I am root");
-});*/
+
app.use(session(sessionOptions));
app.use(flash());
app.use(passport.initialize());
@@ -61,19 +60,19 @@ passport.use(new LocalStrategy(User.authenticate()));
passport.serializeUser(User.serializeUser());
passport.deserializeUser(User.deserializeUser());
-app.use((req,res,next) =>{
+app.use((req, res, next) => {
res.locals.success = req.flash("success");
res.locals.error = req.flash("error");
res.locals.currUser = req.user;
- //console.log(success);
next();
});
-app.use("/listings",listingRouter);
-app.use("/listings/:id/reviews",reviewRouter);
-app.use("/",userRouter);
+app.use("/listings", listingRouter);
+app.use("/listings/:id/reviews", reviewRouter);
+app.use("/", userRouter);
+
app.get('/privacy', (req, res) => {
- res.render('privacy'); // This should be placed before the app.all("*") block
+ res.render('privacy');
});
// Catch-all route for undefined paths
@@ -81,24 +80,12 @@ app.all("*", (req, res, next) => {
next(new ExpressError(404, "Page Not Found!"));
});
-
-//if any of the incomming request does not match then throw this error
-app.all("*",(req,res,next) =>{
- next(new ExpressError(404,"Page Not Found!"));
-});
-//error handling is done by middleware
-app.use((err,req,res,next) =>{
- let {statusCode=500,message="Something went wrong!"}=err;
- res.status(statusCode).render("error.ejs",{message});
- //res.status(statusCode).send(message);
-});
-
+// Error handling middleware
app.use((err, req, res, next) => {
- console.log(err); // Log the full error to see what’s causing the issue
let { statusCode = 500, message = "Something went wrong!" } = err;
res.status(statusCode).render("error.ejs", { message });
});
-app.listen(8080,()=>{
+app.listen(8080, () => {
console.log("Server is listening to port 8080");
});
\ No newline at end of file
diff --git a/controllers/users.js b/controllers/users.js
index 51e4059..feedf0b 100644
--- a/controllers/users.js
+++ b/controllers/users.js
@@ -5,7 +5,7 @@ const renderSignupForm = (req, res) => {
res.render("users/signup.ejs");
};
-const signup = async (req, res) => {
+const signup = async (req, res, next) => {
try {
// Check for validation errors
const errors = validationResult(req);
@@ -53,10 +53,23 @@ const logout = (req, res, next) => {
});
};
+// Render the password recovery form
+const renderForgotPasswordForm = (req, res) => {
+ res.render('users/forgot.ejs');
+};
+
+// Handle the password recovery form submission
+const forgotPassword = (req, res) => {
+ req.flash('info', 'If an account with that email exists, you will receive an email with instructions to reset your password.');
+ res.redirect('/forgot');
+};
+
module.exports = {
renderSignupForm,
signup,
renderLoginForm,
login,
- logout
-};
+ logout,
+ renderForgotPasswordForm,
+ forgotPassword
+};
\ No newline at end of file
diff --git a/readme.md b/readme.md
index 4291afa..4b8117f 100644
--- a/readme.md
+++ b/readme.md
@@ -92,7 +92,26 @@ We ❤️ contributions! Here’s how you can join the effort:
6. **Open a pull request**.
----
+
+
+
+
+
+
+## This project is now OFFICIALLY accepted for
+
+