[feature] Add Prezenta (Attendance) and fix typos

main
Joaquin 3 years ago
parent 0a334773c1
commit dedb7e2893
Signed by: puly
GPG Key ID: 9E9299CD96C65EC6
  1. 69
      app.js
  2. 20
      webFiles/adminpanel.html
  3. 4
      webFiles/login.html
  4. 47
      webFiles/prezent.html

@ -25,6 +25,8 @@ var voteText = "Sunteti de acord cu initiativa X?";
var yesVotes = 0; var yesVotes = 0;
var noVotes = 0; var noVotes = 0;
var prezentaKey = 0;
if(!fs.existsSync('repo/secret')){ if(!fs.existsSync('repo/secret')){
secret = crypto.randomBytes(35).toString('hex'); secret = crypto.randomBytes(35).toString('hex');
fs.writeFileSync('repo/secret', secret); fs.writeFileSync('repo/secret', secret);
@ -50,6 +52,10 @@ function report(str){
logString = logString.concat('\n', str); logString = logString.concat('\n', str);
} }
function randomIntForPrezenta() {
return Math.floor(Math.random() * (999 - 100 + 1) + 100);
}
report("sha256 of secret string, check for persistance: 0x" + crypto.createHash('sha256').update(secret).digest('hex')); report("sha256 of secret string, check for persistance: 0x" + crypto.createHash('sha256').update(secret).digest('hex'));
@ -162,6 +168,25 @@ app.get('/home', (request, response) => {
}); });
} }
if(activity === "prezenta"){
if(credentials[request.session.user].present === 0){
fs.readFile('./webFiles/prezent.html', function(error, content){
if(error) report(error);
response.writeHead(200, {'Content-Type': 'text/html'});
response.end(content);
});
}else{
fs.readFile('./webFiles/noactivity.html', function(error, content){
if(error) report(error);
contentx = content.toString().replace("$USER$" , request.session.user);
response.writeHead(200, {'Content-Type': 'text/html'});
response.end(contentx);
});
}
}
if(activity === "vote" && credentials[request.session.user].votingRights === 1){ if(activity === "vote" && credentials[request.session.user].votingRights === 1){
fs.readFile('./webFiles/vote.html', function(error, content){ fs.readFile('./webFiles/vote.html', function(error, content){
if(error) report(error); if(error) report(error);
@ -242,13 +267,13 @@ app.get('/dashboard', (request, response) => {
app.get('/vote/yes', (request, response) => { app.get('/vote/yes', (request, response) => {
if(request.session.user){ if(request.session.user){
if(credentials[request.session.user].votingRights === 1){ if(credentials[request.session.user].votingRights === 1 && credentials[request.session.user].present === 1){
credentials[request.session.user].votingRights = 0; credentials[request.session.user].votingRights = 0;
yesVotes++; yesVotes++;
report(request.session.user + " - YES"); report(request.session.user + " - YES");
}else{ }else{
response.writeHead(200); response.writeHead(200);
response.end("ALREADY VOTED"); response.end("AI VOTAT DEJA / NU ESTI PREZENT");
return; return;
} }
} }
@ -261,13 +286,30 @@ app.get('/vote/yes', (request, response) => {
app.get('/vote/no', (request, response) => { app.get('/vote/no', (request, response) => {
if(request.session.user){ if(request.session.user){
if(credentials[request.session.user].votingRights === 1){ if(credentials[request.session.user].votingRights === 1 && credentials[request.session.user].present === 1){
credentials[request.session.user].votingRights = 0; credentials[request.session.user].votingRights = 0;
noVotes++; noVotes++;
report(request.session.user + " - NO"); report(request.session.user + " - NO");
}else{ }else{
response.writeHead(200); response.writeHead(200);
response.end("ALREADY VOTED"); response.end("AI VOTAT DEJA / NU ESTI PREZENT");
return;
}
}
response.redirect('/home');
response.end();
return;
});
app.get('/prezenta', (request, response) => {
if(request.session.user && activity === 'prezenta'){
if(request.query.key === prezentaKey.toString()){
credentials[request.session.user].present = 1;
}else{
response.writeHead(200);
response.end('BAD CODE');
return; return;
} }
} }
@ -332,6 +374,25 @@ app.get('/admindo', (request, response) => {
response.end(logString); response.end(logString);
return; return;
} }
if(request.query.do === 'prezenta'){
report("------------START PREZENTA------------");
activity = 'prezenta';
prezentaKey = randomIntForPrezenta();
report("KEY: " + prezentaKey);
}
if(request.query.do === 'stopprezenta'){
activity = 'none';
report("------------PREZENTA------------");
var prezenti = 0;
Object.keys(credentials).forEach(function(key) {
report(key.toString() + " - " + (credentials[key].present && credentials[key].loggedIn));
if(credentials[key].present && credentials[key].loggedIn) prezenti++;
});
report("++ PREZENTI: " + prezenti.toString() + " ++");
report("------------PREZENTA------------");
}
} }
response.redirect('/admin'); response.redirect('/admin');

@ -30,6 +30,12 @@
<p class="text-3xl pb-10 font-extrabold tracking-wide">AUDIT</p> <p class="text-3xl pb-10 font-extrabold tracking-wide">AUDIT</p>
<button type="button" class="rounded-xl w-full bg-indigo-900 my-2 py-5 my-2 px-5 text-sm md:text-xl font-bold tracking-wide justify-center items-center font-[manrope]" id="audit">ARATA AUDIT</button> <button type="button" class="rounded-xl w-full bg-indigo-900 my-2 py-5 my-2 px-5 text-sm md:text-xl font-bold tracking-wide justify-center items-center font-[manrope]" id="audit">ARATA AUDIT</button>
<p class="text-3xl pb-10 font-extrabold tracking-wide">PREZENTA</p>
<button type="button" class="rounded-xl w-full bg-indigo-900 my-2 py-5 my-2 px-5 text-sm md:text-xl font-bold tracking-wide justify-center items-center font-[manrope]" id="prezent">FA PREZENTA</button>
<button type="button" class="rounded-xl w-full bg-indigo-900 my-2 py-5 my-2 px-5 text-sm md:text-xl font-bold tracking-wide justify-center items-center font-[manrope]" id="stopprezent">STOP PREZENTA</button>
</div> </div>
</div> </div>
@ -57,6 +63,10 @@
var audit = document.getElementById("audit"); var audit = document.getElementById("audit");
var prezent = document.getElementById("prezent");
var stopprezent = document.getElementById("stopprezent");
start.addEventListener("click", function(){ start.addEventListener("click", function(){
var url= "/admindo?do=start-vot&text=" + text.value; var url= "/admindo?do=start-vot&text=" + text.value;
@ -84,6 +94,16 @@
location.href = url; location.href = url;
}); });
prezent.addEventListener("click", function(){
var url= "/admindo?do=prezenta";
location.href = url;
});
stopprezent.addEventListener("click", function(){
var url= "/admindo?do=stopprezenta";
location.href = url;
});
</script> </script>
</html> </html>

@ -16,9 +16,9 @@
<p class="text-3xl pb-10 font-extrabold tracking-wide">CSE Vote Login</p> <p class="text-3xl pb-10 font-extrabold tracking-wide">CSE Vote Login</p>
<div class="text-center text-white"> <div class="text-center text-white">
<input type="url" id="user" class="text-xl rounded-xl text-black py-3 px-3 w-full" placeholder="Clasa"> <input type="text" id="user" class="text-xl rounded-xl text-black py-3 px-3 w-full" placeholder="Clasa">
<p class="pb-10"> </p> <p class="pb-10"> </p>
<input type="url" id="pass" class="text-xl rounded-xl text-black py-3 px-3 w-full" placeholder="Parola"> <input type="password" id="pass" class="text-xl rounded-xl text-black py-3 px-3 w-full" placeholder="Parola">
<p class="pb-10"> </p> <p class="pb-10"> </p>
<button type="button" class="rounded-xl w-full bg-indigo-900 my-2 py-5 my-2 px-5 text-sm md:text-xl font-bold tracking-wide justify-center items-center font-[manrope]" id="ok">Login</button> <button type="button" class="rounded-xl w-full bg-indigo-900 my-2 py-5 my-2 px-5 text-sm md:text-xl font-bold tracking-wide justify-center items-center font-[manrope]" id="ok">Login</button>
</div> </div>

@ -0,0 +1,47 @@
<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link href="/css/dist.css" rel="stylesheet">
<title>CSE Vote</title>
<meta http-equiv="Content-Security-Policy" content="script-src 'self' 'unsafe-inline';" />
</head>
<body>
<div class="flex min-h-[100vh] justify-center items-center text-white">
<div class="md:max-w-[70vw] ml-auto mr-auto">
<div class="min-w-[60vw] rounded-3xl flex flex-wrap sm:flex-nowrap items-center py-10 sm:py-100 px-8 pb-10 justify-center text-center">
<div class="my-5 md:w-2/3 items-center justify-center text-center">
<p class="text-3xl pb-10 font-extrabold tracking-wide">CSE Prezenta</p>
<div class="text-center text-white">
<input type="tel" id="cod" class="text-xl rounded-xl text-black py-3 px-3 w-full" placeholder="Cod">
<p class="pb-10"> </p>
<button type="button" class="rounded-xl w-full bg-indigo-900 my-2 py-5 my-2 px-5 text-sm md:text-xl font-bold tracking-wide justify-center items-center font-[manrope]" id="ok">Adaugare la Prezenta</button>
</div>
</div>
</div>
</div>
</div>
</body>
<script>
var cod = document.getElementById("cod");
var submit = document.getElementById("ok");
submit.addEventListener("click", function(){
var url= "/prezenta?key=" + cod.value;
location.href = url;
});
</script>
</html>
Loading…
Cancel
Save