commit
076270067d
@ -0,0 +1,2 @@ |
||||
node_modules |
||||
repo/secret |
||||
@ -0,0 +1,2 @@ |
||||
stylesheet: |
||||
npx tailwindcss --input css/source.css --output css/dist.css
|
||||
@ -0,0 +1,367 @@ |
||||
const http = require('http'); |
||||
const express = require('express'); |
||||
const fs = require('fs'); |
||||
const url = require('url'); |
||||
const crypto = require('crypto'); |
||||
const session = require('express-session') |
||||
//const FileStore = require('session-file-store')(session)
|
||||
|
||||
const app = express(); |
||||
|
||||
if(!fs.existsSync('repo')) fs.mkdirSync('repo'); |
||||
|
||||
var secret; |
||||
|
||||
var logString = ""; |
||||
|
||||
var credString; |
||||
var credentials; |
||||
|
||||
var activity = "none"; |
||||
|
||||
var voteText = "Sunteti de acord cu initiativa X?"; |
||||
|
||||
var yesVotes = 0; |
||||
var noVotes = 0; |
||||
|
||||
if(!fs.existsSync('repo/secret')){ |
||||
secret = crypto.randomBytes(35).toString('hex'); |
||||
fs.writeFileSync('repo/secret', secret); |
||||
}else{ |
||||
secret = fs.readFileSync('repo/secret'); |
||||
} |
||||
|
||||
if(fs.existsSync('repo/credentials')){ |
||||
credString = fs.readFileSync('repo/credentials') |
||||
credentials = JSON.parse(credString); |
||||
} |
||||
|
||||
app.use(session({ |
||||
secret: secret.toString(), |
||||
saveUninitialized:false, |
||||
resave:false, |
||||
cookie: {maxAge: 120000} |
||||
//store:new FileStore()
|
||||
})); |
||||
|
||||
function report(str){ |
||||
console.log(str); |
||||
logString = logString.concat('\n', str); |
||||
}
|
||||
|
||||
|
||||
|
||||
report("sha256 of secret string, check for persistance: 0x" + crypto.createHash('sha256').update(secret).digest('hex')); |
||||
|
||||
Object.keys(credentials).forEach(function(key) { |
||||
credentials[key].votingRights = 0; |
||||
credentials[key].loggedIn = 0; |
||||
credentials[key].present = 0; |
||||
}); |
||||
|
||||
function giveVotingRights(){ |
||||
Object.keys(credentials).forEach(function(key) { |
||||
credentials[key].votingRights = 1; |
||||
}); |
||||
} |
||||
|
||||
function takeVotingRights(){ |
||||
Object.keys(credentials).forEach(function(key) { |
||||
credentials[key].votingRights = 0; |
||||
}); |
||||
} |
||||
|
||||
|
||||
app.get('/', (request, response) => { |
||||
|
||||
if(!request.session.user){ |
||||
response.redirect('/login'); |
||||
response.end(); |
||||
|
||||
}else{ |
||||
response.redirect('/home'); |
||||
response.end(); |
||||
|
||||
} |
||||
|
||||
return; |
||||
}); |
||||
|
||||
app.get('/logout', (request, response) => { |
||||
|
||||
if(request.session.user){ |
||||
report('LOGGED OUT: ' + request.session.user); |
||||
credentials[request.session.user].loggedIn = 0; |
||||
request.session.user = ''; |
||||
response.redirect('/'); |
||||
response.end(); |
||||
return; |
||||
} |
||||
}); |
||||
|
||||
app.get('/login', (request, response) => { |
||||
fs.readFile('./webFiles/login.html', function(error, content){ |
||||
if(error) report(error); |
||||
|
||||
response.writeHead(200, {'Content-Type': 'text/html'}); |
||||
response.end(content); |
||||
}); |
||||
|
||||
return; |
||||
}); |
||||
|
||||
app.get('/loginact', (request, response) => { |
||||
|
||||
|
||||
if(request.query.user && request.query.pass){ |
||||
|
||||
if(activity === 'pass'){ |
||||
credentials[request.query.user].pass = crypto.createHash('sha256').update(request.query.pass).digest('hex'); |
||||
report(request.query.user + " RESET THEIR PASSWORD"); |
||||
return; |
||||
} |
||||
|
||||
if(credentials[request.query.user].pass === crypto.createHash('sha256').update(request.query.pass).digest('hex')){ |
||||
|
||||
if(credentials[request.query.user].loggedIn === 1){ |
||||
response.writeHeader(200); |
||||
response.end("ALREADY LOGGED IN"); |
||||
return; |
||||
} |
||||
|
||||
request.session.user = request.query.user; |
||||
credentials[request.query.user].loggedIn = 1; |
||||
report("LOG IN: " + request.query.user); |
||||
} |
||||
|
||||
} |
||||
|
||||
response.redirect('/home'); |
||||
response.end(); |
||||
|
||||
return; |
||||
}); |
||||
|
||||
app.get('/home', (request, response) => { |
||||
|
||||
if(request.session.user === 'admin'){ |
||||
response.redirect('/admin'); |
||||
response.end(); |
||||
return; |
||||
} |
||||
|
||||
if(request.session.user){ |
||||
if(activity === "none"){ |
||||
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){ |
||||
fs.readFile('./webFiles/vote.html', function(error, content){ |
||||
if(error) report(error); |
||||
|
||||
contentx = content.toString().replace("$VOTETEXT$" , voteText); |
||||
response.writeHead(200, {'Content-Type': 'text/html'}); |
||||
response.end(contentx); |
||||
}); |
||||
} |
||||
|
||||
if(activity === "vote" && credentials[request.session.user].votingRights === 0){ |
||||
fs.readFile('./webFiles/alrvote.html', function(error, content){ |
||||
if(error) report(error); |
||||
|
||||
response.writeHead(200, {'Content-Type': 'text/html'}); |
||||
response.end(content); |
||||
}); |
||||
} |
||||
|
||||
if(activity === "show"){ |
||||
fs.readFile('./webFiles/show.html', function(error, content){ |
||||
if(error) report(error); |
||||
|
||||
contentx = content.toString().replace("$VOTETEXT$" , voteText); |
||||
contentx = contentx.toString().replace("$YESVOTES$", yesVotes); |
||||
contentx = contentx.toString().replace("$NOVOTES$", noVotes); |
||||
|
||||
if(yesVotes >= noVotes) |
||||
contentx = contentx.toString().replace("$RESULT$", "Motiunea a trecut"); |
||||
|
||||
else |
||||
contentx = contentx.toString().replace("$RESULT$", "Motiunea a picat"); |
||||
|
||||
response.writeHead(200, {'Content-Type': 'text/html'}); |
||||
response.end(contentx); |
||||
}); |
||||
} |
||||
|
||||
|
||||
}else{ |
||||
response.redirect("/"); |
||||
response.end(); |
||||
} |
||||
return; |
||||
}); |
||||
|
||||
app.get('/dashboard', (request, response) => { |
||||
|
||||
if(activity === "show"){ |
||||
fs.readFile('./webFiles/show.html', function(error, content){ |
||||
if(error) report(error); |
||||
|
||||
contentx = content.toString().replace("$VOTETEXT$" , voteText); |
||||
contentx = contentx.toString().replace("$YESVOTES$", yesVotes); |
||||
contentx = contentx.toString().replace("$NOVOTES$", noVotes); |
||||
|
||||
if(yesVotes >= noVotes) |
||||
contentx = contentx.toString().replace("$RESULT$", "Motiunea a trecut"); |
||||
|
||||
else |
||||
contentx = contentx.toString().replace("$RESULT$", "Motiunea a picat"); |
||||
response.writeHead(200, {'Content-Type': 'text/html'}); |
||||
response.end(contentx); |
||||
}); |
||||
}else{ |
||||
fs.readFile('./webFiles/nodash.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); |
||||
}); |
||||
} |
||||
|
||||
return; |
||||
}); |
||||
|
||||
app.get('/vote/yes', (request, response) => { |
||||
|
||||
if(request.session.user){ |
||||
if(credentials[request.session.user].votingRights === 1){ |
||||
credentials[request.session.user].votingRights = 0; |
||||
yesVotes++; |
||||
report(request.session.user + " - YES"); |
||||
}else{ |
||||
response.writeHead(200); |
||||
response.end("ALREADY VOTED"); |
||||
return; |
||||
} |
||||
} |
||||
|
||||
response.redirect('/home'); |
||||
response.end(); |
||||
return; |
||||
}); |
||||
|
||||
app.get('/vote/no', (request, response) => { |
||||
|
||||
if(request.session.user){ |
||||
if(credentials[request.session.user].votingRights === 1){ |
||||
credentials[request.session.user].votingRights = 0; |
||||
noVotes++; |
||||
report(request.session.user + " - NO"); |
||||
}else{ |
||||
response.writeHead(200); |
||||
response.end("ALREADY VOTED"); |
||||
return; |
||||
} |
||||
} |
||||
|
||||
response.redirect('/home'); |
||||
response.end(); |
||||
return; |
||||
}); |
||||
|
||||
app.get('/admin', (request, response) => { |
||||
|
||||
if(request.session.user === 'admin'){ |
||||
fs.readFile('./webFiles/adminpanel.html', function(error, content){ |
||||
if(error) report(error); |
||||
|
||||
response.writeHead(200, {'Content-Type': 'text/html'}); |
||||
response.end(content); |
||||
return; |
||||
}); |
||||
} |
||||
}); |
||||
|
||||
app.get('/admindo', (request, response) => { |
||||
|
||||
if(request.session.user === 'admin'){ |
||||
if(request.query.do === 'start-vot'){ |
||||
activity = "vote"; |
||||
voteText = request.query.text; |
||||
giveVotingRights(); |
||||
report("------------VOT: " + voteText + " ------------"); |
||||
} |
||||
|
||||
if(request.query.do === 'clear'){ |
||||
takeVotingRights(); |
||||
activity = "none"; |
||||
yesVotes = 0; |
||||
noVotes = 0; |
||||
report("------------CLEAR------------"); |
||||
} |
||||
|
||||
if(request.query.do === 'show'){ |
||||
takeVotingRights(); |
||||
activity = "show"; |
||||
report("------------"); |
||||
report("DA - " + yesVotes.toString() + " | NU - " + noVotes.toString()); |
||||
report("------------STOP VOT------------"); |
||||
} |
||||
|
||||
if(request.query.do === 'pass'){ |
||||
report("------------SETTING PASSWORDS------------"); |
||||
activity = "pass"; |
||||
} |
||||
|
||||
if(request.query.do === 'writerepo'){ |
||||
report("------------STOP PASSWORD SETTING------------"); |
||||
activity = "none"; |
||||
fs.writeFileSync('repo/credentials', JSON.stringify(credentials)); |
||||
} |
||||
|
||||
if(request.query.do === 'getaudit'){ |
||||
response.writeHead(200); |
||||
response.end(logString); |
||||
return; |
||||
} |
||||
} |
||||
|
||||
response.redirect('/admin'); |
||||
response.end(); |
||||
return; |
||||
}); |
||||
|
||||
app.get('/css/dist.css', (request, response) => { |
||||
|
||||
fs.readFile('./css/dist.css', function(error, content){ |
||||
if(error) report(error); |
||||
|
||||
response.writeHead(200, {'Content-Type': 'text/css'}); |
||||
response.end(content); |
||||
}); |
||||
|
||||
return; |
||||
}); |
||||
|
||||
app.get('/css/manrope.ttf', (request, response) => { |
||||
|
||||
fs.readFile('./css/manrope.ttf', function(error, content){ |
||||
if(error) report(error); |
||||
|
||||
response.writeHead(200, {'Content-Type': 'font/ttf'}); |
||||
response.end(content); |
||||
}); |
||||
|
||||
return; |
||||
}); |
||||
|
||||
|
||||
const server = http.createServer(app); |
||||
server.listen(8881); |
||||
@ -0,0 +1,939 @@ |
||||
/* |
||||
! tailwindcss v3.0.18 | MIT License | https://tailwindcss.com |
||||
*/ |
||||
|
||||
/* |
||||
1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4) |
||||
2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116) |
||||
*/ |
||||
|
||||
*, |
||||
::before, |
||||
::after { |
||||
box-sizing: border-box; |
||||
/* 1 */ |
||||
border-width: 0; |
||||
/* 2 */ |
||||
border-style: solid; |
||||
/* 2 */ |
||||
border-color: #e5e7eb; |
||||
/* 2 */ |
||||
} |
||||
|
||||
::before, |
||||
::after { |
||||
--tw-content: ''; |
||||
} |
||||
|
||||
/* |
||||
1. Use a consistent sensible line-height in all browsers. |
||||
2. Prevent adjustments of font size after orientation changes in iOS. |
||||
3. Use a more readable tab size. |
||||
4. Use the user's configured `sans` font-family by default. |
||||
*/ |
||||
|
||||
html { |
||||
line-height: 1.5; |
||||
/* 1 */ |
||||
-webkit-text-size-adjust: 100%; |
||||
/* 2 */ |
||||
-moz-tab-size: 4; |
||||
/* 3 */ |
||||
-o-tab-size: 4; |
||||
tab-size: 4; |
||||
/* 3 */ |
||||
font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; |
||||
/* 4 */ |
||||
} |
||||
|
||||
/* |
||||
1. Remove the margin in all browsers. |
||||
2. Inherit line-height from `html` so users can set them as a class directly on the `html` element. |
||||
*/ |
||||
|
||||
body { |
||||
margin: 0; |
||||
/* 1 */ |
||||
line-height: inherit; |
||||
/* 2 */ |
||||
} |
||||
|
||||
/* |
||||
1. Add the correct height in Firefox. |
||||
2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655) |
||||
3. Ensure horizontal rules are visible by default. |
||||
*/ |
||||
|
||||
hr { |
||||
height: 0; |
||||
/* 1 */ |
||||
color: inherit; |
||||
/* 2 */ |
||||
border-top-width: 1px; |
||||
/* 3 */ |
||||
} |
||||
|
||||
/* |
||||
Add the correct text decoration in Chrome, Edge, and Safari. |
||||
*/ |
||||
|
||||
abbr:where([title]) { |
||||
-webkit-text-decoration: underline dotted; |
||||
text-decoration: underline dotted; |
||||
} |
||||
|
||||
/* |
||||
Remove the default font size and weight for headings. |
||||
*/ |
||||
|
||||
h1, |
||||
h2, |
||||
h3, |
||||
h4, |
||||
h5, |
||||
h6 { |
||||
font-size: inherit; |
||||
font-weight: inherit; |
||||
} |
||||
|
||||
/* |
||||
Reset links to optimize for opt-in styling instead of opt-out. |
||||
*/ |
||||
|
||||
a { |
||||
color: inherit; |
||||
text-decoration: inherit; |
||||
} |
||||
|
||||
/* |
||||
Add the correct font weight in Edge and Safari. |
||||
*/ |
||||
|
||||
b, |
||||
strong { |
||||
font-weight: bolder; |
||||
} |
||||
|
||||
/* |
||||
1. Use the user's configured `mono` font family by default. |
||||
2. Correct the odd `em` font sizing in all browsers. |
||||
*/ |
||||
|
||||
code, |
||||
kbd, |
||||
samp, |
||||
pre { |
||||
font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; |
||||
/* 1 */ |
||||
font-size: 1em; |
||||
/* 2 */ |
||||
} |
||||
|
||||
/* |
||||
Add the correct font size in all browsers. |
||||
*/ |
||||
|
||||
small { |
||||
font-size: 80%; |
||||
} |
||||
|
||||
/* |
||||
Prevent `sub` and `sup` elements from affecting the line height in all browsers. |
||||
*/ |
||||
|
||||
sub, |
||||
sup { |
||||
font-size: 75%; |
||||
line-height: 0; |
||||
position: relative; |
||||
vertical-align: baseline; |
||||
} |
||||
|
||||
sub { |
||||
bottom: -0.25em; |
||||
} |
||||
|
||||
sup { |
||||
top: -0.5em; |
||||
} |
||||
|
||||
/* |
||||
1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297) |
||||
2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016) |
||||
3. Remove gaps between table borders by default. |
||||
*/ |
||||
|
||||
table { |
||||
text-indent: 0; |
||||
/* 1 */ |
||||
border-color: inherit; |
||||
/* 2 */ |
||||
border-collapse: collapse; |
||||
/* 3 */ |
||||
} |
||||
|
||||
/* |
||||
1. Change the font styles in all browsers. |
||||
2. Remove the margin in Firefox and Safari. |
||||
3. Remove default padding in all browsers. |
||||
*/ |
||||
|
||||
button, |
||||
input, |
||||
optgroup, |
||||
select, |
||||
textarea { |
||||
font-family: inherit; |
||||
/* 1 */ |
||||
font-size: 100%; |
||||
/* 1 */ |
||||
line-height: inherit; |
||||
/* 1 */ |
||||
color: inherit; |
||||
/* 1 */ |
||||
margin: 0; |
||||
/* 2 */ |
||||
padding: 0; |
||||
/* 3 */ |
||||
} |
||||
|
||||
/* |
||||
Remove the inheritance of text transform in Edge and Firefox. |
||||
*/ |
||||
|
||||
button, |
||||
select { |
||||
text-transform: none; |
||||
} |
||||
|
||||
/* |
||||
1. Correct the inability to style clickable types in iOS and Safari. |
||||
2. Remove default button styles. |
||||
*/ |
||||
|
||||
button, |
||||
[type='button'], |
||||
[type='reset'], |
||||
[type='submit'] { |
||||
-webkit-appearance: button; |
||||
/* 1 */ |
||||
background-color: transparent; |
||||
/* 2 */ |
||||
background-image: none; |
||||
/* 2 */ |
||||
} |
||||
|
||||
/* |
||||
Use the modern Firefox focus style for all focusable elements. |
||||
*/ |
||||
|
||||
:-moz-focusring { |
||||
outline: auto; |
||||
} |
||||
|
||||
/* |
||||
Remove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737) |
||||
*/ |
||||
|
||||
:-moz-ui-invalid { |
||||
box-shadow: none; |
||||
} |
||||
|
||||
/* |
||||
Add the correct vertical alignment in Chrome and Firefox. |
||||
*/ |
||||
|
||||
progress { |
||||
vertical-align: baseline; |
||||
} |
||||
|
||||
/* |
||||
Correct the cursor style of increment and decrement buttons in Safari. |
||||
*/ |
||||
|
||||
::-webkit-inner-spin-button, |
||||
::-webkit-outer-spin-button { |
||||
height: auto; |
||||
} |
||||
|
||||
/* |
||||
1. Correct the odd appearance in Chrome and Safari. |
||||
2. Correct the outline style in Safari. |
||||
*/ |
||||
|
||||
[type='search'] { |
||||
-webkit-appearance: textfield; |
||||
/* 1 */ |
||||
outline-offset: -2px; |
||||
/* 2 */ |
||||
} |
||||
|
||||
/* |
||||
Remove the inner padding in Chrome and Safari on macOS. |
||||
*/ |
||||
|
||||
::-webkit-search-decoration { |
||||
-webkit-appearance: none; |
||||
} |
||||
|
||||
/* |
||||
1. Correct the inability to style clickable types in iOS and Safari. |
||||
2. Change font properties to `inherit` in Safari. |
||||
*/ |
||||
|
||||
::-webkit-file-upload-button { |
||||
-webkit-appearance: button; |
||||
/* 1 */ |
||||
font: inherit; |
||||
/* 2 */ |
||||
} |
||||
|
||||
/* |
||||
Add the correct display in Chrome and Safari. |
||||
*/ |
||||
|
||||
summary { |
||||
display: list-item; |
||||
} |
||||
|
||||
/* |
||||
Removes the default spacing and border for appropriate elements. |
||||
*/ |
||||
|
||||
blockquote, |
||||
dl, |
||||
dd, |
||||
h1, |
||||
h2, |
||||
h3, |
||||
h4, |
||||
h5, |
||||
h6, |
||||
hr, |
||||
figure, |
||||
p, |
||||
pre { |
||||
margin: 0; |
||||
} |
||||
|
||||
fieldset { |
||||
margin: 0; |
||||
padding: 0; |
||||
} |
||||
|
||||
legend { |
||||
padding: 0; |
||||
} |
||||
|
||||
ol, |
||||
ul, |
||||
menu { |
||||
list-style: none; |
||||
margin: 0; |
||||
padding: 0; |
||||
} |
||||
|
||||
/* |
||||
Prevent resizing textareas horizontally by default. |
||||
*/ |
||||
|
||||
textarea { |
||||
resize: vertical; |
||||
} |
||||
|
||||
/* |
||||
1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300) |
||||
2. Set the default placeholder color to the user's configured gray 400 color. |
||||
*/ |
||||
|
||||
input::-moz-placeholder, textarea::-moz-placeholder { |
||||
opacity: 1; |
||||
/* 1 */ |
||||
color: #9ca3af; |
||||
/* 2 */ |
||||
} |
||||
|
||||
input:-ms-input-placeholder, textarea:-ms-input-placeholder { |
||||
opacity: 1; |
||||
/* 1 */ |
||||
color: #9ca3af; |
||||
/* 2 */ |
||||
} |
||||
|
||||
input::placeholder, |
||||
textarea::placeholder { |
||||
opacity: 1; |
||||
/* 1 */ |
||||
color: #9ca3af; |
||||
/* 2 */ |
||||
} |
||||
|
||||
/* |
||||
Set the default cursor for buttons. |
||||
*/ |
||||
|
||||
button, |
||||
[role="button"] { |
||||
cursor: pointer; |
||||
} |
||||
|
||||
/* |
||||
Make sure disabled buttons don't get the pointer cursor. |
||||
*/ |
||||
|
||||
:disabled { |
||||
cursor: default; |
||||
} |
||||
|
||||
/* |
||||
1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14) |
||||
2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210) |
||||
This can trigger a poorly considered lint error in some tools but is included by design. |
||||
*/ |
||||
|
||||
img, |
||||
svg, |
||||
video, |
||||
canvas, |
||||
audio, |
||||
iframe, |
||||
embed, |
||||
object { |
||||
display: block; |
||||
/* 1 */ |
||||
vertical-align: middle; |
||||
/* 2 */ |
||||
} |
||||
|
||||
/* |
||||
Constrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14) |
||||
*/ |
||||
|
||||
img, |
||||
video { |
||||
max-width: 100%; |
||||
height: auto; |
||||
} |
||||
|
||||
/* |
||||
Ensure the default browser behavior of the `hidden` attribute. |
||||
*/ |
||||
|
||||
[hidden] { |
||||
display: none; |
||||
} |
||||
|
||||
*, ::before, ::after { |
||||
--tw-translate-x: 0; |
||||
--tw-translate-y: 0; |
||||
--tw-rotate: 0; |
||||
--tw-skew-x: 0; |
||||
--tw-skew-y: 0; |
||||
--tw-scale-x: 1; |
||||
--tw-scale-y: 1; |
||||
--tw-pan-x: ; |
||||
--tw-pan-y: ; |
||||
--tw-pinch-zoom: ; |
||||
--tw-scroll-snap-strictness: proximity; |
||||
--tw-ordinal: ; |
||||
--tw-slashed-zero: ; |
||||
--tw-numeric-figure: ; |
||||
--tw-numeric-spacing: ; |
||||
--tw-numeric-fraction: ; |
||||
--tw-ring-inset: ; |
||||
--tw-ring-offset-width: 0px; |
||||
--tw-ring-offset-color: #fff; |
||||
--tw-ring-color: rgb(59 130 246 / 0.5); |
||||
--tw-ring-offset-shadow: 0 0 #0000; |
||||
--tw-ring-shadow: 0 0 #0000; |
||||
--tw-shadow: 0 0 #0000; |
||||
--tw-shadow-colored: 0 0 #0000; |
||||
--tw-blur: ; |
||||
--tw-brightness: ; |
||||
--tw-contrast: ; |
||||
--tw-grayscale: ; |
||||
--tw-hue-rotate: ; |
||||
--tw-invert: ; |
||||
--tw-saturate: ; |
||||
--tw-sepia: ; |
||||
--tw-drop-shadow: ; |
||||
--tw-backdrop-blur: ; |
||||
--tw-backdrop-brightness: ; |
||||
--tw-backdrop-contrast: ; |
||||
--tw-backdrop-grayscale: ; |
||||
--tw-backdrop-hue-rotate: ; |
||||
--tw-backdrop-invert: ; |
||||
--tw-backdrop-opacity: ; |
||||
--tw-backdrop-saturate: ; |
||||
--tw-backdrop-sepia: ; |
||||
} |
||||
|
||||
.fixed { |
||||
position: fixed; |
||||
} |
||||
|
||||
.bottom-4 { |
||||
bottom: 1rem; |
||||
} |
||||
|
||||
.my-5 { |
||||
margin-top: 1.25rem; |
||||
margin-bottom: 1.25rem; |
||||
} |
||||
|
||||
.my-2 { |
||||
margin-top: 0.5rem; |
||||
margin-bottom: 0.5rem; |
||||
} |
||||
|
||||
.mx-2 { |
||||
margin-left: 0.5rem; |
||||
margin-right: 0.5rem; |
||||
} |
||||
|
||||
.ml-auto { |
||||
margin-left: auto; |
||||
} |
||||
|
||||
.mr-auto { |
||||
margin-right: auto; |
||||
} |
||||
|
||||
.flex { |
||||
display: flex; |
||||
} |
||||
|
||||
.min-h-\[100vh\] { |
||||
min-height: 100vh; |
||||
} |
||||
|
||||
.w-full { |
||||
width: 100%; |
||||
} |
||||
|
||||
.w-5\/6 { |
||||
width: 83.333333%; |
||||
} |
||||
|
||||
.min-w-\[60vw\] { |
||||
min-width: 60vw; |
||||
} |
||||
|
||||
.flex-row { |
||||
flex-direction: row; |
||||
} |
||||
|
||||
.flex-wrap { |
||||
flex-wrap: wrap; |
||||
} |
||||
|
||||
.items-center { |
||||
align-items: center; |
||||
} |
||||
|
||||
.justify-center { |
||||
justify-content: center; |
||||
} |
||||
|
||||
.rounded-3xl { |
||||
border-radius: 1.5rem; |
||||
} |
||||
|
||||
.rounded-xl { |
||||
border-radius: 0.75rem; |
||||
} |
||||
|
||||
.rounded-md { |
||||
border-radius: 0.375rem; |
||||
} |
||||
|
||||
.bg-indigo-900 { |
||||
--tw-bg-opacity: 1; |
||||
background-color: rgb(49 46 129 / var(--tw-bg-opacity)); |
||||
} |
||||
|
||||
.bg-mycol2 { |
||||
--tw-bg-opacity: 1; |
||||
background-color: rgb(22 21 36 / var(--tw-bg-opacity)); |
||||
} |
||||
|
||||
.bg-\[\#0B5D1E\] { |
||||
--tw-bg-opacity: 1; |
||||
background-color: rgb(11 93 30 / var(--tw-bg-opacity)); |
||||
} |
||||
|
||||
.bg-\[\#820933\] { |
||||
--tw-bg-opacity: 1; |
||||
background-color: rgb(130 9 51 / var(--tw-bg-opacity)); |
||||
} |
||||
|
||||
.bg-\[url\(\'\.\.\/\.\.\/img\/bground1\.jpg\'\)\] { |
||||
background-image: url('../../img/bground1.jpg'); |
||||
} |
||||
|
||||
.py-10 { |
||||
padding-top: 2.5rem; |
||||
padding-bottom: 2.5rem; |
||||
} |
||||
|
||||
.px-8 { |
||||
padding-left: 2rem; |
||||
padding-right: 2rem; |
||||
} |
||||
|
||||
.py-3 { |
||||
padding-top: 0.75rem; |
||||
padding-bottom: 0.75rem; |
||||
} |
||||
|
||||
.px-3 { |
||||
padding-left: 0.75rem; |
||||
padding-right: 0.75rem; |
||||
} |
||||
|
||||
.py-5 { |
||||
padding-top: 1.25rem; |
||||
padding-bottom: 1.25rem; |
||||
} |
||||
|
||||
.px-5 { |
||||
padding-left: 1.25rem; |
||||
padding-right: 1.25rem; |
||||
} |
||||
|
||||
.px-2 { |
||||
padding-left: 0.5rem; |
||||
padding-right: 0.5rem; |
||||
} |
||||
|
||||
.py-1 { |
||||
padding-top: 0.25rem; |
||||
padding-bottom: 0.25rem; |
||||
} |
||||
|
||||
.pb-10 { |
||||
padding-bottom: 2.5rem; |
||||
} |
||||
|
||||
.pr-5 { |
||||
padding-right: 1.25rem; |
||||
} |
||||
|
||||
.pl-5 { |
||||
padding-left: 1.25rem; |
||||
} |
||||
|
||||
.text-center { |
||||
text-align: center; |
||||
} |
||||
|
||||
.font-\[manrope\] { |
||||
font-family: manrope; |
||||
} |
||||
|
||||
.text-3xl { |
||||
font-size: 1.875rem; |
||||
line-height: 2.25rem; |
||||
} |
||||
|
||||
.text-xl { |
||||
font-size: 1.25rem; |
||||
line-height: 1.75rem; |
||||
} |
||||
|
||||
.text-sm { |
||||
font-size: 0.875rem; |
||||
line-height: 1.25rem; |
||||
} |
||||
|
||||
.font-extrabold { |
||||
font-weight: 800; |
||||
} |
||||
|
||||
.font-bold { |
||||
font-weight: 700; |
||||
} |
||||
|
||||
.tracking-wide { |
||||
letter-spacing: 0.025em; |
||||
} |
||||
|
||||
.text-white { |
||||
--tw-text-opacity: 1; |
||||
color: rgb(255 255 255 / var(--tw-text-opacity)); |
||||
} |
||||
|
||||
.text-black { |
||||
--tw-text-opacity: 1; |
||||
color: rgb(0 0 0 / var(--tw-text-opacity)); |
||||
} |
||||
|
||||
.outline { |
||||
outline-style: solid; |
||||
} |
||||
|
||||
.outline-0 { |
||||
outline-width: 0px; |
||||
} |
||||
|
||||
.outline-white { |
||||
outline-color: #fff; |
||||
} |
||||
|
||||
@font-face { |
||||
font-family: 'manrope'; |
||||
|
||||
src: url('./manrope.ttf'); |
||||
} |
||||
|
||||
body { |
||||
padding: 0; |
||||
margin: 0; |
||||
font-family: 'manrope', 'MR', sans-serif; |
||||
font-weight: 600; |
||||
width: 100vw; |
||||
height: 100vh; |
||||
background: #0b001b; |
||||
overflow-x: hidden; |
||||
max-width: 100%; |
||||
} |
||||
|
||||
img.profile{ |
||||
border-radius: 30px; |
||||
height: 100px; |
||||
aspect-ratio: 1 / 1; |
||||
box-shadow: 6px 6px 15px #0b001b; |
||||
} |
||||
|
||||
p{ |
||||
} |
||||
|
||||
.kmscontainer { |
||||
display: grid; |
||||
grid-template-columns: 1fr 1fr; |
||||
grid-template-rows: 1fr; |
||||
gap: 0px 0px; |
||||
grid-template-areas: |
||||
"windows office"; |
||||
} |
||||
|
||||
.windows { |
||||
grid-area: windows; |
||||
} |
||||
|
||||
.office { |
||||
grid-area: office; |
||||
} |
||||
|
||||
.winvercontainer { |
||||
display: grid; |
||||
grid-template-columns: 1fr 1fr 1fr 1fr; |
||||
grid-template-rows: 1fr; |
||||
gap: 0px 0px; |
||||
grid-template-areas: |
||||
"eleven ten eight seven"; |
||||
} |
||||
|
||||
.eleven { |
||||
grid-area: eleven; |
||||
} |
||||
|
||||
.ten { |
||||
grid-area: ten; |
||||
} |
||||
|
||||
.eight { |
||||
grid-area: eight; |
||||
} |
||||
|
||||
.seven { |
||||
grid-area: seven; |
||||
} |
||||
|
||||
.officevercontainer { |
||||
display: grid; |
||||
grid-template-columns: 1fr 1fr 1fr; |
||||
grid-template-rows: 1fr; |
||||
gap: 0px 0px; |
||||
grid-template-areas: |
||||
"twentyone nineteen legacy"; |
||||
} |
||||
|
||||
.twentyone { |
||||
grid-area: twentyone; |
||||
} |
||||
|
||||
.nineteen { |
||||
grid-area: nineteen; |
||||
} |
||||
|
||||
.legacy { |
||||
grid-area: legacy; |
||||
} |
||||
|
||||
.wave { |
||||
-webkit-animation-name: wave-animation; |
||||
animation-name: wave-animation; |
||||
-webkit-animation-duration: 2.5s; |
||||
animation-duration: 2.5s; |
||||
-webkit-animation-iteration-count: infinite; |
||||
animation-iteration-count: infinite; |
||||
transform-origin: 70% 70%; |
||||
display: inline-block; |
||||
} |
||||
|
||||
.emohi:hover { |
||||
-webkit-animation-name: wave-animation; |
||||
animation-name: wave-animation; |
||||
-webkit-animation-duration: 2.5s; |
||||
animation-duration: 2.5s; |
||||
-webkit-animation-iteration-count: 1; |
||||
animation-iteration-count: 1; |
||||
transform-origin: 70% 70%; |
||||
display: inline-block; |
||||
} |
||||
|
||||
@-webkit-keyframes wave-animation { |
||||
0% { |
||||
transform: rotate( 0.0deg) |
||||
} |
||||
|
||||
10% { |
||||
transform: rotate(14.0deg) |
||||
} |
||||
|
||||
20% { |
||||
transform: rotate(-8.0deg) |
||||
} |
||||
|
||||
30% { |
||||
transform: rotate(14.0deg) |
||||
} |
||||
|
||||
40% { |
||||
transform: rotate(-4.0deg) |
||||
} |
||||
|
||||
50% { |
||||
transform: rotate(10.0deg) |
||||
} |
||||
|
||||
60% { |
||||
transform: rotate( 0.0deg) |
||||
} |
||||
|
||||
100% { |
||||
transform: rotate( 0.0deg) |
||||
} |
||||
} |
||||
|
||||
@keyframes wave-animation { |
||||
0% { |
||||
transform: rotate( 0.0deg) |
||||
} |
||||
|
||||
10% { |
||||
transform: rotate(14.0deg) |
||||
} |
||||
|
||||
20% { |
||||
transform: rotate(-8.0deg) |
||||
} |
||||
|
||||
30% { |
||||
transform: rotate(14.0deg) |
||||
} |
||||
|
||||
40% { |
||||
transform: rotate(-4.0deg) |
||||
} |
||||
|
||||
50% { |
||||
transform: rotate(10.0deg) |
||||
} |
||||
|
||||
60% { |
||||
transform: rotate( 0.0deg) |
||||
} |
||||
|
||||
100% { |
||||
transform: rotate( 0.0deg) |
||||
} |
||||
} |
||||
|
||||
.blurbg { |
||||
width:100%; |
||||
height:100%; |
||||
background-size:cover; |
||||
-moz-filter: blur(4px); |
||||
-ms-filter: blur(4px); |
||||
-o-filter: blur(4px); |
||||
filter: blur(4px); |
||||
} |
||||
|
||||
button{ |
||||
box-shadow: 0 12px 16px 0 rgba(0,0,0,0.45), 0 17px 50px 0 rgba(0,0,0,0.40); |
||||
transition: transform .1s; |
||||
outline: none; |
||||
} |
||||
|
||||
button:hover{ |
||||
transform: scale(1.06); |
||||
} |
||||
|
||||
.modal{ |
||||
display: block; |
||||
position: fixed; |
||||
z-index: 1; |
||||
padding-top: 100px; |
||||
left: 0; |
||||
top: 0; |
||||
background-color: rgba(0,0,0,0.9); |
||||
} |
||||
|
||||
.modal-content{ |
||||
margin: auto; |
||||
display: block; |
||||
width: 80%; |
||||
max-width: 700px; |
||||
} |
||||
|
||||
.hover\:bg-indigo-900:hover { |
||||
--tw-bg-opacity: 1; |
||||
background-color: rgb(49 46 129 / var(--tw-bg-opacity)); |
||||
} |
||||
|
||||
@media (min-width: 640px) { |
||||
.sm\:flex-nowrap { |
||||
flex-wrap: nowrap; |
||||
} |
||||
} |
||||
|
||||
@media (min-width: 768px) { |
||||
.md\:w-2\/3 { |
||||
width: 66.666667%; |
||||
} |
||||
|
||||
.md\:max-w-\[70vw\] { |
||||
max-width: 70vw; |
||||
} |
||||
|
||||
.md\:bg-transparent { |
||||
background-color: transparent; |
||||
} |
||||
|
||||
.md\:py-3 { |
||||
padding-top: 0.75rem; |
||||
padding-bottom: 0.75rem; |
||||
} |
||||
|
||||
.md\:px-7 { |
||||
padding-left: 1.75rem; |
||||
padding-right: 1.75rem; |
||||
} |
||||
|
||||
.md\:text-xl { |
||||
font-size: 1.25rem; |
||||
line-height: 1.75rem; |
||||
} |
||||
} |
||||
Binary file not shown.
@ -0,0 +1,144 @@ |
||||
@tailwind base; |
||||
@tailwind components; |
||||
@tailwind utilities; |
||||
|
||||
|
||||
@font-face { |
||||
|
||||
font-family: 'manrope'; |
||||
src: url('./manrope.ttf'); |
||||
|
||||
} |
||||
|
||||
body { |
||||
padding: 0; |
||||
margin: 0; |
||||
font-family: 'manrope', 'MR', sans-serif; |
||||
font-weight: 600; |
||||
width: 100vw; |
||||
height: 100vh; |
||||
background: #0b001b; |
||||
overflow-x: hidden; |
||||
max-width: 100%; |
||||
} |
||||
|
||||
img.profile{ |
||||
border-radius: 30px; |
||||
height: 100px; |
||||
aspect-ratio: 1 / 1; |
||||
box-shadow: 6px 6px 15px #0b001b; |
||||
} |
||||
|
||||
p{ |
||||
|
||||
} |
||||
|
||||
.kmscontainer { |
||||
display: grid; |
||||
grid-template-columns: 1fr 1fr; |
||||
grid-template-rows: 1fr; |
||||
gap: 0px 0px; |
||||
grid-template-areas: |
||||
"windows office"; |
||||
} |
||||
|
||||
.windows { grid-area: windows; } |
||||
.office { grid-area: office; } |
||||
|
||||
.winvercontainer { |
||||
display: grid; |
||||
grid-template-columns: 1fr 1fr 1fr 1fr; |
||||
grid-template-rows: 1fr; |
||||
gap: 0px 0px; |
||||
grid-template-areas: |
||||
"eleven ten eight seven"; |
||||
} |
||||
|
||||
.eleven { grid-area: eleven; } |
||||
|
||||
.ten { grid-area: ten; } |
||||
|
||||
.eight { grid-area: eight; } |
||||
|
||||
.seven { grid-area: seven; } |
||||
|
||||
.officevercontainer { |
||||
display: grid; |
||||
grid-template-columns: 1fr 1fr 1fr; |
||||
grid-template-rows: 1fr; |
||||
gap: 0px 0px; |
||||
grid-template-areas: |
||||
"twentyone nineteen legacy"; |
||||
} |
||||
|
||||
.twentyone { grid-area: twentyone; } |
||||
|
||||
.nineteen { grid-area: nineteen; } |
||||
|
||||
.legacy { grid-area: legacy; } |
||||
|
||||
|
||||
.wave { |
||||
animation-name: wave-animation; |
||||
animation-duration: 2.5s; |
||||
animation-iteration-count: infinite; |
||||
transform-origin: 70% 70%; |
||||
display: inline-block; |
||||
} |
||||
.emohi:hover { |
||||
animation-name: wave-animation; |
||||
animation-duration: 2.5s; |
||||
animation-iteration-count: 1; |
||||
transform-origin: 70% 70%; |
||||
display: inline-block; |
||||
} |
||||
|
||||
@keyframes wave-animation { |
||||
0% { transform: rotate( 0.0deg) } |
||||
10% { transform: rotate(14.0deg) } |
||||
20% { transform: rotate(-8.0deg) } |
||||
30% { transform: rotate(14.0deg) } |
||||
40% { transform: rotate(-4.0deg) } |
||||
50% { transform: rotate(10.0deg) } |
||||
60% { transform: rotate( 0.0deg) } |
||||
100% { transform: rotate( 0.0deg) } |
||||
} |
||||
|
||||
|
||||
.blurbg { |
||||
width:100%; |
||||
height:100%; |
||||
background-size:cover; |
||||
-webkit-filter: blur(4px); |
||||
-moz-filter: blur(4px); |
||||
-ms-filter: blur(4px); |
||||
-o-filter: blur(4px); |
||||
filter: blur(4px); |
||||
} |
||||
|
||||
button{ |
||||
box-shadow: 0 12px 16px 0 rgba(0,0,0,0.45), 0 17px 50px 0 rgba(0,0,0,0.40); |
||||
transition: transform .1s; |
||||
outline: none; |
||||
} |
||||
|
||||
button:hover{ |
||||
transform: scale(1.06); |
||||
} |
||||
|
||||
.modal{ |
||||
display: block; |
||||
position: fixed; |
||||
z-index: 1; |
||||
padding-top: 100px; |
||||
left: 0; |
||||
top: 0; |
||||
background-color: rgba(0,0,0,0.9); |
||||
} |
||||
|
||||
.modal-content{ |
||||
margin: auto; |
||||
display: block; |
||||
width: 80%; |
||||
max-width: 700px; |
||||
} |
||||
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,17 @@ |
||||
{ |
||||
"name": "csevote", |
||||
"version": "1.0.0", |
||||
"description": "CSE voting system", |
||||
"main": "app.js", |
||||
"scripts": { |
||||
"test": "echo \"Error: no test specified\" && exit 1" |
||||
}, |
||||
"author": "Puly", |
||||
"license": "0BSD", |
||||
"dependencies": { |
||||
"cookie-parser": "^1.4.6", |
||||
"express": "^4.18.2", |
||||
"express-session": "^1.17.3", |
||||
"session-file-store": "^1.5.0" |
||||
} |
||||
} |
||||
@ -0,0 +1 @@ |
||||
{"9a":{"pass":"01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b","votingRights":0,"loggedIn":0,"present":0},"9b":{"pass":"01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b","votingRights":0,"loggedIn":0,"present":0},"9c":{"pass":"01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b","votingRights":0,"loggedIn":0,"present":0},"9d":{"pass":"01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b","votingRights":0,"loggedIn":0,"present":0},"9e":{"pass":"01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b","votingRights":0,"loggedIn":0,"present":0},"9f":{"pass":"01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b","votingRights":0,"loggedIn":0,"present":0},"9g":{"pass":"01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b","votingRights":0,"loggedIn":0,"present":0},"9h":{"pass":"01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b","votingRights":0,"loggedIn":0,"present":0},"9i":{"pass":"01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b","votingRights":0,"loggedIn":0,"present":0},"10a":{"pass":"01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b","votingRights":0,"loggedIn":0,"present":0},"10b":{"pass":"01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b","votingRights":0,"loggedIn":0,"present":0},"10c":{"pass":"01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b","votingRights":0,"loggedIn":0,"present":0},"10d":{"pass":"01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b","votingRights":0,"loggedIn":0,"present":0},"10e":{"pass":"01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b","votingRights":0,"loggedIn":0,"present":0},"10f":{"pass":"01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b","votingRights":0,"loggedIn":0,"present":0},"10g":{"pass":"01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b","votingRights":0,"loggedIn":0,"present":0},"10h":{"pass":"01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b","votingRights":0,"loggedIn":0,"present":0},"10i":{"pass":"01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b","votingRights":0,"loggedIn":0,"present":0},"11a":{"pass":"01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b","votingRights":0,"loggedIn":0,"present":0},"11b":{"pass":"01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b","votingRights":0,"loggedIn":0,"present":0},"11c":{"pass":"01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b","votingRights":0,"loggedIn":0,"present":0},"11d":{"pass":"01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b","votingRights":0,"loggedIn":0,"present":0},"11e":{"pass":"01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b","votingRights":0,"loggedIn":0,"present":0},"11f":{"pass":"2318b65f445747bfe10c682871f2b47ea17216ffa17534dafa8ddc9da5c32333","votingRights":0,"loggedIn":0,"present":0},"11g":{"pass":"01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b","votingRights":0,"loggedIn":0,"present":0},"11h":{"pass":"01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b","votingRights":0,"loggedIn":0,"present":0},"11i":{"pass":"01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b","votingRights":0,"loggedIn":0,"present":0},"12a":{"pass":"01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b","votingRights":0,"loggedIn":0,"present":0},"12b":{"pass":"01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b","votingRights":0,"loggedIn":0,"present":0},"12c":{"pass":"01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b","votingRights":0,"loggedIn":0,"present":0},"12d":{"pass":"01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b","votingRights":0,"loggedIn":0,"present":0},"12e":{"pass":"01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b","votingRights":0,"loggedIn":0,"present":0},"12f":{"pass":"01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b","votingRights":0,"loggedIn":0,"present":0},"12g":{"pass":"01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b","votingRights":0,"loggedIn":0,"present":0},"12h":{"pass":"01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b","votingRights":0,"loggedIn":0,"present":0},"12i":{"pass":"01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b","votingRights":0,"loggedIn":0,"present":0},"admin":{"pass":"1ffa7c52a148976b2bf75ca97382f91ed00e563a3019ff43e432fd744b50d168","votingRights":0,"loggedIn":1,"present":0}} |
||||
@ -0,0 +1,14 @@ |
||||
{ |
||||
"11f" : { |
||||
"pass": "2d711642b726b04401627ca9fbac32f5c8530fb1903cc4db02258717921a4881", |
||||
"votingRights": 0, |
||||
"loggedIn": 0, |
||||
"present": 0 |
||||
}, |
||||
"admin" : { |
||||
"pass": "1ffa7c52a148976b2bf75ca97382f91ed00e563a3019ff43e432fd744b50d168", |
||||
"votingRights": 0, |
||||
"loggedIn": 0, |
||||
"present": 0 |
||||
} |
||||
} |
||||
@ -0,0 +1,26 @@ |
||||
module.exports = { |
||||
content: [ |
||||
'./**/*.html', |
||||
'./index.html', |
||||
'./*.html' |
||||
], |
||||
darkMode: true, |
||||
theme: { |
||||
extend: { |
||||
colors: { |
||||
'mycol0': '#200f4c', |
||||
//'mycol': '#8870ff',
|
||||
'mycol': '#8a97ff', |
||||
'mycol2': '#161524', |
||||
}, |
||||
backgroundImage: { |
||||
'bground1': "url('/webPage/img/bground1.jpg')", |
||||
}, |
||||
animation: { |
||||
wiggle: 'wiggle 1s ease-in-out infinite', |
||||
}, |
||||
}, |
||||
}, |
||||
plugins: [], |
||||
} |
||||
|
||||
@ -0,0 +1,89 @@ |
||||
<!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>ADMIN PANEL</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">ADMIN PANEL</p> |
||||
|
||||
<div class="text-center text-white"> |
||||
<input type="url" id="text" class="text-xl rounded-xl text-black py-3 px-3 w-full" placeholder="PROPUNERE"> |
||||
<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="startvot">STARTVOT</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="show">REZULTATE - STOP VOT</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="clear">STERGE TABLA</button> |
||||
|
||||
<p class="text-3xl pb-10 font-extrabold tracking-wide">PAROLE</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="pass">SETEAZA PAROLELE</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="writerepo">SALVEAZA PAROLELE</button> |
||||
|
||||
<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> |
||||
</div> |
||||
|
||||
</div> |
||||
</div> |
||||
|
||||
</div> |
||||
|
||||
</div> |
||||
|
||||
</body> |
||||
|
||||
<script> |
||||
|
||||
var propunere = document.getElementById("text"); |
||||
|
||||
var start = document.getElementById("startvot"); |
||||
|
||||
var show = document.getElementById("show"); |
||||
|
||||
var clear = document.getElementById("clear"); |
||||
|
||||
var pass = document.getElementById("pass"); |
||||
|
||||
var writerepo = document.getElementById("writerepo"); |
||||
|
||||
var audit = document.getElementById("audit"); |
||||
|
||||
|
||||
start.addEventListener("click", function(){ |
||||
var url= "/admindo?do=start-vot&text=" + text.value; |
||||
location.href = url; |
||||
}); |
||||
show.addEventListener("click", function(){ |
||||
var url= "/admindo?do=show"; |
||||
location.href = url; |
||||
}); |
||||
clear.addEventListener("click", function(){ |
||||
var url= "/admindo?do=clear"; |
||||
location.href = url; |
||||
}); |
||||
pass.addEventListener("click", function(){ |
||||
var url= "/admindo?do=pass"; |
||||
location.href = url; |
||||
}); |
||||
writerepo.addEventListener("click", function(){ |
||||
var url= "/admindo?do=writerepo"; |
||||
location.href = url; |
||||
}); |
||||
|
||||
audit.addEventListener("click", function(){ |
||||
var url= "/admindo?do=getaudit"; |
||||
location.href = url; |
||||
}); |
||||
|
||||
</script> |
||||
|
||||
</html> |
||||
@ -0,0 +1,42 @@ |
||||
<!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="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 w-5/6 items-center justify-center text-center"> |
||||
<p class="text-3xl pb-10 font-extrabold tracking-wide">Vot inregistrat, asteptati rezultatele!</p> |
||||
</div> |
||||
</div> |
||||
|
||||
|
||||
|
||||
</div> |
||||
|
||||
|
||||
<div class="text-white bold fixed bottom-4 flex flex-row flex-wrap sm:flex-nowrap items-center mx-50 justify-center ml-auto mr-auto mx-100 px-2 pt-100 text-md bg-purple md:bg-transparent"> |
||||
|
||||
<button type="button" class="redir outline rounded-md py-1 md:py-3 bg-mycol2 px-3 md:px-7 outline-0 outline-white hover:bg-indigo-900 mx-2" onclick="location.href = '/logout';"> |
||||
<span>Logout</span> |
||||
</button> |
||||
</div> |
||||
|
||||
</div> |
||||
|
||||
</body> |
||||
|
||||
<script> |
||||
setTimeout(function(){ |
||||
location.reload(false); |
||||
}, 5000); |
||||
</script> |
||||
|
||||
</html> |
||||
@ -0,0 +1,50 @@ |
||||
<!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 Vote Login</p> |
||||
|
||||
<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"> |
||||
<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"> |
||||
<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> |
||||
</div> |
||||
|
||||
</div> |
||||
</div> |
||||
|
||||
</div> |
||||
|
||||
</div> |
||||
|
||||
</body> |
||||
|
||||
<script> |
||||
|
||||
var user = document.getElementById("user"); |
||||
var pass = document.getElementById("pass"); |
||||
|
||||
var submit = document.getElementById("ok"); |
||||
|
||||
|
||||
submit.addEventListener("click", function(){ |
||||
var url= "/loginact?user=" + user.value + "&pass=" + pass.value; |
||||
location.href = url; |
||||
}); |
||||
|
||||
</script> |
||||
|
||||
</html> |
||||
@ -0,0 +1,42 @@ |
||||
<!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="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 w-5/6 items-center justify-center text-center"> |
||||
<p class="text-3xl pb-10 font-extrabold tracking-wide">Buna $USER$, momentan nu se desfasoara niciun vot.</p> |
||||
</div> |
||||
</div> |
||||
|
||||
|
||||
|
||||
</div> |
||||
|
||||
|
||||
<div class="text-white bold fixed bottom-4 flex flex-row flex-wrap sm:flex-nowrap items-center mx-50 justify-center ml-auto mr-auto mx-100 px-2 pt-100 text-md bg-purple md:bg-transparent"> |
||||
|
||||
<button type="button" class="redir outline rounded-md py-1 md:py-3 bg-mycol2 px-3 md:px-7 outline-0 outline-white hover:bg-indigo-900 mx-2" onclick="location.href = '/logout';"> |
||||
<span>Logout</span> |
||||
</button> |
||||
</div> |
||||
|
||||
</div> |
||||
|
||||
</body> |
||||
|
||||
<script> |
||||
setTimeout(function(){ |
||||
location.reload(false); |
||||
}, 9000); |
||||
</script> |
||||
|
||||
</html> |
||||
@ -0,0 +1,35 @@ |
||||
<!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="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 w-5/6 items-center justify-center text-center"> |
||||
<p class="text-3xl pb-10 font-extrabold tracking-wide">CSE VOTE</p> |
||||
</div> |
||||
</div> |
||||
|
||||
|
||||
|
||||
</div> |
||||
|
||||
|
||||
</div> |
||||
|
||||
</body> |
||||
|
||||
<script> |
||||
setTimeout(function(){ |
||||
location.reload(false); |
||||
}, 9000); |
||||
</script> |
||||
|
||||
</html> |
||||
@ -0,0 +1,57 @@ |
||||
<!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" bg-[url('../../img/bground1.jpg')]> |
||||
<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">$VOTETEXT$</p> |
||||
|
||||
<div class="text-center text-white"> |
||||
<div class="kmscontainer"> |
||||
<div class="windows pr-5"> |
||||
<button type="button" class="rounded-xl w-full bg-[#0B5D1E] my-2 py-5 my-2 px-5 py-5 text-3xl font-bold tracking-wide justify-center items-center font-[manrope]">$YESVOTES$</button> |
||||
</div> |
||||
<div class="office pl-5"> |
||||
<button type="button" class="rounded-xl w-full bg-[#820933] my-2 py-5 px-5 py-5 text-3xl font-bold tracking-wide justify-center items-center font-[manrope]">$NOVOTES$</button> |
||||
</div> |
||||
</div> |
||||
|
||||
<p class="text-3xl pb-10 font-extrabold tracking-wide">$RESULT$</p> |
||||
|
||||
</div> |
||||
|
||||
</div> |
||||
</div> |
||||
|
||||
|
||||
|
||||
</div> |
||||
|
||||
|
||||
<div class="text-white bold fixed bottom-4 flex flex-row flex-wrap sm:flex-nowrap items-center mx-50 justify-center ml-auto mr-auto mx-100 px-2 pt-100 text-md bg-purple md:bg-transparent"> |
||||
|
||||
<button type="button" class="redir outline rounded-md py-1 md:py-3 bg-mycol2 px-3 md:px-7 outline-0 outline-white hover:bg-indigo-900 mx-2" onclick="location.href = '/logout';"> |
||||
<span>Logout</span> |
||||
</button> |
||||
</div> |
||||
|
||||
</div> |
||||
|
||||
</body> |
||||
|
||||
<script> |
||||
setTimeout(function(){ |
||||
location.reload(false); |
||||
}, 5000); |
||||
</script> |
||||
|
||||
</html> |
||||
@ -0,0 +1,54 @@ |
||||
<!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" bg-[url('../../img/bground1.jpg')]> |
||||
<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">$VOTETEXT$</p> |
||||
|
||||
<div class="text-center text-white"> |
||||
<div class="kmscontainer"> |
||||
<div class="windows pr-5"> |
||||
<button type="button" class="rounded-xl w-full bg-[#0B5D1E] my-2 py-5 my-2 px-5 py-5 text-3xl font-bold tracking-wide justify-center items-center font-[manrope]" onclick="location.href='/vote/yes';">DA</button> |
||||
</div> |
||||
<div class="office pl-5"> |
||||
<button type="button" class="rounded-xl w-full bg-[#820933] my-2 py-5 px-5 py-5 text-3xl font-bold tracking-wide justify-center items-center font-[manrope]" onclick="location.href = '/vote/no';">NU</button> |
||||
</div> |
||||
</div> |
||||
|
||||
|
||||
</div> |
||||
|
||||
</div> |
||||
</div> |
||||
|
||||
|
||||
|
||||
</div> |
||||
|
||||
|
||||
<div class="text-white bold fixed bottom-4 flex flex-row flex-wrap sm:flex-nowrap items-center mx-50 justify-center ml-auto mr-auto mx-100 px-2 pt-100 text-md bg-purple md:bg-transparent"> |
||||
|
||||
<button type="button" class="redir outline rounded-md py-1 md:py-3 bg-mycol2 px-3 md:px-7 outline-0 outline-white hover:bg-indigo-900 mx-2" onclick="location.href = '/logout';"> |
||||
<span>Logout</span> |
||||
</button> |
||||
</div> |
||||
|
||||
</div> |
||||
|
||||
</body> |
||||
|
||||
<script> |
||||
|
||||
</script> |
||||
|
||||
</html> |
||||
Loading…
Reference in new issue