Move routes to separate files
This commit is contained in:
parent
af378b0f50
commit
97264f5e1d
8 changed files with 143 additions and 79 deletions
94
app.js
94
app.js
|
@ -4,22 +4,17 @@ let cookieParser = require("cookie-parser");
|
|||
let bodyParser = require('body-parser');
|
||||
let session = require("express-session");
|
||||
let fs = require("fs");
|
||||
let passwordHash = require('password-hash');
|
||||
let multer = require("multer");
|
||||
let crypto = require("crypto");
|
||||
let path = require("path");
|
||||
let addUser = require("./user").addUser;
|
||||
|
||||
let indexRoute = require("./routes/index");
|
||||
let uploadRoute = require("./routes/upload");
|
||||
let loginRoute = require("./routes/login");
|
||||
let imagesRoute = require("./routes/images");
|
||||
let notFoundRoute = require("./routes/notFound");
|
||||
let errorRoute = require("./routes/error");
|
||||
|
||||
let app = express();
|
||||
let storage = multer.diskStorage({
|
||||
destination: './images/',
|
||||
filename: function (req, file, cb) {
|
||||
crypto.pseudoRandomBytes(16, function (err, raw) {
|
||||
if (err) return cb(err)
|
||||
cb(null, raw.toString('hex') + path.extname(file.originalname))
|
||||
})
|
||||
}}
|
||||
);
|
||||
let upload = multer({storage: storage});
|
||||
|
||||
|
||||
if (!fs.existsSync("users.json")) {
|
||||
fs.writeFileSync("users.json", "{}");
|
||||
|
@ -30,28 +25,6 @@ if (!fs.existsSync("users.json")) {
|
|||
addUser();
|
||||
}
|
||||
|
||||
async function addUser() {
|
||||
let rl = require("readline").createInterface({input: process.stdin, output: process.stdout, terminal: false});
|
||||
let username;
|
||||
let password;
|
||||
file = JSON.parse(fs.readFileSync("users.json"));
|
||||
do {
|
||||
username = await new Promise(resolve => rl.question("Username: ", resolve));
|
||||
} while (username in file || ["", null].indexOf(username) >= 0);
|
||||
password = passwordHash.generate(await new Promise(resolve => rl.question("Password: ", resolve)));
|
||||
file[username] = password;
|
||||
fs.writeFileSync("users.json", JSON.stringify(file));
|
||||
}
|
||||
|
||||
|
||||
function isAuth(req, res, next) {
|
||||
if (req.session.login) {
|
||||
next();
|
||||
} else {
|
||||
res.redirect("/login");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
app.use(morgan("dev"))
|
||||
.use(express.static("public"))
|
||||
|
@ -65,48 +38,11 @@ app.use(morgan("dev"))
|
|||
}))
|
||||
.set("trust proxy", 1)
|
||||
.set("view engine", "pug")
|
||||
.get("/", isAuth, (req, res) => {
|
||||
res.render("index");
|
||||
})
|
||||
.post("/upload", isAuth, upload.single("image"), (req, res) => {
|
||||
res.redirect("/images/" + req.file.filename);
|
||||
})
|
||||
.get("/login", (req, res) => {
|
||||
let fail = false;
|
||||
if ("fail" in req.query) {
|
||||
fail = true;
|
||||
}
|
||||
res.render("login", {title: "login", fail: fail});
|
||||
})
|
||||
.post("/login", (req, res) => {
|
||||
if ("username" in req.body && "password" in req.body) {
|
||||
file = JSON.parse(fs.readFileSync("users.json"));
|
||||
if (req.body.username in file && passwordHash.verify(req.body.password, file[req.body.username])) {
|
||||
req.session.login = true;
|
||||
req.session.save();
|
||||
res.redirect("/");
|
||||
} else {
|
||||
res.redirect("/login?fail");
|
||||
}
|
||||
} else {
|
||||
res.redirect("/login?fail");
|
||||
}
|
||||
})
|
||||
.get("/images/:name", (req, res, next) => {
|
||||
if ("name" in req.params && fs.existsSync("./images/"+req.params.name)) {
|
||||
res.sendfile("./images/"+req.params.name);
|
||||
} else {
|
||||
next();
|
||||
}
|
||||
})
|
||||
.use((req, res) => {
|
||||
res.status(404);
|
||||
res.render("404", {url: req.path});
|
||||
})
|
||||
.use((err, req, res, next) => {
|
||||
console.error(err.stack);
|
||||
res.status(500);
|
||||
res.render("error");
|
||||
})
|
||||
.use("/", indexRoute)
|
||||
.use("/upload", uploadRoute)
|
||||
.use("/login", loginRoute)
|
||||
.use("/images", imagesRoute)
|
||||
.use(notFoundRoute)
|
||||
.use(errorRoute)
|
||||
.listen(8080);
|
||||
|
||||
|
|
6
routes/error.js
Normal file
6
routes/error.js
Normal file
|
@ -0,0 +1,6 @@
|
|||
module.exports = (err, req, res, next) => {
|
||||
console.error(err.stack);
|
||||
res.status(500);
|
||||
res.render("error");
|
||||
}
|
||||
|
15
routes/images.js
Normal file
15
routes/images.js
Normal file
|
@ -0,0 +1,15 @@
|
|||
let router = require("express").Router();
|
||||
let fs = require("fs");
|
||||
|
||||
|
||||
router.get("/:name", (req, res, next) => {
|
||||
if ("name" in req.params && fs.existsSync("./images/"+req.params.name)) {
|
||||
res.sendfile("./images/"+req.params.name);
|
||||
} else {
|
||||
next();
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
module.exports = router;
|
||||
|
11
routes/index.js
Normal file
11
routes/index.js
Normal file
|
@ -0,0 +1,11 @@
|
|||
let router = require("express").Router();
|
||||
let isAuth = require("../user").isAuth;
|
||||
|
||||
|
||||
router.get("/", isAuth, (req, res) => {
|
||||
res.render("index");
|
||||
});
|
||||
|
||||
|
||||
module.exports = router;
|
||||
|
31
routes/login.js
Normal file
31
routes/login.js
Normal file
|
@ -0,0 +1,31 @@
|
|||
let router = require("express").Router();
|
||||
let fs = require("fs");
|
||||
let passwordHash = require('password-hash');
|
||||
|
||||
|
||||
router.get("/", (req, res) => {
|
||||
let fail = false;
|
||||
if ("fail" in req.query) {
|
||||
fail = true;
|
||||
}
|
||||
res.render("login", {title: "login", fail: fail});
|
||||
});
|
||||
|
||||
router.post("/", (req, res) => {
|
||||
if ("username" in req.body && "password" in req.body) {
|
||||
file = JSON.parse(fs.readFileSync("users.json"));
|
||||
if (req.body.username in file && passwordHash.verify(req.body.password, file[req.body.username])) {
|
||||
req.session.login = true;
|
||||
req.session.save();
|
||||
res.redirect("/");
|
||||
} else {
|
||||
res.redirect("/login?fail");
|
||||
}
|
||||
} else {
|
||||
res.redirect("/login?fail");
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
module.exports = router;
|
||||
|
11
routes/notFound.js
Normal file
11
routes/notFound.js
Normal file
|
@ -0,0 +1,11 @@
|
|||
let router = require("express").Router();
|
||||
|
||||
|
||||
router.use((req, res) => {
|
||||
res.status(404);
|
||||
res.render("404", {url: req.path});
|
||||
});
|
||||
|
||||
|
||||
module.exports = router
|
||||
|
25
routes/upload.js
Normal file
25
routes/upload.js
Normal file
|
@ -0,0 +1,25 @@
|
|||
let router = require("express").Router();
|
||||
let isAuth = require("../user").isAuth;
|
||||
let multer = require("multer");
|
||||
let crypto = require("crypto");
|
||||
let path = require("path");
|
||||
|
||||
let storage = multer.diskStorage({
|
||||
destination: './images/',
|
||||
filename: (req, file, cb) => {
|
||||
crypto.pseudoRandomBytes(16, (err, raw) => {
|
||||
if (err) return cb(err)
|
||||
cb(null, raw.toString('hex') + path.extname(file.originalname));
|
||||
});
|
||||
}
|
||||
});
|
||||
let upload = multer({storage: storage});
|
||||
|
||||
|
||||
router.post("/", isAuth, upload.single("image"), (req, res) => {
|
||||
res.redirect("/images/" + req.file.filename);
|
||||
});
|
||||
|
||||
|
||||
module.exports = router;
|
||||
|
29
user.js
Normal file
29
user.js
Normal file
|
@ -0,0 +1,29 @@
|
|||
let fs = require("fs");
|
||||
let passwordHash = require('password-hash');
|
||||
|
||||
|
||||
async function addUser() {
|
||||
let rl = require("readline").createInterface({input: process.stdin, output: process.stdout, terminal: false});
|
||||
let username;
|
||||
let password;
|
||||
file = JSON.parse(fs.readFileSync("users.json"));
|
||||
do {
|
||||
username = await new Promise(resolve => rl.question("Username: ", resolve));
|
||||
} while (username in file || ["", null].indexOf(username) >= 0);
|
||||
password = passwordHash.generate(await new Promise(resolve => rl.question("Password: ", resolve)));
|
||||
file[username] = password;
|
||||
fs.writeFileSync("users.json", JSON.stringify(file));
|
||||
}
|
||||
|
||||
function isAuth(req, res, next) {
|
||||
if (req.session.login) {
|
||||
next();
|
||||
} else {
|
||||
res.redirect("/login");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
module.exports.addUser = addUser;
|
||||
module.exports.isAuth = isAuth;
|
||||
|
Loading…
Reference in a new issue