gitprep / lib / Gitprep.pm /
Newer Older
585 lines | 17.573kb
GitPrep 2 need Perl 5.10
Yuki Kimoto authored on 2016-03-28
1
use 5.010001;
renamed gitpub to gitprep
Yuki Kimoto authored on 2012-11-26
2
package Gitprep;
copy gitweblite soruce code
root authored on 2012-11-23
3
use Mojo::Base 'Mojolicious';
cleanup
Yuki Kimoto authored on 2013-05-14
4

            
5
use Carp 'croak';
added start page
Yuki Kimoto authored on 2013-02-09
6
use DBIx::Custom;
little more secure login
Yuki Kimoto authored on 2013-03-16
7
use Gitprep::API;
cleanup
Yuki Kimoto authored on 2013-05-14
8
use Gitprep::Git;
fixed tags page paging bug a...
Yuki Kimoto authored on 2013-05-01
9
use Gitprep::Manager;
added RepManager rename feat...
Yuki Kimoto authored on 2013-03-27
10
use Scalar::Util 'weaken';
cleanup
Yuki Kimoto authored on 2013-05-14
11
use Validator::Custom;
add Time::Moment to cpanfil
Yuki Kimoto authored on 2016-04-20
12
use Time::Moment;
fix bug that in CGI reposito...
Yuki Kimoto authored on 2015-11-05
13

            
Digest::SHA loading to Mojo:...
Yuki Kimoto authored on 2013-08-13
14
# Digest::SHA loading to Mojo::Util if not loaded
15
{
16
  package Mojo::Util;
17
  eval {require Digest::SHA; import Digest::SHA qw(sha1 sha1_hex)};
18
}
19

            
version up to 2.5
Yuki Kimoto authored on 2016-12-05
20
our $VERSION = 'v2.5';
cleanup
Yuki Kimoto authored on 2013-05-14
21

            
added start page
Yuki Kimoto authored on 2013-02-09
22
has 'dbi';
revert encoding support
Yuki Kimoto authored on 2013-11-22
23
has 'git';
added RepManager rename feat...
Yuki Kimoto authored on 2013-03-27
24
has 'manager';
rename validator to vc to up...
Yuki Kimoto authored on 2013-12-02
25
has 'vc';
revert encoding support
Yuki Kimoto authored on 2013-11-22
26

            
27
use constant BUFFER_SIZE => 8192;
add /info/refs request
Yuki Kimoto authored on 2013-10-01
28

            
add repository and work repo...
Yuki Kimoto authored on 2016-04-14
29
sub data_dir {
30
  my $self = shift;
31
  
32
  my $data_dir = $self->config('data_dir');
33
  
34
  return $data_dir;
35
}
36

            
cleanup
Yuki Kimoto authored on 2016-04-16
37
sub rep_home {
38
  my $self = shift;
39
  
40
  my $rep_home = $self->data_dir . "/rep";
41
  
42
  return $rep_home;
43
}
44

            
cleanup branch
Yuki Kimoto authored on 2016-04-16
45
sub rep_info {
change is_collaborator argum...
Yuki Kimoto authored on 2016-04-23
46
  my ($self, $user_id, $project_id) = @_;
cleanup branch
Yuki Kimoto authored on 2016-04-16
47
  
48
  my $info = {};
change is_collaborator argum...
Yuki Kimoto authored on 2016-04-23
49
  $info->{user} = $user_id;
50
  $info->{project} = $project_id;
51
  $info->{git_dir} = $self->rep_home . "/$user_id/$project_id.git";
cleanup branch
Yuki Kimoto authored on 2016-04-16
52
  
53
  return $info;
54
}
55

            
cleanup
Yuki Kimoto authored on 2016-04-16
56
sub work_rep_home {
57
  my $self = shift;
58
  
59
  my $work_rep_home = $self->data_dir . "/work";
60
  
61
  return $work_rep_home;
62
}
63

            
cleanup create working direc...
Yuki Kimoto authored on 2016-04-16
64
sub work_rep_info {
change is_collaborator argum...
Yuki Kimoto authored on 2016-04-23
65
  my ($self, $user_id, $project_id) = @_;
cleanup create working direc...
Yuki Kimoto authored on 2016-04-16
66
  
67
  my $info = {};
change is_collaborator argum...
Yuki Kimoto authored on 2016-04-23
68
  $info->{user} = $user_id;
69
  $info->{project} = $project_id;
70
  $info->{git_dir} = $self->work_rep_home . "/$user_id/$project_id/.git";
71
  $info->{work_tree} = $self->work_rep_home . "/$user_id/$project_id";
cleanup create working direc...
Yuki Kimoto authored on 2016-04-16
72
  
73
  return $info;
74
}
75

            
copy gitweblite soruce code
root authored on 2012-11-23
76
sub startup {
77
  my $self = shift;
78
  
cleanup
Yuki Kimoto authored on 2013-05-14
79
  # Config file
update Mojolicious and added...
Yuki Kimoto authored on 2013-03-20
80
  $self->plugin('INIConfig', {ext => 'conf'});
81
  
cleanup
Yuki Kimoto authored on 2013-05-14
82
  # Config file for developper
add need_login_always_option
Yuki Kimoto authored on 2013-08-21
83
  unless ($ENV{GITPREP_NO_MYCONFIG}) {
84
    my $my_conf_file = $self->home->rel_file('gitprep.my.conf');
85
    $self->plugin('INIConfig', {file => $my_conf_file}) if -f $my_conf_file;
86
  }
update Mojolicious and added...
Yuki Kimoto authored on 2013-03-20
87
  
cleanup
Yuki Kimoto authored on 2013-05-14
88
  # Listen
copy gitweblite soruce code
root authored on 2012-11-23
89
  my $conf = $self->config;
cleanup
Yuki Kimoto authored on 2013-05-14
90
  my $listen = $conf->{hypnotoad}{listen} ||= ['http://*:10020'];
91
  $listen = [split /,/, $listen] unless ref $listen eq 'ARRAY';
fixed listen bug
Yuki Kimoto authored on 2013-03-29
92
  $conf->{hypnotoad}{listen} = $listen;
copy gitweblite soruce code
root authored on 2012-11-23
93
  
add repository and work repo...
Yuki Kimoto authored on 2016-04-14
94
  # Data directory
fix tests
Yuki Kimoto authored on 2016-04-14
95
  my $data_dir = $ENV{GITPREP_DATA_DIR} ? $ENV{GITPREP_DATA_DIR} : $self->home->rel_file('data');
96
  $self->config(data_dir => $data_dir);
add repository and work repo...
Yuki Kimoto authored on 2016-04-14
97
  
revert encoding support
Yuki Kimoto authored on 2013-11-22
98
  # Git
renamed gitpub to gitprep
Yuki Kimoto authored on 2012-11-26
99
  my $git = Gitprep::Git->new;
cleanup encoding
Yuki Kimoto authored on 2016-04-05
100
  $git->app($self);
101
  weaken $git->{app};
cleanup
Yuki Kimoto authored on 2013-05-14
102
  my $git_bin
103
    = $conf->{basic}{git_bin} ? $conf->{basic}{git_bin} : $git->search_bin;
fix mini bug
Yuki Kimoto authored on 2013-03-31
104
  if (!$git_bin || ! -e $git_bin) {
105
    $git_bin ||= '';
cleanup
Yuki Kimoto authored on 2013-05-14
106
    my $error = "Can't detect or found git command ($git_bin)."
107
      . " set git_bin in gitprep.conf";
fixed git_bin not found bug
Yuki Kimoto authored on 2013-03-31
108
    $self->log->error($error);
109
    croak $error;
110
  }
improve code structures
Yuki Kimoto authored on 2013-11-19
111
  $git->bin($git_bin);
revert encoding support
Yuki Kimoto authored on 2013-11-22
112
  
113
  # Repository Manager
cleanup encoding
Yuki Kimoto authored on 2016-04-05
114
  my $manager = Gitprep::Manager->new;
115
  $manager->app($self);
revert encoding support
Yuki Kimoto authored on 2013-11-22
116
  weaken $manager->{app};
117
  $self->manager($manager);
118
  
add key delete feature and u...
gitprep authored on 2014-05-19
119
  # authorized_keys file
fix authorized_keys_file bug
Yuki Kimoto authored on 2015-11-04
120
  my $authorized_keys_file = $conf->{basic}{authorized_keys_file};
add key delete feature and u...
gitprep authored on 2014-05-19
121
  unless (defined $authorized_keys_file) {
122
    if (defined $ENV{HOME}) {
fix update_authorized_keys_f...
gitprep authored on 2014-05-19
123
      $authorized_keys_file = "$ENV{HOME}/.ssh/authorized_keys";
add key delete feature and u...
gitprep authored on 2014-05-19
124
    }
125
  }
126
  if (defined $authorized_keys_file) {
127
    $self->manager->authorized_keys_file($authorized_keys_file);
128
  }
129
  else {
130
    $self->app->log->warn(qq/Config "authorized_keys_file" can't be detected/);
131
  }
132
  
fixed git_bin not found bug
Yuki Kimoto authored on 2013-03-31
133
  # Repository home
cleanup tests
Yuki Kimoto authored on 2016-04-16
134
  my $rep_home = "$data_dir/rep";
added create repository feat...
Yuki Kimoto authored on 2013-03-18
135
  unless (-d $rep_home) {
136
    mkdir $rep_home
137
      or croak "Can't create directory $rep_home: $!";
138
  }
cleanup
Yuki Kimoto authored on 2013-05-14
139
  
add time zone system
Yuki Kimoto authored on 2014-03-08
140
  # Time Zone
141
  if (my $time_zone = $conf->{basic}{time_zone}) {
142
    
143
    if ($time_zone =~ /^([\+-])?([0-9]?[0-9]):([0-9][0-9])$/) {
144
      my $sign = $1 || '';
145
      my $hour = $2;
146
      my $min = $3;
147
      
148
      my $time_zone_second = $sign . ($hour * 60 * 60) + ($min * 60);
149
      $git->time_zone_second($time_zone_second);
150
    }
151
    else {
152
      $self->log->warn("Bad time zone $time_zone. Time zone become GMT");
153
    }
154
  }
155
  $self->git($git);
cleanup
Yuki Kimoto authored on 2013-05-14
156
  
improved create repository f...
Yuki Kimoto authored on 2013-03-21
157
  # DBI
cleanup tests
Yuki Kimoto authored on 2016-04-16
158
  my $db_file = "$data_dir/gitprep.db";
improved create repository f...
Yuki Kimoto authored on 2013-03-21
159
  my $dbi = DBIx::Custom->connect(
160
    dsn => "dbi:SQLite:database=$db_file",
161
    connector => 1,
added original_pid column
Yuki Kimoto authored on 2013-04-18
162
    option => {sqlite_unicode => 1, sqlite_use_immediate_transaction => 1}
improved create repository f...
Yuki Kimoto authored on 2013-03-21
163
  );
164
  $self->dbi($dbi);
165
  
cleanup
Yuki Kimoto authored on 2013-05-14
166
  # Database file permision
change is_collaborator argum...
Yuki Kimoto authored on 2016-04-23
167
  if (my $user_id = $self->config->{hypnotoad}{user}) {
168
    my $uid = (getpwnam $user_id)[2];
fixed database file permissi...
Yuki Kimoto authored on 2013-04-19
169
    chown $uid, -1, $db_file;
170
  }
171
  if (my $group = $self->config->{hypnotoad}{group}) {
172
    my $gid = (getgrnam $group)[2];
173
    chown -1, $gid, $db_file;
174
  }
175
  
improved create repository f...
Yuki Kimoto authored on 2013-03-21
176
  # Model
177
  my $models = [
fix project page
Yuki Kimoto authored on 2016-04-21
178
    {
179
      table => 'user',
180
      primary_key => 'row_id'
181
    },
182
    {
183
      table => 'ssh_public_key',
184
      primary_key => 'row_id',
185
      join => [
issue belong to project
Yuki Kimoto authored on 2016-06-11
186
        'left join user on ssh_public_key.user = user.row_id'
fix project page
Yuki Kimoto authored on 2016-04-21
187
      ]
188
    },
189
    {
190
      table => 'project',
191
      primary_key => 'row_id',
192
      join => [
issue belong to project
Yuki Kimoto authored on 2016-06-11
193
        'left join user on project.user = user.row_id'
fix project page
Yuki Kimoto authored on 2016-04-21
194
      ]
195
    },
196
    {
197
      table => 'collaboration',
198
      primary_key => 'row_id',
199
      join => [
issue belong to project
Yuki Kimoto authored on 2016-06-11
200
        'left join user on collaboration.user = user.row_id',
201
        'left join project on collaboration.project = project.row_id',
fix project page
Yuki Kimoto authored on 2016-04-21
202
      ]
203
    },
fix pulls page
Yuki Kimoto authored on 2016-06-09
204
    {
205
      table => 'issue',
206
      join => [
issue belong to project
Yuki Kimoto authored on 2016-06-11
207
        'left join project on issue.project = project.row_id',
can add new issue message an...
Yuki Kimoto authored on 2016-07-06
208
        'left join user as project__user on project.user = project__user.row_id',
issue belong to project
Yuki Kimoto authored on 2016-06-11
209
        'left join pull_request on issue.pull_request = pull_request.row_id',
remove table __ prefix
Yuki Kimoto authored on 2016-06-11
210
        'left join user as open_user on issue.open_user = open_user.row_id',
211
        'left join project as pull_request__base_project on pull_request.base_project = pull_request__base_project.row_id',
212
        'left join user as pull_request__base_project__user'
213
          . ' on pull_request__base_project.user = pull_request__base_project__user.row_id',
214
        'left join project as pull_request__target_project on pull_request.target_project = pull_request__target_project.row_id',
215
        'left join user as pull_request__target_project__user'
216
          . ' on pull_request__target_project.user = pull_request__target_project__user.row_id'
fix pulls page
Yuki Kimoto authored on 2016-06-09
217

            
218
      ]
219
    },
220
    {
221
      table => 'issue_message',
222
      primary_key => 'row_id',
223
      join => [
issue belong to project
Yuki Kimoto authored on 2016-06-11
224
        'left join user on issue_message.user = user.row_id',
225
        'left join issue on issue_message.issue = issue.row_id'
fix pulls page
Yuki Kimoto authored on 2016-06-09
226
      ]
227
    },
add pulls description
Yuki Kimoto authored on 2016-04-20
228
    {
229
      table => 'pull_request',
fix project page
Yuki Kimoto authored on 2016-04-21
230
      primary_key => 'row_id',
231
      join => [
remove table __ prefix
Yuki Kimoto authored on 2016-06-11
232
        'left join user as open_user on pull_request.open_user = open_user.row_id',
233
        'left join project as base_project on pull_request.base_project = base_project.row_id',
234
        'left join user as base_project__user'
235
          . ' on base_project.user = base_project__user.row_id',
236
        'left join project as target_project on pull_request.target_project = target_project.row_id',
fix pull_request table bug
Yuki Kimoto authored on 2016-04-27
237
        'left join user as pull_request__target_project__user'
remove table __ prefix
Yuki Kimoto authored on 2016-06-11
238
          . ' on target_project.user = target_project__user.row_id'
fix project page
Yuki Kimoto authored on 2016-04-21
239
      ]
add pull request message log...
Yuki Kimoto authored on 2016-04-23
240
    },
add label initialize logic
Yuki Kimoto authored on 2016-07-26
241
    {
242
      table => 'label',
243
      primary_key => 'row_id',
244
      join => [
show labels
Yuki Kimoto authored on 2016-07-26
245
        'left join project on label.project = project.row_id',
246
        'left join user as project__user on project.user = project__user.row_id'
add label initialize logic
Yuki Kimoto authored on 2016-07-26
247
      ]
add label apply
Yuki Kimoto authored on 2016-08-01
248
    },
249
    {
250
      table => 'issue_label',
show added labels
Yuki Kimoto authored on 2016-08-01
251
      primary_key => 'row_id',
252
      join => [
253
        'left join label on issue_label.label = label.row_id'
254
      ]
add label initialize logic
Yuki Kimoto authored on 2016-07-26
255
    }
improved create repository f...
Yuki Kimoto authored on 2013-03-21
256
  ];
257
  $dbi->create_model($_) for @$models;
add pulls description
Yuki Kimoto authored on 2016-04-20
258
  $dbi->setup_model;
improved create repository f...
Yuki Kimoto authored on 2013-03-21
259

            
260
  # Validator
rename validator to vc to up...
Yuki Kimoto authored on 2013-12-02
261
  my $vc = Validator::Custom->new;
262
  $self->vc($vc);
263
  $vc->register_constraint(
added project delete feature
Yuki Kimoto authored on 2013-03-24
264
    user_name => sub {
265
      my $value = shift;
266
      
allow . as project name
Yuki Kimoto authored on 2014-04-21
267
      return ($value || '') =~ /^[a-zA-Z0-9_\-]+$/;
added project delete feature
Yuki Kimoto authored on 2013-03-24
268
    },
269
    project_name => sub {
270
      my $value = shift;
allow . as project name
Yuki Kimoto authored on 2014-04-21
271
      return 0 unless defined $value;
272
      return 0 if $value eq '.' || $value eq '..';
273

            
274
      return ($value || '') =~ /[a-zA-Z0-9_\-\.]+$/;
added project delete feature
Yuki Kimoto authored on 2013-03-24
275
    }
276
  );
improved create repository f...
Yuki Kimoto authored on 2013-03-21
277
  
cleanup setting validation
Yuki Kimoto authored on 2016-02-09
278
  $vc->add_check(project_name => sub {
279
    my ($vc, $value) = @_;
280
    
281
    return 0 unless defined $value;
282
    return 0 if $value eq '.' || $value eq '..';
283
    
284
    return ($value || '') =~ /[a-zA-Z0-9_\-\.]+$/;
285
  });
cleanup create user validati...
Yuki Kimoto authored on 2016-02-09
286
  $vc->add_check(user_name => sub {
287
    my ($vc, $value) = @_;
288
    
289
    return ($value || '') =~ /^[a-zA-Z0-9_\-]+$/;
290
  });
cleanup setting validation
Yuki Kimoto authored on 2016-02-09
291
  
fixed receive pack bug and a...
Yuki Kimoto authored on 2013-10-03
292
  # Basic auth plugin
293
  $self->plugin('BasicAuth');
added admin user tests
Yuki Kimoto authored on 2013-05-17
294

            
added login page
Yuki Kimoto authored on 2013-02-09
295
  {
cleanup
Yuki Kimoto authored on 2013-05-14
296
    my $r = $self->routes;
297

            
298
    # DBViewer(only development)
add Mojolicious::Plugin::DBV...
Yuki Kimoto authored on 2016-03-26
299
    # /dbviewer
cleanup
Yuki Kimoto authored on 2013-05-14
300
    if ($self->mode eq 'development') {
301
      eval {
302
        $self->plugin(
303
          'DBViewer',
304
          dsn => "dbi:SQLite:database=$db_file"
305
        );
306
      };
added reset password feature
Yuki Kimoto authored on 2013-04-10
307
    }
added AutoRoute plugin
Yuki Kimoto authored on 2013-04-09
308
    
cleanup
Yuki Kimoto authored on 2013-05-14
309
    # Auto route
cleanup many pages
Yuki Kimoto authored on 2013-03-31
310
    {
cleanup
Yuki Kimoto authored on 2013-05-14
311
      my $r = $r->under(sub {
312
        my $self = shift;
313
        
314
        my $api = $self->gitprep_api;
315
        
add need_login_always_option
Yuki Kimoto authored on 2013-08-21
316
        # Authentication
cleanup
Yuki Kimoto authored on 2013-05-14
317
        {
318
          my $path = $self->req->url->path->parts->[0] || '';
add need_login_always_option
Yuki Kimoto authored on 2013-08-21
319
          
320
          # Admin
cleanup
Yuki Kimoto authored on 2013-05-14
321
          if ($path eq '_admin' && !$api->logined_admin) {
322
            $self->redirect_to('/');
323
            return;
324
          }
325
        }
326
        
327
        return 1; 
328
      });
add need_login_always_option
Yuki Kimoto authored on 2013-08-21
329
      
330
      # Auto routes
cleanup
Yuki Kimoto authored on 2013-05-14
331
      $self->plugin('AutoRoute', route => $r);
fix bug that forst . is not ...
Yuki Kimoto authored on 2014-04-21
332
      
add need_login_always_option
Yuki Kimoto authored on 2013-08-21
333
      # Custom routes
cleanup
Yuki Kimoto authored on 2013-05-14
334
      {
add ssh key add feature
gitprep authored on 2014-05-17
335
        # Show ssh keys
remove Mojolicious::Plugin::...
Yuki Kimoto authored on 2016-03-28
336
        $r->get('/(:user).keys' => sub { shift->render_maybe('/user-keys') });
add ssh key add feature
gitprep authored on 2014-05-17
337
        
add need_login_always_option
Yuki Kimoto authored on 2013-08-21
338
        # User
allow . as project name
Yuki Kimoto authored on 2014-04-21
339
        my $r = $r->route('/:user');
add need_login_always_option
Yuki Kimoto authored on 2013-08-21
340
        {
341
          # Home
remove Mojolicious::Plugin::...
Yuki Kimoto authored on 2016-03-28
342
          $r->get('/' => [format => 0] => sub { shift->render_maybe('/user') });
add need_login_always_option
Yuki Kimoto authored on 2013-08-21
343
          
344
          # Settings
remove Mojolicious::Plugin::...
Yuki Kimoto authored on 2016-03-28
345
          $r->get('/_settings' => sub { shift->render_maybe('/user-settings') });
add ssh keys page design
gitprep authored on 2014-05-17
346
          
347
          # SSH keys
remove Mojolicious::Plugin::...
Yuki Kimoto authored on 2016-03-28
348
          $r->any('/_settings/ssh' => sub { shift->render_maybe('/user-settings/ssh') });
add need_login_always_option
Yuki Kimoto authored on 2013-08-21
349
        }
add /info/refs request
Yuki Kimoto authored on 2013-10-01
350

            
351
        # Smart HTTP
352
        {
allow . as project name
Yuki Kimoto authored on 2014-04-21
353
          my $r = $r->route('/(#project).git');
add /info/refs request
Yuki Kimoto authored on 2013-10-01
354
          
fixed receive pack bug and a...
Yuki Kimoto authored on 2013-10-03
355
          {
356
            my $r = $r->under(sub {
357
              my $self = shift;
358
              
cleanup
Yuki Kimoto authored on 2013-11-16
359
              my $api = $self->gitprep_api;
change is_collaborator argum...
Yuki Kimoto authored on 2016-04-23
360
              my $user_id = $self->param('user');
361
              my $project_id = $self->param('project');
362
              my $private = $self->app->manager->is_private_project($user_id, $project_id);
cleanup
Yuki Kimoto authored on 2013-11-16
363
              
fixed receive pack bug and a...
Yuki Kimoto authored on 2013-10-03
364
              # Basic auth when push request
365
              my $service = $self->param('service') || '';
complete private repository ...
Yuki Kimoto authored on 2013-11-16
366
              if ($service eq 'git-receive-pack' || $private) {
fixed receive pack bug and a...
Yuki Kimoto authored on 2013-10-03
367
                
368
                $self->basic_auth("Git Area", sub {
change is_collaborator argum...
Yuki Kimoto authored on 2016-04-23
369
                  my ($auth_user_id, $auth_password) = @_;
add warnings when authentica...
Yuki Kimoto authored on 2014-02-18
370
                  
change is_collaborator argum...
Yuki Kimoto authored on 2016-04-23
371
                  if (!defined $auth_user_id || !length $auth_user_id) {
add warnings when authentica...
Yuki Kimoto authored on 2014-02-18
372
                    $self->app->log->warn("Authentication: User name is empty");
373
                  }
374
                  
change is_collaborator argum...
Yuki Kimoto authored on 2016-04-23
375
                  $auth_user_id = '' unless defined $auth_user_id;
fix warnings
Yuki Kimoto authored on 2013-11-18
376
                  $auth_password = '' unless defined $auth_password;
fixed receive pack bug and a...
Yuki Kimoto authored on 2013-10-03
377
                  
complete collaborator featur...
Yuki Kimoto authored on 2013-11-17
378
                  my $is_valid =
change is_collaborator argum...
Yuki Kimoto authored on 2016-04-23
379
                    ($user_id eq $auth_user_id || $api->is_collaborator($auth_user_id, $user_id, $project_id))
380
                    && $api->check_user_and_password($auth_user_id, $auth_password);
fixed receive pack bug and a...
Yuki Kimoto authored on 2013-10-03
381
                  
382
                  return $is_valid;
383
                });
384
              }
385
              else {
386
                return 1;
387
              }
388
            });
389
            
redirect .git access to /use...
Yuki Kimoto authored on 2014-02-26
390
            # /
391
            $r->get('/')->to(cb => sub {
392
              my $self = shift;
393
              
change is_collaborator argum...
Yuki Kimoto authored on 2016-04-23
394
              my $user_id = $self->param('user');
395
              my $project_id = $self->param('project');
redirect .git access to /use...
Yuki Kimoto authored on 2014-02-26
396
              
change is_collaborator argum...
Yuki Kimoto authored on 2016-04-23
397
              $self->redirect_to("/$user_id/$project_id");
redirect .git access to /use...
Yuki Kimoto authored on 2014-02-26
398
            });
399
            
fixed receive pack bug and a...
Yuki Kimoto authored on 2013-10-03
400
            # /info/refs
remove Mojolicious::Plugin::...
Yuki Kimoto authored on 2016-03-28
401
            $r->get('/info/refs' => sub { shift->render_maybe('smart-http/info-refs') });
fixed receive pack bug and a...
Yuki Kimoto authored on 2013-10-03
402
            
403
            # /git-upload-pack or /git-receive-pack
404
            $r->any('/git-(:service)'
405
              => [service => qr/(?:upload-pack|receive-pack)/]
remove Mojolicious::Plugin::...
Yuki Kimoto authored on 2016-03-28
406
              => sub { shift->render_maybe('smart-http/service') }
fixed receive pack bug and a...
Yuki Kimoto authored on 2013-10-03
407
            );
408
            
409
            # Static file
remove Mojolicious::Plugin::...
Yuki Kimoto authored on 2016-03-28
410
            $r->get('/(*Path)' => sub { shift->render_maybe('smart-http/static') });
fixed receive pack bug and a...
Yuki Kimoto authored on 2013-10-03
411
          }
add /info/refs request
Yuki Kimoto authored on 2013-10-01
412
        }
413
                
add need_login_always_option
Yuki Kimoto authored on 2013-08-21
414
        # Project
415
        {
allow . as project name
Yuki Kimoto authored on 2014-04-21
416
          my $r = $r->route('/#project');
add need_login_always_option
Yuki Kimoto authored on 2013-08-21
417
          
add private reporitory featu...
Yuki Kimoto authored on 2013-11-16
418
          {
419
            my $r = $r->under(sub {
420
              my $self = shift;
421
              
cleanup
Yuki Kimoto authored on 2013-11-16
422
              # API
423
              my $api = $self->gitprep_api;
improve code structures
Yuki Kimoto authored on 2013-11-19
424
              
425
              # Private
change is_collaborator argum...
Yuki Kimoto authored on 2016-04-23
426
              my $user_id = $self->param('user');
427
              my $project_id = $self->param('project');
428
              my $private = $self->app->manager->is_private_project($user_id, $project_id);
add private reporitory featu...
Yuki Kimoto authored on 2013-11-16
429
              if ($private) {
change is_collaborator argum...
Yuki Kimoto authored on 2016-04-23
430
                if ($api->can_access_private_project($user_id, $project_id)) {
add private reporitory featu...
Yuki Kimoto authored on 2013-11-16
431
                  return 1;
432
                }
433
                else {
434
                  $self->render('private');
435
                  return 0;
436
                }
437
              }
438
              else {
439
                return 1;
440
              }
441
            });
442
            
443
            # Home
remove Mojolicious::Plugin::...
Yuki Kimoto authored on 2016-03-28
444
            $r->get('/' => sub { shift->render_maybe('/tree') });
add issue page
Yuki Kimoto authored on 2016-06-06
445
            
446
            # Issue
447
            $r->get('/issues' => sub { shift->render_maybe('/issues') })->to(tab => 'issues');
support markdown table
Yuki Kimoto authored on 2016-06-18
448

            
449
            # New issue
add new issue feature
Yuki Kimoto authored on 2016-06-20
450
            $r->any('/issues/new' => sub { shift->render_maybe('/issues/new') })->to(tab => 'issues');
can add new issue message an...
Yuki Kimoto authored on 2016-07-06
451
            $r->any('/issues/:number' => sub { shift->render_maybe('/issue') })->to(tab => 'issues');
add labels page
Yuki Kimoto authored on 2016-07-25
452

            
453
            # Labels
add create label
Yuki Kimoto authored on 2016-07-28
454
            $r->any('/labels' => sub { shift->render_maybe('/labels') })->to(tab => 'issues');
add issue page
Yuki Kimoto authored on 2016-06-06
455
            
improve pull page design
Yuki Kimoto authored on 2016-04-21
456
            # Pull requests
add pulls page
Yuki Kimoto authored on 2016-04-12
457
            $r->get('/pulls' => sub { shift->render_maybe('/pulls') })->to(tab => 'pulls');
add private reporitory featu...
Yuki Kimoto authored on 2013-11-16
458
            
improve pull page design
Yuki Kimoto authored on 2016-04-21
459
            # Pull request
fix issue number bug
Yuki Kimoto authored on 2016-06-11
460
            $r->get('/pull/(:number).patch' => sub { shift->render_maybe('/pull') })->to(tab => 'pulls', patch => 1);
461
            $r->any('/pull/:number' => sub { shift->render_maybe('/pull') })->to(tab => 'pulls');
improve pull page design
Yuki Kimoto authored on 2016-04-21
462
            
add private reporitory featu...
Yuki Kimoto authored on 2013-11-16
463
            # Commit
remove Mojolicious::Plugin::...
Yuki Kimoto authored on 2016-03-28
464
            $r->get('/commit/*diff' => sub { shift->render_maybe('/commit') });
add atom feed part
Yuki Kimoto authored on 2014-10-02
465

            
add private reporitory featu...
Yuki Kimoto authored on 2013-11-16
466
            # Commits
remove Mojolicious::Plugin::...
Yuki Kimoto authored on 2016-03-28
467
            $r->get('/commits/*rev_file' => sub { shift->render_maybe('/commits') });
add private reporitory featu...
Yuki Kimoto authored on 2013-11-16
468
            
469
            # Branches
fix branch paging
Yuki Kimoto authored on 2016-10-12
470
            $r->any('/branches' => sub { shift->render_maybe('/branches') });
added feature that you see p...
Yuki Kimoto authored on 2013-04-11
471

            
add private reporitory featu...
Yuki Kimoto authored on 2013-11-16
472
            # Tags
remove Mojolicious::Plugin::...
Yuki Kimoto authored on 2016-03-28
473
            $r->get('/tags' => sub { shift->render_maybe('/tags') });
improved network page
Yuki Kimoto authored on 2013-04-16
474

            
add private reporitory featu...
Yuki Kimoto authored on 2013-11-16
475
            # Tree
remove Mojolicious::Plugin::...
Yuki Kimoto authored on 2016-03-28
476
            $r->get('/tree/*rev_dir' => sub { shift->render_maybe('/tree') });
add private reporitory featu...
Yuki Kimoto authored on 2013-11-16
477
            
478
            # Blob
remove Mojolicious::Plugin::...
Yuki Kimoto authored on 2016-03-28
479
            $r->get('/blob/*rev_file' => sub { shift->render_maybe('/blob') });
add private reporitory featu...
Yuki Kimoto authored on 2013-11-16
480
            
481
            # Sub module
remove Mojolicious::Plugin::...
Yuki Kimoto authored on 2016-03-28
482
            $r->get('/submodule/*rev_file' => sub { shift->render_maybe('/submodule') });
add blame method
Yuki Kimoto authored on 2013-08-10
483

            
add private reporitory featu...
Yuki Kimoto authored on 2013-11-16
484
            # Raw
remove Mojolicious::Plugin::...
Yuki Kimoto authored on 2016-03-28
485
            $r->get('/raw/*rev_file' => sub { shift->render_maybe('/raw') });
add blame method
Yuki Kimoto authored on 2013-08-10
486

            
add private reporitory featu...
Yuki Kimoto authored on 2013-11-16
487
            # Blame
remove Mojolicious::Plugin::...
Yuki Kimoto authored on 2016-03-28
488
            $r->get('/blame/*rev_file' => sub { shift->render_maybe('/blame') });
add private reporitory featu...
Yuki Kimoto authored on 2013-11-16
489
            
490
            # Archive
remove Mojolicious::Plugin::...
Yuki Kimoto authored on 2016-03-28
491
            # Archive
492
            $r->get('/archive/(*rev).tar.gz' => sub { shift->render_maybe('/archive') })->to(archive_type => 'tar');
493
            $r->get('/archive/(*rev).zip' => sub { shift->render_maybe('/archive') })->to(archive_type => 'zip' );
add private reporitory featu...
Yuki Kimoto authored on 2013-11-16
494
            
495
            # Compare
add create pull request logi...
Yuki Kimoto authored on 2016-04-19
496
            $r->any('/compare' => sub { shift->render_maybe('/compare') });
497
            $r->any(
cleanup branch
Yuki Kimoto authored on 2016-04-12
498
              '/compare/(:rev1)...(:rev2)'
499
              => [rev1 => qr/[^\.]+/, rev2 => qr/[^\.]+/]
500
              => sub { shift->render_maybe('/compare') }
501
            );
add create pull request logi...
Yuki Kimoto authored on 2016-04-19
502
            $r->any('/compare/(:rev2)' => sub { shift->render_maybe('/compare') });
add private reporitory featu...
Yuki Kimoto authored on 2013-11-16
503
            
504
            # Settings
improve tab design
Yuki Kimoto authored on 2016-01-26
505
            {
506
              my $r = $r->route('/settings')->to(tab => 'settings');
507
              
508
              # Settings
remove Mojolicious::Plugin::...
Yuki Kimoto authored on 2016-03-28
509
              $r->any('/' => sub { shift->render_maybe('/settings') });
improve tab design
Yuki Kimoto authored on 2016-01-26
510
              
511
              # Collaboration
remove Mojolicious::Plugin::...
Yuki Kimoto authored on 2016-03-28
512
              $r->any('/collaboration' => sub { shift->render_maybe('/settings/collaboration') });
improve tab design
Yuki Kimoto authored on 2016-01-26
513
            }
add collaboration page
Yuki Kimoto authored on 2013-11-17
514
            
add private reporitory featu...
Yuki Kimoto authored on 2013-11-16
515
            # Fork
remove Mojolicious::Plugin::...
Yuki Kimoto authored on 2016-03-28
516
            $r->any('/fork' => sub { shift->render_maybe('/fork') });
improve tab design
Yuki Kimoto authored on 2016-01-26
517
            
add private reporitory featu...
Yuki Kimoto authored on 2013-11-16
518
            # Network
improve tab design
Yuki Kimoto authored on 2016-01-26
519
            {
520
              my $r = $r->route('/network')->to(tab => 'graph');
521
              
522
              # Network
remove Mojolicious::Plugin::...
Yuki Kimoto authored on 2016-03-28
523
              $r->get('/' => sub { shift->render_maybe('/network') });
cleanup
Yuki Kimoto authored on 2013-05-14
524

            
improve tab design
Yuki Kimoto authored on 2016-01-26
525
              # Network Graph
remove Mojolicious::Plugin::...
Yuki Kimoto authored on 2016-03-28
526
              $r->get('/graph/(*rev1)...(*rev2_abs)' => sub { shift->render_maybe('/network/graph') });
improve tab design
Yuki Kimoto authored on 2016-01-26
527
            }
add pull page design
Yuki Kimoto authored on 2013-08-13
528

            
add private reporitory featu...
Yuki Kimoto authored on 2013-11-16
529
            # Import branch
remove Mojolicious::Plugin::...
Yuki Kimoto authored on 2016-03-28
530
            $r->any('/import-branch/:remote_user/:remote_project' => sub { shift->render_maybe('/import-branch') });
add private reporitory featu...
Yuki Kimoto authored on 2013-11-16
531
            
532
            # Get branches and tags
remove Mojolicious::Plugin::...
Yuki Kimoto authored on 2016-03-28
533
            $r->get('/api/revs' => sub { shift->render_maybe('/api/revs') });
add private reporitory featu...
Yuki Kimoto authored on 2013-11-16
534
          }
add need_login_always_option
Yuki Kimoto authored on 2013-08-21
535
        }
cleanup
Yuki Kimoto authored on 2013-05-14
536
      }
added AutoRoute plugin
Yuki Kimoto authored on 2013-04-09
537
    }
538
  }
added admin user tests
Yuki Kimoto authored on 2013-05-17
539

            
540
  # Helper
541
  {
542
    # API
543
    $self->helper(gitprep_api => sub { Gitprep::API->new(shift) });
544
  }
added reverse proxy path_dep...
Yuki Kimoto authored on 2013-04-22
545
  
X-Forwarded-HTTPS header is ...
Yuki Kimoto authored on 2016-03-28
546
  # set scheme to https when X-Forwarded-HTTPS header is specified
547
  # This is for the backword compatible only. Now X-Forwarded-Proto is used for this purpose
548
  $self->hook(before_dispatch => sub {
549
    my $c = shift;
550
    if ($c->req->headers->header('X-Forwarded-HTTPS')) {
551
      $c->req->url->base->scheme('https');
552
      $c->app->log->warn("X-Forwarded-HTTPS header is DEPRECATED! use X-Forwarded-Proto instead.");
553
    }
554
  });
fix smart http decompress bu...
Yuki Kimoto authored on 2016-04-22
555

            
change is_collaborator argum...
Yuki Kimoto authored on 2016-04-23
556
  # Set auto_decompress for Smart HTTP
557
  # HTTP request body of /smart-http/service is compressed.
558
  # If auto_decompress is not set, Smart HTTP fail.
fix smart http decompress bu...
Yuki Kimoto authored on 2016-04-22
559
  $self->hook('after_build_tx' => sub {
560
    my ($tx, $app) = @_;
561
    
562
    $tx->req->content->auto_decompress(1);
563
  });
564

            
added AutoRoute plugin
Yuki Kimoto authored on 2013-04-09
565
  # Reverse proxy support
added reverse proxy path_dep...
Yuki Kimoto authored on 2013-04-22
566
  my $reverse_proxy_on = $self->config->{reverse_proxy}{on};
567
  my $path_depth = $self->config->{reverse_proxy}{path_depth};
568
  if ($reverse_proxy_on) {
569
    $ENV{MOJO_REVERSE_PROXY} = 1;
570
    if ($path_depth) {
571
      $self->hook('before_dispatch' => sub {
572
        my $self = shift;
573
        for (1 .. $path_depth) {
574
          my $prefix = shift @{$self->req->url->path->parts};
575
          push @{$self->req->url->base->path->parts}, $prefix;
576
        }
577
      });
added AutoRoute plugin
Yuki Kimoto authored on 2013-04-09
578
    }
added reverse proxy path_dep...
Yuki Kimoto authored on 2013-04-22
579
  }
cleanup
Yuki Kimoto authored on 2013-10-11
580
  
581
  # Smart HTTP Buffer size
fix bug that lerge repositor...
Yuki Kimoto authored on 2014-02-17
582
  $ENV{GITPREP_SMART_HTTP_BUFFER_SIZE} ||= 16384;
copy gitweblite soruce code
root authored on 2012-11-23
583
}
584

            
585
1;