diff options
| -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();  | 
