aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoel Kronqvist <joelkronqvist@proton.me>2023-06-21 18:27:23 +0000
committerJoel Kronqvist <joelkronqvist@proton.me>2023-06-21 18:27:23 +0000
commitf51bce27eb3dfac0ed2590d43e179d160e0b99f5 (patch)
treea413832e2ddeeaf9227220c1d4306fc555b6b884
parente4bd0977da3621a8d3f82cab949a6734b169b71e (diff)
downloadLYLLRuoka-f51bce27eb3dfac0ed2590d43e179d160e0b99f5.tar.gz
LYLLRuoka-f51bce27eb3dfac0ed2590d43e179d160e0b99f5.zip
password for updation
-rw-r--r--Cont/custom-message/index.html2
-rw-r--r--Cont/panel/index.html19
-rw-r--r--server.js30
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>
diff --git a/server.js b/server.js
index 82d1066..c3155d2 100644
--- a/server.js
+++ b/server.js
@@ -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();