You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
141 lines
4.2 KiB
141 lines
4.2 KiB
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 { query } = require('express');
|
|
const FileStore = require('session-file-store')(session)
|
|
|
|
var port = process.env.PORT || 3000;
|
|
|
|
const app = express();
|
|
|
|
if(!fs.existsSync('repo')) fs.mkdirSync('repo');
|
|
|
|
var secret;
|
|
|
|
var logString = "";
|
|
|
|
var credString;
|
|
var credentials;
|
|
|
|
var promoString;
|
|
var promotions;
|
|
|
|
if(!fs.existsSync('repo/secret')){
|
|
secret = crypto.randomBytes(35).toString('hex');
|
|
fs.writeFileSync('repo/secret', secret);
|
|
}else{
|
|
secret = fs.readFileSync('repo/secret');
|
|
}
|
|
|
|
|
|
app.use(session({
|
|
secret: secret.toString(),
|
|
saveUninitialized:false,
|
|
resave:false,
|
|
cookie: {maxAge: 100000000000},
|
|
store:new FileStore()
|
|
}));
|
|
|
|
function report(str){
|
|
console.log(str);
|
|
logString = logString.concat('\n', str);
|
|
}
|
|
|
|
function randomIntForPrezenta() {
|
|
return Math.floor(Math.random() * (999 - 100 + 1) + 100);
|
|
}
|
|
|
|
if(fs.existsSync('repo/signatures')){
|
|
sigString = fs.readFileSync('repo/signatures')
|
|
signatures = JSON.parse(sigString);
|
|
}else{
|
|
signatures = {};
|
|
signatures.i_buffer = 0;
|
|
signatures.signatures = {};
|
|
fs.writeFileSync('repo/signatures', JSON.stringify(signatures))
|
|
}
|
|
|
|
app.get('/api_sign', (request, response) => {
|
|
if(!request.session.signed && request.session.legitimate === "true")
|
|
if(request.query.name && request.query.domeniu && request.query.clasa){
|
|
report("sign");
|
|
if(request.query.name.length <= 45 && request.query.domeniu.length <= 45 && request.query.clasa.length <= 45){
|
|
signatures.signatures[signatures.i_buffer] = {};
|
|
signatures.signatures[signatures.i_buffer].name = request.query.name.replace(/[^a-z0-9]/gi, ' ');
|
|
signatures.signatures[signatures.i_buffer].domeniu = request.query.domeniu.replace(/[^a-z0-9]/gi, ' ');
|
|
signatures.signatures[signatures.i_buffer].clasa = request.query.clasa.replace(/[^a-z0-9]/gi, ' ');
|
|
signatures.i_buffer++;
|
|
request.session.signed = true;
|
|
response.redirect('/multumesc');
|
|
response.end();
|
|
fs.writeFileSync('repo/signatures', JSON.stringify(signatures))
|
|
}
|
|
}else{
|
|
response.writeHead(200);
|
|
response.end("INVALID REQUEST")
|
|
}
|
|
else{
|
|
response.writeHead(200);
|
|
response.end("ALREADY SIGNED");
|
|
}
|
|
})
|
|
|
|
app.get('/', (request, response) => {
|
|
request.session.legitimate = "true";
|
|
fs.readFile('./ui/homepage.html', function(error, content){
|
|
if(error) report(error);
|
|
|
|
content = content.toString().replace("$$SIGN$$", JSON.stringify(signatures));
|
|
|
|
response.writeHead(200, {'Content-Type': 'text/html'});
|
|
response.end(content);
|
|
})
|
|
})
|
|
|
|
app.get('/semnez', (resource, response) => {
|
|
fs.readFile('./ui/semnez.html', function(error, content){
|
|
if(error) report(error);
|
|
|
|
response.writeHead(200, {'Content-Type': 'text/html'});
|
|
response.end(content);
|
|
})
|
|
})
|
|
app.get('/multumesc', (resource, response) => {
|
|
fs.readFile('./ui/multumesc.html', function(error, content){
|
|
if(error) report(error);
|
|
|
|
response.writeHead(200, {'Content-Type': 'text/html'});
|
|
response.end(content);
|
|
})
|
|
})
|
|
|
|
app.get('/resource/*', (request, response) => {
|
|
var resource = request.path.slice(request.path.lastIndexOf('/'), request.path.end)
|
|
fs.readFile('./assets/'+resource, function(error, content){
|
|
if(error) report(error);
|
|
|
|
if(resource.slice(resource.lastIndexOf('.'), resource.end) === "ttf") response.writeHead(200, {'Content-Type': 'font/ttf'});
|
|
if(resource.slice(resource.lastIndexOf('.'), resource.end) === "json") response.writeHead(200, {'Content-Type': 'text/json'});
|
|
if(resource.slice(resource.lastIndexOf('.'), resource.end) === "jpg") response.writeHead(200, {'Content-Type': 'image/jpeg'});
|
|
|
|
response.end(content);
|
|
})
|
|
})
|
|
|
|
app.get('/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);
|
|
})
|
|
})
|
|
|
|
|
|
|
|
|
|
const server = http.createServer(app);
|
|
server.listen(port); |