mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-05-01 20:20:10 +00:00
FB_checkPw with user
git-svn-id: https://svn.fhem.de/fhem/trunk/fhem@2691 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
parent
ac354c59fe
commit
7039497890
1
CHANGED
1
CHANGED
@ -71,6 +71,7 @@
|
|||||||
- feature: userReadings
|
- feature: userReadings
|
||||||
- feature: average supports more than one value in combined readings (T:x H:y)
|
- feature: average supports more than one value in combined readings (T:x H:y)
|
||||||
- feature: FHEMWEB serves arbitrary files from the www directory
|
- feature: FHEMWEB serves arbitrary files from the www directory
|
||||||
|
- feature: FB_checkPw now works with a distinct fritzbox user
|
||||||
|
|
||||||
|
|
||||||
- 2012-10-28 (5.3)
|
- 2012-10-28 (5.3)
|
||||||
|
@ -2906,10 +2906,12 @@ FW_htmlEscape($)
|
|||||||
Example:<br>
|
Example:<br>
|
||||||
<code>
|
<code>
|
||||||
attr WEB basicAuth { "$user:$password" eq "admin:secret" }<br>
|
attr WEB basicAuth { "$user:$password" eq "admin:secret" }<br>
|
||||||
attr WEB basicAuth {use FritzBoxUtils;;FB_checkPw("localhost","$password") }
|
attr WEB basicAuth {use FritzBoxUtils;;FB_checkPw("localhost","$password") }<br>
|
||||||
|
</code>
|
||||||
|
or if you defined multiple users on the Fritzbox:<br>
|
||||||
|
<code>
|
||||||
|
attr WEB basicAuth {use FritzBoxUtils;;FB_checkPw("localhost","$user", "$password") }<br>
|
||||||
</code>
|
</code>
|
||||||
|
|
||||||
|
|
||||||
</li><br>
|
</li><br>
|
||||||
|
|
||||||
<a name="HTTPS"></a>
|
<a name="HTTPS"></a>
|
||||||
|
@ -374,7 +374,11 @@ telnet_Undef($$)
|
|||||||
Example:<br>
|
Example:<br>
|
||||||
<code>
|
<code>
|
||||||
attr tPort password secret<br>
|
attr tPort password secret<br>
|
||||||
attr tPort password {use FritzBoxUtils;;FB_checkPw("localhost","$password") }
|
attr tPort password {use FritzBoxUtils;;FB_checkPw("localhost","$password") }<br>
|
||||||
|
</code>
|
||||||
|
or if you defined multiple users on the Fritzbox:<br>
|
||||||
|
<code>
|
||||||
|
attr tPort password {use FritzBoxUtils;;FB_checkPw("localhost","$user", "$password") }<br>
|
||||||
</code>
|
</code>
|
||||||
</li><br>
|
</li><br>
|
||||||
|
|
||||||
|
@ -7,12 +7,14 @@ use warnings;
|
|||||||
use Digest::MD5 "md5_hex";
|
use Digest::MD5 "md5_hex";
|
||||||
use HttpUtils;
|
use HttpUtils;
|
||||||
|
|
||||||
my ($lastOkPw, $lastOkHost, $lastOkTime) =("", "", 0);
|
my ($lastOkPw, $lastOkUser, $lastOkHost, $lastOkTime) =("", "", 0);
|
||||||
|
|
||||||
|
sub FB_checkPw(@);
|
||||||
|
|
||||||
sub
|
sub
|
||||||
FB_doCheckPW($$)
|
FB_doCheckPW($$$)
|
||||||
{
|
{
|
||||||
my ($host, $pw) = @_;
|
my ($host, $user, $pw) = @_;
|
||||||
my $data = GetFileFromURL("http://$host/login_sid.lua", undef, undef, 1);
|
my $data = GetFileFromURL("http://$host/login_sid.lua", undef, undef, 1);
|
||||||
return undef if(!$data);
|
return undef if(!$data);
|
||||||
|
|
||||||
@ -33,7 +35,10 @@ FB_doCheckPW($$)
|
|||||||
} else { # FritzOS >= 5.50
|
} else { # FritzOS >= 5.50
|
||||||
my @d = ( "response=$chlAnsw", "page=/login_sid.lua" );
|
my @d = ( "response=$chlAnsw", "page=/login_sid.lua" );
|
||||||
$data = join("&", map {join("=", map {urlEncode($_)} split("=",$_,2))} @d);
|
$data = join("&", map {join("=", map {urlEncode($_)} split("=",$_,2))} @d);
|
||||||
$data = GetFileFromURL("http://$host/login_sid.lua", undef, $data, 1);
|
my $url = "http://$host/login_sid.lua";
|
||||||
|
$url .= "?username=$user" if($user);
|
||||||
|
|
||||||
|
$data = GetFileFromURL($url, undef, $data, 1);
|
||||||
my $sid = $1 if($data =~ /<SID>(\w+)<\/SID>/i);
|
my $sid = $1 if($data =~ /<SID>(\w+)<\/SID>/i);
|
||||||
$sid = undef if($sid =~ m/^0*$/);
|
$sid = undef if($sid =~ m/^0*$/);
|
||||||
return $sid;
|
return $sid;
|
||||||
@ -41,16 +46,22 @@ FB_doCheckPW($$)
|
|||||||
}
|
}
|
||||||
|
|
||||||
sub
|
sub
|
||||||
FB_checkPw($$)
|
FB_checkPw(@)
|
||||||
{
|
{
|
||||||
my ($host, $pw) = @_;
|
my ($host, $p1, $p2) = @_;
|
||||||
|
my $user = ($p2 ? $p1 : ""); # Compatibility mode: no user parameter
|
||||||
|
my $pw = ($p2 ? $p2 : $p1);
|
||||||
|
|
||||||
my $now = time();
|
my $now = time();
|
||||||
|
|
||||||
return 1 if($lastOkPw eq $pw && $lastOkHost eq $host &&
|
return 1 if($lastOkPw eq $pw &&
|
||||||
|
$lastOkUser eq $user &&
|
||||||
|
$lastOkHost eq $host &&
|
||||||
($now - $lastOkTime) < 300); # 5min cache
|
($now - $lastOkTime) < 300); # 5min cache
|
||||||
|
|
||||||
if(FB_doCheckPW($host, $pw)) {
|
if(FB_doCheckPW($host, $user, $pw)) {
|
||||||
$lastOkPw = $pw;
|
$lastOkPw = $pw;
|
||||||
|
$lastOkUser = $user;
|
||||||
$lastOkTime = $now;
|
$lastOkTime = $now;
|
||||||
$lastOkHost = $host;
|
$lastOkHost = $host;
|
||||||
return 1;
|
return 1;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user