## OpenCA - CA Command
## (c) 2001 by Michael Bell and OpenCA Group
##
##   File Name: show_rights
##       Brief: show the rights
## Description: show all access rigths
##  Parameters: module, operation, operator, owner

sub cmdShow_rights {

## load page
my $sheet    = getRequired( 'ShowRightsSheet' );
my $uptime   = $tools->getDate();
my $page;
## Get the base Page ( got in $page variable )
if( not $page = $query->getFile( "$sheet" ) ) {
	configError ( i18nGettext ("File not Found : __SHEET__", "__SHEET__", $sheet) );
};

## load the parameters
my $module    = $query->param ('module');
my $operation = $query->param ('operation');
my $operator  = $query->param ('operator');
my $owner     = $query->param ('owner');

## load the configuration
my $rights_dir = getRequired ('RBAC_DIR')."/".
                 getRequired ('RIGHTS_DIR');

## prepare filter
my $filter = "";
if ($module) {
	$filter .= encodeName ($module);
} else {
	$filter .= ".*";
}
$filter .= "-";
if ($operation) {
	$filter .= encodeName ($operation);
} else {
	$filter .= ".*";
}
$filter .= "-";
if ($operator) {
	$filter .= encodeName ($operator);
} else {
	$filter .= ".*";
}
$filter .= "-";
if ($owner) {
	$filter .= encodeName ($owner);
} else {
	$filter .= ".*";
}
$filter .= ".sig";

## load the directory
opendir DIR, $rights_dir or
  configError ( i18nGettext ("Cannot open the directory which includes the rights (__DIR__)!", "__DIR__", $rights_dir));
my @list = grep ( /^$filter$/, readdir DIR);
closedir DIR;
my @hlist;
foreach my $item (@list) {
	next if ($item =~ /^(\.|\.\.)$/);
	$item =~ s/\.sig$//;
	my ($module, $operation, $operator, $owner) = split ( /-/, $item );
	push @hlist, 
		[decodeName ($module),
		decodeName ($operation),
		decodeName ($operator),
		decodeName ($owner)];
}
@list = sort cmp_rights @hlist;

## create table
my $table = $query->startTable ( COLS => [ 
                                   gettext ("MODULE"), 
                                   gettext ("OPERATION"), 
                                   gettext ("OPERATOR"), 
                                   gettext ("OWNER") , 
                                   gettext ("Delete") ],
                                 WIDTH=>"100%",
                                 TITLE_BGCOLOR=>"#DDCCFF" );

## build 
for $value (@list) {
  my ($module, $operation, $operator, $owner) = @{$value};
  ## build link
  my $link = "module=$module&".
             "operation=$operation&".
             "operator=$operator&".
             "owner=$owner";
  ## fix link
  $link =~ s/ /%20/g;
  $link = "<a href=\"$self?cmd=show_prepared_right&next_cmd=delete&".
          $link."\">".gettext("DELETE")."</a>";
  ## fix operator
  $operator = gettext("&lt;new user&gt;" )if (not $operator);
  ## fix owner
  $owner = gettext("&lt;CA itself or any role&gt;") if (not $owner);
  ## build row
  $table .= $query->addTableLine ( DATA => [
                                     $module,
                                     $operation,
                                     $operator,
                                     $owner,
                                     $link ] );
}

## close table
$table .= $query->endTable ();

## Substitute the Variables in the $page
$page = $query->subVar( $page, '$uptime', $uptime );
$page = $query->subVar( $page, '$table', $table );

print "$page";

}

sub cmp_rights {

	return  1 if ( $a->[0] gt $b->[0] );
	return -1 if ( $a->[0] lt $b->[0] );
	return  1 if ( $a->[1] gt $b->[1] );
	return -1 if ( $a->[1] lt $b->[1] );
	return  1 if ( $a->[2] gt $b->[2] );
	return -1 if ( $a->[2] lt $b->[2] );
	return  1 if ( $a->[3] gt $b->[3] );
	return -1 if ( $a->[3] lt $b->[3] );
	return  0; ## this should never happen (duplicate rights?)

}

1;
