From f18f6a430664c0cd508f82d7dab8c1756f98f01d Mon Sep 17 00:00:00 2001 From: rudolfkoenig <> Date: Mon, 20 Feb 2017 21:53:33 +0000 Subject: [PATCH] 01_FHEMWEB.pm: preserve csrfToken over rereadcfg git-svn-id: https://svn.fhem.de/fhem/trunk@13476 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/FHEM/01_FHEMWEB.pm | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/fhem/FHEM/01_FHEMWEB.pm b/fhem/FHEM/01_FHEMWEB.pm index 58696ebca..4e5d0a70c 100755 --- a/fhem/FHEM/01_FHEMWEB.pm +++ b/fhem/FHEM/01_FHEMWEB.pm @@ -94,6 +94,7 @@ my $FW_use_sha = 0; my $FW_activateInform = 0; my $FW_lastWebName = ""; # Name of last FHEMWEB instance, for caching my $FW_lastHashUpdate = 0; +my %FW_csrfTokenCache; ######################### # As we are _not_ multithreaded, it is safe to use global variables. @@ -272,12 +273,16 @@ FW_Define($$) exit(1); } - InternalTimer(1, sub(){ - if($featurelevel >= 5.8 && !AttrVal($name, "csrfToken", undef)) { - my ($x,$y) = gettimeofday(); - $hash->{CSRFTOKEN} = "fhem_".(rand($y)*rand($x)); - } - }, $hash, 0); + $hash->{CSRFTOKEN} = $FW_csrfTokenCache{$name}; + if(!defined($hash->{CSRFTOKEN})) { # preserve over rereadcfg + InternalTimer(1, sub(){ + if($featurelevel >= 5.8 && !AttrVal($name, "csrfToken", undef)) { + my ($x,$y) = gettimeofday(); + $hash->{CSRFTOKEN} = "fhem_".(rand($y)*rand($x)); + $FW_csrfTokenCache{$name} = $hash->{CSRFTOKEN}; + } + }, $hash, 0); + } return $ret; } @@ -2495,13 +2500,16 @@ FW_Attr(@) if($csrf eq "none") { delete($hash->{CSRFTOKEN}); + delete($FW_csrfTokenCache{$devName}); } else { $hash->{CSRFTOKEN} = $csrf; + $FW_csrfTokenCache{$devName} = $hash->{CSRFTOKEN}; } } if($attrName eq "csrfToken" && $type eq "del") { delete($hash->{CSRFTOKEN}); + delete($FW_csrfTokenCache{$devName}); } if($attrName eq "longpoll" && $type eq "set" && $param[0] eq "websocket") {