Showing 11 changed files with 78 additions and 91 deletions
+1 -65
lib/Gitprep/API.pm
... ...
@@ -1,28 +1,13 @@
1 1
 package Gitprep::API;
2 2
 use Mojo::Base -base;
3 3
 
4
-use Carp ();
5
-use File::Basename ();
6 4
 use Encode qw/encode decode/;
7 5
 use Digest::MD5 'md5_hex';
8 6
 
9
-sub croak { Carp::croak(@_) }
10
-sub dirname { File::Basename::dirname(@_) }
11
-
12 7
 has 'cntl';
13 8
 
14 9
 sub app { shift->cntl->app }
15 10
 
16
-sub admin_user {
17
-  my $self = shift;
18
-  
19
-  # Admin user
20
-  my $admin_user = $self->app->dbi->model('user')
21
-    ->select('id', where => {admin => 1})->value;
22
-  
23
-  return $admin_user;
24
-}
25
-
26 11
 sub encrypt_password {
27 12
   my ($self, $password) = @_;
28 13
   
... ...
@@ -47,33 +32,6 @@ sub new {
47 32
   return $self;
48 33
 }
49 34
 
50
-sub exists_admin {
51
-  my $self = shift;
52
- 
53
-  my $row = $self->app->dbi->model('user')
54
-    ->select(where => {admin => 1})->one;
55
-
56
-  return $row ? 1 : 0;;
57
-}
58
-
59
-sub root_ns {
60
-  my ($self, $root) = @_;
61
-
62
-  $root =~ s/^\///;
63
-  
64
-  return $root;
65
-}
66
-
67
-sub is_admin {
68
-  my ($self, $user) = @_;
69
-  
70
-  # Check admin
71
-  my $is_admin = $self->app->dbi->model('user')
72
-    ->select('admin', id => $user)->value;
73
-  
74
-  return $is_admin;
75
-}
76
-
77 35
 sub logined_admin {
78 36
   my $self = shift;
79 37
 
... ...
@@ -83,7 +41,7 @@ sub logined_admin {
83 41
   # Check logined as admin
84 42
   my $user = $c->session('user');
85 43
   
86
-  return $self->is_admin($user) && $self->logined;
44
+  return $self->app->manager->is_admin($user) && $self->logined($user);
87 45
 }
88 46
 
89 47
 sub logined {
... ...
@@ -113,18 +71,6 @@ sub logined {
113 71
   return $logined;
114 72
 }
115 73
 
116
-sub users {
117
-  my $self = shift;
118
- 
119
-  my $users = $self->app->dbi->model('user')->select(
120
-    'id',
121
-    where => [':admin{<>}',{admin => 1}],
122
-    append => 'order by id'
123
-  )->all;
124
-  
125
-  return $users;
126
-}
127
-
128 74
 sub params {
129 75
   my $self = shift;
130 76
   
... ...
@@ -135,15 +81,5 @@ sub params {
135 81
   return \%params;
136 82
 }
137 83
 
138
-sub default_branch {
139
-  my ($self, $user, $project) = @_;
140
-  
141
-  my $default_branch = $self->app->dbi->model('project')
142
-    ->select('default_branch', id => [$user, $project])
143
-    ->value;
144
-  
145
-  return $default_branch;
146
-}
147
-
148 84
 1;
149 85
 
+1 -8
lib/Gitprep/Git.pm
... ...
@@ -753,14 +753,6 @@ sub references {
753 753
   return \%refs;
754 754
 }
755 755
 
756
-sub root_ns {
757
-  my ($self, $root) = @_;
758
-
759
-  $root =~ s/^\///;
760
-  
761
-  return $root;
762
-}
763
-
764 756
 sub path_by_id {
765 757
   my ($self, $user, $project, $base, $hash) = @_;
766 758
   
... ...
@@ -1133,6 +1125,7 @@ sub get_commit {
1133 1125
   # Parse commit
1134 1126
   local $/ = "\0";
1135 1127
   my $content = $self->_dec(scalar <$fh>);
1128
+  return unless defined $content;
1136 1129
   my $commit = $self->parse_commit_text($content, 1);
1137 1130
   close $fh;
1138 1131
 
+41
lib/Gitprep/Manager.pm
... ...
@@ -9,6 +9,25 @@ use Encode 'encode';
9 9
 
10 10
 has 'app';
11 11
 
12
+sub admin_user {
13
+  my $self = shift;
14
+  
15
+  # Admin user
16
+  my $admin_user = $self->app->dbi->model('user')
17
+    ->select('id', where => {admin => 1})->value;
18
+  
19
+  return $admin_user;
20
+}
21
+
22
+sub exists_admin {
23
+  my $self = shift;
24
+ 
25
+  my $row = $self->app->dbi->model('user')
26
+    ->select(where => {admin => 1})->one;
27
+
28
+  return $row ? 1 : 0;;
29
+}
30
+
12 31
 sub default_branch {
13 32
   my ($self, $user, $project) = @_;
14 33
   
... ...
@@ -19,6 +38,16 @@ sub default_branch {
19 38
   return $default_branch;
20 39
 }
21 40
 
41
+sub is_admin {
42
+  my ($self, $user) = @_;
43
+  
44
+  # Check admin
45
+  my $is_admin = $self->app->dbi->model('user')
46
+    ->select('admin', id => $user)->value;
47
+  
48
+  return $is_admin;
49
+}
50
+
22 51
 sub members {
23 52
   my ($self, $user, $project) = @_;
24 53
   
... ...
@@ -151,6 +180,18 @@ sub original_user {
151 180
   return $original_user;
152 181
 }
153 182
 
183
+sub users {
184
+  my $self = shift;
185
+ 
186
+  my $users = $self->app->dbi->model('user')->select(
187
+    'id',
188
+    where => [':admin{<>}',{admin => 1}],
189
+    append => 'order by id'
190
+  )->all;
191
+  
192
+  return $users;
193
+}
194
+
154 195
 sub _delete_db_user {
155 196
   my ($self, $user) = @_;
156 197
   
+12 -4
templates/archive.html.ep
... ...
@@ -27,8 +27,11 @@
27 27
 
28 28
   # Object type
29 29
   my $type = $git->object_type($user, $project, "$rev^{}");
30
-  if (!$type) { $api->croak('Object does not exist') }
31
-  elsif ($type eq 'blob') { $api->croak('Object is not a tree-ish') }
30
+  if (!$type || $type eq 'blob') {
31
+    $self->render_not_found;
32
+    $self->finish_rendering;
33
+    return;
34
+  }
32 35
   
33 36
   my $name = "$project-$rev";
34 37
   my $file = "$name.$ext";
... ...
@@ -52,8 +55,13 @@
52 55
   }
53 56
   $file =~ s/(["\\])/\\$1/g;
54 57
 
55
-  open my $fh, '-|', $cmd
56
-    or $api->croak('Execute git-archive failed');
58
+  my $success = open my $fh, '-|', $cmd;
59
+  
60
+  unless ($success) {
61
+    $self->render_exeption;
62
+    $self->finish_rendering;
63
+    return;
64
+  }
57 65
   
58 66
   # Write chunk
59 67
   $self->res->headers->content_type($content_type);
+1 -2
templates/auto/_admin/users.html.ep
... ...
@@ -1,6 +1,5 @@
1 1
 <%
2
-  my $api = gitprep_api;
3
-  my $users = $api->users;
2
+  my $users = app->manager->users;
4 3
 %>
5 4
 
6 5
 % layout 'common';
+1 -1
templates/auto/_start.html.ep
... ...
@@ -12,7 +12,7 @@
12 12
     sleep 3;
13 13
     
14 14
     # Check existence admin user
15
-    my $admin_user = app->dbi->model('user')->select(id => 'admin')->one;
15
+    my $admin_user = app->manager->admin_user;
16 16
     if (defined $admin_user) { $errors = ['admin user already exists'] }
17 17
     else {
18 18
       # Validation
+2 -2
templates/auto/index.html.ep
... ...
@@ -1,8 +1,8 @@
1 1
 <%
2 2
   my $api = gitprep_api;
3
-  my $users = $api->users;
3
+  my $users = app->manager->users;
4 4
   
5
-  unless ($api->exists_admin) {
5
+  unless (app->manager->exists_admin) {
6 6
     $self->redirect_to('/_start');
7 7
     return 1;
8 8
   }
+1 -4
templates/auto/reset-password.html.ep
... ...
@@ -15,7 +15,7 @@
15 15
 
16 16
   # Reset password
17 17
   my $reset_password_conf_on;
18
-  my $admin_user = $api->admin_user;
18
+  my $admin_user = app->manager->admin_user;
19 19
   # Reset password config
20 20
   if (app->config->{admin}{reset_password}) {
21 21
     $user = $admin_user;
... ...
@@ -44,9 +44,6 @@
44 44
     # Sleep to protect password atack
45 45
     sleep 3;
46 46
     
47
-    # Check existence admin user
48
-    my $admin_user = app->dbi->model('user')->select(id => $user)->one;
49
-    
50 47
     # Reset password
51 48
     if ($admin_user) {
52 49
       # Validation
+6 -2
templates/commit.html.ep
... ...
@@ -12,8 +12,12 @@
12 12
   my $git = app->git;
13 13
   
14 14
   # Commit
15
-  my $commit = $git->get_commit($user, $project, $id)
16
-    or $api->croak('Unknown commit object');
15
+  my $commit = $git->get_commit($user, $project, $id);
16
+  unless ($commit) {
17
+    $self->render_not_found;
18
+    $self->finish_rendering;
19
+    return;
20
+  }
17 21
   my $author_date
18 22
     = $git->parse_date($commit->{author_epoch}, $commit->{author_tz});
19 23
   my $committer_date
+7 -2
templates/compare.html.ep
... ...
@@ -29,8 +29,13 @@
29 29
   my $start_commit = $git->separated_commit($user, $project, $rev1, $rev2);
30 30
 
31 31
   # End commit
32
-  my $end_commit = $git->get_commit($user, $project, $rev2)
33
-    or $api->croak('Unknown commit revision');
32
+  my $end_commit = $git->get_commit($user, $project, $rev2);
33
+  
34
+  if (!$start_commit || !$end_commit) {
35
+    $self->render_not_found;
36
+    $self->finish_rendering;
37
+    return;
38
+  }
34 39
   
35 40
   # Diff tree
36 41
   my $difftrees = $git->difftree(
+5 -1
templates/settings.html.ep
... ...
@@ -8,7 +8,11 @@
8 8
 
9 9
   my $op = param('op') || '';
10 10
   
11
-  $api->croak("Fobbiden") if !$user_is_valid;
11
+  unless ($user_is_valid) {
12
+    $self->render_exception('Forbidden');
13
+    $self->res->code(403);
14
+    return;
15
+  }
12 16
   
13 17
   if ($op eq 'rename-project') {
14 18