FHEM Forum

FHEM => Sonstiges => Thema gestartet von: SlvrStrko4 am 04 Mai 2019, 18:00:08

Titel: ERLEDIGT: [HTTPMOD] Shop mit Login & Logout
Beitrag von: SlvrStrko4 am 04 Mai 2019, 18:00:08
Hallo zusammen,

ich habe mir jetzt alle HTTPMOD Threads durchgelesen und alles probiert aber komme irgendwie nicht so richtig weiter.
Ich möchte gerne auf einen Shop (Siemens BSH) zugreifen und über das Modul eine Art "Preisüberwachung" von Kaffeemaschinen realisieren.
Folgenden Ablauf brauche ich dafür:
- GET auf die Login Seite und hier aus dem Body den CSRF-Token rausziehen
- POST mit Username, Passwort und CSRF Token auf eine andere URL
- GET der eigentlichen "Ziel-Shopseite" und aus dem Body weitere Readings auswerten
- POST mit CSRF auf eine Logout URL

Ich habe das Ganze mit BURP mitgeschnitten und auf der Basis unten stehendes Device erstellt.
Es funktioniert allerdings nur, wenn ich zweimal hintereinander ein Update/Reread durchführe und ich gehe aktuell davon aus, dass es am CSRF-Token liegt der erst nach dem Auth-Versuch ins Reading geschrieben wird.

Internals:
   BUSY       0
   CHANGED   
   DEF        https://shop.siemens-home.bsh-group.com/de/productlistde/coffeemachines/fullyautomaticcoffeemachines/eq6 10800
   FUUID      5ccadfb6-f33f-38a0-babc-a9e57928da6d1c23
   Interval   10800
   LASTSEND   1556983749.69072
   LastAuthTry 2019-05-04 17:29:07
   MainURL    https://shop.siemens-home.bsh-group.com/de/productlistde/coffeemachines/fullyautomaticcoffeemachines/eq6
   ModuleVersion 3.5.9 - 13.2.2019
   NAME       SiemensCoffeeShop
   NOTIFYDEV  global
   NR         727
   NTFY_ORDER 50-SiemensCoffeeShop
   ReplacementEnabled 1
   STATE      ???
   TRIGGERTIME 1556991582.51508
   TRIGGERTIME_FMT 2019-05-04 19:39:42
   TYPE       HTTPMOD
   addr       https://shop.siemens-home.bsh-group.com:443
   auth       0
   buf       
   code       200
   compress   1
   conn       
   data       
   displayurl https://shop.siemens-home.bsh-group.com/de/productlistde/coffeemachines/fullyautomaticcoffeemachines/eq6
   header     Cookie: SECURE_GUID=4711; STORE_SESSION_ID=4711
   host       shop.siemens-home.bsh-group.com
   httpheader HTTP/1.0 200 OK
X-Frame-Options: SAMEORIGIN
Content-Type: text/html;charset=UTF-8
Content-Language: de-DE
Content-Encoding: gzip
X-XSS-Protection: 1; mode=block
X-Content-Type-Options: nosniff
Cache-Control: max-age=0, private, no-store, no-cache, must-revalidate
Content-Security-Policy-Report-Only: default-src https: data: wss: 'unsafe-inline' 'unsafe-eval'; report-uri https://xl86pc2ky3.execute-api.eu-central-1.amazonaws.com/prod/icorecspupload
Content-Length: 15466
Strict-Transport-Security: max-age=31536000
Date: Sat, 04 May 2019 15:29:10 GMT
Connection: close
Vary: Accept-Encoding
Set-Cookie: STORE_SESSION_ID=4711; Domain=shop.siemens-home.bsh-group.com; Path=/de/; Secure; HttpOnly
   httpversion 1.0
   hu_blocking 0
   hu_filecount 34
   hu_port    443
   hu_portSfx
   ignoreredirects 0
   loglevel   4
   path       /de/productlistde/coffeemachines/fullyautomaticcoffeemachines/eq6
   protocol   https
   redirects  0
   timeout    2
   url        https://shop.siemens-home.bsh-group.com/de/productlistde/coffeemachines/fullyautomaticcoffeemachines/eq6
   value      0
   HTTPCookieHash:
     SECURE_GUID;:
       Name       SECURE_GUID
       Options    Domain=shop.siemens-home.bsh-group.com; Path=/de/; Secure; HttpOnly
       Path       
       Value      4711
     STORE_SESSION_ID;:
       Name       STORE_SESSION_ID
       Options    Domain=shop.siemens-home.bsh-group.com; Path=/de/; Secure; HttpOnly
       Path       
       Value      4711
   QUEUE:
   READINGS:
     2019-05-04 17:29:10   Price-1         xxx.xx
     2019-05-04 17:29:10   Price-2         xxx.xx
     2019-05-04 17:29:10   Price-3         xxx.xx
     2019-05-04 17:29:10   Price-4         xxx.xx
     2019-05-04 17:29:10   Price-5         xxx.xx
     2019-05-04 17:29:10   Price-6         xxx.xx
     2019-05-04 17:29:10   SKU-1           TE653501DE
     2019-05-04 17:29:10   SKU-2           TE657M03DE
     2019-05-04 17:29:10   SKU-3           TE657509DE
     2019-05-04 17:29:10   SKU-4           TE651509DE
     2019-05-04 17:29:10   SKU-5           TE658509DE
     2019-05-04 17:29:10   SKU-6           TE655503DE
     2019-05-04 17:29:10   Title-1         EQ.6 plus s300
     2019-05-04 17:29:10   Title-2         EQ.6 plus s700
     2019-05-04 17:29:10   Title-3         EQ.6 plus s700
     2019-05-04 17:29:10   Title-4         EQ.6 plus s100
     2019-05-04 17:29:10   Title-5         EQ.6 plus s800
     2019-05-04 17:29:10   Title-6         EQ.6 plus s500
     2019-05-04 17:29:10   _csrf           4711
   REQUEST:
     data       
     header     
     ignoreredirects 0
     retryCount 1
     type       update
     url        https://shop.siemens-home.bsh-group.com/de/productlistde/coffeemachines/fullyautomaticcoffeemachines/eq6
     value      0
   defptr:
     readingBase:
       Price-1    reading
       Price-2    reading
       Price-3    reading
       Price-4    reading
       Price-5    reading
       Price-6    reading
       SKU-1      reading
       SKU-2      reading
       SKU-3      reading
       SKU-4      reading
       SKU-5      reading
       SKU-6      reading
       Title-1    reading
       Title-2    reading
       Title-3    reading
       Title-4    reading
       Title-5    reading
       Title-6    reading
       _csrf      reading
     readingNum:
       Price-1    02
       Price-2    02
       Price-3    02
       Price-4    02
       Price-5    02
       Price-6    02
       SKU-1      03
       SKU-2      03
       SKU-3      03
       SKU-4      03
       SKU-5      03
       SKU-6      03
       Title-1    04
       Title-2    04
       Title-3    04
       Title-4    04
       Title-5    04
       Title-6    04
       _csrf      01
     readingOutdated:
     readingSubNum:
       Price-1    -1
       Price-2    -2
       Price-3    -3
       Price-4    -4
       Price-5    -5
       Price-6    -6
       SKU-1      -1
       SKU-2      -2
       SKU-3      -3
       SKU-4      -4
       SKU-5      -5
       SKU-6      -6
       Title-1    -1
       Title-2    -2
       Title-3    -3
       Title-4    -4
       Title-5    -5
       Title-6    -6
     requestReadings:
       update:
         Price-1    reading 02-1
         Price-2    reading 02-2
         Price-3    reading 02-3
         Price-4    reading 02-4
         Price-5    reading 02-5
         Price-6    reading 02-6
         SKU-1      reading 03-1
         SKU-2      reading 03-2
         SKU-3      reading 03-3
         SKU-4      reading 03-4
         SKU-5      reading 03-5
         SKU-6      reading 03-6
         Title-1    reading 04-1
         Title-2    reading 04-2
         Title-3    reading 04-3
         Title-4    reading 04-4
         Title-5    reading 04-5
         Title-6    reading 04-6
         _csrf      reading 01
   sslargs:
Attributes:
   authRetries 1
   disable    0
   enableControlSet 1
   enableCookies 1
   event-on-change-reading .*
   handleRedirects 0
   reAuthRegex id="bshLoginData"|Unauthorized
   reading01Name _csrf
   reading01Regex <meta name="_csrf" content="(.*)"/>
   reading02Name Price
   reading02RegOpt g
   reading02Regex "sku":".*?".*?"title":".*?".*?"price":{"value":(.*?),
   reading03Name SKU
   reading03RegOpt g
   reading03Regex "sku":"(.*?)".*?"title":".*?".*?"price":{"value":.*?,
   reading04Name Title
   reading04RegOpt g
   reading04Regex "sku":".*?".*?"title":"(.*?)".*?"price":{"value":.*?,
   replacement1Mode reading
   replacement1Regex %%_csrf%%
   replacement1Value _csrf
   room       Technik
   showBody   0
   sid01Data  loginUrl=%2Fde%2Fsys%2Flogin&errorPageUrl=https%3A%2F%2Fshop.siemens-home.bsh-group.com%2Fde%2Ferror&successPageUrl=https%3A%2F%2Fshop.siemens-home.bsh-group.com%2Fde%2Fproductlistde%2Fcoffeemachines%2Ffullyautomaticcoffeemachines%2Feq6&username=mail@hier.de&password=Password&_csrf=%%_csrf%%
   sid01URL   https://shop.siemens-home.bsh-group.com/de/sys/login
   userattr   get01Name reading01Name reading01Regex reading02JSON reading02Name reading02RegOpt reading02Regex reading03Name reading03RegOpt reading03Regex reading04Name reading04RegOpt reading04Regex replacement1Mode:reading,internal,text,expression,key replacement1Regex replacement1Value sid01Data sid01URL sid02URL
   verbose    5


Danke schonmal für eure Mühen!
Gruß
Titel: Antw:[HTTPMOD] Shop mit Login & Logout
Beitrag von: amenomade am 04 Mai 2019, 22:15:39
Dann mach einfach ein zusätzliches get:
get1Name Reread2
get1URL https://shop.siemens-home.bsh-group.com/de/productlistde/coffeemachines/fullyautomaticcoffeemachines/eq6
get1Poll 1
[/s]

Alternativ: zusätzlich im Login Prozess:
sid00URL https://shop.siemens-home.bsh-group.com/de/sys/login
sid00IdRegex <meta name="_csrf" content="(.*)"/>


Dann hast Du den csrf Token in $sid und kannst direkt schreiben:
sid01Data loginUrl=%2Fde%2Fsys%2Flogin&errorPageUrl=https%3A%2F%2Fshop.siemens-home.bsh-group.com%2Fde%2Ferror&successPageUrl=https%3A%2F%2Fshop.siemens-home.bsh-group.com%2Fde%2Fproductlistde%2Fcoffeemachines%2Ffullyautomaticcoffeemachines%2Feq6&username=mail@hier.de&password=Password&_csrf=$sid
Ist sauberer (aber nicht getestet ;) )
Titel: Antw:[HTTPMOD] Shop mit Login & Logout
Beitrag von: SlvrStrko4 am 04 Mai 2019, 22:58:20
Ich habe deinen Alternativweg gerade direkt mal getestet und klappt excellent, danke!
Was ich jetzt noch offen habe:
Ich würde gerne nach dem Evaluieren der Ganzen readingxyRegex auch den Logout vornehmen.
Hierzu wird nur ein POST mit "_csrf=4711" an /de/sys/logout abgesetzt.
Wie kann ich das machen, ich denke ein sid02Data wäre falsch, da dies ja vor dem eigentlich Get im Falle eines ReAuth ausgeführt wird, richtig?

Was mir einfallen würde, ich weiß aber nicht ob es der saubere Weg ist:

sid02Url https://shop.siemens-home.bsh-group.com/de/productlistde/coffeemachines/fullyautomaticcoffeemachines/eq6
sid02ParseResponse1
sid03Url https://shop.siemens-home.bsh-group.com/de/sys/logout
sid03Data _csrf=$sid
Titel: Antw:[HTTPMOD] Shop mit Login & Logout
Beitrag von: amenomade am 04 Mai 2019, 23:04:12
Ja, mit sid02 und sid03 könnte es funktionieren. Dann musst Du aber die HauptURL im DEF löschen (bzw auf none setzen), sonst wird er immer versuchen, nach der Authentifizierung, die Seite aufzurufen... und wird es natürlich nicht schaffen, da Du abgemeldet bist => er wird wieder eine Authentifizierung anfordern.
EDIT: vielleicht wird dann auch reAuthAlways nötig, weil Du keine Seite mehr liest, und deswegen kein "Unauthorized" mehr kriegen würdest
Titel: Antw:[HTTPMOD] Shop mit Login & Logout
Beitrag von: SlvrStrko4 am 04 Mai 2019, 23:21:04
Danke, habe es so eingebaut und mit nem Verbose-Logging überprüft, dass er nur das macht was ich möchte => passt.
Dann zusätzlich für die 2 POSTs noch das "IgnoreRedirects" Attribut gesetzt und dann geht es ganz reibungslos vonstatten.

Attributes:
   authRetries 1
   disable    0
   enableControlSet 1
   enableCookies 1
   event-on-change-reading .*
   handleRedirects 0
   reAuthAlways 1
   reAuthRegex id="bshLoginData"|Unauthorized
   reading01Name _csrf
   reading01Regex <meta name="_csrf" content="(.*)"/>
   reading02Name Price
   reading02RegOpt g
   reading02Regex "sku":".*?".*?"title":".*?".*?"price":{"value":(.*?),
   reading03Name SKU
   reading03RegOpt g
   reading03Regex "sku":"(.*?)".*?"title":".*?".*?"price":{"value":.*?,
   reading04Name Title
   reading04RegOpt g
   reading04Regex "sku":".*?".*?"title":"(.*?)".*?"price":{"value":.*?,
   room       Technik
   showBody   0
   sid00IdRegex <meta name="_csrf" content="(.*)"/>
   sid00URL   https://shop.siemens-home.bsh-group.com/de/mysiemens/staffsales/login
   sid01Data  loginUrl=%2Fde%2Fsys%2Flogin&errorPageUrl=https%3A%2F%2Fshop.siemens-home.bsh-group.com%2Fde%2Ferror&successPageUrl=https%3A%2F%2Fshop.siemens-home.bsh-group.com%2Fde%2Fproductlistde%2Fcoffeemachines%2Ffullyautomaticcoffeemachines%2Feq6&username=mail@hier.de&password=Password&_csrf=$sid
   sid01IgnoreRedirects 1
   sid01URL   https://shop.siemens-home.bsh-group.com/de/sys/login
   sid02ParseResponse 1
   sid02URL   https://shop.siemens-home.bsh-group.com/de/productlistde/coffeemachines/fullyautomaticcoffeemachines/eq6
   sid03Data  _csrf=$sid
   sid03IgnoreRedirects 1
   sid03URL   https://shop.siemens-home.bsh-group.com/de/sys/logout
   userattr   get01Name reading01Name reading01Regex reading02JSON reading02Name reading02RegOpt reading02Regex reading03Name reading03RegOpt reading03Regex reading04Name reading04RegOpt reading04Regex replacement1Mode:reading,internal,text,expression,key replacement1Regex replacement1Value sid00IdRegex sid00URL sid01Data sid01IgnoreRedirects:0,1 sid01URL sid02ParseResponse:0,1 sid02URL sid03Data sid03IgnoreRedirects:0,1 sid03URL
   verbose    5