diff options
Diffstat (limited to 'src/web/web.vala')
-rw-r--r-- | src/web/web.vala | 153 |
1 files changed, 109 insertions, 44 deletions
diff --git a/src/web/web.vala b/src/web/web.vala index 5a44409..3098308 100644 --- a/src/web/web.vala +++ b/src/web/web.vala @@ -1,4 +1,5 @@ /* Copyright 2012, Sebastian Reichel <sre@ring0.de> + * Copyright 2017-2018, Johannes Rudolph <johannes.rudolph@gmx.com> * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above @@ -20,7 +21,8 @@ public class WebServer { try { var l = new WebSession(server, msg, path, query, client); var t = new WebTemplate("index.html", l); - t.replace("TITLE", "KtT Shop System"); + t.replace("TITLE", shortname + " Shop System"); + t.replace("SHORTNAME", shortname); t.menu_set_active("home"); msg.set_response("text/html", Soup.MemoryUse.COPY, t.data); msg.set_status(200); @@ -31,6 +33,8 @@ public class WebServer { handler_400(server, msg, path, query, client, e.message); } catch(IOError e) { handler_400(server, msg, path, query, client, e.message); + } catch(DBusError e) { + handler_400(server, msg, path, query, client, e.message); } } @@ -39,7 +43,7 @@ public class WebServer { var l = new WebSession(server, msg, path, query, client); l.logout(); var t = new WebTemplate("logout.html", l); - t.replace("TITLE", "KtT Shop System"); + t.replace("TITLE", shortname + " Shop System"); t.menu_set_active("home"); msg.set_response("text/html", Soup.MemoryUse.COPY, t.data); msg.set_status(200); @@ -50,6 +54,8 @@ public class WebServer { handler_400(server, msg, path, query, client, e.message); } catch(IOError e) { handler_400(server, msg, path, query, client, e.message); + } catch(DBusError e) { + handler_400(server, msg, path, query, client, e.message); } } @@ -96,7 +102,7 @@ public class WebServer { } var t = new WebTemplate("users/index.html", session); - t.replace("TITLE", "KtT Shop System: User"); + t.replace("TITLE", shortname + " Shop System: User"); t.menu_set_active("users"); var data = ""; foreach(var m in db.get_member_ids()) { @@ -118,6 +124,8 @@ public class WebServer { handler_400(server, msg, path, query, client, e.message); } catch(IOError e) { handler_400(server, msg, path, query, client, e.message); + } catch(DBusError e) { + handler_400(server, msg, path, query, client, e.message); } } @@ -130,7 +138,7 @@ public class WebServer { } var t = new WebTemplate("users/import-pgp.html", session); - t.replace("TITLE", "KtT Shop System: PGP Key Import"); + t.replace("TITLE", shortname + " Shop System: PGP Key Import"); t.menu_set_active("users"); Soup.Buffer filedata; @@ -171,6 +179,8 @@ public class WebServer { handler_400(server, msg, path, query, client, e.message); } catch(IOError e) { handler_400(server, msg, path, query, client, e.message); + } catch(DBusError e) { + handler_400(server, msg, path, query, client, e.message); } } @@ -182,7 +192,7 @@ public class WebServer { return; } var t = new WebTemplate("users/import.html", session); - t.replace("TITLE", "KtT Shop System: User Import"); + t.replace("TITLE", shortname + " Shop System: User Import"); t.menu_set_active("users"); Soup.Buffer filedata; @@ -275,6 +285,8 @@ public class WebServer { handler_400(server, msg, path, query, client, e.message); } catch(IOError e) { handler_400(server, msg, path, query, client, e.message); + } catch(DBusError e) { + handler_400(server, msg, path, query, client, e.message); } } @@ -315,6 +327,8 @@ public class WebServer { handler_400(server, msg, path, query, client, e.message); } catch(IOError e) { handler_400(server, msg, path, query, client, e.message); + } catch(DBusError e) { + handler_400(server, msg, path, query, client, e.message); } } @@ -322,12 +336,12 @@ public class WebServer { try { var session = new WebSession(server, msg, path, query, client); - if(id != session.user && !(session.superuser || session.auth_users)) { + if(id == 0 || id != session.user && !(session.superuser || session.auth_users)) { handler_403(server, msg, path, query, client); return; } var t = new WebTemplate("users/entry.html", session); - t.replace("TITLE", "KtT Shop System: User Info %llu".printf(id)); + t.replace("TITLE", shortname + " Shop System: User Info %llu".printf(id)); t.menu_set_active("users"); var userinfo = db.get_user_info(id); @@ -343,6 +357,7 @@ public class WebServer { t.replace("PGPKEYID", userinfo.pgp); t.replace("DISABLED", userinfo.disabled ? "true" : "false"); t.replace("HIDDEN", userinfo.hidden ? "true" : "false"); + t.replace("RFID", string.joinv("<br>",userinfo.rfid)); var userauth = db.get_user_auth(id); t.replace("ISSUPERUSER", userauth.superuser ? "true" : "false"); @@ -400,6 +415,8 @@ public class WebServer { handler_400(server, msg, path, query, client, e.message); } catch(IOError e) { handler_400(server, msg, path, query, client, e.message); + } catch(DBusError e) { + handler_400(server, msg, path, query, client, e.message); } } @@ -431,7 +448,7 @@ public class WebServer { return; } var t = new WebTemplate("users/invoice.html", l); - t.replace("TITLE", "KtT Shop System: User Invoice %llu".printf(id)); + t.replace("TITLE", shortname + " Shop System: User Invoice %llu".printf(id)); t.menu_set_active("users"); /* years, in which something has been purchased by the user */ @@ -517,6 +534,8 @@ public class WebServer { handler_400(server, msg, path, query, client, e.message); } catch(IOError e) { handler_400(server, msg, path, query, client, e.message); + } catch(DBusError e) { + handler_400(server, msg, path, query, client, e.message); } } @@ -553,12 +572,12 @@ public class WebServer { try { var l = new WebSession(server, msg, path, query, client); var t = new WebTemplate("products/index.html", l); - t.replace("TITLE", "KtT Shop System: Product List"); + t.replace("TITLE", shortname + " Shop System: Product List"); t.menu_set_active("products"); string table = ""; foreach(var e in db.get_stock()) { - table += @"<tr><td><a href=\"/products/$(e.id)\">$(e.id)</a></td><td><a href=\"/products/$(e.id)\">$(e.name)</a></td><td>$(e.category)</td><td>$(e.amount)</td><td>$(e.memberprice)€</td><td>$(e.guestprice)€</td></tr>"; + table += @"<tr><td><a href=\"/products/$(e.ean)\">$(e.ean)</a></td><td><a href=\"/products/$(e.ean)\">$(e.name)</a></td><td>$(e.category)</td><td>$(e.amount)</td><td>$(e.memberprice)€</td><td>$(e.guestprice)€</td></tr>"; } t.replace("DATA", table); @@ -583,6 +602,8 @@ public class WebServer { handler_400(server, msg, path, query, client, e.message); } catch(IOError e) { handler_400(server, msg, path, query, client, e.message); + } catch(DBusError e) { + handler_400(server, msg, path, query, client, e.message); } } @@ -590,7 +611,7 @@ public class WebServer { try { var l = new WebSession(server, msg, path, query, client); var t = new WebTemplate("products/bestbefore.html", l); - t.replace("TITLE", "KtT Shop System: Best Before List"); + t.replace("TITLE", shortname + " Shop System: Best Before List"); t.menu_set_active("products"); string table = ""; @@ -615,6 +636,8 @@ public class WebServer { handler_400(server, msg, path, query, client, e.message); } catch(IOError e) { handler_400(server, msg, path, query, client, e.message); + } catch(DBusError e) { + handler_400(server, msg, path, query, client, e.message); } } @@ -638,6 +661,8 @@ public class WebServer { handler_400(server, msg, path, query, client, e.message); } catch(IOError e) { handler_400(server, msg, path, query, client, e.message); + } catch(DBusError e) { + handler_400(server, msg, path, query, client, e.message); } } @@ -645,7 +670,7 @@ public class WebServer { try { var l = new WebSession(server, msg, path, query, client); var t = new WebTemplate("products/entry.html", l); - t.replace("TITLE", "KtT Shop System: Product %llu".printf(id)); + t.replace("TITLE", shortname + " Shop System: Product %llu".printf(id)); t.menu_set_active("products"); /* ean */ @@ -718,6 +743,8 @@ public class WebServer { handler_400(server, msg, path, query, client, e.message); } catch(IOError e) { handler_400(server, msg, path, query, client, e.message); + } catch(DBusError e) { + handler_400(server, msg, path, query, client, e.message); } } @@ -734,9 +761,7 @@ public class WebServer { var pdfdata = pdfStock.generate(allProducts); msg.set_status(200); msg.set_response("application/pdf", Soup.MemoryUse.COPY, pdfdata); - } catch(DatabaseError e) { - handler_400(server, msg, path, query, client, e.message); - } catch(IOError e) { + } catch(Error e) { handler_400(server, msg, path, query, client, e.message); } } @@ -765,18 +790,18 @@ public class WebServer { if (!postdata.contains("apply_inventory")) { // PUT / show changes and request an apply foreach(var e in db.get_stock()) { - var realAmountStr = postdata.get(e.id); + var realAmountStr = postdata.get(e.ean.to_string()); if (realAmountStr != null && realAmountStr.length > 0) { var realAmount = int.parse(realAmountStr); var amountStyleClass = "success"; if (realAmount < e.amount) { - amountStyleClass = "error"; + amountStyleClass = "danger"; } else if (realAmount > e.amount) { amountStyleClass = "info"; } var diff = realAmount - e.amount; - table += @"<tr class='$(amountStyleClass)'><td>$(e.id)</td><td>$(e.name)</td><td>$(e.category)</td><td>$(e.amount)</td><td>" - + @"$(realAmount) <strong>[ $(diff) ]</strong><input type=\"hidden\" name=\"$(e.id)\" value=\"$(realAmount)\"></td></tr>"; + table += @"<tr class='$(amountStyleClass)'><td>$(e.ean)</td><td>$(e.name)</td><td>$(e.category)</td><td>$(e.amount)</td><td>" + + @"$(realAmount) <strong>[ $(diff) ]</strong><input type=\"hidden\" name=\"$(e.ean)\" value=\"$(realAmount)\"></td></tr>"; } } actionTemplate = """<input type="hidden" name="apply_inventory" value="true"><button type="submit" class="btn btn-primary">Apply Changes</button>"""; @@ -800,9 +825,9 @@ public class WebServer { var supplierId = int.parse(postdata.get("supplierId")); var userId = int.parse(postdata.get("userId")); foreach(var e in db.get_stock()) { - var realAmountStr = postdata.get(e.id); + var realAmountStr = postdata.get(e.ean.to_string()); if (realAmountStr != null && realAmountStr.length > 0) { - var pId = uint64.parse(e.id); + var pId = uint64.parse(e.ean.to_string()); var realAmount = int.parse(realAmountStr); if (realAmount < e.amount) { // Loss transaction @@ -835,7 +860,7 @@ public class WebServer { // default GET / list products with a form var tabindexCounter = 1; foreach(var e in db.get_stock()) { - table += @"<tr><td><a href=\"/products/$(e.id)\">$(e.id)</a></td><td><a href=\"/products/$(e.id)\">$(e.name)</a></td><td>$(e.category)</td><td>$(e.amount)</td><td><input type=\"number\" name=\"$(e.id)\" tabindex=\"$(tabindexCounter)\"></td></tr>"; + table += @"<tr><td><a href=\"/products/$(e.ean)\">$(e.ean)</a></td><td><a href=\"/products/$(e.ean)\">$(e.name)</a></td><td>$(e.category)</td><td>$(e.amount)</td><td><input type=\"number\" name=\"$(e.ean)\" tabindex=\"$(tabindexCounter)\"></td></tr>"; tabindexCounter++; } actionTemplate = """<button type="submit" class="btn btn-primary">Preview</button>"""; @@ -857,9 +882,7 @@ public class WebServer { } catch(TemplateError e) { stderr.printf(e.message+"\n"); handler_404(server, msg, path, query, client); - } catch(DatabaseError e) { - handler_400(server, msg, path, query, client, e.message); - } catch(IOError e) { + } catch(Error e) { handler_400(server, msg, path, query, client, e.message); } } @@ -868,7 +891,7 @@ public class WebServer { try { var session = new WebSession(server, msg, path, query, client); var template = new WebTemplate("products/new.html", session); - template.replace("TITLE", "KtT Shop System: New Product"); + template.replace("TITLE", shortname + " Shop System: New Product"); template.menu_set_active("products"); if(!session.superuser && !session.auth_products) { @@ -911,6 +934,8 @@ public class WebServer { handler_400(server, msg, path, query, client, e.message); } catch(IOError e) { handler_400(server, msg, path, query, client, e.message); + } catch(DBusError e) { + handler_400(server, msg, path, query, client, e.message); } } @@ -924,7 +949,7 @@ public class WebServer { } var template = new WebTemplate("products/restock.html", session); - template.replace("TITLE", "KtT Shop System: Restock Product %llu".printf(id)); + template.replace("TITLE", shortname + " Shop System: Restock Product %llu".printf(id)); template.replace("NAME", db.get_product_name(id)); template.menu_set_active("products"); @@ -968,6 +993,8 @@ public class WebServer { handler_400(server, msg, path, query, client, e.message); } catch(IOError e) { handler_400(server, msg, path, query, client, e.message); + } catch(DBusError e) { + handler_400(server, msg, path, query, client, e.message); } } @@ -982,7 +1009,7 @@ public class WebServer { } var template = new WebTemplate("products/newprice.html", session); - template.replace("TITLE", "KtT Shop System: New Price for Product %llu".printf(id)); + template.replace("TITLE", shortname + " Shop System: New Price for Product %llu".printf(id)); template.replace("NAME", db.get_product_name(id)); template.menu_set_active("products"); @@ -1014,6 +1041,8 @@ public class WebServer { handler_400(server, msg, path, query, client, e.message); } catch(IOError e) { handler_400(server, msg, path, query, client, e.message); + } catch(DBusError e) { + handler_400(server, msg, path, query, client, e.message); } } @@ -1021,7 +1050,7 @@ public class WebServer { try { var l = new WebSession(server, msg, path, query, client); var t = new WebTemplate("aliases/index.html", l); - t.replace("TITLE", "KtT Shop System: Alias List"); + t.replace("TITLE", shortname + " Shop System: Alias List"); t.menu_set_active("aliases"); string table = ""; @@ -1046,6 +1075,8 @@ public class WebServer { handler_400(server, msg, path, query, client, e.message); } catch(IOError e) { handler_400(server, msg, path, query, client, e.message); + } catch(DBusError e) { + handler_400(server, msg, path, query, client, e.message); } } @@ -1053,7 +1084,7 @@ public class WebServer { try { var session = new WebSession(server, msg, path, query, client); var template = new WebTemplate("aliases/new.html", session); - template.replace("TITLE", "KtT Shop System: New Alias"); + template.replace("TITLE", shortname + " Shop System: New Alias"); template.menu_set_active("aliases"); if(!session.superuser && !session.auth_products) { @@ -1093,6 +1124,8 @@ public class WebServer { handler_400(server, msg, path, query, client, e.message); } catch(IOError e) { handler_400(server, msg, path, query, client, e.message); + } catch(DBusError e) { + handler_400(server, msg, path, query, client, e.message); } } @@ -1101,7 +1134,7 @@ public class WebServer { try { var l = new WebSession(server, msg, path, query, client); var t = new WebTemplate("stats/index.html", l); - t.replace("TITLE", "KtT Shop System: Statistics"); + t.replace("TITLE", shortname + " Shop System: Statistics"); t.menu_set_active("stats"); var stats = db.get_stats_info(); @@ -1134,7 +1167,7 @@ public class WebServer { var t = new WebTemplate("stats/stock.html", l); string data = db.get_stats_stock().json; t.replace("DATA", data); - t.replace("TITLE", "KtT Shop System: Statistics: Stock"); + t.replace("TITLE", shortname + " Shop System: Statistics: Stock"); t.menu_set_active("stats"); msg.set_response("text/html", Soup.MemoryUse.COPY, t.data); msg.set_status(200); @@ -1150,7 +1183,7 @@ public class WebServer { var t = new WebTemplate("stats/profit_per_day.html", l); string data = db.get_stats_profit_per_day().json; t.replace("DATA", data); - t.replace("TITLE", "KtT Shop System: Statistics: Profit"); + t.replace("TITLE", shortname + " Shop System: Statistics: Profit"); t.menu_set_active("stats"); msg.set_response("text/html", Soup.MemoryUse.COPY, t.data); msg.set_status(200); @@ -1166,7 +1199,7 @@ public class WebServer { var t = new WebTemplate("stats/profit_per_weekday.html", l); string data = db.get_stats_profit_per_weekday().json; t.replace("DATA", data); - t.replace("TITLE", "KtT Shop System: Statistics: Profit/Weekday"); + t.replace("TITLE", shortname + " Shop System: Statistics: Profit/Weekday"); t.menu_set_active("stats"); msg.set_response("text/html", Soup.MemoryUse.COPY, t.data); msg.set_status(200); @@ -1182,7 +1215,7 @@ public class WebServer { var t = new WebTemplate("stats/profit_per_product.html", l); string data = db.get_stats_profit_per_products().json; t.replace("DATA", data); - t.replace("TITLE", "KtT Shop System: Statistics: Profit/Product"); + t.replace("TITLE", shortname + " Shop System: Statistics: Profit/Product"); t.menu_set_active("stats"); msg.set_response("text/html", Soup.MemoryUse.COPY, t.data); msg.set_status(200); @@ -1217,7 +1250,7 @@ public class WebServer { void handler_img(Soup.Server server, Soup.Message msg, string path, GLib.HashTable? query, Soup.ClientContext client) { try { - var f = File.new_for_path(templatedir+path); + var f = File.new_for_path(Path.build_filename(templatedir, path)); uint8[] data = null; if(f.query_exists() && f.load_contents(null, out data, null)) { @@ -1226,7 +1259,25 @@ public class WebServer { return; } } catch(Error e) { - error("there has been some error: %s!\n", e.message); + error(_("Error: %s\n"), e.message); + } + + handler_404(server, msg, path, query, client); + return; + } + + void handler_font(Soup.Server server, Soup.Message msg, string path, GLib.HashTable? query, Soup.ClientContext client) { + try { + var f = File.new_for_path(Path.build_filename(templatedir, path)); + uint8[] data = null; + + if(f.query_exists() && f.load_contents(null, out data, null)) { + msg.set_response("application/octet-stream; charset=binary", Soup.MemoryUse.COPY, data); + msg.set_status(200); + return; + } + } catch(Error e) { + error(_("Error: %s\n"), e.message); } handler_404(server, msg, path, query, client); @@ -1260,6 +1311,8 @@ public class WebServer { } catch(IOError e) { stderr.printf(e.message+"\n"); handler_400_fallback(server, msg, path, query, client); + } catch(DBusError e) { + handler_400(server, msg, path, query, client, e.message); } } @@ -1284,6 +1337,8 @@ public class WebServer { handler_400(server, msg, path, query, client, e.message); } catch(IOError e) { handler_400(server, msg, path, query, client, e.message); + } catch(DBusError e) { + handler_400(server, msg, path, query, client, e.message); } } @@ -1291,7 +1346,7 @@ public class WebServer { try { var session = new WebSession(server, msg, path, query, client); var template = new WebTemplate("errors/todo.html", session); - template.replace("TITLE", "KtT Shop System: ToDo"); + template.replace("TITLE", shortname + " Shop System: ToDo"); template.menu_set_active(""); msg.set_response("text/html", Soup.MemoryUse.COPY, template.data); msg.set_status(200); @@ -1302,6 +1357,8 @@ public class WebServer { handler_400(server, msg, path, query, client, e.message); } catch(IOError e) { handler_400(server, msg, path, query, client, e.message); + } catch(DBusError e) { + handler_400(server, msg, path, query, client, e.message); } } @@ -1336,7 +1393,7 @@ public class WebServer { hist += "</tr>\n"; } - template.replace("TITLE", "KtT Shop System: Cashbox"); + template.replace("TITLE", shortname + " Shop System: Cashbox"); template.replace("CASHBOX_STATUS", status); template.replace("CASHBOX_HISTORY", hist); template.menu_set_active("cashbox"); @@ -1349,6 +1406,8 @@ public class WebServer { handler_400(server, msg, path, query, client, e.message); } catch(IOError e) { handler_400(server, msg, path, query, client, e.message); + } catch(DBusError e) { + handler_400(server, msg, path, query, client, e.message); } } @@ -1362,7 +1421,7 @@ public class WebServer { } var template = new WebTemplate("cashbox/add.html", session); - template.replace("TITLE", "KtT Shop System: Cashbox Balance"); + template.replace("TITLE", shortname + " Shop System: Cashbox Balance"); template.menu_set_active("cashbox"); bool error = false; @@ -1420,6 +1479,8 @@ public class WebServer { handler_400(server, msg, path, query, client, e.message); } catch(IOError e) { handler_400(server, msg, path, query, client, e.message); + } catch(DBusError e) { + handler_400(server, msg, path, query, client, e.message); } } @@ -1434,7 +1495,7 @@ public class WebServer { try { var session = new WebSession(server, msg, path, query, client); var template = new WebTemplate("cashbox/selection.html", session); - template.replace("TITLE", "KtT Shop System: Cashbox Detail"); + template.replace("TITLE", shortname + " Shop System: Cashbox Detail"); template.menu_set_active("cashbox"); msg.set_response("text/html", Soup.MemoryUse.COPY, template.data); msg.set_status(200); @@ -1445,6 +1506,8 @@ public class WebServer { handler_400(server, msg, path, query, client, e.message); } catch(IOError e) { handler_400(server, msg, path, query, client, e.message); + } catch(DBusError e) { + handler_400(server, msg, path, query, client, e.message); } } } @@ -1504,9 +1567,8 @@ public class WebServer { } var template = new WebTemplate("cashbox/detail.html", session); - template.replace("TITLE", "KtT Shop System: Cashbox Detail"); + template.replace("TITLE", shortname + " Shop System: Cashbox Detail"); template.menu_set_active("cashbox"); - template.replace("DATE", start.format("%B %Y")); template.replace("DEBIT", debit.to_string()); template.replace("LOSS", loss.to_string()); @@ -1526,6 +1588,8 @@ public class WebServer { handler_400(server, msg, path, query, client, e.message); } catch(IOError e) { handler_400(server, msg, path, query, client, e.message); + } catch(DBusError e) { + handler_400(server, msg, path, query, client, e.message); } } @@ -1537,7 +1601,7 @@ public class WebServer { options |= Soup.ServerListenOptions.HTTPS; if(!srv.listen_all(port, options)) { - throw new GLib.IOError.FAILED("Could not setup webserver!"); + throw new GLib.IOError.FAILED(_("Could not setup webserver!")); } /* index */ @@ -1550,6 +1614,7 @@ public class WebServer { srv.add_handler("/js", handler_js); srv.add_handler("/css", handler_css); srv.add_handler("/img", handler_img); + srv.add_handler("/fonts", handler_font); /* cashbox */ srv.add_handler("/cashbox", handler_cashbox); |