
use WebminCore;
&init_config();

# acl_security_form(&options)
# Output HTML for editing global security options
sub acl_security_form
{
my ($o) = @_;

# Root directory for file browser
print &ui_table_row($text{'acl_root'},
	&ui_opt_textbox("root", $o->{'root'}, 40, $text{'acl_home'})." ".
	&file_chooser_button("root", 1));

# Other dirs to allow
print &ui_table_row($text{'acl_otherdirs'},
	&ui_textarea("otherdirs", join("\n", split(/\t+/, $o->{'otherdirs'})),
		     3, 40), 3);

# Can see dot files?
print &ui_table_row($text{'acl_nodot'},
	&ui_yesno_radio("nodot", int($o->{'nodot'})));

# Browse as Unix user
print &ui_table_row($text{'acl_fileunix'},
	&ui_opt_textbox("fileunix", $o->{'fileunix'}, 13,
			$text{'acl_sameunix'})." ".
	&user_chooser_button("fileunix"));

# Destinations allowed for URL downloads
my $download_address_mode = $o->{'download_address_mode'};
print &ui_table_row(
	$text{'acl_download_addresses'} .
		&ui_help($text{'acl_download_addresses_desc'}),
	&ui_radio_table(
		"download_address_mode", $download_address_mode,
		[ [ 'all', $text{'acl_download_all'} ],
		  [ 'public', $text{'acl_download_public'} ],
		  [ 'listed', $text{'acl_download_listed'}."<br>".
		    &ui_textarea(
			"download_allowed_addresses",
			join("\n", split(/\s+/,
				$o->{'download_allowed_addresses'})),
			4, 50) ] ]),
	3);

print &ui_hr();

# Users visible in chooser
print &ui_table_row($text{'acl_uedit'},
  &ui_radio_table("uedit_mode", int($o->{'uedit_mode'}),
	[ [ 0, $text{'acl_uedit_all'} ],
	  [ 1, $text{'acl_uedit_none'} ],
	  [ 2, $text{'acl_uedit_only'},
	       &ui_textbox("uedit_can",
			   $o->{'uedit_mode'} == 2 ? $o->{'uedit'} : "", 40).
	       " ".&user_chooser_button("uedit_can", 1) ],
	  [ 3, $text{'acl_uedit_except'},
	       &ui_textbox("uedit_cannot",
			   $o->{'uedit_mode'} == 3 ? $o->{'uedit'} : "", 40).
	       " ".&user_chooser_button("uedit_cannot", 1) ],
	  [ 4, $text{'acl_uedit_uid'},
	       &ui_textbox("uedit_uid",
			   $o->{'uedit_mode'} == 4 ? $o->{'uedit'} : "", 6).
	       " - ".
	       &ui_textbox("uedit_uid2",
			   $o->{'uedit_mode'} == 4 ? $o->{'uedit2'} : "", 6) ],
	  [ 5, $text{'acl_uedit_group'},
	       &ui_group_textbox("uedit_group",
		$o->{'uedit_mode'} == 5 ? $dummy=getgrgid($o->{'uedit'}) : "")],
	]));

# Groups visible in chooser
print &ui_table_row($text{'acl_gedit'},
    &ui_radio_table("gedit_mode", int($o->{'gedit_mode'}),
	[ [ 0, $text{'acl_gedit_all'} ],
	  [ 1, $text{'acl_gedit_none'} ],
	  [ 2, $text{'acl_gedit_only'},
	       &ui_textbox("gedit_can",
			   $o->{'gedit_mode'} == 2 ? $o->{'gedit'} : "", 40).
	       " ".&group_chooser_button("gedit_can", 1) ],
	  [ 3, $text{'acl_gedit_except'},
	       &ui_textbox("gedit_cannot",
			   $o->{'gedit_mode'} == 3 ? $o->{'gedit'} : "", 40).
	       " ".&group_chooser_button("gedit_cannot", 1) ],
	  [ 4, $text{'acl_gedit_gid'},
	       &ui_textbox("gedit_gid",
			   $o->{'gedit_mode'} == 4 ? $o->{'gedit'} : "", 6).
	       " - ".
	       &ui_textbox("gedit_gid2",
			   $o->{'gedit_mode'} == 4 ? $o->{'gedit2'} : "", 6) ],
	]));

print &ui_table_hr();

# Get new permissions?
print &ui_table_row($text{'acl_negative'},
	&ui_radio("negative", int($o->{'negative'}),
		  [ [ 0, $text{'yes'} ], [ 1, $text{'no'} ] ]));

# Readonly mode
print &ui_table_row($text{'acl_readonly2'},
	&ui_radio("readonly", int($o->{'readonly'}),
		  [ [ 1, $text{'acl_readonlyyes'} ],
		    [ 0, $text{'no'} ] ]));

# Allow use of search field
print &ui_table_row($text{'acl_webminsearch'},
	&ui_radio("webminsearch", int($o->{'webminsearch'}),
		  [ [ 1, $text{'yes'} ], [ 0, $text{'no'} ] ]));
}

# acl_security_save(&options)
# Parse the form for global security options
sub acl_security_save
{
my ($o) = @_;
$o->{'root'} = $in{'root_def'} ? undef : $in{'root'};
$o->{'otherdirs'} = join("\t", split(/\r?\n/, $in{'otherdirs'}));
$o->{'nodot'} = $in{'nodot'};

$o->{'uedit_mode'} = $in{'uedit_mode'};
$o->{'uedit'} = $in{'uedit_mode'} == 2 ? $in{'uedit_can'} :
		   $in{'uedit_mode'} == 3 ? $in{'uedit_cannot'} :
		   $in{'uedit_mode'} == 4 ? $in{'uedit_uid'} :
		   $in{'uedit_mode'} == 5 ? getgrnam($in{'uedit_group'}) : "";
$o->{'uedit2'} = $in{'uedit_mode'} == 4 ? $in{'uedit_uid2'} : undef;

$o->{'gedit_mode'} = $in{'gedit_mode'};
$o->{'gedit'} = $in{'gedit_mode'} == 2 ? $in{'gedit_can'} :
		   $in{'gedit_mode'} == 3 ? $in{'gedit_cannot'} :
		   $in{'gedit_mode'} == 4 ? $in{'gedit_gid'} : "";
$o->{'gedit2'} = $in{'gedit_mode'} == 4 ? $in{'gedit_gid2'} : undef;
$o->{'negative'} = $in{'negative'};
$o->{'readonly'} = $in{'readonly'};
$o->{'fileunix'} = $in{'fileunix_def'} ? undef : $in{'fileunix'};
$o->{'webminsearch'} = $in{'webminsearch'};
my $download_address_mode = $in{'download_address_mode'};
$download_address_mode = 'public'
	if ($download_address_mode !~ /^(public|listed|all)$/);
$o->{'download_address_mode'} = $download_address_mode;
$o->{'download_allowed_addresses'} = join(" ",
	split(/\s+/, $in{'download_allowed_addresses'}));
}

