From b4f252ceecf4cd4cec5656b6b0ca53d9be4f494d Mon Sep 17 00:00:00 2001 From: rudolfkoenig <> Date: Tue, 6 Mar 2018 21:06:34 +0000 Subject: [PATCH] 00_FBAHAHTTP.pm: implement HTTPS for connection (Forum #85286) git-svn-id: https://svn.fhem.de/fhem/trunk@16344 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/FHEM/00_FBAHAHTTP.pm | 9 +++++++-- fhem/FHEM/FritzBoxUtils.pm | 14 +++++++++++--- 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/fhem/FHEM/00_FBAHAHTTP.pm b/fhem/FHEM/00_FBAHAHTTP.pm index 8f4015f72..8c1c69b0f 100644 --- a/fhem/FHEM/00_FBAHAHTTP.pm +++ b/fhem/FHEM/00_FBAHAHTTP.pm @@ -128,9 +128,10 @@ FBAHAHTTP_Poll($) return $ret if($ret); } my $sid = $hash->{".SID"}; + my $host = ($hash->{DEF} =~ m/^http/i ? $hash->{DEF} : "http://$hash->{DEF}"); HttpUtils_NonblockingGet({ - url=>"http://$hash->{DEF}/webservices/homeautoswitch.lua?sid=$sid". + url=>"$host/webservices/homeautoswitch.lua?sid=$sid". "&switchcmd=getdevicelistinfos", loglevel => AttrVal($name, "verbose", 4), timeout => AttrVal($name, "fbTimeout", 4), @@ -221,8 +222,9 @@ FBAHAHTTP_ProcessStack($) my ($hash) = @_; my $name = $hash->{NAME}; my $msg = $hash->{CmdStack}->[0]; + my $host = ($hash->{DEF} =~ m/^http/i ? $hash->{DEF} : "http://$hash->{DEF}"); HttpUtils_NonblockingGet({ - url=>"http://$hash->{DEF}/webservices/homeautoswitch.lua?$msg", + url=>"$host/webservices/homeautoswitch.lua?$msg", loglevel => AttrVal($name, "verbose", 4), timeout => AttrVal($name, "fbTimeout", 4), callback => sub { @@ -311,6 +313,9 @@ FBAHAHTTP_Write($$$) + Note: to specify HTTPS for the connection use https://fritz.box as + hostname. To explicitly specify the port, postfix the hostname with :port, + as in https://fritz.box:443
diff --git a/fhem/FHEM/FritzBoxUtils.pm b/fhem/FHEM/FritzBoxUtils.pm index 6e6c7d882..e52c24708 100644 --- a/fhem/FHEM/FritzBoxUtils.pm +++ b/fhem/FHEM/FritzBoxUtils.pm @@ -11,11 +11,19 @@ my ($lastOkPw, $lastOkUser, $lastOkHost, $lastOkTime) =("", "", 0); sub FB_checkPw(@); +sub +FB_host2URL($) +{ + my ($h) = @_; + return "$h/" if($h =~ m/^http/i); + return "http://$h/"; +} + sub FB_doCheckPW($$$) { my ($host, $user, $pw) = @_; - my $data = GetFileFromURL("http://$host/login_sid.lua", undef, undef, 1); + my $data = GetFileFromURL(FB_host2URL($host)."login_sid.lua",undef,undef,1); return undef if(!$data); my $chl=""; @@ -28,14 +36,14 @@ FB_doCheckPW($$$) my @d = ( "login:command/response=$chlAnsw", "getpage=../html/de/internet/connect_status.txt" ); $data = join("&", map {join("=", map {urlEncode($_)} split("=",$_,2))} @d); - $data = GetFileFromURL("http://$host/cgi-bin/webcm", undef, $data, 1); + $data = GetFileFromURL(FB_host2URL($host)."cgi-bin/webcm", undef, $data, 1); my $isOk = ($data =~ m/checkStatus/); return $isOk; } else { # FritzOS >= 5.50 my @d = ( "response=$chlAnsw", "page=/login_sid.lua" ); $data = join("&", map {join("=", map {urlEncode($_)} split("=",$_,2))} @d); - my $url = "http://$host/login_sid.lua"; + my $url = FB_host2URL($host)."login_sid.lua"; $url .= "?username=$user" if($user); $data = GetFileFromURL($url, undef, $data, 1);