FHEMWEB allowedCommands, Funktionsaufrufe in 99_myUtils.pm ?

Begonnen von Simon74, 03 März 2017, 23:08:37

Vorheriges Thema - Nächstes Thema

Simon74

Wie können neben "set,get" auch Funktionsaufrufe in 99_myUtils.pm erlaubt werden ?

KernSani

42?

Ich fürchte die Frage ist nicht präzise genug formuliert... Was genau ,möchtest du erreichen, bzw. was ist dein Problem?
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

Simon74

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,{*}




KernSani

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... 
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

Simon74

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.

CoolTux

#5
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
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

KernSani

"Definierte Funktionen" über Dummy/notify definieren und damit für "set" verfügbar machen?
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

CoolTux

Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Simon74

#8
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  :)


CoolTux

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.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

KernSani

Ich frage mich, wieso du Funktionen über Kommandozeile aufrufen möchtest, die aber nicht irgendwie "normal" in FHEM verfügbar sind...
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

Simon74

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

KernSani

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?
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

rudolfkoenig

In allowedCmd wird shell, perl und <FHEM-Befehl> ausgewertet.

Simon74

@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"); }
}
}

rudolfkoenig

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.

Simon74

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.