csrfToken uhl für Vu+ Plugin

Begonnen von emilio_35, 22 April 2017, 21:35:57

Vorheriges Thema - Nächstes Thema

emilio_35

Hallo
ich würde gerne auf Fhem 5.8 umsteigen.
Ich verwende auf meinen Vu+ Sat Reciver ein Plugin um Rollos zu fahren. Hierzu schicke ich einfach eine UHL

Hier mal das Plugin.
Kann mir jemand helfen wie ich die Anfrage mit csrfToken-HowTo realisieren kann ?


# Ihad.tv enigma2-plugin tutorial 2010
# lesson 5
# by emanuel
from Screens.Screen import Screen
from Screens.Console import Console
from Screens.ChoiceBox import ChoiceBox
from Components.MenuList import MenuList
from Components.ActionMap import ActionMap
from Components.Label import Label
from Plugins.Plugin import PluginDescriptor
from enigma import eConsoleAppContainer
import time
###########################################################################
class MyShPrombt(Screen):
skin = """
<screen position="100,150" size="460,450" title="FHEM Haussteuerung" >
<widget name="device" position="10,0" size="460,30" font="Console;22" />
                <widget name="myMenu" position="10,50" size="420,380" scrollbarMode="showOnDemand" />
</screen>"""


def __init__(self, session, args = 0):
self.session = session
self.device = None
list = []
list.append(("WZ Philips HUE", "dev1", "on", "off","dimUp", "dimDown", "hueUp", "hueDown"))
list.append(("WZ Rollo Rechts", "dev2", "Auf", "Zu"))
list.append(("WZ Rollo Sofa", "dev3", "Auf", "Zu"))
list.append(("WZ Rollo Hof", "dev4", "Auf", "Zu"))
list.append(("WZ Rollo Balkon", "dev5", "Auf", "Zu"))
Screen.__init__(self, session)
self["device"] = Label()
self["myMenu"] = MenuList(list)
self["myActionMap"] = ActionMap(["PiPSetupActions"],
{
"ok": self.go,
"cancel": self.cancel,
        "size+": self.key_bouq_pl,
        "size-": self.key_bouq_min        
}, -1)


def go(self):
cur = self["myMenu"].l.getCurrentSelection()
self.device = cur[1]
self["device"].setText(cur[0])
print "\n[MyShPrombt] device: " + self.device + "\n"

menu = [(cur[2], self.key_bouq_pl),
        (cur[3], self.key_bouq_min),
        (cur[4], self.dimUp),
        (cur[5], self.dimDown),
        (cur[6], self.hueUp),
        (cur[7], self.hueDown)
        ]

self.session.openWithCallback(
        self.menuCallback,
        ChoiceBox,
        title = cur[0],
        list = menu,
       
        keys = [ "1", "2" , "3" , "4", "5" , "6" ,]
)

def menuCallback(self, ret):
ret and ret[1]()


def key_bouq_min(self):
cur = self["myMenu"].l.getCurrentSelection()
self.device = cur[1]
self["device"].setText(cur[0] + " " + cur[3])
print "\n[MyShPrombt] device : " + self.device + "\n"
if self.device is not None:
if self.device == "dev1":
self.prombt("wget -q -O- 'http://192.168.178.58:8083/fhem?cmd.HUEDevice8=set%20HUEDevice8%20off&room=HUEDevice'")
self.prombt("wget -q -O- 'http://192.168.178.58:8083/fhem?cmd.HUEDevice2=set%20HUEDevice2%20off&room=HUEDevice'")
        elif self.device == "dev2":
                                self.prombt("wget -q -O- 'http://192.168.178.58:8083/fhem?cmd.DB353_DBX1_1_Taster_ROLLO_OG_WZ_rechts_ZU=set%20DB353_DBX1_1_Taster_ROLLO_OG_WZ_rechts_ZU%20on&room=SPS'")
                                time.sleep (1) 
                                self.prombt("wget -q -O- 'http://192.168.178.58:8083/fhem?cmd.DB353_DBX1_1_Taster_ROLLO_OG_WZ_rechts_ZU=set%20DB353_DBX1_1_Taster_ROLLO_OG_WZ_rechts_ZU%20off&room=SPS'")
elif self.device == "dev3":
                                self.prombt("wget -q -O- 'http://192.168.178.58:8083/fhem?cmd.DB353_DBX1_3_Taster_ROLLO_OG_WZ_Sofa_ZU=set%20DB353_DBX1_3_Taster_ROLLO_OG_WZ_Sofa_ZU%20on&room=SPS'")
                                time.sleep (1) 
                                self.prombt("wget -q -O- 'http://192.168.178.58:8083/fhem?cmd.DB353_DBX1_3_Taster_ROLLO_OG_WZ_Sofa_ZU=set%20DB353_DBX1_3_Taster_ROLLO_OG_WZ_Sofa_ZU%20off&room=SPS'")
elif self.device == "dev4":
                                self.prombt("wget -q -O- 'http://192.168.178.58:8083/fhem?cmd.DB353_DBX1_5_Taster_ROLLO_OG_WZ_Hof_ZU=set%20DB353_DBX1_5_Taster_ROLLO_OG_WZ_Hof_ZU%20on&room=SPS'")
                                time.sleep (1) 
                                self.prombt("wget -q -O- 'http://192.168.178.58:8083/fhem?cmd.DB353_DBX1_5_Taster_ROLLO_OG_WZ_Hof_ZU=set%20DB353_DBX1_5_Taster_ROLLO_OG_WZ_Hof_ZU%20off&room=SPS'")
elif self.device == "dev5":
                                self.prombt("wget -q -O- 'http://192.168.178.58:8083/fhem?cmd.DB353_DBX1_7_Taster_ROLLO_OG_WZ_Balkon_ZU=set%20DB353_DBX1_7_Taster_ROLLO_OG_WZ_Balkon_ZU%20on&room=SPS'")
                                time.sleep (1) 
                                self.prombt("wget -q -O- 'http://192.168.178.58:8083/fhem?cmd.DB353_DBX1_7_Taster_ROLLO_OG_WZ_Balkon_ZU=set%20DB353_DBX1_7_Taster_ROLLO_OG_WZ_Balkon_ZU%20off&room=SPS'")


def key_bouq_pl(self):
cur = self["myMenu"].l.getCurrentSelection()
self.device = cur[1]
self["device"].setText(cur[0] + " " + cur[2])
print "\n[MyShPrombt] device: " + self.device  +"\n"
if self.device is not None:
if self.device == "dev1":
self.prombt("wget -q -O- 'http://192.168.178.58:8083/fhem?cmd.HUEDevice8=set%20HUEDevice8%20on&room=HUEDevice'")
self.prombt("wget -q -O- 'http://192.168.178.58:8083/fhem?cmd.HUEDevice2=set%20HUEDevice2%20on&room=HUEDevice'")                               
                        elif self.device == "dev2":
self.prombt("wget -q -O- 'http://192.168.178.58:8083/fhem?cmd.DB353_DBX1_0_Taster_ROLLO_OG_WZ_rechts_AUF=set%20DB353_DBX1_0_Taster_ROLLO_OG_WZ_rechts_AUF%20on&room=SPS'")
time.sleep (1)   
self.prombt("wget -q -O- 'http://192.168.178.58:8083/fhem?cmd.DB353_DBX1_0_Taster_ROLLO_OG_WZ_rechts_AUF=set%20DB353_DBX1_0_Taster_ROLLO_OG_WZ_rechts_AUF%20off&room=SPS'")   
elif self.device == "dev3":
self.prombt("wget -q -O- 'http://192.168.178.58:8083/fhem?cmd.DB353_DBX1_2_Taster_ROLLO_OG_WZ_Sofa_AUF=set%20DB353_DBX1_2_Taster_ROLLO_OG_WZ_Sofa_AUF%20on&room=SPS'")
time.sleep (1) 
self.prombt("wget -q -O- 'http://192.168.178.58:8083/fhem?cmd.DB353_DBX1_2_Taster_ROLLO_OG_WZ_Sofa_AUF=set%20DB353_DBX1_2_Taster_ROLLO_OG_WZ_Sofa_AUF%20off&room=SPS'")
elif self.device == "dev4":
self.prombt("wget -q -O- 'http://192.168.178.58:8083/fhem?cmd.DB353_DBX1_4_Taster_ROLLO_OG_WZ_Hof_AUF=set%20DB353_DBX1_4_Taster_ROLLO_OG_WZ_Hof_AUF%20on&room=SPS'")
time.sleep (1) 
self.prombt("wget -q -O- 'http://192.168.178.58:8083/fhem?cmd.DB353_DBX1_4_Taster_ROLLO_OG_WZ_Hof_AUF=set%20DB353_DBX1_4_Taster_ROLLO_OG_WZ_Hof_AUF%20off&room=SPS'")
elif self.device == "dev5":
self.prombt("wget -q -O- 'http://192.168.178.58:8083/fhem?cmd.DB353_DBX1_6_Taster_ROLLO_OG_WZ_Balkon_AUF=set%20DB353_DBX1_6_Taster_ROLLO_OG_WZ_Balkon_AUF%20on&room=SPS'")
time.sleep (1) 
self.prombt("wget -q -O- 'http://192.168.178.58:8083/fhem?cmd.DB353_DBX1_6_Taster_ROLLO_OG_WZ_Balkon_AUF=set%20DB353_DBX1_6_Taster_ROLLO_OG_WZ_Balkon_AUF%20off&room=SPS'")         
             
###############Philips Hue Befehle ###########################################################################################################     
             
             
        def dimUp(self):
cur = self["myMenu"].l.getCurrentSelection()
self.device = cur[1]
self["device"].setText(cur[0] + " " + cur[4])
print "\n[MyShPrombt] device : " + self.device + "\n"
if self.device is not None:
if self.device == "dev1":
self.prombt("wget -q -O- 'http://192.168.178.58:8083/fhem?cmd.HUEDevice8=set%20HUEDevice8%20" + cur[4] + "&room=HUEDevice'")
self.prombt("wget -q -O- 'http://192.168.178.58:8083/fhem?cmd.HUEDevice2=set%20HUEDevice2%20" + cur[4] + "&room=HUEDevice'")
       
     
        def dimDown(self):
cur = self["myMenu"].l.getCurrentSelection()
self.device = cur[1]
self["device"].setText(cur[0] + " " + cur[5])
print "\n[MyShPrombt] device : " + self.device + "\n"
if self.device is not None:
if self.device == "dev1":
self.prombt("wget -q -O- 'http://192.168.178.58:8083/fhem?cmd.HUEDevice8=set%20HUEDevice8%20dimDown&room=HUEDevice'")
self.prombt("wget -q -O- 'http://192.168.178.58:8083/fhem?cmd.HUEDevice2=set%20HUEDevice2%20dimDown&room=HUEDevice'")   
                               
        def hueUp(self):
cur = self["myMenu"].l.getCurrentSelection()
self.device = cur[1]
self["device"].setText(cur[0] + " " + cur[6])
print "\n[MyShPrombt] device : " + self.device + "\n"
if self.device is not None:
if self.device == "dev1":
self.prombt("wget -q -O- 'http://192.168.178.58:8083/fhem?cmd.HUEDevice8=set%20HUEDevice8%20hueUp&room=HUEDevice'")
self.prombt("wget -q -O- 'http://192.168.178.58:8083/fhem?cmd.HUEDevice2=set%20HUEDevice2%20hueUp&room=HUEDevice'")
       
     
        def hueDown(self):
cur = self["myMenu"].l.getCurrentSelection()
self.device = cur[1]
self["device"].setText(cur[0] + " " + cur[7])
print "\n[MyShPrombt] device : " + self.device + "\n"
if self.device is not None:
if self.device == "dev1":
self.prombt("wget -q -O- 'http://192.168.178.58:8083/fhem?cmd.HUEDevice8=set%20HUEDevice8%20hueDown&room=HUEDevice'")
self.prombt("wget -q -O- 'http://192.168.178.58:8083/fhem?cmd.HUEDevice2=set%20HUEDevice2%20hueDown&room=HUEDevice'")   
             
                               
#######################################################################################################################################################

                               
def prombt(self, com):
print com
container = eConsoleAppContainer()
container.execute(com)

def cancel(self):
print "\n[MyShPrombt] cancel\n"
self.close(None)


###########################################################################
def main(session, **kwargs):
print "\n[MyShPrombt] start\n"
session.open(MyShPrombt)
###########################################################################
def Plugins(**kwargs):
return PluginDescriptor(
name="FHEM Haussteuerung",
description="Haussteuerungssystem",
where = PluginDescriptor.WHERE_PLUGINMENU,
icon="fhc.png",
fnc=main)



Fhem Raspberry Pi, SPS, S7 315PN,VU+

justme1968

hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

emilio_35

#2
Hallo
das habe ich gelesen jedoch weiß ich nicht wie ich es umsetzen muss.
Ich wäre für ein kleines Beispiel in meinen Plugin dankbar
Fhem Raspberry Pi, SPS, S7 315PN,VU+

peterk_de

#3
hast du es wirklich gelesen? auch den abschnitt "Api Web"? Glaub ich nicht ;) Denn wenn du das quasi 1:1 in FHEM abtippst (bis auf die erlaubten IPs) musst du doch in deinem skript nur den port im wget call ändern ...
FHEM auf Ubuntu-VM / 2xNUC Proxmox Cluster
UI: HomeKit, TabletUI, Grafana
IOdevs: 2xHueBridge, RaspiMatic-CCU, CUL868, 2xHarmonyHub, 6xRaspi-Roomnode mit CO2, VOC und lepresenced
Devices: 107xHomematic(IP), 96xPhilips Hue, 17xTECHEM, 12xBTLE, 8xSONOS, 2xHomeConnect, 1xShelly 3em, 1xNanoleaf ...

emilio_35

#4
Hallo
ja das ist aber genau das was ich nicht haben wollte, damit habe ich ja wieder eine offene Schnittstelle.
Es geht um die sichere Übertragung mit csrfToken.

Für mich stellt sich die Frage ob ich das beschrieben Python Skript in mein Skript mit einarbeiten kann. Hierzu fehlen mir aber die Python Kenntnisse.
Fhem Raspberry Pi, SPS, S7 315PN,VU+

justme1968

statt das token weg zu lassen kannst du das token auch fest vorgeben. es steht alles im wiki artikel.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

peterk_de

emilio, nee hast du nicht. csrf-angriffe werden trotzdem wirksam unterbunden, wenn du wie dort beschrieben die ips auf die geräte, die die apis benutzen, begrenzt (unter der annahme, dass auf diesen geräten kein webbrowser genutzt wird)
FHEM auf Ubuntu-VM / 2xNUC Proxmox Cluster
UI: HomeKit, TabletUI, Grafana
IOdevs: 2xHueBridge, RaspiMatic-CCU, CUL868, 2xHarmonyHub, 6xRaspi-Roomnode mit CO2, VOC und lepresenced
Devices: 107xHomematic(IP), 96xPhilips Hue, 17xTECHEM, 12xBTLE, 8xSONOS, 2xHomeConnect, 1xShelly 3em, 1xNanoleaf ...