diff --git a/FHEM/01_FHEMWEB.pm b/FHEM/01_FHEMWEB.pm index 661569b6a..0bb87453c 100644 --- a/FHEM/01_FHEMWEB.pm +++ b/FHEM/01_FHEMWEB.pm @@ -1252,7 +1252,7 @@ FW_updateHashes() %FW_types = (); # Needed for type sorting my $hre = AttrVal($FW_wname, "hiddenroomRegexp", ""); - foreach my $d (keys %defs ) { + foreach my $d (devspec2array(".*", $FW_chash)) { next if(IsIgnored($d)); foreach my $r (split(",", AttrVal($d, "room", "Unsorted"))) { diff --git a/FHEM/96_allowed.pm b/FHEM/96_allowed.pm index 555558367..f17092da6 100644 --- a/FHEM/96_allowed.pm +++ b/FHEM/96_allowed.pm @@ -81,9 +81,9 @@ allowed_Undef($$) ##################################### # Return 0 for don't care, 1 for Allowed, 2 for forbidden. sub -allowed_Authorize($$$$) +allowed_Authorize($$$$;$) { - my ($me, $cl, $type, $arg) = @_; + my ($me, $cl, $type, $arg, $silent) = @_; return 0 if($me->{disabled}); if( $cl->{SNAME} ) { @@ -111,8 +111,10 @@ allowed_Authorize($$$$) $me->{allowedDevices} =~ m/\b\Q$arg\E\b/); return 1 if($me->{allowedDevicesRegexp} && $arg =~ m/^$me->{allowedDevicesRegexp}$/); - Log3 $me, 3, "Forbidden device $arg for $cl->{NAME}"; - stacktrace() if(AttrVal($me, "verbose", 5)); + if(!$silent) { + Log3 $me, 3, "Forbidden device $arg for $cl->{NAME}"; + stacktrace() if(AttrVal($me, "verbose", 5)); + } return 2; } return 0; diff --git a/fhem.pl b/fhem.pl index 598cf0c24..57088cb49 100755 --- a/fhem.pl +++ b/fhem.pl @@ -51,6 +51,8 @@ sub AnalyzePerlCommand($$;$); sub AssignIoPort($;$); sub AttrVal($$$); sub AttrNum($$$;$); +sub Authorized($$$;$); +sub Authenticate($$); sub CallFn(@); sub CallInstanceFn(@); sub CheckDuplicate($$@); @@ -1246,10 +1248,7 @@ devspec2array($;$$) return "" if(!defined($name)); if(defined($defs{$name})) { - if($cl && !Authorized($cl, "devicename", $name)) { - Log 4, "Forbidden device $name"; - return ""; - } + return "" if($cl && !Authorized($cl, "devicename", $name)); # FHEM2FHEM LOG mode fake device, avoid local set/attr/etc operations on it return "FHEM2FHEM_FAKE_$name" if($defs{$name}{FAKEDEVICE}); @@ -1335,7 +1334,7 @@ devspec2array($;$$) push @ret,@res; } return $name if(!@ret && !$isAttr); - @ret = grep { Authorized($cl, "devicename", $_) } @ret if($cl); + @ret = grep { Authorized($cl, "devicename", $_, 1) } @ret if($cl); return @ret; } @@ -2496,7 +2495,7 @@ CommandList($$) for my $d (sort { my $x=$modules{$defs{$a}{TYPE}}{ORDER}.$defs{$a}{TYPE} cmp $modules{$defs{$b}{TYPE}}{ORDER}.$defs{$b}{TYPE}; $x=($a cmp $b) if($x == 0); $x; } keys %defs) { - next if(IsIgnored($d) || ($cl && !Authorized($cl,"devicename",$d))); + next if(IsIgnored($d) || ($cl && !Authorized($cl, "devicename", $d, 1))); my $t = $defs{$d}{TYPE}; $str .= "\n$t:\n" if($t ne $lt); $str .= sprintf(" %-20s (%s)\n", $d, $defs{$d}{STATE}); @@ -5558,9 +5557,9 @@ Each($$;$) # can be used e.g. in at, Forum #40022 # Return 1 if Authorized, else 0 # Note: AuthorizeFn's returning 1 are not stackable. sub -Authorized($$$) +Authorized($$$;$) { - my ($cl, $type, $arg) = @_; + my ($cl, $type, $arg, $silent) = @_; return 1 if(!$init_done || !$cl || !$cl->{SNAME}); # Safeguarding RefreshAuthList() if($auth_refresh); @@ -5568,8 +5567,8 @@ Authorized($$$) my $verbose = AttrVal($sname, "verbose", 1); # Speedup? foreach my $a (@authorize) { - my $r = CallFn($a, "AuthorizeFn", $defs{$a}, $cl, $type, $arg); - if($verbose >= 4) { + my $r = CallFn($a, "AuthorizeFn", $defs{$a}, $cl, $type, $arg, $silent); + if($verbose >= 4 && !$silent) { Log3 $sname, 4, "authorize $sname/$type/$arg: $a returned ". ($r == 0 ? "dont care" : $r == 1 ? "allowed" : "prohibited"); } diff --git a/www/pgm2/f18.js b/www/pgm2/f18.js index de068512b..43cc0e628 100644 --- a/www/pgm2/f18.js +++ b/www/pgm2/f18.js @@ -366,6 +366,7 @@ f18_special() addHider("hideLogo", true, "Hide logo", f18_menu); addHider("hideInput", true, "Hide input", f18_menu); addHider("hideTextInput", true, "Hide text input", f18_menu); + addHider("hideMenu", true, "Hide menu", f18_menu); addHider("hidePin", true, "Hide pin", function(c){ $("div.pinHeader div.pin").css("display", c ? "none":"block"); }); @@ -416,7 +417,8 @@ f18_resize() log("f18.js resize W:"+w+" S:"+screen.width); var hl = f18_getAttr("hideLogo"), hi = f18_getAttr("hideInput"), - pm = f18_getAttr("Pinned.menu"), + hm = f18_getAttr("hideMenu"), + pm = f18_getAttr("Pinned.menu") || hm, rm = (f18_getAttr("rightMenu") && f18_small), hti = f18_getAttr("hideTextInput"); @@ -436,6 +438,7 @@ f18_resize() $("#menuBtn").toggle(!pm || f18_small); $("#menuBtn").css({ left:(rm ? "auto":"10px"), right:(rm ? "10px":"auto") }); $("#logo") .css({ left:(rm ? "auto":lleft ), right:(rm ? "48px":"auto") }); + $("#menu").css({ display: (hm ? "none":"block") }); if(FW_isiOS) $("#logo,#menuBtn").css({ top:'12px'}); }