wizard.lua 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. local meshvpn_name = "mesh_vpn"
  2. local uci = luci.model.uci.cursor()
  3. local f, s, o
  4. f = SimpleForm("wizard")
  5. f.reset = false
  6. f.template = "gluon-config-mode/cbi/wizard"
  7. f.submit = "Speichern & Neustarten"
  8. s = f:section(SimpleSection, nil, nil)
  9. o = s:option(Value, "_hostname", "Name dieses Knotens")
  10. o.value = uci:get_first("system", "system", "hostname")
  11. o.rmempty = false
  12. o.datatype = "hostname"
  13. o = s:option(Flag, "_autoupdate", "Firmware automatisch aktualisieren")
  14. o.default = uci:get_bool("autoupdater", "settings", "enabled") and o.enabled or o.disabled
  15. o.rmempty = false
  16. s = f:section(SimpleSection, nil, [[Falls du deinen Knoten über das Internet
  17. mit Freifunk verbinden möchtest, kannst du hier das Mesh-VPN aktivieren.
  18. Solltest du dich dafür entscheiden, hast du die Möglichkeit die dafür
  19. genutzte Bandbreite zu beschränken. Lässt du das Mesh-VPN deaktiviert,
  20. verbindet sich dein Knoten nur per WLAN mit anderen Knoten in der Nähe.]])
  21. o = s:option(Flag, "_meshvpn", "Mesh-VPN aktivieren")
  22. o.default = uci:get_bool("fastd", meshvpn_name, "enabled") and o.enabled or o.disabled
  23. o.rmempty = false
  24. o = s:option(Flag, "_limit_enabled", "Mesh-VPN Bandbreite begrenzen")
  25. o:depends("_meshvpn", "1")
  26. o.default = uci:get_bool("gluon-simple-tc", meshvpn_name, "enabled") and o.enabled or o.disabled
  27. o.rmempty = false
  28. o = s:option(Value, "_limit_ingress", "Downstream (kbit/s)")
  29. o:depends("_limit_enabled", "1")
  30. o.value = uci:get("gluon-simple-tc", meshvpn_name, "limit_ingress")
  31. o.rmempty = false
  32. o.datatype = "integer"
  33. o = s:option(Value, "_limit_egress", "Upstream (kbit/s)")
  34. o:depends("_limit_enabled", "1")
  35. o.value = uci:get("gluon-simple-tc", meshvpn_name, "limit_egress")
  36. o.rmempty = false
  37. o.datatype = "integer"
  38. s = f:section(SimpleSection, nil, [[Um deinen Knoten auf der Karte anzeigen
  39. zu können, benötigen wir seine Koordinaten. Hier hast du die Möglichkeit,
  40. diese zu hinterlegen.]])
  41. o = s:option(Flag, "_location", "Knoten auf der Karte anzeigen")
  42. o.default = uci:get_first("gluon-node-info", "location", "share_location", o.disabled)
  43. o.rmempty = false
  44. o = s:option(Value, "_latitude", "Breitengrad")
  45. o.default = uci:get_first("gluon-node-info", "location", "latitude")
  46. o:depends("_location", "1")
  47. o.rmempty = false
  48. o.datatype = "float"
  49. o.description = "z.B. 53.873621"
  50. o = s:option(Value, "_longitude", "Längengrad")
  51. o.default = uci:get_first("gluon-node-info", "location", "longitude")
  52. o:depends("_location", "1")
  53. o.rmempty = false
  54. o.datatype = "float"
  55. o.description = "z.B. 10.689901"
  56. s = f:section(SimpleSection, nil, [[Hier kannst du einen
  57. <em>öffentlichen</em> Hinweis hinterlegen um anderen Freifunkern zu
  58. ermöglichen Kontakt mit dir aufzunehmen. Bitte beachte, dass dieser Hinweis
  59. auch öffentlich im Internet, zusammen mit den Koordinaten deines Knotens,
  60. einsehbar sein wird.]])
  61. o = s:option(Value, "_contact", "Kontakt")
  62. o.default = uci:get_first("gluon-node-info", "owner", "contact", "")
  63. o.rmempty = true
  64. o.datatype = "string"
  65. o.description = "z.B. E-Mail oder Telefonnummer"
  66. o.maxlen = 140
  67. function f.handle(self, state, data)
  68. if state == FORM_VALID then
  69. local stat = false
  70. uci:set("autoupdater", "settings", "enabled", data._autoupdate)
  71. uci:save("autoupdater")
  72. uci:commit("autoupdater")
  73. -- checks for nil needed due to o:depends(...)
  74. if data._limit_enabled ~= nil then
  75. uci:set("gluon-simple-tc", meshvpn_name, "interface")
  76. uci:set("gluon-simple-tc", meshvpn_name, "enabled", data._limit_enabled)
  77. uci:set("gluon-simple-tc", meshvpn_name, "ifname", "mesh-vpn")
  78. if data._limit_ingress ~= nil then
  79. uci:set("gluon-simple-tc", meshvpn_name, "limit_ingress", data._limit_ingress)
  80. end
  81. if data._limit_egress ~= nil then
  82. uci:set("gluon-simple-tc", meshvpn_name, "limit_egress", data._limit_egress)
  83. end
  84. uci:commit("gluon-simple-tc")
  85. end
  86. uci:set("fastd", meshvpn_name, "enabled", data._meshvpn)
  87. uci:save("fastd")
  88. uci:commit("fastd")
  89. uci:set("system", uci:get_first("system", "system"), "hostname", data._hostname)
  90. uci:save("system")
  91. uci:commit("system")
  92. local sname = uci:get_first("gluon-node-info", "location")
  93. uci:set("gluon-node-info", sname, "share_location", data._location)
  94. if data._location and data._latitude ~= nil and data._longitude ~= nil then
  95. uci:set("gluon-node-info", sname, "latitude", data._latitude)
  96. uci:set("gluon-node-info", sname, "longitude", data._longitude)
  97. end
  98. if data._contact ~= nil then
  99. uci:set("gluon-node-info", uci:get_first("gluon-node-info", "owner"), "contact", data._contact)
  100. else
  101. uci:delete("gluon-node-info", uci:get_first("gluon-node-info", "owner"), "contact")
  102. end
  103. uci:save("gluon-node-info")
  104. uci:commit("gluon-node-info")
  105. luci.http.redirect(luci.dispatcher.build_url("gluon-config-mode", "reboot"))
  106. end
  107. return true
  108. end
  109. return f