diff --git a/index.ts b/index.ts index 38b8866..673b6d7 100644 --- a/index.ts +++ b/index.ts @@ -32,81 +32,7 @@ logger.add( const app = express(); -app.use(express.static("static")); -app.use(bodyParser.urlencoded({ extended: false })); -app.use(bodyParser.json()); - -app.use(function (req, res, next) { - const pathesWhichRequireDB = ["map", "login", "register"]; - const pathesWhichRequireLogin = ["createElevator"]; - const path = req.path - const pathesDes = path.split("/") - let requiresDB = false; - let requiresLogin = false; - let allowContinue = true; - console.log(pathesDes) - - if (pathesWhichRequireLogin.indexOf(pathesDes[1]) > -1) { - requiresLogin = true; - } - - if (pathesDes[1] == "api") { - requiresDB = true; - } - if (pathesWhichRequireDB.indexOf(pathesDes[1]) > -1) { - requiresDB = true; - } - - if (requiresDB) { - if (!mysqlIsUpAndOkay) { - allowContinue = false; - const data = fs.readFileSync("templates/dbError.html", "utf8"); - let displayText = - "This might be an artifact of a recent restart. Maybe wait a few minutes and reload this page."; - if (startUpTime + 60 <= Math.floor(new Date().getTime() / 1000)) { - displayText = - "The server failed to connect to the MySQL server. This means it was unable to load any data."; - } - if (mySQLstate == 1) { - displayText = - "There is a problem with the database servers setup. Please check the log for more info."; - } - - res.send( - Eta.render(data, { - author: metainfo.author, - desc: metainfo.desc, - siteTitel: metainfo.sitePrefix + "Error", - fontawesomeKey: fontawesomeKey, - displayText: displayText, - }) - ); - } - } - - if (requiresLogin) { - allowContinue = false; - const data = fs.readFileSync("templates/redirect.html", "utf8"); - res.send( - Eta.render(data, { - author: metainfo.author, - desc: metainfo.desc, - siteTitel: metainfo.sitePrefix + "Redirect", - fontawesomeKey: fontawesomeKey, - url: "/login?r=" + path, - }) - ); - } - - console.log('Time:', Date.now()) - if (allowContinue) { - next() - } else { - console.log("Stopped further exec of route") - } - -}) /* app.use(csp.contentSecurityPolicy({ @@ -168,6 +94,84 @@ try { ); } +app.use(express.static("static")); + +app.use(bodyParser.urlencoded({ extended: false })); +app.use(bodyParser.json()); +app.use(session({ secret: cookieSecret })); +app.use(function (req, res, next) { + const pathesWhichRequireDB = ["map", "login", "register"]; + const pathesWhichRequireLogin = ["createElevator"]; + const path = req.path + const pathesDes = path.split("/") + let requiresDB = false; + let requiresLogin = false; + let allowContinue = true; + console.log(pathesDes) + + if (pathesWhichRequireLogin.indexOf(pathesDes[1]) > -1) { + requiresLogin = true; + } + + if (pathesDes[1] == "api") { + requiresDB = true; + } + if (pathesWhichRequireDB.indexOf(pathesDes[1]) > -1) { + requiresDB = true; + } + + if (requiresDB) { + if (!mysqlIsUpAndOkay) { + allowContinue = false; + const data = fs.readFileSync("templates/dbError.html", "utf8"); + let displayText = + "This might be an artifact of a recent restart. Maybe wait a few minutes and reload this page."; + if (startUpTime + 60 <= Math.floor(new Date().getTime() / 1000)) { + displayText = + "The server failed to connect to the MySQL server. This means it was unable to load any data."; + } + if (mySQLstate == 1) { + displayText = + "There is a problem with the database servers setup. Please check the log for more info."; + } + + res.send( + Eta.render(data, { + author: metainfo.author, + desc: metainfo.desc, + siteTitel: metainfo.sitePrefix + "Error", + fontawesomeKey: fontawesomeKey, + displayText: displayText, + }) + ); + } + } + + if (requiresLogin) { + if (req.session.username == undefined) { + allowContinue = false; + const data = fs.readFileSync("templates/redirect.html", "utf8"); + res.send( + Eta.render(data, { + author: metainfo.author, + desc: metainfo.desc, + siteTitel: metainfo.sitePrefix + "Redirect", + fontawesomeKey: fontawesomeKey, + url: "/login?r=" + path, + }) + ); + } + } + + console.log('Time:', Date.now()) + if (allowContinue) { + next() + } else { + console.log("Stopped further exec of route") + } + +}) + const transport = nodemailer.createTransport({ host: mailConf.host, port: mailConf.port, diff --git a/routes/auth.route.ts b/routes/auth.route.ts index 8d55b2e..dc3669e 100644 --- a/routes/auth.route.ts +++ b/routes/auth.route.ts @@ -238,7 +238,7 @@ module.exports = function (app, con, logger, metainfo, jsonConfig) { app.get("/profile", function (req, res) { if (req.session.username != undefined) { let greeting = greetingTime(new Date()); - greeting += req.session.username; + greeting += " " + req.session.username; const hash = cryptoF .createHash("md5") .update(req.session.mail.replace(" ", "").toLowerCase()) @@ -299,7 +299,7 @@ module.exports = function (app, con, logger, metainfo, jsonConfig) { password != "" ) { if (mailRegex.test(mail)) { - const stmt = "SELECT * FROM users WHERE email='?';"; + const stmt = "SELECT * FROM users WHERE email=?;"; con.query(stmt, [mail], function (err, result) { if (err) throw err; // TODO proper error page if (result.length == 0) { @@ -414,7 +414,7 @@ module.exports = function (app, con, logger, metainfo, jsonConfig) { } else { const emailContent = "Hi! \n You have created an account for the open elevator map. To finalize the process please verify your E-Mail adress. Use this link: http://" + - serverAdress + + jsonConfig.serverAdress + "/verify/" + result[0].token; transport.sendMail({ diff --git a/static/js/createElevator.js b/static/js/createElevator.js new file mode 100644 index 0000000..4f7cce2 --- /dev/null +++ b/static/js/createElevator.js @@ -0,0 +1,267 @@ + + var lockMap = false; + + function noRestore() { + off(); + Cookies.remove("tempStore") + } + + function restoreFunc() { + try { + dataBlock = JSON.parse(dataBlock) + document.getElementById("lat").value = dataBlock["lat"] + document.getElementById("lng").value = dataBlock["lng"] + document.getElementById("type").value = dataBlock["type"] + document.getElementById("visit").value = dataBlock["visit"] + document.getElementById("pepl").value = dataBlock["pepl"] + document.getElementById("weig").value = dataBlock["weig"] + document.getElementById("manuf").value = dataBlock["manuf"] + document.getElementById("model").value = dataBlock["model"] + document.getElementById("flor").value = dataBlock["flor"] + document.getElementById("description").value = dataBlock["description"] + } catch (ex) { + dataBlock = {} + } + off() + } + + dataBlock = Cookies.get("tempStore"); + if (dataBlock == undefined) { + dataBlock = {}; + } else { + on() + } + + var currentPage = 0; + function saveValues() { + dataBlock["lat"] = document.getElementById("lat").value + dataBlock["lng"] = document.getElementById("lng").value + dataBlock["type"] = document.getElementById("type").value + dataBlock["visit"] = document.getElementById("visit").value + dataBlock["pepl"] = document.getElementById("pepl").value + dataBlock["weig"] = document.getElementById("weig").value + dataBlock["manuf"] = document.getElementById("manuf").value + dataBlock["model"] = document.getElementById("model").value + dataBlock["flor"] = document.getElementById("flor").value + dataBlock["description"] = document.getElementById("description").value + Cookies.set('tempStore', JSON.stringify(dataBlock)) + } + + function submit() { + currentPage = 6; + updateDialog() + saveValues() + const options = { + method: 'POST', + body: JSON.stringify({}) + }; + + fetch('/api/saveNewElevatorMeta', options) + .then(response => response.json()) + .then(response => { + console.warn("!!!!!!!!!!!!", response) + document.getElementById("imageUploadInfo").style.display = 'block'; + var filesToSend = $('#myFile').prop('files').length; + var i = 0; + while (i < filesToSend) { + document.getElementById("imageUploadInfo").innerHTML = "Uploading image " + String(i) + "/" + String(filesToSend) + console.log("Files left to send: ", filesToSend - i) + var file_data = $('#myFile').prop('files')[i]; + var form_data = new FormData(); + form_data.append('file', file_data); + + console.log(file_data) + if (String(file_data.type).includes("image/")) { + $.ajax({ + url: '/api/uploadImage?id=' + response.id, + dataType: 'json', + cache: false, + contentType: false, + processData: false, + data: form_data, + type: 'post', + success: function (data) { + alert(data); + } + }); + } else { + console.log("Skipping nonimage file") + } + i++; + } + console.log("DONE!") + }); + + + + + + + + + } + function updateDialog() { + if (currentPage == 0) { + document.getElementById("step1").style.display = 'block'; + document.getElementById("step2").style.display = 'none'; + document.getElementById("step3").style.display = 'none'; + document.getElementById("step4").style.display = 'none'; + } + if (currentPage == 1) { + document.getElementById("step1").style.display = 'none'; + document.getElementById("step2").style.display = 'block'; + document.getElementById("step3").style.display = 'none'; + document.getElementById("step4").style.display = 'none'; + } + if (currentPage == 2) { + document.getElementById("step1").style.display = 'none'; + document.getElementById("step2").style.display = 'none'; + document.getElementById("step3").style.display = 'block'; + document.getElementById("step4").style.display = 'none'; + lockMap = false; + } + if (currentPage == 3) { + document.getElementById("step1").style.display = 'none'; + document.getElementById("step2").style.display = 'none'; + document.getElementById("step3").style.display = 'none'; + document.getElementById("step4").style.display = 'block'; + document.getElementById("step5").style.display = 'none'; + document.getElementById("missingAlert").style.display = 'none'; + lockMap = true; + } + if (currentPage == 4) { + document.getElementById("step1").style.display = 'none'; + document.getElementById("step2").style.display = 'none'; + document.getElementById("step3").style.display = 'none'; + document.getElementById("step4").style.display = 'none'; + + containsEmpt = false; + for (const [key, value] of Object.entries(dataBlock)) { + if (value == "" || value == undefined) { + console.log("hi") + console.log(key, value) + containsEmpt = true; + document.getElementById("missingAlert").style.display = 'block'; + } + } + if (containsEmpt == false) { + document.getElementById("missingAlert").style.display = 'none'; + currentPage = 5; + } + console.log(containsEmpt); + } + if (currentPage == 5) { + document.getElementById("step1").style.display = 'none'; + document.getElementById("step2").style.display = 'none'; + document.getElementById("step3").style.display = 'none'; + document.getElementById("step4").style.display = 'none'; + document.getElementById("step5").style.display = 'block'; + document.getElementById("missingAlert").style.display = 'none'; + } + if (currentPage == 6) { + document.getElementById("step1").style.display = 'none'; + document.getElementById("step2").style.display = 'none'; + document.getElementById("step3").style.display = 'none'; + document.getElementById("step4").style.display = 'none'; + document.getElementById("step5").style.display = 'none'; + document.getElementById("step6").style.display = 'block'; + document.getElementById("missingAlert").style.display = 'none'; + } + saveValues(); + console.log(dataBlock) + + } + function nextDialogePage() { + currentPage++; + updateDialog(); + } + function prevPage() { + currentPage--; + updateDialog(); + } + + + var latElm = document.getElementById("lat"); + var lngElm = document.getElementById("lng"); + + latElm.addEventListener('input', function (evt) { + if(!lockMap){ + markers.clearLayers(); + console.log(evt.target.value) + const lat = evt.target.value; + const lng = lngElm.value; + var marker = new theMarker([lat, lng]) + //marker.addTo(mymap) + markers.addLayer(marker); + markers.addTo(mymap); + } + + }); + + lngElm.addEventListener('input', function (evt) { + if(!lockMap){ + markers.clearLayers(); + console.log(evt.target.value) + const lat = latElm.value; + const lng = evt.target.value; + var marker = new theMarker([lat, lng]) + //marker.addTo(mymap) + markers.addLayer(marker); + markers.addTo(mymap); + } + }); + + var amountOfImages = 0; + var markers = L.markerClusterGroup(); + slideIndex = 1; + + var mymap = L.map("map").setView([51.505, -0.09], 50); + + theMarker = L.Marker.extend({ + options: { + id: "-1", + }, + }); + + function showPosition(position) { + console.log(position.coords); + + mymap.setView( + new L.LatLng(position.coords.latitude, position.coords.longitude), + 10 + ); + // mymap.setView(new L.LatLng(10.737, -73.923), 8); + } + + home() + + mymap.on('click', function (e) { + if(!lockMap){ + markers.clearLayers(); + var coord = e.latlng; + var lat = coord.lat; + var lng = coord.lng; + var marker = new theMarker([lat, lng]) + //marker.addTo(mymap) + markers.addLayer(marker); + markers.addTo(mymap); + document.getElementById("lat").value = lat + document.getElementById("lng").value = lng + console.log("You clicked the map at latitude: " + lat + " and longitude: " + lng); + }else{ + console.log("The map is locked.") + } + }); + + function addPin(item, index) { + var marker = new theMarker([item.lat, item.lng], { + id: item.id, + }).on("click", onClick); + // var marker = new L.Marker() + //marker.addTo(mymap).on('click', onClick); + markers.on("clusterclick", function (a) { + //alert('cluster ' + a.layer.getAllChildMarkers().length); + }); + markers.addLayer(marker); + } + \ No newline at end of file diff --git a/templates/createElevator.html b/templates/createElevator.html index f756aee..32d2ea0 100644 --- a/templates/createElevator.html +++ b/templates/createElevator.html @@ -158,231 +158,11 @@ - +