Showing 8 changed files with 83 additions and 26 deletions
+1
CHANGES
... ...
@@ -9,6 +9,7 @@
9 9
     and move this feature to project settings page.
10 10
   - setup.sh is renamed to setup_module
11 11
   - separete database creating logic to setup_database script
12
+  - add name and mail column to user table. mail is required for user registration.
12 13
   
13 14
 1.12 (7 Feb 2016)
14 15
   - Catch up latest Github design.
-8
LICENSE
... ...
@@ -1,8 +0,0 @@
1
-Copyright 2012-2013 Yuki Kimoto. All rights reserved.
2
-
3
-This program is free software; you can redistribute it and/or modify it
4
-under the same terms of either:
5
-
6
-  a) the GNU General Public License as published by the Free Software Foundation; either version 1, or (at your option) any later version, or
7
-
8
-  b) the "Artistic License". 
+13 -2
README.md
... ...
@@ -446,6 +446,13 @@ If you install perl 5.10.1+ by perlbrew, you can install latest GitPrep.
446 446
 
447 447
 ### I know information about GitPrep 2.0 upgrading.
448 448
 
449
+You can upgrade GitPrep 2.0 the following command.
450
+
451
+    ./setup_module
452
+    ./setup_database
453
+
454
+And you should know the following small changes.
455
+
449 456
 **1. X-Forwarded-HTTPS header is deprecated. use  X-Forwarded-Proto header.**
450 457
     
451 458
     # This is deprecated in GitPrep 2.0
... ...
@@ -462,7 +469,7 @@ and move this feature to project settings page.
462 469
     # Go to settings page in your project
463 470
     /kimoto/gitprep/settings
464 471
 
465
-**2. remove [basic]show_ignore_space_change_link option**
472
+**3. remove [basic]show_ignore_space_change_link option**
466 473
 
467 474
 remove [basic]show_ignore_space_change_link option.
468 475
 but enable this feature on in project settings page.
... ...
@@ -470,7 +477,7 @@ but enable this feature on in project settings page.
470 477
     # Go to settings page in your project
471 478
     /kimoto/gitprep/settings
472 479
 
473
-**3. remove [basic]encoding_suspects option**
480
+**4. remove [basic]encoding_suspects option**
474 481
 
475 482
 remove [basic]encoding_suspects option
476 483
 and move this feature to project settings page.
... ...
@@ -478,6 +485,10 @@ and move this feature to project settings page.
478 485
     # Go to settings page in your project
479 486
     /kimoto/gitprep/settings
480 487
 
488
+**5. mail is required for user registration.
489
+
490
+mail address is require for user registration.
491
+
481 492
 ## For Developer
482 493
 
483 494
 If you are a developer, you can start the application in development mode.
+22 -2
lib/Gitprep/Manager.pm
... ...
@@ -311,6 +311,13 @@ create table user (
311 311
 EOS
312 312
     $dbi->execute($sql);
313 313
   };
314
+  
315
+  # Check mail column
316
+  my $not_exists_user_mail;
317
+  eval { $dbi->select('mail', table => 'user') };
318
+  if ($@) {
319
+    $not_exists_user_mail = 1;
320
+  }
314 321
 
315 322
   # Create user columns
316 323
   my $user_columns = [
... ...
@@ -323,7 +330,7 @@ EOS
323 330
   for my $column (@$user_columns) {
324 331
     eval { $dbi->execute("alter table user add column $column") };
325 332
   }
326
-  
333
+
327 334
   # Check user table
328 335
   eval { $dbi->select([qw/row_id id admin password salt mail name/], table => 'user') };
329 336
   if ($@) {
... ...
@@ -331,7 +338,20 @@ EOS
331 338
     $self->app->log->error($error);
332 339
     croak $error;
333 340
   }
334
-
341
+  
342
+  # If mail is empty, id is copied to mail for uniqueness
343
+  my $user_ids = $dbi->select('id', table => 'user', where => {mail => ''})->values;
344
+  for my $user_id (@$user_ids) {
345
+    $dbi->update({mail => "$user_id\@gitprep.example"}, table => 'user', where => {id => $user_id});
346
+  }
347
+  
348
+  # add unique to mail
349
+  eval { $dbi->execute("create unique index user__mail on user(mail)") };
350
+  my $created_user_mail_index = $dbi->execute("select * from sqlite_master where type = 'index' and name = 'user__mail'")->one;
351
+  unless ($created_user_mail_index) {
352
+    croak "Can't create user__mail index";
353
+  }
354
+  
335 355
   # Create ssh_public_key table
336 356
   eval {
337 357
     my $sql = <<"EOS";
+35 -2
templates/auto/_admin/user/create.html.ep
... ...
@@ -8,6 +8,8 @@
8 8
   
9 9
     # Parameters
10 10
     my $id = param('id');
11
+    my $name = param('name');
12
+    my $mail = param('mail');
11 13
     my $password = param('password');
12 14
     my $password2 = param('password2');
13 15
     
... ...
@@ -34,6 +36,23 @@
34 36
       }
35 37
     }
36 38
     
39
+    # "name" check
40
+    $name //= '';
41
+    
42
+    # "mail" check
43
+    if (!(defined $mail && length $mail)) {
44
+      $validation->add_failed(mail => "Mail must be not empty");
45
+    }
46
+    elsif ($mail !~ /\@/) {
47
+      $validation->add_failed(mail => "Invalid mail address");
48
+    }
49
+    else {
50
+      my $row = app->dbi->model('user')->select(where => {mail => $mail})->one;
51
+      if ($row) {
52
+        $validation->add_failed(id => "Mail $mail already exists");
53
+      }
54
+    }
55
+    
37 56
     # "password" check
38 57
     $password2 ||= '';
39 58
     if (!(defined $password && length $password)) {
... ...
@@ -53,6 +72,8 @@
53 72
       my $params = {};
54 73
       $params->{password} = $password_encrypted;
55 74
       $params->{salt} = $salt;
75
+      $params->{name} = $name;
76
+      $params->{mail} = $mail;
56 77
       
57 78
       # Create user
58 79
       eval { app->manager->create_user($id, $params) };
... ...
@@ -96,9 +117,21 @@
96 117
     <form class="user-form" action="<%= url_for->query(op => 'create') %>" method="post">
97 118
       <div class="user-form-container">
98 119
         <div>
99
-          <div>User name</div>
120
+          <div>ID</div>
121
+          <div>
122
+            <%= text_field 'id', placeholder => 'ID' %>
123
+          </div>
124
+        </div>
125
+        <div>
126
+          <div>Name</div>
127
+          <div>
128
+            <%= text_field 'name', placeholder => 'Name' %>
129
+          </div>
130
+        </div>
131
+        <div>
132
+          <div>Mail</div>
100 133
           <div>
101
-            <%= text_field id => $id, placeholder => 'User', id =>'user-name'%>
134
+            <%= text_field 'mail', placeholder => 'Mail' %>
102 135
           </div>
103 136
         </div>
104 137
         <div>
+1 -1
xt/import_rep.t
... ...
@@ -40,7 +40,7 @@ note 'import_rep';
40 40
   $t->content_like(qr/Admin/);
41 41
 
42 42
   # Create user
43
-  $t->post_ok('/_admin/user/create?op=create', form => {id => 'kimoto', password => 'a', password2 => 'a'});
43
+  $t->post_ok('/_admin/user/create?op=create', form => {id => 'kimoto', mail => 'kimoto@foo.com', password => 'a', password2 => 'a'});
44 44
   $t->content_like(qr/Success.*created/);
45 45
   
46 46
   # Import repositories
+3 -3
xt/smart_http.t
... ...
@@ -41,7 +41,7 @@ note 'Smart HTTP';
41 41
   $t->content_like(qr/Admin/);
42 42
   
43 43
   # Create user
44
-  $t->post_ok('/_admin/user/create?op=create', form => {id => 'kimoto', password => 'a', password2 => 'a'});
44
+  $t->post_ok('/_admin/user/create?op=create', form => {id => 'kimoto', mail => 'kimoto@foo.com', password => 'a', password2 => 'a'});
45 45
   $t->content_like(qr/Success.*created/);
46 46
 
47 47
   # Login as kimoto
... ...
@@ -150,9 +150,9 @@ note 'Private repository and collaborator';
150 150
   $t->content_like(qr/Admin/);
151 151
   
152 152
   # Create user
153
-  $t->post_ok('/_admin/user/create?op=create', form => {id => 'kimoto', password => 'a', password2 => 'a'});
153
+  $t->post_ok('/_admin/user/create?op=create', form => {id => 'kimoto', mail => 'kimoto@foo.com', password => 'a', password2 => 'a'});
154 154
   $t->content_like(qr/Success.*created/);
155
-  $t->post_ok('/_admin/user/create?op=create', form => {id => 'kimoto2', password => 'a', password2 => 'a'});
155
+  $t->post_ok('/_admin/user/create?op=create', form => {id => 'kimoto2', mail => 'kimoto2@foo.com', password => 'a', password2 => 'a'});
156 156
   $t->content_like(qr/Success.*created/);
157 157
 
158 158
   # Login as kimoto
+8 -8
xt/user.t
... ...
@@ -127,7 +127,7 @@ note 'Admin pages';
127 127
     $t->content_like(qr/Two password/);
128 128
     
129 129
     # Create user
130
-    $t->post_ok('/_admin/user/create?op=create', form => {id => 'kimoto', password => 'a', password2 => 'a'});
130
+    $t->post_ok('/_admin/user/create?op=create', form => {id => 'kimoto', mail => 'kimoto@foo.com', password => 'a', password2 => 'a'});
131 131
     $t->content_like(qr/Success.*created/);
132 132
   }
133 133
     
... ...
@@ -163,7 +163,7 @@ note 'Admin pages';
163 163
   note 'Delete user';
164 164
   {
165 165
     # Create user
166
-    $t->post_ok('/_admin/user/create?op=create', form => {id => 'kimoto-tmp', password => 'a', password2 => 'a'});
166
+    $t->post_ok('/_admin/user/create?op=create', form => {id => 'kimoto-tmp', mail => 'kimoto-tmp@foo.com', password => 'a', password2 => 'a'});
167 167
     $t->content_like(qr/kimoto-tmp/);
168 168
     $t->get_ok('/_admin/users');
169 169
     $t->content_like(qr/kimoto-tmp/);
... ...
@@ -215,9 +215,9 @@ note 'Reset password';
215 215
   $t->content_like(qr/Admin/);
216 216
   
217 217
   # Create user
218
-  $t->post_ok('/_admin/user/create?op=create', form => {id => 'kimoto1', password => 'a', password2 => 'a'});
218
+  $t->post_ok('/_admin/user/create?op=create', form => {id => 'kimoto1', mail => 'kimoto1@foo.com', password => 'a', password2 => 'a'});
219 219
   $t->content_like(qr/kimoto1/);
220
-  $t->post_ok('/_admin/user/create?op=create', form => {id => 'kimoto2', password => 'a', password2 => 'a'});
220
+  $t->post_ok('/_admin/user/create?op=create', form => {id => 'kimoto2', mail => 'kimoto2@foo.com', password => 'a', password2 => 'a'});
221 221
   $t->content_like(qr/kimoto2/);
222 222
   
223 223
   # Logout
... ...
@@ -262,9 +262,9 @@ note 'Profile';
262 262
   $t->post_ok('/_login?op=login', form => {id => 'admin', password => 'a'});
263 263
 
264 264
   # Create user
265
-  $t->post_ok('/_admin/user/create?op=create', form => {id => 'kimoto1', password => 'a', password2 => 'a'});
265
+  $t->post_ok('/_admin/user/create?op=create', form => {id => 'kimoto1', mail => 'kimoto1@foo.com', password => 'a', password2 => 'a'});
266 266
   $t->content_like(qr/kimoto1/);
267
-  $t->post_ok('/_admin/user/create?op=create', form => {id => 'kimoto2', password => 'a', password2 => 'a'});
267
+  $t->post_ok('/_admin/user/create?op=create', form => {id => 'kimoto2', mail => 'kimoto2@foo.com', password => 'a', password2 => 'a'});
268 268
   $t->content_like(qr/kimoto2/);
269 269
   
270 270
   # Login as kimoto1
... ...
@@ -552,9 +552,9 @@ note 'Private repository and collaborator';
552 552
   $t->content_like(qr/Admin/);
553 553
   
554 554
   # Create user
555
-  $t->post_ok('/_admin/user/create?op=create', form => {id => 'kimoto', password => 'a', password2 => 'a'});
555
+  $t->post_ok('/_admin/user/create?op=create', form => {id => 'kimoto', mail => 'kimoto@foo.com', password => 'a', password2 => 'a'});
556 556
   $t->content_like(qr/Success.*created/);
557
-  $t->post_ok('/_admin/user/create?op=create', form => {id => 'kimoto2', password => 'a', password2 => 'a'});
557
+  $t->post_ok('/_admin/user/create?op=create', form => {id => 'kimoto2', mail => 'kimoto2@foo.com', password => 'a', password2 => 'a'});
558 558
   $t->content_like(qr/Success.*created/);
559 559
 
560 560
   # Login as kimoto