2 # (c) Petr Baudis <pasky@suse.cz>
8 use lib
qw(/home/repo/repomgr/cgi);
11 my $repo = Git
::RepoCGI
->new('Project Settings');
14 my $name = $cgi->remote_user();
16 if (! -d
"/srv/git/$name.git") {
17 print "<p>Sorry but your project has not finished mirroring yet. If it takes inordinate amount of time, please tell the administrator.</p>\n";
23 my ($email, $url, $desc, $hp, $crypt, $gid, @users);
24 open F
, jailed_file
("/etc/group") or die "load_project failed: $!";
28 next unless (shift eq $name);
31 ($crypt, $gid, $ulist) = @_;
32 @users = split /,/, $ulist;
34 open G
, "/srv/git/$name.git/base_url" or die "base_url failed: $!"; chomp($url = <G
>); close G
;
35 open G
, "/srv/git/$name.git/owner" or die "owner failed: $!"; chomp($email = <G
>); close G
;
36 open G
, "/srv/git/$name.git/description" or die "desc failed: $!"; chomp($desc = <G
>); close G
;
37 open G
, "/srv/git/$name.git/homepage" or die "hp failed: $!"; chomp($hp = <G
>); close G
;
39 return ($email, $url, $desc, $hp, $crypt, $gid, @users);
42 die "not found project $name, that's really weird!";
45 my ($email, $url, $desc, $hp, $crypt, $gid, @users) = load_project
($name);
48 my ($path, $url, $email, $desc, $hp) = @_;
49 open F
, ">$path/base_url" or die "base_url failed: $!"; print F
"$url\n"; close F
;
50 open F
, ">$path/owner" or die "owner failed: $!"; print F
"$email\n"; close F
;
51 open F
, ">$path/description" or die "desc failed: $!"; print F
"$desc\n"; close F
;
52 open F
, ">$path/homepage" or die "hp failed: $!"; print F
"$hp\n"; close F
;
56 my ($gid, $name, $pwd, $xtra) = @_;
57 filedb_atomic_edit
($file,
61 if ($name eq (split /:/)[0]) {
62 s/::([^:]*)$/:$1/ and $xtra = ":$xtra";
63 return "$name:$pwd:$gid:$xtra\n";
72 my ($gid, $name, $pwd, $email, $url, $desc, $hp, @users) = @_;
73 save_proj_data
("/srv/git/$name.git", $url, $email, $desc, $hp);
74 edit_group
($gid, $name, $pwd, join(',', @users));
75 print "<p>Project successfuly updated.</p>\n";
78 if ($cgi->param('email')) {
79 # submitted, let's see
80 # FIXME: racy, do a lock
81 $email = $repo->wparam('email');
82 $url = $repo->wparam('url');
83 $desc = $repo->wparam('desc');
84 $hp = $repo->wparam('hp');
85 @users = grep { $_ =~ /^[a-zA-Z0-9_+-]+$/ } $cgi->param('user');
86 my $pwd = $cgi->param('pwd');
88 $url =~ /^http:\/\
/[a-zA-Z0-9-.]+\/[_\
%a-zA
-Z0
-9.\
/~-]+$/ or
89 $url =~ /^git:\/\
/[a-zA-Z0-9-.]+\/[_\
%a-zA
-Z0
-9.\
/~-]+$/
90 or $repo->err "Invalid URL. Note that only HTTP and Git protocol is supported. If the URL contains funny characters, contact me.";
93 $hp =~ /^http:\/\
/[a-zA-Z0-9-.]+\/[_\
%a-zA
-Z0
-9.\
/~-]+$/
94 or $repo->err "Invalid homepage URL. Note that only HTTP protocol is supported. If the URL contains funny characters, contact me.";
96 $email =~ /^[a-zA-Z0-9+._-]+@[a-zA-Z0-9-.]+$/
97 or $repo->err "Your email sure looks weird...?";
99 or $repo->err "<b>Short</b> description length > 1kb!";
100 unless ($repo->err_check) {
106 update_project
($gid, $name, $pwd, $email, $url, $desc, $hp, @users);
110 my $hesc = html_esc
($desc);
113 <p>Here you can adjust project settings. Go wild. Only you can currently enable access only for a single user at a time so perhaps you will need to click a lot.</p>
115 <p>Project name (w/o the .git suffix): $name</p>
116 <p>Admin password: <input type="password" name="pwd" /> (leave empty to keep it at the current value)</p>
117 <p>E-mail contact: <input type="text" name="email" value="$email" /></p>
118 <p>Repository URL: <input type="text" name="url" value="$url" /></p>
119 <p>Description: <input type="text" name="desc" value="$desc" /></p>
120 <p>Homepage URL: <input type="text" name="hp" value="$hp" /></p>
124 foreach my $user (@users) {
125 print "<li><input type=\"checkbox\" name=\"user\" value=\"$user\" checked=\"1\" /> $user</li>\n";
128 <li>Add user: <input type="text" name="user" /></li>
130 <p><input type="submit" name="y0" value="Update" /></p>