150 lines
3.6 KiB
JavaScript
150 lines
3.6 KiB
JavaScript
|
const express = require("express")
|
|||
|
const bodyParser = require("body-parser");
|
|||
|
const app = express();
|
|||
|
const hbs = require('hbs');
|
|||
|
const path = require('path');
|
|||
|
const db = require("./db")
|
|||
|
const session = require("express-session");
|
|||
|
require("./moderator");
|
|||
|
hbs.registerPartials(path.join(__dirname, 'views/partials'));
|
|||
|
|
|||
|
app.use(session({
|
|||
|
secret: 'this is the most random keyphrase that you have ever encountered. it should be very secure and not easy to crack so that nobody can fake the cookie',
|
|||
|
resave: false,
|
|||
|
saveUninitialized: true,
|
|||
|
cookie: { secure: false, httpOnly: false }
|
|||
|
}))
|
|||
|
|
|||
|
app.use(bodyParser.urlencoded());
|
|||
|
|
|||
|
app.set('view engine', 'hbs');
|
|||
|
app.set('views', path.join(__dirname, 'views'));
|
|||
|
|
|||
|
function addErrors(request) {
|
|||
|
return []
|
|||
|
}
|
|||
|
|
|||
|
function checkForm(fields, data) {
|
|||
|
for (let field in fields) {
|
|||
|
if (!(data.hasOwnProperty(field) && typeof data[field] === fields[field])) {
|
|||
|
return false;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
return true;
|
|||
|
}
|
|||
|
|
|||
|
app.get("/", (req, res) => {
|
|||
|
res.render("index");
|
|||
|
});
|
|||
|
|
|||
|
app.get("/login", (req, res) => {
|
|||
|
const errors = addErrors(req)
|
|||
|
res.render("login",{
|
|||
|
errors,
|
|||
|
})
|
|||
|
});
|
|||
|
|
|||
|
app.post("/login", (req, res) => {
|
|||
|
if (!checkForm({
|
|||
|
username: "string",
|
|||
|
password: "string",
|
|||
|
}, req.body)) {
|
|||
|
res.redirect("/login?error=invalid")
|
|||
|
} else {
|
|||
|
const user = db.checkLogin(req.body.username, req.body.password);
|
|||
|
if (user) {
|
|||
|
req.session.loggedIn = user;
|
|||
|
res.redirect("/posts")
|
|||
|
} else {
|
|||
|
res.redirect("/login?error=invalid pwd")
|
|||
|
}
|
|||
|
}
|
|||
|
});
|
|||
|
|
|||
|
app.post("/register", (req, res) => {
|
|||
|
if (!checkForm({
|
|||
|
username: "string",
|
|||
|
password: "string"
|
|||
|
}, req.body)) {
|
|||
|
res.redirect("/register?error")
|
|||
|
} else {
|
|||
|
const registerTry = db.registerUser(req.body.username, req.body.password);
|
|||
|
if (registerTry) {
|
|||
|
res.redirect("/register?error=user already exists");
|
|||
|
} else {
|
|||
|
res.redirect("/login")
|
|||
|
}
|
|||
|
}
|
|||
|
});
|
|||
|
|
|||
|
|
|||
|
app.get("/register", (req, res) => {
|
|||
|
const errors = addErrors(req)
|
|||
|
res.render("register", {
|
|||
|
errors,
|
|||
|
})
|
|||
|
});
|
|||
|
|
|||
|
app.get("/posts", (req, res) => {
|
|||
|
if (req.session.loggedIn) {
|
|||
|
const userId = req.session.loggedIn;
|
|||
|
const posts = db.getPostsBy(userId);
|
|||
|
res.render("posts", {posts: posts});
|
|||
|
} else {
|
|||
|
res.redirect("/login");
|
|||
|
}
|
|||
|
});
|
|||
|
|
|||
|
app.get("/create", (req, res) => {
|
|||
|
if (req.session.loggedIn) {
|
|||
|
res.render("create_post");
|
|||
|
} else {
|
|||
|
res.redirect("/login");
|
|||
|
}
|
|||
|
});
|
|||
|
|
|||
|
app.post("/create", (req, res) => {
|
|||
|
if (req.session.loggedIn && !db.isModerator(req.session.loggedIn)) {
|
|||
|
if (checkForm({content: "string"}, req.body)) {
|
|||
|
const userId = req.session.loggedIn;
|
|||
|
db.addPost(req.body.content, userId);
|
|||
|
res.redirect("/posts")
|
|||
|
} else {
|
|||
|
res.redirect("/create");
|
|||
|
}
|
|||
|
} else {
|
|||
|
res.redirect("/login");
|
|||
|
}
|
|||
|
});
|
|||
|
|
|||
|
app.get("/post/:id", (req, res) => {
|
|||
|
if (req.session.loggedIn) {
|
|||
|
const userId = req.session.loggedIn;
|
|||
|
const postId = req.params.id;
|
|||
|
const post = db.getPostById(postId);
|
|||
|
if (post.by != userId && !db.isModerator(userId)) {
|
|||
|
res.redirect("/posts");
|
|||
|
} else {
|
|||
|
res.render("post", {post: post});
|
|||
|
}
|
|||
|
} else {
|
|||
|
res.redirect("/login");
|
|||
|
}
|
|||
|
});
|
|||
|
|
|||
|
app.get("/moderate", (req, res) => {
|
|||
|
if (db.isModerator(req.session.loggedIn)) {
|
|||
|
res.render("posts", {posts: db.getAllPosts() })
|
|||
|
} else {
|
|||
|
res.redirect("/posts?error=access denied");
|
|||
|
}
|
|||
|
});
|
|||
|
|
|||
|
app.use(express.static('public'))
|
|||
|
db.resetStore()
|
|||
|
|
|||
|
setInterval(() => { console.log("resetting store"); db.resetStore() }, 60*1000*15);
|
|||
|
|
|||
|
app.listen(8001);
|