Gluon Paket - Kontaktfeldpflicht

Wir wollen in unsrer nächsten Firmware gerne das Kontaktfeld als Pflichtfeld definieren.

kann man dazu einfach das paket gluon-config-mode-contact-info klonen, entsprechend anpassen und dann stattdessen in unserer site.mk einbinden?

Ich denke, dass man wohl diese Zeile ändern müsste:

https://github.com/freifunk-gluon/gluon/blob/master/package/gluon-config-mode-contact-info/files/lib/gluon/config-mode/wizard/0500-contact-info.lua#L26

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.

Wenn Du noch eine RegEx a la

\A[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@ (?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\z

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: ffgt_packages-v2015.1/gluon-config-mode-contact-info-ffgt at master · ffgtso/ffgt_packages-v2015.1 · GitHub (sicherlich nicht 1:1 übernehmbar, da unser Setup u. a. Internetverbindung des Knotens im Config-Mode voraussetzt; aber als Ansatz vielleicht hilfreich).

4 Likes

Ich mag kaum fragen (crespondd…), aber gibt’s das auch „für gluon 2016“?
Das wäre dann nämlich faktisch sofort auf meiner ToDo…

Nope. Ob/wann wir auf 2016 gehen, ist derzeit nicht absehbar.

1 Like

cool, danke wusel,

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)

8 Beiträge wurden in ein neues Thema verschoben: Diskussionen zr Kontaktfeldpflicht bei Freifunk Kiel

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 :wink:

 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 :smiley:)

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 :wink:

Versteh ich nicht,muss das noch irgendwo dazu?

Ich hab jetzt eine erste Version erstellt:

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.

kannst du erkennen owo da der Wurm drin ist?

local fs = require "nixio.fs"

Was braucht es dazu noch?

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.

Oder os ist hier nicht verfügbar?

Ich habe es geschafft: Man braucht den Workaround mit dem tempfile gar nicht, sondern man kann einfach den wert für o.rmempty auf false setzen:

o.default = uci:get_first("gluon-node-info", "owner", "contact", "")
o.rmempty = false

Dann kommt eine Fehlermeldung, wenn man dort nichts eingibt.


Ich habe das Kontaktfeld-Modul noch etwas erweitert, so dass man in der site.conf definieren kann, ob das Kontaktfeld obligatorisch sein soll:

2 Likes

vielleicht ja auch noch den PO-Revision-Date und Last-Translator in der „de.po“ anpassen :wink: