mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-05-01 20:20:10 +00:00
01_FHEMWEB.pm: use devspec2array for room list (Forum #103264)
git-svn-id: https://svn.fhem.de/fhem/trunk/fhem@20069 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
parent
68fcc2673b
commit
a02326b088
@ -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"))) {
|
||||
|
@ -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;
|
||||
|
19
fhem.pl
19
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");
|
||||
}
|
||||
|
@ -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'});
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user