Skip to content

Commit 71f9bc8

Browse files
committed
Initial Commit
0 parents  commit 71f9bc8

File tree

1,293 files changed

+261855
-0
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

1,293 files changed

+261855
-0
lines changed

app.js

+140
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,140 @@
1+
const express = require('express'),
2+
app = express(),
3+
passport = require('passport'),
4+
LocalStrategy = require('passport-local'),
5+
flash = require('connect-flash'),
6+
methodOverride = require('method-override'),
7+
body = require('body-parser'),
8+
User = require('./models/user.js'),
9+
Comment = require("./models/comments.js"),
10+
Post = require("./models/posts.js"),
11+
mongoose = require('mongoose');
12+
mongoose.connect("mongodb+srv://rt1301:[email protected]/Forum?retryWrites=true&w=majority",{ useNewUrlParser: true, useUnifiedTopology: true, useFindAndModify: false, useCreateIndex:true }).then(()=>{
13+
console.log("Connected to DB!");
14+
}).catch(err=>{
15+
console.log("Error: " + err.message);
16+
});
17+
app.use(body.urlencoded({extended: true}));
18+
app.set("view engine", "ejs");
19+
app.use(express.static(__dirname + "/public"));
20+
app.use(methodOverride("_method"));
21+
app.use(flash());
22+
// seedDB();
23+
// PASSPORT CONFIGURATION
24+
app.use(require("express-session")({
25+
secret: "This is a secret message",
26+
resave: false,
27+
saveUninitialized: false
28+
}));
29+
app.use(passport.initialize());
30+
app.use(passport.session());
31+
app.use(function(req, res, next){
32+
res.locals.error = req.flash("error");
33+
res.locals.success = req.flash("success");
34+
res.locals.currentUser = req.user;
35+
next();
36+
});
37+
passport.use(new LocalStrategy(User.authenticate()));
38+
passport.serializeUser(User.serializeUser());
39+
passport.deserializeUser(User.deserializeUser());
40+
// Root Route
41+
app.get("/",(req,res)=>{
42+
Post.find({},(err,foundPosts)=>{
43+
if(err)
44+
{
45+
req.flash("error",err.message);
46+
return res.redirect("back");
47+
}
48+
else
49+
{
50+
res.render("index",{posts:foundPosts});
51+
}
52+
});
53+
54+
});
55+
// Create Post route
56+
app.get("/f/:id/posts/create",isLoggedIn,(req,res)=>{
57+
res.render("posts/new");
58+
});
59+
app.post("/",isLoggedIn,(req, res)=>{
60+
var author = {
61+
id: req.user._id,
62+
username: req.user.username
63+
}
64+
Post.create(req.body.post,(err,newPost)=>{
65+
if(err)
66+
{
67+
req.flash("error",err.message);
68+
return res.redirect("back");
69+
}
70+
else
71+
{
72+
console.log(newPost);
73+
res.redirect("/");
74+
}
75+
});
76+
77+
});
78+
// ================
79+
// AUTH ROUTES
80+
// ================
81+
// show registration form
82+
app.get("/register",function(req, res)
83+
{
84+
res.render("register",{currentUser:req.user});
85+
});
86+
// handle sign up logic
87+
app.post("/register",function(req,res)
88+
{
89+
var newUser = new User({username: req.body.username});
90+
User.register(newUser,req.body.password,function(err, user)
91+
{
92+
if(err)
93+
{
94+
req.flash("error",err.message);
95+
return res.render("register",{currentUser:req.user});
96+
}
97+
else
98+
{
99+
passport.authenticate("local")(req, res, function()
100+
{
101+
req.flash("success","Registration completed");
102+
res.redirect("/login");
103+
});
104+
}
105+
});
106+
});
107+
108+
// show login form
109+
app.get("/login",function(req, res){
110+
res.render("login",{currentUser:req.user});
111+
});
112+
// handle login logic
113+
app.post("/login",passport.authenticate("local",
114+
{
115+
failureRedirect: "/login",
116+
failureFlash:"Incorrect Username or Password!",
117+
successRedirect:"/",
118+
}),function(req, res)
119+
{
120+
req.flash("success","You are logged in as " + req.user.username);
121+
});
122+
// LOGOUT
123+
app.get("/logout",function(req, res)
124+
{
125+
req.logout();
126+
req.flash("success","You are successfully logged out");
127+
res.redirect("/login");
128+
});
129+
// Logged in middleware
130+
function isLoggedIn(req, res, next)
131+
{
132+
if(req.isAuthenticated())
133+
{
134+
return next();
135+
}
136+
req.flash("error","Please Login First");
137+
res.redirect("/login");
138+
139+
}
140+
app.listen(3000,()=>{console.log('Server is running')});

models/comments.js

+17
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
const mongoose = require('mongoose');
2+
const commentSchema = mongoose.Schema({
3+
text: String,
4+
author: {
5+
id:{
6+
type: mongoose.Schema.Types.ObjectId,
7+
ref: "User"
8+
},
9+
username: String
10+
},
11+
vote: {
12+
type:Number,
13+
default: 0
14+
},
15+
parents: Array
16+
});
17+
module.exports = mongoose.model("Comment",commentSchema);

models/posts.js

+14
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
const mongoose = require('mongoose');
2+
var postsSchema = new mongoose.Schema({
3+
title: String,
4+
description: String,
5+
channel: String,
6+
author: {
7+
id:{
8+
type: mongoose.Schema.Types.ObjectId,
9+
ref: "User"
10+
},
11+
username: String
12+
}
13+
});
14+
module.exports = mongoose.model("Post",postsSchema);

models/user.js

+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
const mongoose = require('mongoose');
2+
const passportLocalMongoose = require('passport-local-mongoose');
3+
4+
var userSchema = new mongoose.Schema({
5+
username: String,
6+
password: String,
7+
});
8+
userSchema.plugin(passportLocalMongoose);
9+
module.exports = mongoose.model("User",userSchema);

node_modules/.bin/ejs

+15
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

node_modules/.bin/ejs.cmd

+17
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

node_modules/.bin/ejs.ps1

+18
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

node_modules/.bin/jake

+15
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

node_modules/.bin/jake.cmd

+17
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

node_modules/.bin/jake.ps1

+18
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

node_modules/.bin/mime

+15
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

node_modules/.bin/mime.cmd

+17
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

node_modules/.bin/mime.ps1

+18
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

node_modules/.bin/semver

+15
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

node_modules/.bin/semver.cmd

+17
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

node_modules/.bin/semver.ps1

+18
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)