Advertisement
Sothian

GrelaPrzepisaneLab4

Nov 17th, 2019
244
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. const Joi = require('joi');
  2. const express = require('express');
  3. const session = require('express-session');
  4. const path = require('path');
  5. // const EJS = require('ejs');
  6. const cookieParser = require('cookie-parser');
  7. const app = express();
  8.  
  9. app.set('view engine', 'ejs');
  10. // app.set('views', './views');
  11. app.set('views', path.join(__dirname, 'views'));
  12.  
  13. app.use(session({
  14.     resave: true,
  15.     saveUninitialized: true,
  16.     secret: 'tajnyKlucz'
  17. }));
  18.  
  19. app.use(cookieParser('tajnyKlucz'));
  20. app.use(express.urlencoded({extended: true}));
  21.  
  22. app.use(express.static(path.join(__dirname, 'static')));
  23.  
  24. app.use(express.json());
  25.  
  26. const lista = [
  27.     {
  28.         id:1,
  29.         nazwa: 'ALFA ROMEO'
  30.     },
  31.     {
  32.         id:2,
  33.         nazwa: 'AUDI'
  34.     },
  35.     {
  36.         id:3,
  37.         nazwa: 'BMW'
  38.     },
  39.     {
  40.         id:4,
  41.         nazwa: 'CITROEN'
  42.     },
  43. ];
  44.  
  45. app.get('/', (req, res) => {
  46.     var uzytkownikCiasteczko = req.signedCookies.uzytkownik;
  47.     res.render('index', {
  48.         username: 'testowy',
  49.         uzytkownik: uzytkownikCiasteczko
  50.     });
  51. });
  52.  
  53. app.get('/wyloguj', (req, res) => {
  54.    res.cookie('uzytkownik', '', {maxAge: -1});
  55.    res.redirect('/');
  56. });
  57.  
  58. app.get('/zaloguj', (req, res) => {
  59.    res.render('zaloguj');
  60. });
  61.  
  62. function authorize(req, res, next) {
  63.     if(req.signedCookies.uzytkownik) {
  64.         req.uzytkownik = req.signedCookies.uzytkownik;
  65.         next();
  66.     } else {
  67.         res.redirect('/zaloguj?returnUrl='+req.url);
  68.     }
  69. }
  70.  
  71. app.post('zaloguj', (req, res) => {
  72.     var username = req.body.txtUser;
  73.     var password = req.body.txtPwd;
  74.  
  75.     if(username == password) {
  76.         // ustawiamy ciasteczko
  77.         res.cookie('uzytkownik', username, {signed: true});
  78.  
  79.         // ewentualne przekierowanie
  80.         var returnUrl = req.query.returnUrl;
  81.         if(returnUrl) {
  82.             res.redirect(returnUrl);
  83.         } else {
  84.             res.redirect('/');
  85.         }
  86.     } else {
  87.         res.render('zaloguj', {wiadomosc: 'Niepoprawna nazwa uzytkownika lub haslo'});
  88.     }
  89. });
  90.  
  91. app.get('/lista', authorize, (req, res) => {
  92.     res.render('lista', {lista: lista});
  93. });
  94.  
  95. app.get('/ciastko', (req, res) => {
  96.     var cookieValue;
  97.     if(!req.cookies.ciasteczko) {
  98.         cookieValue = new Date().toString();
  99.         res.cookie('ciasteczko', cookieValue);
  100.     } else {
  101.         cookieValue = req.cookies.ciasteczko;
  102.     }
  103.     res.render('ciastko', {cookieValue: cookieValue});
  104. });
  105.  
  106. app.use('/podpisaneCiastko', (req, res) => {
  107.     var cookieValue;
  108.     if(!req.signedCookies.podpisaneCiastko) {
  109.         cookieValue = "Podpisana Wiadomosc" + new Date().toString();
  110.         res.cookie('signedCookies', cookieValue, {signed: true});
  111.     } else {
  112.         cookieValue = req.signedCookies.podpisaneCiastko;
  113.     }
  114.     res.render('ciastko', {cookieValue: cookieValue});
  115. })
  116.  
  117. app.use('/sesja',(req, res) => {
  118.     var sessionValue;
  119.     if(!req.session.sessionValue) {
  120.         sessionValue = `data w sesji: ${new Date()}`;
  121.         res.session.sessionValue = sessionValue;
  122.     } else {
  123.         sessionValue = req.session.sessionValue;
  124.     }
  125.     res.render('sesja', {sessionValue: sessionValue});
  126. })
  127.  
  128. app.get('api/lista', (req, res) => {
  129.     res.send(lista);
  130. })
  131.  
  132. app.get('api/lista/:id(\\d+)', (req, res) => {
  133.     let element = lista.find(l => l.id === parseInt(req.params.id));
  134.     if(!element) {
  135.         res.status(404).send('Element o takim id nie istnieje');
  136.     } else {
  137.         res.send(element);
  138.     }
  139. })
  140.  
  141. app.post('api/lista',(req, res) => {
  142.     const { error } = sprawdzElement(req.body);
  143.     if(error) {
  144.         res.status(400).send(error.details[0].message);
  145.         return;
  146.     }
  147.  
  148.     let element = {
  149.         id: lista.length + 1,
  150.         nazwa: req.body.nazwa
  151.     }
  152.  
  153.     lista.push(element);
  154.     res.send(element);
  155. })  
  156.  
  157. app.put('api/lista/:id',(req, res) => {
  158.     let element = lista.find(l => l.id === parseInt(req.params.id));
  159.     if(!element) {
  160.         return res.status(404).send('Element o takim id nie istnieje');
  161.     }
  162.     const wynik = sprawdzElement(req.body);
  163.     if(wynik.error) {
  164.         return res.status(400).send(error.details[0].message);
  165.     }
  166.  
  167.     element.nazwa = req.body.nazwa;
  168.     res.send(element);
  169. })
  170.  
  171. app.delete('api/lista/:id',(req, res) => {
  172.     let element = lista.find(l => l.id === parseInt(req.params.id));
  173.     if(!element) {
  174.         return res.status(404).send('Element o takim id nie istnieje');
  175.     }
  176.     const index = lista.indexOf(element);
  177.     lista.splice(index, 1);
  178.  
  179.     res.send(element);
  180. })
  181.  
  182. function sprawdzElement(element) {
  183.     const schemat = {
  184.         nazwa: Joi.string().min(2).required()
  185.     };
  186.     return Joi.validate(element, schemat);
  187. }
  188.  
  189. app.use((req, res, next) => {
  190.     res.render('404.ejs', {url: req.url});
  191. });
  192.  
  193. const port = process.env.PORT || 3000;
  194. app.listen(port, ()=> console.log(`Oczekuje na porcie ${port}`));
  195.  
  196. //////////////////////////// static/style.css
  197. body {
  198.     padding: 20px;
  199.     font: 14px sans-serif;
  200.     background: aliceblue;
  201. }
  202. a {
  203.     color: #00B7FF;
  204. }
  205. .user {
  206.     color: blue;
  207. }
  208. form {
  209.     display: flex;
  210.     justify-content: center;
  211.     align-items: center;
  212. }
  213. #login {
  214.     padding: 20px;
  215.     border: 1px solid black;
  216. }
  217. #login div {
  218.     overflow: auto;
  219. }
  220. #login input {
  221.     float: right;
  222. }
  223. button {
  224.     clear: both;
  225. }
  226. .wiadomosc {
  227.     color: red;
  228. }
  229.  
  230. //////////////////////////// views/index.ejs
  231. <!DOCTYPE html>
  232. <html lang="pl">
  233. <head>
  234.     <meta charset="UTF-8">
  235.     <title>Strona glowna</title>
  236. </head>
  237. <body>
  238.     Witaj w index.ejs <br/>
  239.     Username: <%=username %> <br/>
  240.     <br/>
  241.     <% if(uzytkownik) { %>
  242.         Witaj, jestes zalogowany jako  <%=uzytkownik%>.
  243.         <a href="/wyloguj">Wyloguj</a>
  244.     <% } else { %>
  245.         Kliknij <a href="/zaloguj">tutaj</a> aby sie zalogowac.
  246.     <% } %>
  247.  
  248.     <br/>
  249.     <br/>
  250.     <% var zmienna = 'abc' %>
  251.     <% for(var i=0; i<5; i++) { %>
  252.         <div>
  253.         Element <%= i %>
  254.         </div>
  255.     <% } %>
  256.     Zmienna: <%= zmienna %>
  257. </body>
  258. </html>
  259.  
  260. ////////////////////////////  views/lista.ejs
  261. <!DOCTYPE html>
  262. <html lang="pl">
  263. <head>
  264.     <meta charset="UTF-8">
  265.     <title> Lista </title>
  266.     <link rel="stylesheet" href="" />
  267. </head>
  268. <body>
  269.     <table>
  270.         <tr>
  271.             <th> ID </th>
  272.             <th> Nazwa </th>
  273.             <th> Szczegoly </th>
  274.         </tr>
  275.         <% lista.forEach( element => { %>
  276.         <tr>
  277.             <td> <%= element.id %> </td>
  278.             <td> <%= element.nazwa %> </td>
  279.             <td><a href='/api/lista/<%= element.id %>'> Info </a></td>
  280.         </tr>
  281.          <% }) %>
  282.     </table>
  283. </body>
  284. </html>
  285.  
  286. //////////////////////////// views/ciastko.ejs
  287. <!DOCTYPE html>
  288. <html lang="pl">
  289. <head>
  290.     <meta charset="UTF-8">
  291.     <title>Ciastko</title>
  292.     <link rel="stylesheet" href="" />
  293. </head>
  294. <body>
  295.     Wartosc z ciastka: <br/>
  296.     <b> <%= cookieValue %> </b><br/>
  297. </body>
  298. </html>
  299.  
  300. //////////////////////////// views/404.ejs
  301. <!DOCTYPE html>
  302. <html lang="pl">
  303. <head>
  304.     <meta charset="UTF-8">
  305.     <title>Blad 404</title>
  306.     <link rel="stylesheet" href="" />
  307. </head>
  308. <body>
  309.     Strona <%= url %> nie zostala odnaleziona
  310. </body>
  311. </html>
  312.  
  313. //////////////////////////// views/sesja.ejs
  314. <!DOCTYPE html>
  315. <html lang="pl">
  316. <head>
  317.     <meta charset="UTF-8">
  318.     <title>Sesja</title>
  319.     <link rel="stylesheet" href="" />
  320. </head>
  321. <body>
  322.     Wartosc z sesji: <br/>
  323.     <b> <%= sessionValue %> </b><br/>
  324. </body>
  325. </html>
  326.  
  327. //////////////////////////// views/zaloguj.ejs
  328. <!DOCTYPE html>
  329. <html lang="pl">
  330. <head>
  331.     <meta charset="UTF-8">
  332.     <title>Logowanie</title>
  333.     <link rel="stylesheet" href="" />
  334. </head>
  335. <body>
  336.     <form method="POST">
  337.         <div id='login'>
  338.             <div>
  339.                 <h4>Logowanie</h4>
  340.             </div>
  341.             <div>
  342.                 <input type="text" name="txtUser" />
  343.                 <label>Nazwa uzytkownika: </label>
  344.             </div>
  345.             <div>
  346.                 <input type="text" name="txtPwd" />
  347.                 <label>Haslo: </label>
  348.             </div>
  349.             <div>
  350.                 <button>zaloguj</button>
  351.             </div>
  352.             <% if(locals.wiadomosc){ %>
  353.             <div>
  354.                 <%= locals.wiadomosc %>
  355.             </div>
  356.             <% } %>
  357.         </div>
  358.     </form>
  359. </body>
  360. </html>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement