diff options
author | Joel Kronqvist <joelkronqvist@proton.me> | 2023-06-21 18:27:23 +0000 |
---|---|---|
committer | Joel Kronqvist <joelkronqvist@proton.me> | 2023-06-21 18:27:23 +0000 |
commit | f51bce27eb3dfac0ed2590d43e179d160e0b99f5 (patch) | |
tree | a413832e2ddeeaf9227220c1d4306fc555b6b884 | |
parent | e4bd0977da3621a8d3f82cab949a6734b169b71e (diff) | |
download | LYLLRuoka-f51bce27eb3dfac0ed2590d43e179d160e0b99f5.tar.gz LYLLRuoka-f51bce27eb3dfac0ed2590d43e179d160e0b99f5.zip |
password for updation
-rw-r--r-- | Cont/custom-message/index.html | 2 | ||||
-rw-r--r-- | Cont/panel/index.html | 19 | ||||
-rw-r--r-- | server.js | 30 |
3 files changed, 45 insertions, 6 deletions
diff --git a/Cont/custom-message/index.html b/Cont/custom-message/index.html index a4b728a..1e50147 100644 --- a/Cont/custom-message/index.html +++ b/Cont/custom-message/index.html @@ -2,7 +2,7 @@ <html lang="fi"> <head> <meta charset="utf-8"> - <title>Page not found</title> + <title>LYLL-ruoka</title> <link href="/index.css" rel="stylesheet" type="text/css"> <link href="/non-main.css" rel="stylesheet" type="text/css"> <link href="/404/index.css" rel="stylesheet" type="text/css"> diff --git a/Cont/panel/index.html b/Cont/panel/index.html index 7715e9a..ab607c6 100644 --- a/Cont/panel/index.html +++ b/Cont/panel/index.html @@ -4,6 +4,7 @@ <meta charset="utf-8"> <title>LYLL-ruokailuvuoro</title> <link href="/index.css" rel="stylesheet" type="text/css"> + <link href="/non-main.css" rel="stylesheet" type="text/css"> <link rel="icon" type="image/x-icon" href="/Images/favicon.ico"> <meta name="viewport" content="width=device-width, initial-scale=1"> </head> @@ -16,22 +17,34 @@ <main> <form method="POST"> - <p class=shadow>Liitä allaolevaan tekstikenttään ruokailuvuorot (Wilma-viestin teksti):</p> + <p class=shadow>Korvaa alla olevaan tekstikenttään tämän jakson ruokailuvuorot. Tai seuraavan jakson ruokailuvuorot. Huomaa kuitenkin, että ne tulevat heti julkisiksi eivätkä vasta seuraavassa jaksossa.</p> <br> <textarea name="shifts" rows="24" style="text-align: left;">\(shifts\)</textarea> <br> - <p class="shadow">Liitä allaolevaan tekstikenttään kurssitarjottimista tämä jakso. Voit avata kurssitarjottimet Excelissä tai Libreoffice Calcissa, valita alueen, jossa on jakson kurssit ja CTRL+C CTRL+V tähän. Toista sama kaikille jakson alueille kaikista vuoden kurssitarjottimista.</p> + <br> + <p class="shadow">Korvaa allaolevaan tekstikenttään kurssitarjottimista tämä jakso. Voit avata kurssitarjottimet Excelissä tai Libreoffice Calcissa, valita alueen, jossa on jakson kurssit ja CTRL+C CTRL+V tähän. Toista sama kaikille jakson alueille kaikista vuoden kurssitarjottimista.</p> <br> <textarea name="classes" rows="24" style="text-align: left;">\(classes\)</textarea> <br> <br> - <p class="shadow">Alta voit muokata ilmoituksia.</p> + <p class="shadow">Alta voit muokata ilmoituksia, jotka korvaavat ruokailuvuorohaun tuloskentän. Nämä ilmoitukset sopivat mainiosti kaikkiin lomiin, koeviikkoihin ca muihin tapahtumiin, jotka muuttavat ruokailuvuoroja (lomallakin ruokailuvuorot muuttuvat, koska niitä ei silloin järjestetä).</p> + <br> <textarea name="exceptions" rows="16" style="text-align: left;">\(exceptions\)</textarea> <br> + <br> + <label for="password">Syötä salasana</label> + <input type="password" name="password" id="password" required> + <br> + <br> <input type="submit" id="send" class="highlight" value="Päivitä"> <br> + <br> <p>Painikkeen painamisen jälkeen seuraavan sivun latautumisessa kestää, koska serveri käsittelee syötteesi loppuun asti ennen vastaamista, jotta se voi kertoa, onnistuiko päivitys.</p> + + </form> + <p>Etkö tahtonutkaan päivittää mitään? Alta pääset takaisin etusivulle.</p> + <a class="back" href="/"><img src="/Images/back.png" alt="Takaisin etusivulle"></a> </main> <footer> @@ -9,10 +9,12 @@ const open = require("./Functions/open.js"); const strFuncs = require("./Functions/stringFuncs.js"); const dateFuncs = require("./Functions/dateFuncs.js"); const updateDB = require("./update.js"); +const { createHash} = require("node:crypto"); const SHIFTPATH = "../Updation/shifts.txt"; const CLASSPATH = "../Updation/classes.txt"; const EXCEPTIONPATH = "../Updation/exceptions.txt"; +const PASSPATH = "../password-hashes.txt"; async function init() { @@ -77,10 +79,13 @@ async function init() let q = new URLSearchParams(data); let shifts = ""; let classes = ""; + let exceptions = ""; + let suppliedPassword = ""; try { shifts = decodeURIComponent(q.get("shifts")).replaceAll("+", " ").replaceAll('\r\n', '\n'); classes = decodeURIComponent(q.get("classes")).replaceAll("+", " ").replaceAll('\r\n', '\n'); exceptions = decodeURIComponent(q.get('exceptions').replaceAll("+", ' ')).replaceAll('\r\n', '\n'); + suppliedPassword = decodeURIComponent(q.get('password')); } catch { console.log("Malformed url, presumably"); res.writeHead(400); @@ -88,12 +93,33 @@ async function init() res.end(cont); return; } - if (shifts === null || classes === null) { + if (shifts === null || classes === null || exceptions === null || suppliedPassword === null) { res.writeHead(400); - const cont = await buildCustomMessage("400: Virheellinen pyyntö", "Avaimia 'shifts' ja/tai 'classes' ei löytynyt pyynnöstä"); + const cont = await buildCustomMessage("400: Virheellinen pyyntö", "Kaikkia tietoja ei löytynyt pyynnöstä"); res.end(cont); return; } + + const hashObj = createHash("sha256"); + hashObj.update(suppliedPassword); + let suppliedPassHash = hashObj.digest('hex'); + console.log(suppliedPassHash); + let passHashes = await open.file(PASSPATH); + passHashes = passHashes.toString('utf-8').split("\n"); + let match = false; + for(let hash of passHashes) { + if (suppliedPassHash === hash) { + match = true; + break; + } + } + if (!match) { + res.writeHead(401); + const cont = await buildCustomMessage("401: Virheellinen salasana", ""); + res.end(cont); + return; + } + let shiftfile = await fs.open(`${SHIFTPATH}.tmp`, "w"); await shiftfile.write(shifts); shiftfile.close(); |