Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //logger nie jest w innej klasie
- const express = require('express')
- const app = express()
- const Joi = require('joi')
- const path = require('path')
- const cookieParser = require('cookie-parser')
- const session = require('express-session')
- const EventEitter = require('events')
- logger = new EventEitter()
- app.set('view engine', 'ejs')
- app.set('views', path.join(__dirname, 'views'))
- app.use(express.static(path.join(__dirname, 'static')))
- app.use(session({
- resave: true,
- saveUninitialized: true,
- secret: 'tajnykluczsesjissi'
- }))
- app.use(cookieParser('tajnykluczssi'))
- app.use(express.urlencoded({extended: true}))
- app.use(express.json())
- const listaUzytkownikow = [
- {id: 1, login: "admin", password: "pass", permissions: 2},
- {id: 2, login: "user1", password: "pass", permissions: 1},
- {id: 3, login: "user2", password: "pass", permissions: 1},
- {id: 4, login: "user3", password: "pass", permissions: 1},
- ]
- const logs = []
- // view engine setup
- app.set('views', path.join(__dirname, 'views'));
- app.set('view engine', 'ejs');
- app.get('/', (req, res) => {
- logger.emit("ADD")
- res.send(listaUzytkownikow)
- })
- app.get('/uzytkownicy', authorize, (req, res) => {
- logger.emit("VIEW LIST")
- res.render('lista', {lista: listaUzytkownikow})
- })
- app.get('/:id(\\d+)', (req, res) => {
- let element = listaUzytkownikow.find(l => l.id === parseInt(req.params.id))
- if (!element) {
- res.status(404).send("Użytkownik o takim id nie został znaleziony")
- } else {
- logger.emit("VIEW DETAILS")
- res.send(element)
- }
- })
- app.post('/', (req, res) => {
- const {error} = validate(req.body)
- if (error) {
- res.status(400).send(error.details[0].message)
- } else {
- let element = listaUzytkownikow.find(l => l.login === req.body.login)
- if (!element) {
- const user = {
- id: listaUzytkownikow.length + 1,
- login: req.body.login,
- password: req.body.password,
- permissions: req.body.permissions
- }
- listaUzytkownikow.push(user)
- logger.emit("ADD")
- var returnUrl = req.query.returnUrl
- res.redirect(returnUrl)
- } else {
- return res.status(404).send("Użytkownik o takim loginie już istnieje")
- }
- }
- })
- app.put('/:id', (req, res) => {
- let element = listaUzytkownikow.find(l => l.id === parseInt(req.params.id))
- if (!element) {
- return res.status(404).send("Element o takim id nie został znaleziony")
- }
- const wynik = validate(req.body)
- if (wynik.error) {
- return res.status(400).send(wynik.error.details[0].message)
- }
- element.login = req.body.login
- element.password = req.body.password
- element.permissions = req.body.permissions
- logger.emit("EDIT")
- res.send(element)
- })
- app.delete("/:id", (req, res) => {
- let element = listaUzytkownikow.find(l => l.id === parseInt(req.params.id))
- if (!element) {
- return res.status(404).send("Element o takim id nie został znaleziony")
- }
- const index = listaUzytkownikow.indexOf(element)
- listaUzytkownikow.splice(index, 1)
- logger.emit("DELETE")
- res.send(element)
- })
- app.get('/login', (req, res) => {
- res.render('zaloguj')
- })
- app.get('/logout', authorize, (req, res) => {
- res.cookie("user", "", {maxAge: -1})
- logger.emit("LOGOUT")
- res.redirect('/login')
- })
- app.post('/login', (req, res) => {
- var username = req.body.login
- var password = req.body.password
- let user = listaUzytkownikow.find(el => el.login === username)
- if (user != null && user.password === password) {
- res.cookie('user', username, {signed: true})
- var returnUrl = req.query.returnUrl
- logger.emit("LOGIN")
- res.redirect(returnUrl)
- } else {
- res.render('zaloguj', {wiadomosc: 'Niepoprawne dane logowania'})
- }
- })
- app.get('/dodaj', authorize, (req, res) => {
- res.render('dodaj')
- })
- app.get('/logs', authorize, (req, res) => {
- res.render('logi', {logs: logs})
- })
- function authorize(req, res, next) {
- if (req.signedCookies.user) {
- req.user = req.signedCookies.user
- next()
- } else {
- logger.emit("UNAUTH")
- res.redirect('login?returnUrl=' + req.url)
- }
- }
- function validate(element) {
- const schemat = {
- login: Joi.string().min(2).required(),
- password: Joi.string().min(3).required(),
- permissions: Joi.number().required()
- }
- return Joi.validate(element, schemat)
- }
- logger.on("ADD", () => {
- logs.push({id: logs.length, time: Date.now(), message: "ADDED NEW USER"})
- })
- logger.on("EDIT", () => {
- logs.push({id: logs.length, time: Date.now(), message: "EDITED USER"})
- })
- logger.on("DELETE", () => {
- logs.push({id: logs.length, time: Date.now(), message: "DELETED USER"})
- })
- logger.on("VIEW LIST", () => {
- logs.push({id: logs.length, time: Date.now(), message: "VIEWED LIST"})
- })
- logger.on("VIEW DETAILS", () => {
- logs.push({id: logs.length, time: Date.now(), message: "VIEWED DETAILS OF USER"})
- })
- logger.on("LOGIN", () => {
- logs.push({id: logs.length, time: Date.now(), message: "LOGGED IN"})
- })
- logger.on("LOGOUT", () => {
- logs.push({id: logs.length, time: Date.now(), message: "LOGGED OUT"})
- })
- logger.on("UNAUTH", () => {
- logs.push({id: logs.length, time: Date.now(), message: "TRY OF UNAUTHORIZED ACCESS"})
- })
- app.listen(3000, () => console.log("Oczekuję na porcie ", 3000))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement