Initial add of defaria.com
[clearscm.git] / defaria.com / cvsadm / edituser.cgi
1 #!/usr/bin/perl
2 ################################################################################
3 #
4 # File:         cvsadm/edituser.cgi
5 # Description:  Provides the edit user screen for cvsadm
6 # Author:       Andrew@DeFaria.com
7 # Created:      Thu Jul  7 16:54:07 PDT 2005
8 # Modified:
9 # Language:     Perl
10 #
11 # (c) Copyright 2005, Andrew@DeFaria.com, all rights reserved.
12 #
13 ################################################################################
14 use strict;
15 use warnings;
16
17 use CGI qw (:standard *table start_Tr end_Tr start_td end_td start_div end_div);
18 use CGI::Carp "fatalsToBrowser";
19 use CVSAdm;
20
21 my $cvs_server  = param "cvs_server";
22 my $repository  = param "repository";
23 my $Cvs_server  = ucfirst $cvs_server;
24 my $userid      = param "userid";
25 my $password    = param "password";
26 my $action;
27 my $euid        = cookie "CVSAdmUser";
28 my $is_cvsadm;
29 my $needs_login;
30
31 if (defined $euid) {
32   $is_cvsadm    = IsAdmin $cvs_server, $repository, $euid;
33   $needs_login = "no";
34 } else {
35   $is_cvsadm    = IsAdmin $cvs_server, $repository, $userid;
36   $needs_login = "yes";
37 } # if
38
39 sub Body {
40   my %passwd_entry = PasswdEntry $cvs_server, $repository, $userid;
41
42   if ($is_cvsadm) {
43     print "<center>";
44     print start_form {
45       -action   => "admin.cgi"
46     };
47     print hidden {
48       -name     => "cvs_server",
49       -value    => $cvs_server
50     };
51     print hidden {
52       -name     => "repository",
53       -value    => $repository
54     };
55     print hidden {
56       -name     => "userid",
57       -value    => $userid
58     };
59     print submit {
60       -name     => "Admin"
61     };
62     print end_form;
63     print "</center>";
64   } # if
65
66   print start_table {
67     -align              => "center",
68     -bgcolor            => "white",
69     -border             => 0,
70     -cellspacing        => 0,
71     -cellpadding        => 2,
72     -width              => "50%"};
73
74   print start_form {
75     -action     => "modifyuser.cgi",
76     -onSubmit   => "return validate_user (this);"
77   };
78   print hidden {
79     -name       => "cvs_server",
80     -value      => $cvs_server
81   };
82   print hidden {
83     -name       => "repository",
84     -value      => $repository
85   };
86
87   if ($is_cvsadm) {
88     my @sysusers        = SystemUsers $cvs_server, $repository;
89     my $system_user     = SystemUser  $cvs_server, $repository, $userid;
90     my $system_users    = popup_menu {-name     => "sysusers",
91                                       -values   => \@sysusers,
92                                       -class    => "inputfield",
93                                       -default  => $system_user};
94     print Tr [
95       td {-valign               => "middle",
96           -class                => "label"},
97         "Username:",
98       td {-colspan              => 2,
99           -valign               => "middle"},
100           $userid,
101         hidden {-name           => "userid",
102                 -value          => $userid}
103     ];
104     print Tr [
105       td {-valign               => "middle",
106           -class                => "label"},
107         "System User:",
108       td {-colspan              => 2,
109         -valign                 => "middle"},
110           $system_users
111     ];
112   } else {
113     print Tr [
114       td {-valign               => "middle",
115           -class                => "label"},
116         "Username:",
117       td {-colspan              => 2,
118         -valign                 => "middle"},
119           $userid . " (" . $passwd_entry {system_user} . ")",
120         hidden {-name           => "userid",
121                 -value          => $userid}
122     ];
123   } # if
124
125   if (!$is_cvsadm) {
126     print Tr [
127       td {-valign               => "middle",
128           -class                => "label"},
129         "Password:",
130       td {-colspan              => 2,
131           -valign               => "middle"},
132         password_field {-class  => "inputfield",
133                         -size   => 15,
134                         -name   => "old_password"}
135     ];
136   } # if
137
138   print Tr ([
139     td {-valign         => "middle",
140         -class          => "label"},
141       "New Password:",
142     td {-colspan        => 2,
143         -valign         => "middle"},
144       password_field {-class    => "inputfield",
145                       -size     => 15,
146                       -name     => "new_password"}
147   ]);
148   if (!$is_cvsadm) {
149     print Tr [
150       td {-valign               => "middle",
151           -class                => "label"},
152         "Confirm Password:",
153       td {-colspan      => 2,
154           -valign               => "middle"},
155         password_field {-class  => "inputfield",
156                       -size     => 15,
157                       -name     => "repeated_password"}
158     ];
159   } # if
160   print Tr [
161     td {-valign         => "middle",
162         -class          => "label"},
163       "Fullname:",
164     td {-colspan        => 2,
165         -valign         => "middle"},
166       textfield {-class => "inputfield",
167                  -size  => 40,
168                  -name  => "fullname",
169                  -value => $passwd_entry {fullname}}
170   ];
171   print Tr [
172     td {-valign         => "middle",
173         -class          => "label"},
174       "Email:",
175     td {-colspan        => 2,
176         -valign         => "middle"},
177       textfield {-class => "inputfield",
178                  -size  => 40,
179                  -name  => "email",
180                  -value => $passwd_entry {email}}
181   ];
182
183   my @groups = Groups $cvs_server, $repository;
184   my $groups;
185
186   foreach (@groups) {
187     my $in_group = UserInGroup $cvs_server, $repository, $userid, $_;
188     my $checkbox_str;
189     if ($is_cvsadm) {
190       $checkbox_str = checkbox {-name           => $_,
191                                 -checked        => $in_group};
192     } else {
193       $checkbox_str = checkbox {-name           => $_ . "_readonly",
194                                 -checked        => $in_group,
195                                 -label          => $_,
196                                 -disabled       => 1};
197       print hidden {-name                       => $_,
198                     -value                      => "on"} if $in_group;
199     } # if
200     $groups .= $checkbox_str . "<br>";
201   } # foreach
202
203   print Tr [
204     td {-valign         => "middle",
205         -class          => "label"},
206       "Groups:",
207     td {-colspan        => 2,
208         -valign         => "middle"},
209           $groups
210   ];
211
212   my $reader = "";
213   my $writer = "";
214
215   if (IsReader $cvs_server, $repository, $userid) {
216     if ($is_cvsadm) {
217       $reader = checkbox {-name         => "${repository}_reader",
218                           -label        => "Read access",
219                           -checked      => 1};
220     } else {
221       $reader = checkbox {-name         => "${repository}_reader_readonly",
222                           -label        => "Read access",
223                           -checked      => 1,
224                           -disabled     => 1};
225       print hidden {-name               => "${repository}_reader",
226                     -value              => "on"};
227     } # if
228   } else {
229     if ($is_cvsadm) {
230       $reader = checkbox {-name         => "${repository}_reader",
231                           -label        => "Read access"};
232     } else {
233       $reader = checkbox {-name         => "${repository}_reader_readonly",
234                           -label        => "Read access",
235                           -disabled     => 1};
236       print hidden {-name               => "${repository}_reader",
237                     -value              => "off"};
238     } # if
239   } # if
240
241   if (IsWriter $cvs_server, $repository, $userid) {
242     if ($is_cvsadm) {
243       $writer = checkbox {-name         => "${repository}_writer",
244                           -label        => "Write access",
245                           -checked      => 1};
246     } else {
247       $writer = checkbox {-name         => "${repository}_writer_readonly",
248                           -label        => "Write access",
249                           -checked      => 1,
250                           -disabled     => 1};
251       print hidden {-name               => "${repository}_writer",
252                     -value              => "on"};
253     } # if
254   } else {
255     if ($is_cvsadm) {
256       $writer = checkbox {-name         => "${repository}_writer",
257                           -label        => "Write access"};
258     } else {
259       $writer = checkbox {-name         => "${repository}_writer_readonly",
260                           -label        => "Write access",
261                           -disabled     => 1};
262       print hidden {-name               => "${repository}_writer",
263                     -value              => "off"};
264     } # if
265   } # if
266
267   print Tr [
268     td {-valign => "middle",
269         -class  => "label"},
270       $repository,
271     td {-align  => "left",
272         -width  => 200,
273         -valign => "middle"},
274       $reader,
275     td {-align  => "left",
276         -width  => 200,
277         -valign => "middle"},
278       $writer
279   ];
280
281   print start_Tr;
282   print start_td {
283     -colspan    => 2,
284     -align      => "center"
285   };
286   print submit {
287     -name       => "Submit"
288   };
289   print end_form;
290   print end_td;
291   print start_form {
292     -action     => "login.cgi"
293   };
294   print hidden {
295     -name       => "cvs_server",
296     -value      => $cvs_server
297   };
298   print hidden {
299     -name       => "repository",
300     -value      => $repository
301   };
302   print hidden {
303     -name       => "logout",
304     -value      => "yes"
305   };
306   print start_td;
307   print submit {
308     -name       => "Logout"
309   };
310   print end_form;
311   print end_td;
312   print end_table;
313 } # Body
314
315 my $result;
316
317 if ($is_cvsadm and $needs_login eq "no") {
318   # Editing other user as cvsadm
319   Heading (
320            "setcookie",
321            defined $euid ? $euid : $userid,
322            "CVSAdm:$Cvs_server:$repository: Edit User",
323            "CVS Administration for $Cvs_server:$repository",
324            "Edit User"
325           );
326 } else {
327   # Need to login
328   $result = CVSAdm::Login $cvs_server, $repository, $userid, $password;
329
330   if ($result == 1) {
331     if ($userid eq "") {
332       print redirect "login.cgi?cvs_server=$cvs_server&repository=$repository&errormsg=Please specify a username";
333       exit $result;
334     } else {
335       print redirect "login.cgi?cvs_server=$cvs_server&repository=$repository&errormsg=No such user $userid";
336       exit $result;
337     } # if
338   } elsif ($result == 2) {
339     print redirect "login.cgi?cvs_server=$cvs_server&repository=$repository&errormsg=Invalid password";
340     exit $result;
341   } else {
342     $action = "setcookie";
343   } # if
344   $userid = Heading (
345                      $action,
346                      $userid,
347                      "CVSAdm:$Cvs_server:$repository: Edit User",
348                      "CVS Administration for $Cvs_server:$repository",
349                      "Edit User"
350                     );
351 } # if
352
353 Body;
354 Footing;
355
356 exit;