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