...
|
...
|
@@ -14,8 +14,8 @@ my $debug = 0;
|
14
|
14
|
my $project_re = qr/[a-zA-Z0-9_\-\.]+$/;
|
15
|
15
|
|
16
|
16
|
# User
|
17
|
|
-my $session_user = shift;
|
18
|
|
-die "User not specifed" unless defined $session_user;
|
|
17
|
+my $session_user_id = shift;
|
|
18
|
+die "User not specifed" unless defined $session_user_id;
|
19
|
19
|
|
20
|
20
|
# Application
|
21
|
21
|
my $app = Mojo::Server->new->load_app("$FindBin::Bin/gitprep");
|
...
|
...
|
@@ -47,26 +47,22 @@ die "I don't like newlines in the command: $ssh_original_command\n"
|
47
|
47
|
if $ssh_original_command ne $ssh_original_command_tmp;
|
48
|
48
|
|
49
|
49
|
# Project
|
50
|
|
-my ($verb, $user, $project) = parse_ssh_original_command($ssh_original_command);
|
51
|
|
-sanity($project);
|
|
50
|
+my ($verb, $user_id, $project_id) = parse_ssh_original_command($ssh_original_command);
|
|
51
|
+sanity($project_id);
|
52
|
52
|
|
53
|
53
|
# Can access
|
54
|
54
|
my $can_access;
|
55
|
|
-if ($session_user eq $user) {
|
|
55
|
+if ($session_user_id eq $user_id) {
|
56
|
56
|
$can_access = 1;
|
57
|
57
|
}
|
58
|
58
|
else {
|
59
|
|
- my $row = $app->dbi->model('collaboration')->select(
|
60
|
|
- id => [$user, $project, $session_user]
|
61
|
|
- )->one;
|
62
|
|
-
|
63
|
|
- $can_access = $row ? 1 : 0;
|
|
59
|
+ $can_access = $app->gitprep_api->is_collaborator($user_id, $project_id, $session_user_id);
|
64
|
60
|
}
|
65
|
|
-die qq|User "$session_user" can't access repository "$user/$project.git"\n|
|
|
61
|
+die qq|User "$session_user_id" can't access repository "$user_id/$project_id.git"\n|
|
66
|
62
|
unless $can_access;
|
67
|
63
|
|
68
|
64
|
# Command
|
69
|
|
-my $rep_info = $app->rep_info($user, $project);
|
|
65
|
+my $rep_info = $app->rep_info($user_id, $project_id);
|
70
|
66
|
my $rep_git_dir = $rep_info->{git_dir};
|
71
|
67
|
my $repository = "'$rep_git_dir'";
|
72
|
68
|
my @git_shell_cmd = ("git", "shell", "-c", "$verb $repository");
|
...
|
...
|
@@ -83,10 +79,10 @@ sub parse_ssh_original_command {
|
83
|
79
|
|
84
|
80
|
my $git_commands = "git-upload-pack|git-receive-pack|git-upload-archive";
|
85
|
81
|
if ($ssh_original_command =~ m(^($git_commands) '.*/([a-zA-Z1-9_]+)/([^\/]+?)\.git'$)) {
|
86
|
|
- my ($verb, $user, $project) = ($1, $2, $3);
|
87
|
|
- warn "User:$user, Project:$project" if $debug;
|
88
|
|
- die "invalid repo name: '$project'\n" if $project !~ $project_re;
|
89
|
|
- return ($verb, $user, $project);
|
|
82
|
+ my ($verb, $user_id, $project_id) = ($1, $2, $3);
|
|
83
|
+ warn "User:$user_id, Project:$project_id" if $debug;
|
|
84
|
+ die "invalid repo name: '$project_id'\n" if $project_id !~ $project_re;
|
|
85
|
+ return ($verb, $user_id, $project_id);
|
90
|
86
|
}
|
91
|
87
|
else {
|
92
|
88
|
die "Invalid command: $ssh_original_command\n";
|
...
|
...
|
@@ -94,10 +90,10 @@ sub parse_ssh_original_command {
|
94
|
90
|
}
|
95
|
91
|
|
96
|
92
|
sub sanity {
|
97
|
|
- my $project = shift;
|
98
|
|
- die "'$project' contains bad characters\n" if $project !~ $project_re;
|
99
|
|
- die "'$project' ends with a '/'\n" if $project =~ m(/$);
|
100
|
|
- die "'$project' contains '..'\n" if $project =~ m(\.\.);
|
|
93
|
+ my $project_id = shift;
|
|
94
|
+ die "'$project_id' contains bad characters\n" if $project_id !~ $project_re;
|
|
95
|
+ die "'$project_id' ends with a '/'\n" if $project_id =~ m(/$);
|
|
96
|
+ die "'$project_id' contains '..'\n" if $project_id =~ m(\.\.);
|
101
|
97
|
}
|
102
|
98
|
|
103
|
99
|
=head1 NAME
|