Showing 5 changed files with 66 additions and 46 deletions
+36 -19
lib/Gitprep/API.pm
... ...
@@ -63,26 +63,31 @@ sub check_user_and_password {
63 63
 }
64 64
 
65 65
 sub is_collaborator {
66
-  my ($self, $user, $project, $session_user) = @_;
67
-
68
-  $session_user = $self->cntl->session('user') unless defined $session_user;
69
-  return unless $session_user;
66
+  my ($self, $user_id, $project_id, $collaborator_id) = @_;
67
+  
68
+  my $user_row_id = $self->get_user_row_id($user_id);
69
+  my $project_row_id = $self->app->dbi->model('project')->select(
70
+    where => {user => $user_row_id, id => $project_id}
71
+  )->value;
72
+  my $collaborator_row_id = $self->get_user_row_id($collaborator_id);
70 73
   
71 74
   my $row = $self->app->dbi->model('collaboration')->select(
72
-    id => [$user, $project, $session_user]
75
+    where => {project => $project_row_id, collaborator => $collaborator_row_id}
73 76
   )->one;
74 77
   
75 78
   return $row ? 1 : 0;
76 79
 }
77 80
 
78 81
 sub can_access_private_project {
79
-  my ($self, $user, $project) = @_;
82
+  my ($self, $user_id, $project_id) = @_;
80 83
 
81
-  my $session_user = $self->cntl->session('user');
82
-  $session_user = '' unless defined $session_user;
84
+  my $session_user_row_id = $self->cntl->session('user_row_id');
85
+  my $session_user_id = $self->app->dbi->model('user')->select(
86
+    'id', where => {row_id => $session_user_row_id}
87
+  )->value;
83 88
   
84 89
   my $is_valid =
85
-    ($user eq $session_user || $self->is_collaborator($user, $project))
90
+    ($user_id eq $session_user_id || $self->is_collaborator($user_id, $project_id, $session_user_id))
86 91
     && $self->logined;
87 92
   
88 93
   return $is_valid;
... ...
@@ -103,30 +108,42 @@ sub logined_admin {
103 108
   my $c = $self->cntl;
104 109
   
105 110
   # Check logined as admin
106
-  my $user = $c->session('user');
111
+  my $session_user_id = $self->session_user_id;
112
+  
113
+  return $self->app->manager->is_admin($session_user_id) && $self->logined($session_user_id);
114
+}
115
+
116
+sub session_user_id {
117
+  my $self = shift;
118
+  
119
+  my $session_user_row_id = $self->cntl->session('user_row_id');
120
+  my $session_user_id = $self->app->dbi->model('user')->select(
121
+    'id', where => {row_id => $session_user_row_id}
122
+  )->value;
107 123
   
108
-  return $self->app->manager->is_admin($user) && $self->logined($user);
124
+  return $session_user_id;
109 125
 }
110 126
 
111 127
 sub logined {
112
-  my ($self, $user) = @_;
128
+  my ($self, $user_id) = @_;
113 129
   
114 130
   my $c = $self->cntl;
115
-  
116 131
   my $dbi = $c->app->dbi;
117 132
   
118
-  my $current_user = $c->session('user');
133
+  my $session_user_row_id = $c->session('user_row_id');
134
+  my $session_user_id = $self->session_user_id;
119 135
   my $password = $c->session('password');
120 136
   return unless defined $password;
121 137
   
122
-  my $correct_password
123
-    = $dbi->model('user')->select('password', id => $current_user)->value;
138
+  my $correct_password = $dbi->model('user')->select(
139
+    'password',
140
+    where => {row_id => $session_user_row_id}
141
+  )->value;
124 142
   return unless defined $correct_password;
125 143
   
126 144
   my $logined;
127
-  
128
-  if (defined $user) {
129
-    $logined = $user eq $current_user && $password eq $correct_password;
145
+  if (defined $user_id) {
146
+    $logined = $user_id eq $session_user_id && $password eq $correct_password;
130 147
   }
131 148
   else {
132 149
     $logined = $password eq $correct_password
-1
templates/auto/_login.html.ep
... ...
@@ -56,7 +56,6 @@
56 56
       # Login success
57 57
       my $password_encrypted = $user->{password};
58 58
       my $admin = $user->{admin};
59
-      session(user => $id); # Deprecated!
60 59
       session(user_row_id => $user->{row_id});
61 60
       session(password => $password_encrypted);
62 61
       
+10 -9
templates/auto/_new.html.ep
... ...
@@ -1,7 +1,8 @@
1 1
 <%
2 2
   # API
3 3
   my $api = gitprep_api;
4
-  my $session_user = session('user');
4
+  my $session_user_row_id = session('user_row_id');
5
+  my $session_user = app->dbi->model('user')->select(where => {row_id => $session_user_row_id})->one;
5 6
 
6 7
   my $op = param('op') || '';
7 8
 
... ...
@@ -14,7 +15,7 @@
14 15
   my $errors;
15 16
   if ($op eq 'create') {
16 17
     # Parameters
17
-    my $project = param('project');
18
+    my $project_id = param('project');
18 19
     my $description = param('description');
19 20
     my $readme = param('readme');
20 21
     my $private = param('private');
... ...
@@ -26,13 +27,13 @@
26 27
     my $validation = $vc->validation;
27 28
     
28 29
     # "project"
29
-    if (!(defined $project && length $project)) {
30
+    if (!(defined $project_id && length $project_id)) {
30 31
       $validation->add_failed(project => 'Repository name is empty');
31 32
     }
32
-    elsif (!$vc->check($project, 'project_name')) {
33
+    elsif (!$vc->check($project_id, 'project_name')) {
33 34
       $validation->add_failed(project => 'Invalid repository name');
34 35
     }
35
-    elsif (app->manager->exists_project($session_user, $project)) {
36
+    elsif (app->manager->exists_project($session_user->{id}, $project_id)) {
36 37
       $validation->add_failed(project => 'Repository already exists');
37 38
     }
38 39
     
... ...
@@ -56,8 +57,8 @@
56 57
       # Create repository
57 58
       eval {
58 59
         $manager->create_project(
59
-          $session_user,
60
-          $project,
60
+          $session_user->{id},
61
+          $project_id,
61 62
           {description => $description, readme => $readme, private => $private}
62 63
         );
63 64
       };
... ...
@@ -67,7 +68,7 @@
67 68
         $errors = ['Internal error'];
68 69
       }
69 70
       else {
70
-        $self->redirect_to("/$session_user/$project");
71
+        $self->redirect_to("/$session_user->{id}/$project_id");
71 72
         return;
72 73
       }
73 74
     }
... ...
@@ -112,7 +113,7 @@
112 113
           </tr>
113 114
           <tr>
114 115
             <td>
115
-              <i class="icon-user"></i><%= $session_user %>
116
+              <i class="icon-user"></i><%= $session_user->{id} %>
116 117
             </td>
117 118
             <td style="padding:0 10px">
118 119
               /
+12 -9
templates/fork.html.ep
... ...
@@ -2,10 +2,13 @@
2 2
   # API
3 3
   my $api = gitprep_api;
4 4
   
5
-  # Paramters
6
-  my $user = param('user');
7
-  my $project = param('project');
8
-  my $current_user = session('user');
5
+  # Parameters
6
+  my $user_id = param('user');
7
+  my $project_id = param('project');
8
+  my $session_user_row_id = session('user_row_id');
9
+  my $session_user = app->dbi->model('user')->select(
10
+    where => {row_id => $session_user_row_id}
11
+  )->one;
9 12
   
10 13
   # Can fork?
11 14
   unless ($api->logined) {
... ...
@@ -14,20 +17,20 @@
14 17
   }
15 18
   
16 19
   # Repository is already exists
17
-  if (app->manager->exists_project($current_user, $project)) {
18
-    $self->redirect_to("/$current_user/$project");
20
+  if (app->manager->exists_project($session_user->{id}, $project_id)) {
21
+    $self->redirect_to("/$session_user->{id}/$project_id");
19 22
     return;
20 23
   }
21 24
   # Fork
22 25
   else {
23
-    eval { app->manager->fork_project($current_user, $user, $project) };
26
+    eval { app->manager->fork_project($session_user->{id}, $user_id, $project_id) };
24 27
     if (my $e = $@) {
25 28
       $self->reply->exception('Internal Error');
26 29
       app->log->error(url_for . ": $e");
27 30
     }
28 31
     else {
29
-      flash(message => "Repository is forked from /$user/$project.");
30
-      $self->redirect_to("/$current_user/$project");
32
+      flash(message => "Repository is forked from /$user_id/$project_id.");
33
+      $self->redirect_to("/$session_user->{id}/$project_id");
31 34
     }
32 35
     return;
33 36
   }
+8 -8
templates/include/header.html.ep
... ...
@@ -2,8 +2,8 @@
2 2
   my $api = gitprep_api;
3 3
   my $logined = $api->logined;
4 4
 
5
-  my $current_user_row_id = session('user_row_id');
6
-  my $current_user = app->dbi->model('user')->select(where => {row_id => $current_user_row_id})->one;
5
+  my $session_user_row_id = session('user_row_id');
6
+  my $session_user = app->dbi->model('user')->select(where => {row_id => $session_user_row_id})->one;
7 7
   
8 8
   my $user_id = $self->param('user');
9 9
 
... ...
@@ -33,21 +33,21 @@
33 33
     <div class="header-right">
34 34
       <div class="header-rigth-container">
35 35
         % if ($api->logined) {
36
-          % unless ($current_user->{id} eq 'admin') {
36
+          % unless ($session_user->{id} eq 'admin') {
37 37
             <div class="header-btn-container">
38 38
               <a class="btn btn-small" href="<%= url_for("/_new") %>">Create a new repo</a>
39 39
             </div>
40 40
             <div class="header-btn-container">
41
-              <a class="btn btn-small" href="<%= url_for("/$current_user->{id}/_settings") %>">Account Settings</a>
41
+              <a class="btn btn-small" href="<%= url_for("/$session_user->{id}/_settings") %>">Account Settings</a>
42 42
             </div>
43 43
           % }
44 44
           % my $url = url_with->to_abs;
45 45
           <div class="header-btn-container">
46 46
             <a class="btn btn-small" href="<%= url_for("/_logout?from=$url") %>">Sign out</a>
47 47
           </div>
48
-          <!-- Logined as <%= $current_user->{id} %> -->
48
+          <!-- Logined as <%= $session_user->{id} %> -->
49 49
           <div class="header-login-container">
50
-            <i class="icon-user"></i><a href="<%= url_for("/$current_user->{id}") %>"><%= $current_user->{id} %></a>
50
+            <i class="icon-user"></i><a href="<%= url_for("/$session_user->{id}") %>"><%= $session_user->{id} %></a>
51 51
           </div>
52 52
         % } else {
53 53
           <div class="header-btn-container">
... ...
@@ -92,7 +92,7 @@
92 92
         <div class="project-header-right-container">
93 93
           % if (defined $project_id) {
94 94
             <div class="project-header-btn-container">
95
-              % if ($logined && $current_user->{id} ne $user_id ) {
95
+              % if ($logined && $session_user->{id} ne $user_id ) {
96 96
                 <a href="<%= url_for("/$user_id/$project_id/fork") %>" class="btn">Fork</a>
97 97
               % } else {
98 98
                 <button class="btn disabled" disabled>Fork</button>
... ...
@@ -128,7 +128,7 @@
128 128
                   Graph
129 129
                 </a>
130 130
               </li>
131
-              % if ($logined && $user_id eq session('user')) {
131
+              % if ($logined && $user_id eq $session_user->{id}) {
132 132
                 <li class="<%= $tab eq 'settings' ? 'active' :  '' %>">
133 133
                   <a href="<%= url_for("/$user_id/$project_id/settings") %>">
134 134
                     <i class="icon-cog"></i>