Wie können neben "set,get" auch Funktionsaufrufe in 99_myUtils.pm erlaubt werden ?
42?
Ich fürchte die Frage ist nicht präzise genug formuliert... Was genau ,möchtest du erreichen, bzw. was ist dein Problem?
Sorry wenn meine Sätze zu kurz sind ;D
attr WEB allowedCommands get,set
Damit lässt sich dann per URL keine Function in myUtils mehr aufrufen a'la:
{Buero("on")}
Habe in der Commandref keine Hinweise darauf gefunden.
Wunsch:
attr WEB allowedCommands get,set,{*}
ok, Frage verstanden, Sinn unklar... Wieso möchtest du die FHEMWEB-Funktionalität einschränken, aber gleichzeitig beliebige PERL Befehle (inkl. z.B. "system") erlauben? Das ist m.E: in etwa so, als würdest du deinem Kind verbieten, mit AA Batterien zu spielen und ihm statt dessen die 230 Volt Leitung geben...
Unklar ?
Es geht hier nicht um die Haupt FHEMWEB Instanz sondern um eine eigene eingeschränkte Instanz die nur "set" und definierte Funktionen aus myUtils aufrufen können soll.
Zitat von: Simon74 am 04 März 2017, 00:05:25
Wunsch:
attr WEB allowedCommands get,set,{*}
Das wäre aber sehr schlecht. Da die FHEM Befehle auch nichts anderes sind wie Funktionen CommandGet($$) CommandSet($$) hättest Du wieder Vollzugriff.
Grüße
"Definierte Funktionen" über Dummy/notify definieren und damit für "set" verfügbar machen?
Wäre ein gangbarer Weg.
Zitat von: KernSani am 04 März 2017, 00:22:41
"Definierte Funktionen" über Dummy/notify definieren und damit für "set" verfügbar machen?
Danke für die Idee, jedoch frage ich mich ob der Gedanke "Funktionsaufrufe in myUtils" bei "allowedCommands" vergessen wurde ?
Bevor ich das mache entferne ich die Einschränkung "allowedCommands" lieber wieder.
@Cooltux
Hast du den Beitrag über deinem gelesen ? Hat sich wohl überschnitten :)
Zitat von: Simon74 am 04 März 2017, 00:29:39
@Cooltux
Hast du den Beitrag über deinem gelesen ?
Du meinst
Zitat
definierte Funktionen aus myUtils
Wüsste nicht wie man erkennen sollte das es eine Funktion ist die aus einer myUtils Datei kommt oder aus der fhem.pl. Intern sind es alles Perlfunktionen die includiert in die Main geladen werden.
Ich frage mich, wieso du Funktionen über Kommandozeile aufrufen möchtest, die aber nicht irgendwie "normal" in FHEM verfügbar sind...
Zitat von: CoolTux am 04 März 2017, 00:33:53
Wüsste nicht wie man erkennen sollte das es eine Funktion ist die aus einer myUtils Datei kommt oder aus der fhem.pl. Intern sind es alles Perlfunktionen die includiert in die Main geladen werden.
Das wage ich mich nicht zu beurteilen.
Zitat von: KernSani am 04 März 2017, 00:37:33
Ich frage mich, wieso du Funktionen über Kommandozeile aufrufen möchtest, die aber nicht irgendwie "normal" in FHEM verfügbar sind...
Das versteh ich jetzt nicht :)
Es geht um eine eingeschränkte FHEMWEB Instanz für Alexa-habridge die eben nur schalten können soll.
Da diese Aufrufe per URL an die Webinstanz gereicht werden, wäre eine Einschränkung auf set und meine definierten sub in myUtils doch sinnvoll oder ?
Mit dem Token wurde doch gewünscht das sich die Nutzer um die Sicherheit sorgen/kümmern, wollte ich soeben tun.. :)
Zitat von: Simon74 am 04 März 2017, 00:44:12
Das versteh ich jetzt nicht :)
Es geht um eine eingeschränkte FHEMWEB Instanz für Alexa-habridge die eben nur schalten können soll.
Ok, langsam verstehe ich (Habe mir gerade etwas HABridge Doku angesehen). Das heisst aber immernoch, dass du etwas in einer sub abgelegt hast, was Alexa können soll, was du aber nicht über FHEM Bordmittel schalten möchtest, richtig?
In allowedCmd wird shell, perl und <FHEM-Befehl> ausgewertet.
@KernSani,
doch natürlich per FHEM Boardmitteln.
Also jetzt im Detail:
Damit ich csrfToken nicht im FHEMWEB deaktiveren muss, erstelle ich eine Instanz alleinig für die habridge und schränke die Instanz auf die IP-Adresse der habridge ein.
define WEBhabridge FHEMWEB 8088 global
attr WEBhabridge csrfToken none
attr WEBhabridge allowedCommands set
attr WEBhabridge allowfrom 127.0.0.1|192.168.1.10
192.168.1.10 ist die habridge die nun zB die Lampe erfolgreich schalten kann:
http://user:pass@fhem.domain.net:8088/fhem?cmd=set%20fl.di1_Sw%20on
Was aber mit der set Einschränkung nicht funktioniert ist zB. der Aufruf meiner SUB {Buero("on")} in myUtils.
http://user:pass@fhem.domain.net:8088/fhem?cmd=%7BBuero%28%22on%22%29%7D
Ohne allowedCommands funktioniert das.
Ich würde gerne erreichen das alle definierten SUBs in myUtils von allowedCommands erlaubt werden.
Habe zB. folgendes versucht, was so aber nicht funktioniert:
attr WEBhabridge allowedCommands set,{Buero()}
Meine Subs sehen so aus(und funktionieren wie gewünscht):
###############################################################################
# Büro (ein- und ausschalten)
###############################################################################
sub Buero($) {
my ($obj) = @_;
if ($obj eq "on" ){
Log 1, "Büro (Ein)";
#PC2 ein wenn PC1 schon läuft
if (ReadingsVal("wol.pc1","state",undef) eq "on" and ReadingsVal("wol.pc2","state",undef) eq "off") { fhem("set wol.pc2 on"); }
if (ReadingsVal("wol.pc1","state",undef) eq "off") { fhem("set wol.pc1 on"); }
if (ReadingsVal("ku.sd2_Sw","state",undef) ne "off" and ReadingsVal("bo.tk1","state",undef) eq "closed") { fhem("define at_buero.led.on at +00:00:03 set po_Out2 on"); }
}
else {
Log 1, "Büro (Aus)";
if (ReadingsVal("wol.pc1","state",undef) eq "on") { fhem("set wol.pc1 off"); }
if (ReadingsVal("wol.pc2","state",undef) eq "on") { fhem("set wol.pc2 off"); }
if (ReadingsVal("bo.ws1","state",undef) eq "on") { fhem("set bo.ws1 off"); }
if (ReadingsVal("bo.sd2_SenPwr","state",undef)<15) { fhem("set bo.sd2_Sw off"); }
}
}
ZitatIch würde gerne erreichen das alle definierten SUBs in myUtils von allowedCommands erlaubt werden.
Wenn ich was nicht uebersehen habe, dann muesste das mit
attr allowed_WEB allowedCommands perl,set
zu loesen sein. Wie einige hier vermerkt haben, ist durch "perl" eigentlich alles moeglich, d.h. die Einschraenkung ist aus Sicherheits-Sicht nicht sehr viel Wert. Beachte: allowedCommands in FHEMWEB legt automatisch eine allowed Instanz an, und ist eigentlich deprecated, steht auch so im commandref.
Rudi, danke für Aufklärung.
(Auch Cooltux, dessen Aussage ich erst jetzt verstanden habe, und Kernsani)
So verzichte ich auf allowedCommands, und gebe mich mit der IP Einschränkung zufrieden.
Ich habe nun die Haupt-Instanzen (WEB,WEBtablet,WEBphone) auf HTTPS umgestellt, was sicher mehr Sicherheit bringt.
HTTPS scheint diesmal problemlos zu funktionieren, beim letzten HTTPS Test (2014) war dies nähmlich noch nicht der Fall.