Geht das hier einfach? Oder müsste man so was im OpenWRT luci code einbinden?
Hatte mal gehört, das könnte man ev. in edit cbi.js und datatypes.lua lösen.
Ich könnte mir auch vorstellen, dass man das allein mit javascript lösen könnte, wenn lua das nicht vorsieht, damit könnte man ja das abschicken des Formulars verhindern mit warnung, wenn jemand da nichts eingegeben hat.
mit einbaust, dann sollten nur Dinge dort hinkommen, die zumindest symtaktisch plausibel aussehen.
(Was natürlich nicht nicht gegen „heinz@test.de“ hilft… Aber zumindest Vertipper und Twitter-Accounts bekommen man damit „weg“)
das klonen von dem paket alleine wird probleme bringen, da das alte Paket ja weiter in gluon enthalten ist, du tust gut daran dem einen eigenen Namen zu geben,
mein erster Impuls beim lesen war ein package zu bauen das die ssid auf „please update contacts on freifunk“ oder so setzt …
quasi funktionierendes Freifunk , aber mit dieser Annoying SSID … aber das war nur mein Gedanke
Wir werden die Angabe eine eMail-Adresse verpflichtend machen, sofern Autoupdate deaktiviert wurde — in dem Falle möchten wir einfach eine (massenmail-taugliche) Kontaktmöglichkeit haben. Inklusive MX-basierter Plausibilitätsprüfung: https://github.com/ffgtso/ffgt_packages-v2015.1/tree/master/gluon-config-mode-contact-info-ffgt (sicherlich nicht 1:1 übernehmbar, da unser Setup u. a. Internetverbindung des Knotens im Config-Mode voraussetzt; aber als Ansatz vielleicht hilfreich).
also brauchen wir aus eurem paket nur ählich dem part hier eine Abfrage einbauen wie:
if fs.access("/tmp/invalid_contact") then
local s = form:section(cbi.SimpleSection, nil, [[<b>Fehler im Kontaktfeld!</b>
Bitte eine Kontaktmöglichkeit eintragen.]])
end
if not data._contact ~= nil then
os.execute("touch /tmp/invalid_contact")
luci.http.redirect(luci.dispatcher.build_url("gluon-config-mode/wizard"))
else
os.execute("/bin/rm /tmp/invalid_email")
end
würde das so funktionieren? (Bin kein lua programmierer)
Mein lua ist auch try & error, von luci ganz zu schweigen; ich würde an Eurer Stelle (wie gesagt, bei uns ist der Knoten zwingend online bei der Konfiguration) wohl auf eine lua-Funktion zur formalen Validierung (vgl. hier oder gar hier) zurückgreifen, aber wenn’s nur um »nicht-leer« gehen soll, dann müßte obiges reichen.
Allerdings Pfade checken
if fs.access("/tmp/invalid_contact") then
os.execute("touch /tmp/invalid_contact")
os.execute("/bin/rm /tmp/invalid_email")
(Und ja, eigentlich macht man derlei Flagging wohl eher über uci. Bin halt ein alter Sack mit einem Filesystem-Fetisch )
EDIT:
local fs = require "nixio.fs"
[…]
if fs.access("/tmp/invalid_contact") then
-- Kür wäre es, das zu lokalisieren (i18n.translate(…)) -- FIXME
local s = form:section(cbi.SimpleSection, nil, [[<b>Fehler im Kontaktfeld!</b> Bitte eine Kontaktmöglichkeit eintragen.]])
end
[…]
if data._contact ~= nil then
uci:set("gluon-node-info", uci:get_first("gluon-node-info", "owner"), "contact", data._contact)
uci:save("gluon-node-info")
uci:commit("gluon-node-info")
os.execute("/bin/rm -f /tmp/invalid_contact")
else
os.execute("touch /tmp/invalid_contact")
luci.http.redirect(luci.dispatcher.build_url("gluon-config-mode/wizard"))
end
So sollte das für 2015.x tun; inwiefern 2016.x Anpassungen benötigt, wirste sehen
Die Meldung kommt auch, wenn die datei /tmp/invalid_contact existiert, und blockt das speichern erfolgreich, aber der entfernt die Datei nicht mehr, wenn man einen leeren string eingibt.
ich habe die code änderung auf einem laufenden router in der LUA datei ergänzt, aber es scheint dass dann aber kein file erzeugt werden kann mit touch.