************** * index.html * ************** Web Aplikacija

P O R U K E

************* * app.css * ************* #forma-operacije{ position: fixed; top: 50px } #forma-poruka{ position: fixed; top: 60px } #poruke { position: fixed; top: 70px } #nova-poruka, #in, #out, #logovanje, #registracija{ background: blue; color: white; font-weight: bold; } #posalji, #odustani { background: green; color: white; font-weight: bold; } #upozorenje{ color: red; position: fixed; top: 160px } .ime { font-weight: bold; } .naslov{ color: blue; font-size: large; font-weight: bold } ****************** * app.js * ****************** window.onload = function() { var dugmeNovaPoruka = document.querySelector("#nova-poruka"); dugmeNovaPoruka.addEventListener("click", prikaziFormuPoruke); var dugmePosalji = document.querySelector("#posalji"); dugmePosalji.addEventListener("click", posaljiPoruku); var dugmeOdustani = document.querySelector("#odustani"); dugmeOdustani.addEventListener("click", sakrijFormuPoruke); var dugmeIn = document.querySelector("#in"); dugmeIn.addEventListener("click", prikaziInbox); var dugmeOut = document.querySelector("#out"); dugmeOut.addEventListener("click", prikaziOutbox); var dugmeLogovanje = document.querySelector("#logovanje"); dugmeLogovanje.addEventListener("click",Logovanje); var dugmeRegistracija = document.querySelector("#registracija"); dugmeRegistracija.addEventListener("click",Registracija); } function AjaxZahtev(options, callback) { var req = new XMLHttpRequest(); req.open(options.metod, options.putanja, true); req.addEventListener("load", function() { if (req.status < 400) { callback(req.responseText); } else { callback(new Error("Request failed: " + req.statusText)); } }); req.addEventListener("error", function() { callback(new Error("Network error")); }); req.send(options.sadrzaj || null); } function Logovanje(){ var options = {} options.metod = "post" options.putanja = "login" var korsinik = {"ime":document.querySelector("#korisnik").value, "pin":document.querySelector("#pin").value} options.sadrzaj = JSON.stringify(korsinik) AjaxZahtev(options, PrikaziOdgovorNaLogovanje) } function Registracija(){ if(!validacijaKorisnika()){ document.querySelector("#upozorenje").innerHTML = "Neispravno ime ili pin" return } var options = {} options.metod = "post" options.putanja = "registracija" var korisnik = {"ime":document.querySelector("#korisnik").value, "pin":document.querySelector("#pin").value} options.sadrzaj = JSON.stringify(korisnik) AjaxZahtev(options, PrikaziOdgovorNaRegistraciju) } function validacijaKorisnika(){ ime = document.querySelector("#korisnik").value pin = document.querySelector("#pin").value if (ime.length < 5 || pin.length < 4){ return false } return true } function PrikaziOdgovorNaRegistraciju(odgovor){ document.querySelector("#upozorenje").innerHTML = odgovor } function PrikaziOdgovorNaLogovanje(odgovor){ if (odgovor == "Registrovan"){ document.querySelector("#forma-login").style.visibility = "hidden" document.querySelector("#forma-operacije").style.visibility = "visible" document.querySelector("#upozorenje").innerHTML = "" } else{ document.querySelector("#upozorenje").innerHTML="Niste registrovani korisnik" } } function prikaziInbox() { sakrijFormuPoruke() var options = {} options.metod = "post"; options.putanja = "inbox"; options.sadrzaj = document.querySelector("#korisnik").value; AjaxZahtev(options, InboxPoruke) } function InboxPoruke(odgovor){ document.querySelector("#poruke").innerHTML = odgovor } function prikaziOutbox() { sakrijFormuPoruke() var options = {} options.metod = "post"; options.putanja = "outbox"; options.sadrzaj = document.querySelector("#korisnik").value; AjaxZahtev(options, OutboxPoruke) } function OutboxPoruke(odgovor){ document.querySelector("#poruke").innerHTML = odgovor } function sakrijFormuPoruke() { document.querySelector("#forma-poruka").style.visibility="hidden"; document.querySelector("#upozorenje").innerHTML=""; } function prikaziFormuPoruke() { document.querySelector("#upozorenje").innerHTML=""; document.querySelector("#poruke").innerHTML=""; document.querySelector("#forma-poruka").style.visibility="visible"; } function posaljiPoruku() { var posiljalac = document.querySelector("#korisnik").value; var primalac = document.querySelector("#primalac").value; var poruka = document.querySelector("#poruka").value; if(!proveraPodataka(posiljalac, primalac, poruka)) { document.querySelector("#upozorenje").innerHTML="pogresni podaci"; return; } var options = {} options.metod = "post"; options.putanja = "nova-poruka"; var poruka = {"od":posiljalac, "za":primalac, "poruka":poruka} options.sadrzaj = JSON.stringify(poruka); AjaxZahtev(options, PrikaziOdgovorNaPoruku) //sakrijFormuPoruke(); } function PrikaziOdgovorNaPoruku(odgovor){ document.querySelector("#upozorenje").innerHTML=odgovor } function proveraPodataka(posiljalac, primalac, poruka) { if(posiljalac == "" || primalac == "" || poruka == "") { return false; } return true; } **************** * server.js * **************** var http = require("http"); var fs = require("fs"); var korisnici = [] var poruke = [] fs.readFile("korisnici.dat", function read(err, data) { if (err) { korisnici = [{ime:"admin",pin:"9999"}] } else korisnici = JSON.parse(data); }); fs.readFile("poruke.dat", function read(err, data) { if (err) { poruke = []; } else poruke = JSON.parse(data); }); // Kesiranje statickih fajlova var index = fs.readFileSync("index.html","utf8"); var appcss = fs.readFileSync("app.css","utf8"); var appjs = fs.readFileSync("app.js","utf8"); var ikona = fs.readFileSync("favicon.ico"); function prikaziPocetnuStranu(response){ response.writeHead(200, {"Content-Type": "text/html"}); response.end(index); } function loginKorisnika(korisnik){ if (korisnikRegistrovan(korisnik)){ return "Registrovan" } else{ return "Niste registrovani korisnik" } } function korisnikRegistrovan(korisnik){ for (var i=0; i < korisnici.length; i++){ if ( korisnici[i].ime == korisnik.ime && korisnici[i].pin == korisnik.pin ){ return true } } return false } function registracijaKorisnika(korisnik) { if (imeRegistrovano(korisnik.ime)) { return "Ime je vec registrovano" } korisnici.push(korisnik) fs.writeFile("korisnici.dat", JSON.stringify(korisnici), function(err) { if(err) { console.log(err); } }); return "Uspesna registracija" } function imeRegistrovano(korisnik){ for (var i=0; i < korisnici.length; i++){ if ( korisnici[i].ime == korisnik){ return true } } return false } function NovaPoruka(poruka){ if (!imeRegistrovano(poruka.za)){ return "Ne postoji korisnik "+poruka.za } poruke.push(poruka) //console.log(poruke) fs.writeFile("poruke.dat", JSON.stringify(poruke), function(err) { if(err) { console.log(err); } }); return "Poruka poslata" } function Outbox(korisnik){ odgovor="

Outbox

" for (i=0;i"+poruke[i].poruka+"

" } return odgovor } function Inbox(korisnik){ odgovor="

Inbox

" for (i=0;i"+poruke[i].poruka+"

" } return odgovor } function nepoznatURL(response){ response.writeHead(200, {"Content-Type": "text/html"}); response.write("

Not Found

"); response.end(); } function OdgovorNaZahtev(request,response){ //console.log(request.url) switch(request.url) { case "/": case "/index.html": prikaziPocetnuStranu(response); break; case "/app.css": response.writeHead(200, {"Content-Type": "text/css"}); response.end(appcss); break; case "/favicon.ico": response.writeHead(200, {'Content-Type': 'image/gif' }); response.end(ikona, 'binary'); break; case "/app.js": response.writeHead(200, {"Content-Type": "text/plain"}); response.end(appjs); break; case "/login": var korisnik = "" request.on('data', function (data) { korisnik += data; }); request.on('end', function () { korisnik = JSON.parse(korisnik) response.end(loginKorisnika(korisnik)); }); break; case "/registracija": var korisnik = "" request.on('data', function (data) { korisnik += data; }); request.on('end', function () { korisnik = JSON.parse(korisnik) response.end(registracijaKorisnika(korisnik)); }); break; case "/nova-poruka": var poruka = "" request.on('data', function (data) { poruka += data; }); request.on('end', function () { poruka = JSON.parse(poruka) response.end(NovaPoruka(poruka)); }); break; case "/outbox": var korisnik = "" request.on('data', function (data) { korisnik += data; }); request.on('end', function () { response.end(Outbox(korisnik)); }); break; case "/inbox": var korisnik = "" request.on('data', function (data) { korisnik += data; }); request.on('end', function () { response.end(Inbox(korisnik)); }); break; default: nepoznatURL(response); break; } } var server = http.createServer(OdgovorNaZahtev); server.listen(8000); console.log("Server ceka zahteve na portu 8000");