#!/usr/bin/perl
################################################################################
#
# File: cvsadm/edituser.cgi
# Description: Provides the edit user screen for cvsadm
# Author: Andrew@DeFaria.com
# Created: Thu Jul 7 16:54:07 PDT 2005
# Modified:
# Language: Perl
#
# (c) Copyright 2005, Andrew@DeFaria.com, all rights reserved.
#
################################################################################
use strict;
use warnings;
use CGI qw (:standard *table start_Tr end_Tr start_td end_td start_div end_div);
use CGI::Carp "fatalsToBrowser";
use CVSAdm;
my $cvs_server = param "cvs_server";
my $repository = param "repository";
my $Cvs_server = ucfirst $cvs_server;
my $userid = param "userid";
my $password = param "password";
my $action;
my $euid = cookie "CVSAdmUser";
my $is_cvsadm;
my $needs_login;
if (defined $euid) {
$is_cvsadm = IsAdmin $cvs_server, $repository, $euid;
$needs_login = "no";
} else {
$is_cvsadm = IsAdmin $cvs_server, $repository, $userid;
$needs_login = "yes";
} # if
sub Body {
my %passwd_entry = PasswdEntry $cvs_server, $repository, $userid;
if ($is_cvsadm) {
print "
";
print start_form {
-action => "admin.cgi"
};
print hidden {
-name => "cvs_server",
-value => $cvs_server
};
print hidden {
-name => "repository",
-value => $repository
};
print hidden {
-name => "userid",
-value => $userid
};
print submit {
-name => "Admin"
};
print end_form;
print "";
} # if
print start_table {
-align => "center",
-bgcolor => "white",
-border => 0,
-cellspacing => 0,
-cellpadding => 2,
-width => "50%"};
print start_form {
-action => "modifyuser.cgi",
-onSubmit => "return validate_user (this);"
};
print hidden {
-name => "cvs_server",
-value => $cvs_server
};
print hidden {
-name => "repository",
-value => $repository
};
if ($is_cvsadm) {
my @sysusers = SystemUsers $cvs_server, $repository;
my $system_user = SystemUser $cvs_server, $repository, $userid;
my $system_users = popup_menu {-name => "sysusers",
-values => \@sysusers,
-class => "inputfield",
-default => $system_user};
print Tr [
td {-valign => "middle",
-class => "label"},
"Username:",
td {-colspan => 2,
-valign => "middle"},
$userid,
hidden {-name => "userid",
-value => $userid}
];
print Tr [
td {-valign => "middle",
-class => "label"},
"System User:",
td {-colspan => 2,
-valign => "middle"},
$system_users
];
} else {
print Tr [
td {-valign => "middle",
-class => "label"},
"Username:",
td {-colspan => 2,
-valign => "middle"},
$userid . " (" . $passwd_entry {system_user} . ")",
hidden {-name => "userid",
-value => $userid}
];
} # if
if (!$is_cvsadm) {
print Tr [
td {-valign => "middle",
-class => "label"},
"Password:",
td {-colspan => 2,
-valign => "middle"},
password_field {-class => "inputfield",
-size => 15,
-name => "old_password"}
];
} # if
print Tr ([
td {-valign => "middle",
-class => "label"},
"New Password:",
td {-colspan => 2,
-valign => "middle"},
password_field {-class => "inputfield",
-size => 15,
-name => "new_password"}
]);
if (!$is_cvsadm) {
print Tr [
td {-valign => "middle",
-class => "label"},
"Confirm Password:",
td {-colspan => 2,
-valign => "middle"},
password_field {-class => "inputfield",
-size => 15,
-name => "repeated_password"}
];
} # if
print Tr [
td {-valign => "middle",
-class => "label"},
"Fullname:",
td {-colspan => 2,
-valign => "middle"},
textfield {-class => "inputfield",
-size => 40,
-name => "fullname",
-value => $passwd_entry {fullname}}
];
print Tr [
td {-valign => "middle",
-class => "label"},
"Email:",
td {-colspan => 2,
-valign => "middle"},
textfield {-class => "inputfield",
-size => 40,
-name => "email",
-value => $passwd_entry {email}}
];
my @groups = Groups $cvs_server, $repository;
my $groups;
foreach (@groups) {
my $in_group = UserInGroup $cvs_server, $repository, $userid, $_;
my $checkbox_str;
if ($is_cvsadm) {
$checkbox_str = checkbox {-name => $_,
-checked => $in_group};
} else {
$checkbox_str = checkbox {-name => $_ . "_readonly",
-checked => $in_group,
-label => $_,
-disabled => 1};
print hidden {-name => $_,
-value => "on"} if $in_group;
} # if
$groups .= $checkbox_str . "
";
} # foreach
print Tr [
td {-valign => "middle",
-class => "label"},
"Groups:",
td {-colspan => 2,
-valign => "middle"},
$groups
];
my $reader = "";
my $writer = "";
if (IsReader $cvs_server, $repository, $userid) {
if ($is_cvsadm) {
$reader = checkbox {-name => "${repository}_reader",
-label => "Read access",
-checked => 1};
} else {
$reader = checkbox {-name => "${repository}_reader_readonly",
-label => "Read access",
-checked => 1,
-disabled => 1};
print hidden {-name => "${repository}_reader",
-value => "on"};
} # if
} else {
if ($is_cvsadm) {
$reader = checkbox {-name => "${repository}_reader",
-label => "Read access"};
} else {
$reader = checkbox {-name => "${repository}_reader_readonly",
-label => "Read access",
-disabled => 1};
print hidden {-name => "${repository}_reader",
-value => "off"};
} # if
} # if
if (IsWriter $cvs_server, $repository, $userid) {
if ($is_cvsadm) {
$writer = checkbox {-name => "${repository}_writer",
-label => "Write access",
-checked => 1};
} else {
$writer = checkbox {-name => "${repository}_writer_readonly",
-label => "Write access",
-checked => 1,
-disabled => 1};
print hidden {-name => "${repository}_writer",
-value => "on"};
} # if
} else {
if ($is_cvsadm) {
$writer = checkbox {-name => "${repository}_writer",
-label => "Write access"};
} else {
$writer = checkbox {-name => "${repository}_writer_readonly",
-label => "Write access",
-disabled => 1};
print hidden {-name => "${repository}_writer",
-value => "off"};
} # if
} # if
print Tr [
td {-valign => "middle",
-class => "label"},
$repository,
td {-align => "left",
-width => 200,
-valign => "middle"},
$reader,
td {-align => "left",
-width => 200,
-valign => "middle"},
$writer
];
print start_Tr;
print start_td {
-colspan => 2,
-align => "center"
};
print submit {
-name => "Submit"
};
print end_form;
print end_td;
print start_form {
-action => "login.cgi"
};
print hidden {
-name => "cvs_server",
-value => $cvs_server
};
print hidden {
-name => "repository",
-value => $repository
};
print hidden {
-name => "logout",
-value => "yes"
};
print start_td;
print submit {
-name => "Logout"
};
print end_form;
print end_td;
print end_table;
} # Body
my $result;
if ($is_cvsadm and $needs_login eq "no") {
# Editing other user as cvsadm
Heading (
"setcookie",
defined $euid ? $euid : $userid,
"CVSAdm:$Cvs_server:$repository: Edit User",
"CVS Administration for $Cvs_server:$repository",
"Edit User"
);
} else {
# Need to login
$result = CVSAdm::Login $cvs_server, $repository, $userid, $password;
if ($result == 1) {
if ($userid eq "") {
print redirect "login.cgi?cvs_server=$cvs_server&repository=$repository&errormsg=Please specify a username";
exit $result;
} else {
print redirect "login.cgi?cvs_server=$cvs_server&repository=$repository&errormsg=No such user $userid";
exit $result;
} # if
} elsif ($result == 2) {
print redirect "login.cgi?cvs_server=$cvs_server&repository=$repository&errormsg=Invalid password";
exit $result;
} else {
$action = "setcookie";
} # if
$userid = Heading (
$action,
$userid,
"CVSAdm:$Cvs_server:$repository: Edit User",
"CVS Administration for $Cvs_server:$repository",
"Edit User"
);
} # if
Body;
Footing;
exit;