01_FHEMWEB.pm: preserve csrfToken over rereadcfg

git-svn-id: https://svn.fhem.de/fhem/trunk@13476 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
rudolfkoenig
2017-02-20 21:53:33 +00:00
parent 1b485a7796
commit 85c291f346

View File

@@ -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") {