[1.2.0] #4 Possible to Ex and Import Setting
This commit is contained in:
parent
3744613277
commit
418a6e8aad
@ -5,6 +5,7 @@ using System.Net;
|
|||||||
using System.Text;
|
using System.Text;
|
||||||
using BlubbFish.Utils;
|
using BlubbFish.Utils;
|
||||||
using BlubbFish.Utils.IoT.Bots;
|
using BlubbFish.Utils.IoT.Bots;
|
||||||
|
using LitJson;
|
||||||
|
|
||||||
namespace Fraunhofer.Fit.IoT.LoraMap.Model.Admin {
|
namespace Fraunhofer.Fit.IoT.LoraMap.Model.Admin {
|
||||||
class AdminModel {
|
class AdminModel {
|
||||||
@ -12,6 +13,16 @@ namespace Fraunhofer.Fit.IoT.LoraMap.Model.Admin {
|
|||||||
public event AdminEvent NamesUpdate;
|
public event AdminEvent NamesUpdate;
|
||||||
|
|
||||||
private readonly Dictionary<Int64, AdminSession> session = new Dictionary<Int64, AdminSession>();
|
private readonly Dictionary<Int64, AdminSession> session = new Dictionary<Int64, AdminSession>();
|
||||||
|
private readonly Dictionary<String, String> settings;
|
||||||
|
|
||||||
|
public AdminModel(Dictionary<String, String> settings) {
|
||||||
|
this.settings = settings;
|
||||||
|
if(!settings.ContainsKey("admin_user") || !settings.ContainsKey("admin_pass")) {
|
||||||
|
Helper.WriteError("Kann die Einstellungen [webserver] admin_user und admin_pass nicht laden!");
|
||||||
|
throw new FileNotFoundException("Kann die Einstellungen [webserver] admin_user und admin_pass nicht laden!");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public Boolean ParseReuqest(HttpListenerContext cont) {
|
public Boolean ParseReuqest(HttpListenerContext cont) {
|
||||||
if(cont.Request.Url.PathAndQuery == "/admin/login") {
|
if(cont.Request.Url.PathAndQuery == "/admin/login") {
|
||||||
return this.Login(cont);
|
return this.Login(cont);
|
||||||
@ -34,6 +45,13 @@ namespace Fraunhofer.Fit.IoT.LoraMap.Model.Admin {
|
|||||||
String rawData = reader.ReadToEnd();
|
String rawData = reader.ReadToEnd();
|
||||||
cont.Request.InputStream.Close();
|
cont.Request.InputStream.Close();
|
||||||
reader.Close();
|
reader.Close();
|
||||||
|
try {
|
||||||
|
JsonMapper.ToObject(rawData);
|
||||||
|
} catch(Exception) {
|
||||||
|
Helper.WriteError("501 - Error recieving names.json " + cont.Request.Url.PathAndQuery);
|
||||||
|
cont.Response.StatusCode = 501;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
File.WriteAllText("json/names.json", rawData);
|
File.WriteAllText("json/names.json", rawData);
|
||||||
Console.WriteLine("200 - Get names.json " + cont.Request.Url.PathAndQuery);
|
Console.WriteLine("200 - Get names.json " + cont.Request.Url.PathAndQuery);
|
||||||
this.NamesUpdate?.Invoke(this, new EventArgs());
|
this.NamesUpdate?.Invoke(this, new EventArgs());
|
||||||
@ -58,8 +76,7 @@ namespace Fraunhofer.Fit.IoT.LoraMap.Model.Admin {
|
|||||||
|
|
||||||
private Boolean Login(HttpListenerContext cont) {
|
private Boolean Login(HttpListenerContext cont) {
|
||||||
Dictionary<String, String> POST = Webserver.GetPostParams(cont.Request);
|
Dictionary<String, String> POST = Webserver.GetPostParams(cont.Request);
|
||||||
if(POST.ContainsKey("user") && POST["user"] == "admin" &&
|
if(POST.ContainsKey("user") && POST["user"] == this.settings["admin_user"] && POST.ContainsKey("pass") && POST["pass"] == this.settings["admin_pass"]) {
|
||||||
POST.ContainsKey("pass") && POST["pass"] == "password") {
|
|
||||||
Int64 sessionid = 0;
|
Int64 sessionid = 0;
|
||||||
while(true) {
|
while(true) {
|
||||||
sessionid = AdminSession.GetRandomSessionid();
|
sessionid = AdminSession.GetRandomSessionid();
|
||||||
|
@ -10,7 +10,7 @@ using System.Runtime.InteropServices;
|
|||||||
[assembly: AssemblyConfiguration("")]
|
[assembly: AssemblyConfiguration("")]
|
||||||
[assembly: AssemblyCompany("Fraunhofer FIT")]
|
[assembly: AssemblyCompany("Fraunhofer FIT")]
|
||||||
[assembly: AssemblyProduct("Lora-Map")]
|
[assembly: AssemblyProduct("Lora-Map")]
|
||||||
[assembly: AssemblyCopyright("Copyright © 2018 - 14.04.2019")]
|
[assembly: AssemblyCopyright("Copyright © 2018 - 15.04.2019")]
|
||||||
[assembly: AssemblyTrademark("Fraunhofer FIT, BlubbFish")]
|
[assembly: AssemblyTrademark("Fraunhofer FIT, BlubbFish")]
|
||||||
[assembly: AssemblyCulture("")]
|
[assembly: AssemblyCulture("")]
|
||||||
[assembly: NeutralResourcesLanguage("de-DE")]
|
[assembly: NeutralResourcesLanguage("de-DE")]
|
||||||
@ -33,8 +33,8 @@ using System.Runtime.InteropServices;
|
|||||||
// Sie können alle Werte angeben oder Standardwerte für die Build- und Revisionsnummern verwenden,
|
// Sie können alle Werte angeben oder Standardwerte für die Build- und Revisionsnummern verwenden,
|
||||||
// übernehmen, indem Sie "*" eingeben:
|
// übernehmen, indem Sie "*" eingeben:
|
||||||
// [assembly: AssemblyVersion("1.0.*")]
|
// [assembly: AssemblyVersion("1.0.*")]
|
||||||
[assembly: AssemblyVersion("1.1.7")]
|
[assembly: AssemblyVersion("1.2.0")]
|
||||||
[assembly: AssemblyFileVersion("1.1.7")]
|
[assembly: AssemblyFileVersion("1.2.0")]
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* 1.1.1 Add Debian package config
|
* 1.1.1 Add Debian package config
|
||||||
@ -44,4 +44,5 @@ using System.Runtime.InteropServices;
|
|||||||
* 1.1.5 Add support for alert button
|
* 1.1.5 Add support for alert button
|
||||||
* 1.1.6 #5 Create admin area
|
* 1.1.6 #5 Create admin area
|
||||||
* 1.1.7 #8 Editor for Names
|
* 1.1.7 #8 Editor for Names
|
||||||
|
* 1.2.0 #4 Possible to Ex and Import Setting
|
||||||
*/
|
*/
|
||||||
|
@ -18,10 +18,12 @@ namespace Fraunhofer.Fit.IoT.LoraMap {
|
|||||||
private readonly SortedDictionary<String, AlarmItem> alarms = new SortedDictionary<String, AlarmItem>();
|
private readonly SortedDictionary<String, AlarmItem> alarms = new SortedDictionary<String, AlarmItem>();
|
||||||
private JsonData marker;
|
private JsonData marker;
|
||||||
private readonly Dictionary<String, Marker> markertable = new Dictionary<String, Marker>();
|
private readonly Dictionary<String, Marker> markertable = new Dictionary<String, Marker>();
|
||||||
private readonly AdminModel admin = new AdminModel();
|
private readonly AdminModel admin;
|
||||||
|
|
||||||
public Server(ADataBackend backend, Dictionary<String, String> settings, InIReader requests) : base(backend, settings, requests) {
|
public Server(ADataBackend backend, Dictionary<String, String> settings, InIReader requests) : base(backend, settings, requests) {
|
||||||
|
this.logger.SetPath(settings["loggingpath"]);
|
||||||
this.CheckJsonFiles();
|
this.CheckJsonFiles();
|
||||||
|
this.admin = new AdminModel(settings);
|
||||||
this.marker = JsonMapper.ToObject(File.ReadAllText("json/names.json"));
|
this.marker = JsonMapper.ToObject(File.ReadAllText("json/names.json"));
|
||||||
this.admin.NamesUpdate += this.AdminModelUpdateNames;
|
this.admin.NamesUpdate += this.AdminModelUpdateNames;
|
||||||
this.StartListen();
|
this.StartListen();
|
||||||
@ -32,6 +34,7 @@ namespace Fraunhofer.Fit.IoT.LoraMap {
|
|||||||
foreach(KeyValuePair<String, PositionItem> item in this.positions) {
|
foreach(KeyValuePair<String, PositionItem> item in this.positions) {
|
||||||
item.Value.UpdateMarker(this.marker, item.Key);
|
item.Value.UpdateMarker(this.marker, item.Key);
|
||||||
}
|
}
|
||||||
|
Console.WriteLine("Namen und Icons aktualisiert!");
|
||||||
}
|
}
|
||||||
|
|
||||||
private void CheckJsonFiles() {
|
private void CheckJsonFiles() {
|
||||||
|
@ -3,4 +3,7 @@ type=mqtt
|
|||||||
server=127.0.0.1
|
server=127.0.0.1
|
||||||
|
|
||||||
[webserver]
|
[webserver]
|
||||||
prefix=http://+:8080/
|
prefix=http://+:8080/
|
||||||
|
admin_user=admin
|
||||||
|
admin_pass=password
|
||||||
|
loggingpath=/var/log/loramap.log
|
@ -1,27 +0,0 @@
|
|||||||
{
|
|
||||||
"R": {
|
|
||||||
"name": "26/91",
|
|
||||||
"marker.svg": {
|
|
||||||
"person": {
|
|
||||||
"org": "thw",
|
|
||||||
"funct": "fueh",
|
|
||||||
"rang": "zug",
|
|
||||||
"text": "TZ"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"L": {
|
|
||||||
"name": "27/92",
|
|
||||||
"marker.svg": {
|
|
||||||
"person": {
|
|
||||||
"org": "thw",
|
|
||||||
"funct": "fueh",
|
|
||||||
"rang": "trupp",
|
|
||||||
"text": "B1"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"K": {
|
|
||||||
"name": "Test"
|
|
||||||
}
|
|
||||||
}
|
|
@ -104,4 +104,13 @@
|
|||||||
}
|
}
|
||||||
#iconeditor .innerbox .save {
|
#iconeditor .innerbox .save {
|
||||||
clear: both;
|
clear: both;
|
||||||
|
}
|
||||||
|
|
||||||
|
#content #eximport .title {
|
||||||
|
margin-bottom: 20px;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
#content #eximport .names textarea {
|
||||||
|
height: 120px;
|
||||||
|
width: 90%;
|
||||||
}
|
}
|
@ -1,12 +1,12 @@
|
|||||||
function menu_names() {
|
function menu_names() {
|
||||||
var parsenames = new XMLHttpRequest();
|
var ajaxnames = new XMLHttpRequest();
|
||||||
parsenames.onreadystatechange = function() {
|
ajaxnames.onreadystatechange = function() {
|
||||||
if(parsenames.readyState === 4 && parsenames.status === 200) {
|
if(ajaxnames.readyState === 4 && ajaxnames.status === 200) {
|
||||||
NamesEditor.ParseJson(parsenames.responseText);
|
NamesEditor.ParseJson(ajaxnames.responseText);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
parsenames.open("GET", "http://{%REQUEST_URL_HOST%}/admin/get_json_names", true);
|
ajaxnames.open("GET", "http://{%REQUEST_URL_HOST%}/admin/get_json_names", true);
|
||||||
parsenames.send();
|
ajaxnames.send();
|
||||||
}
|
}
|
||||||
|
|
||||||
function menu_overlay() {
|
function menu_overlay() {
|
||||||
@ -14,7 +14,14 @@ function menu_overlay() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function menu_eximport() {
|
function menu_eximport() {
|
||||||
|
var ajaxnames = new XMLHttpRequest();
|
||||||
|
ajaxnames.onreadystatechange = function () {
|
||||||
|
if (ajaxnames.readyState === 4 && ajaxnames.status === 200) {
|
||||||
|
ExImport.ParseJson(ajaxnames.responseText);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
ajaxnames.open("GET", "http://{%REQUEST_URL_HOST%}/admin/get_json_names", true);
|
||||||
|
ajaxnames.send();
|
||||||
}
|
}
|
||||||
|
|
||||||
var NamesEditor = {
|
var NamesEditor = {
|
||||||
@ -112,8 +119,12 @@ var NamesEditor = {
|
|||||||
}
|
}
|
||||||
var savenames = new XMLHttpRequest();
|
var savenames = new XMLHttpRequest();
|
||||||
savenames.onreadystatechange = function () {
|
savenames.onreadystatechange = function () {
|
||||||
if (savenames.readyState === 4 && savenames.status === 200) {
|
if (savenames.readyState === 4) {
|
||||||
alert("Änderungen gespeichert!");
|
if (savenames.status === 200) {
|
||||||
|
alert("Änderungen gespeichert!");
|
||||||
|
} else if (savenames.status === 501) {
|
||||||
|
alert("Ein Fehler ist aufgetreten (invalid JSON)!");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
savenames.open("POST", "http://{%REQUEST_URL_HOST%}/admin/set_json_names", true);
|
savenames.open("POST", "http://{%REQUEST_URL_HOST%}/admin/set_json_names", true);
|
||||||
@ -244,4 +255,26 @@ var NamesEditor = {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
var ExImport = {};
|
var ExImport = {
|
||||||
|
ParseJson: function (jsonstring) {
|
||||||
|
html = "<div id='eximport'><div class='title'>Ex- und Import der Einstellungen</div>";
|
||||||
|
html += "<div class='names'>names.json (Namen und Icons)<br/><textarea id='ex_names'></textarea> <img src='../icons/general/save.png' onclick='ExImport.SaveNames()' class='pointer'></div>";
|
||||||
|
html += "</div>";
|
||||||
|
document.getElementById("content").innerHTML = html;
|
||||||
|
document.getElementById("ex_names").value = jsonstring;
|
||||||
|
},
|
||||||
|
SaveNames: function () {
|
||||||
|
var savenames = new XMLHttpRequest();
|
||||||
|
savenames.onreadystatechange = function () {
|
||||||
|
if (savenames.readyState === 4) {
|
||||||
|
if (savenames.status === 200) {
|
||||||
|
alert("Änderungen gespeichert!");
|
||||||
|
} else if (savenames.status === 501) {
|
||||||
|
alert("Ein Fehler ist aufgetreten (invalid JSON)!");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
savenames.open("POST", "http://{%REQUEST_URL_HOST%}/admin/set_json_names", true);
|
||||||
|
savenames.send(document.getElementById("ex_names").value);
|
||||||
|
}
|
||||||
|
};
|
Loading…
Reference in New Issue
Block a user