gitprep / lib / Gitprep.pm /
Newer Older
520 lines | 14.601kb
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

            
add Mojolicious::Plugin::DBV...
Yuki Kimoto authored on 2016-03-26
20
our $VERSION = 'v2.00_dev';
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 {
46
  my ($self, $user, $project) = @_;
47
  
48
  my $info = {};
add user and project info
Yuki Kimoto authored on 2016-04-16
49
  $info->{user} = $user;
cleanup blob
Yuki Kimoto authored on 2016-04-16
50
  $info->{project} = $project;
cleanup branch
Yuki Kimoto authored on 2016-04-16
51
  $info->{git_dir} = $self->rep_home . "/$user/$project.git";
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 {
65
  my ($self, $user, $project) = @_;
66
  
67
  my $info = {};
68
  $info->{user} = $user;
69
  $info->{project} = $project;
cleanup compare logic
Yuki Kimoto authored on 2016-04-18
70
  $info->{git_dir} = $self->work_rep_home . "/$user/$project/.git";
71
  $info->{work_tree} = $self->work_rep_home . "/$user/$project";
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
fixed database file permissi...
Yuki Kimoto authored on 2013-04-19
167
  if (my $user = $self->config->{hypnotoad}{user}) {
168
    my $uid = (getpwnam $user)[2];
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 => [
186
        'left join user on ssh_public_key.user = user.row_id'
187
      ]
188
    },
189
    {
190
      table => 'project',
191
      primary_key => 'row_id',
192
      join => [
193
        'left join user on project.user = user.row_id'
194
      ]
195
    },
196
    {
197
      table => 'collaboration',
198
      primary_key => 'row_id',
199
      join => [
fix collaboration
Yuki Kimoto authored on 2016-04-22
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
    },
add pulls description
Yuki Kimoto authored on 2016-04-20
204
    {
205
      table => 'pull_request',
fix project page
Yuki Kimoto authored on 2016-04-21
206
      primary_key => 'row_id',
207
      join => [
208
        'left join user on pull_request.open_user = user.row_id'
209
      ]
add pulls description
Yuki Kimoto authored on 2016-04-20
210
    }
improved create repository f...
Yuki Kimoto authored on 2013-03-21
211
  ];
212
  $dbi->create_model($_) for @$models;
add pulls description
Yuki Kimoto authored on 2016-04-20
213
  $dbi->setup_model;
improved create repository f...
Yuki Kimoto authored on 2013-03-21
214

            
215
  # Validator
rename validator to vc to up...
Yuki Kimoto authored on 2013-12-02
216
  my $vc = Validator::Custom->new;
217
  $self->vc($vc);
218
  $vc->register_constraint(
added project delete feature
Yuki Kimoto authored on 2013-03-24
219
    user_name => sub {
220
      my $value = shift;
221
      
allow . as project name
Yuki Kimoto authored on 2014-04-21
222
      return ($value || '') =~ /^[a-zA-Z0-9_\-]+$/;
added project delete feature
Yuki Kimoto authored on 2013-03-24
223
    },
224
    project_name => sub {
225
      my $value = shift;
allow . as project name
Yuki Kimoto authored on 2014-04-21
226
      return 0 unless defined $value;
227
      return 0 if $value eq '.' || $value eq '..';
228

            
229
      return ($value || '') =~ /[a-zA-Z0-9_\-\.]+$/;
added project delete feature
Yuki Kimoto authored on 2013-03-24
230
    }
231
  );
improved create repository f...
Yuki Kimoto authored on 2013-03-21
232
  
cleanup setting validation
Yuki Kimoto authored on 2016-02-09
233
  $vc->add_check(project_name => sub {
234
    my ($vc, $value) = @_;
235
    
236
    return 0 unless defined $value;
237
    return 0 if $value eq '.' || $value eq '..';
238
    
239
    return ($value || '') =~ /[a-zA-Z0-9_\-\.]+$/;
240
  });
cleanup create user validati...
Yuki Kimoto authored on 2016-02-09
241
  $vc->add_check(user_name => sub {
242
    my ($vc, $value) = @_;
243
    
244
    return ($value || '') =~ /^[a-zA-Z0-9_\-]+$/;
245
  });
cleanup setting validation
Yuki Kimoto authored on 2016-02-09
246
  
fixed receive pack bug and a...
Yuki Kimoto authored on 2013-10-03
247
  # Basic auth plugin
248
  $self->plugin('BasicAuth');
added admin user tests
Yuki Kimoto authored on 2013-05-17
249

            
added login page
Yuki Kimoto authored on 2013-02-09
250
  {
cleanup
Yuki Kimoto authored on 2013-05-14
251
    my $r = $self->routes;
252

            
253
    # DBViewer(only development)
add Mojolicious::Plugin::DBV...
Yuki Kimoto authored on 2016-03-26
254
    # /dbviewer
cleanup
Yuki Kimoto authored on 2013-05-14
255
    if ($self->mode eq 'development') {
256
      eval {
257
        $self->plugin(
258
          'DBViewer',
259
          dsn => "dbi:SQLite:database=$db_file"
260
        );
261
      };
added reset password feature
Yuki Kimoto authored on 2013-04-10
262
    }
added AutoRoute plugin
Yuki Kimoto authored on 2013-04-09
263
    
cleanup
Yuki Kimoto authored on 2013-05-14
264
    # Auto route
cleanup many pages
Yuki Kimoto authored on 2013-03-31
265
    {
cleanup
Yuki Kimoto authored on 2013-05-14
266
      my $r = $r->under(sub {
267
        my $self = shift;
268
        
269
        my $api = $self->gitprep_api;
270
        
add need_login_always_option
Yuki Kimoto authored on 2013-08-21
271
        # Authentication
cleanup
Yuki Kimoto authored on 2013-05-14
272
        {
273
          my $path = $self->req->url->path->parts->[0] || '';
add need_login_always_option
Yuki Kimoto authored on 2013-08-21
274
          
275
          # Admin
cleanup
Yuki Kimoto authored on 2013-05-14
276
          if ($path eq '_admin' && !$api->logined_admin) {
277
            $self->redirect_to('/');
278
            return;
279
          }
280
        }
281
        
282
        return 1; 
283
      });
add need_login_always_option
Yuki Kimoto authored on 2013-08-21
284
      
285
      # Auto routes
cleanup
Yuki Kimoto authored on 2013-05-14
286
      $self->plugin('AutoRoute', route => $r);
fix bug that forst . is not ...
Yuki Kimoto authored on 2014-04-21
287
      
add need_login_always_option
Yuki Kimoto authored on 2013-08-21
288
      # Custom routes
cleanup
Yuki Kimoto authored on 2013-05-14
289
      {
add ssh key add feature
gitprep authored on 2014-05-17
290
        # Show ssh keys
remove Mojolicious::Plugin::...
Yuki Kimoto authored on 2016-03-28
291
        $r->get('/(:user).keys' => sub { shift->render_maybe('/user-keys') });
add ssh key add feature
gitprep authored on 2014-05-17
292
        
add need_login_always_option
Yuki Kimoto authored on 2013-08-21
293
        # User
allow . as project name
Yuki Kimoto authored on 2014-04-21
294
        my $r = $r->route('/:user');
add need_login_always_option
Yuki Kimoto authored on 2013-08-21
295
        {
296
          # Home
remove Mojolicious::Plugin::...
Yuki Kimoto authored on 2016-03-28
297
          $r->get('/' => [format => 0] => sub { shift->render_maybe('/user') });
add need_login_always_option
Yuki Kimoto authored on 2013-08-21
298
          
299
          # Settings
remove Mojolicious::Plugin::...
Yuki Kimoto authored on 2016-03-28
300
          $r->get('/_settings' => sub { shift->render_maybe('/user-settings') });
add ssh keys page design
gitprep authored on 2014-05-17
301
          
302
          # SSH keys
remove Mojolicious::Plugin::...
Yuki Kimoto authored on 2016-03-28
303
          $r->any('/_settings/ssh' => sub { shift->render_maybe('/user-settings/ssh') });
add need_login_always_option
Yuki Kimoto authored on 2013-08-21
304
        }
add /info/refs request
Yuki Kimoto authored on 2013-10-01
305

            
306
        # Smart HTTP
307
        {
allow . as project name
Yuki Kimoto authored on 2014-04-21
308
          my $r = $r->route('/(#project).git');
add /info/refs request
Yuki Kimoto authored on 2013-10-01
309
          
fixed receive pack bug and a...
Yuki Kimoto authored on 2013-10-03
310
          {
311
            my $r = $r->under(sub {
312
              my $self = shift;
313
              
cleanup
Yuki Kimoto authored on 2013-11-16
314
              my $api = $self->gitprep_api;
complete private repository ...
Yuki Kimoto authored on 2013-11-16
315
              my $user = $self->param('user');
316
              my $project = $self->param('project');
317
              my $private = $self->app->manager->is_private_project($user, $project);
cleanup
Yuki Kimoto authored on 2013-11-16
318
              
fixed receive pack bug and a...
Yuki Kimoto authored on 2013-10-03
319
              # Basic auth when push request
320
              my $service = $self->param('service') || '';
complete private repository ...
Yuki Kimoto authored on 2013-11-16
321
              if ($service eq 'git-receive-pack' || $private) {
fixed receive pack bug and a...
Yuki Kimoto authored on 2013-10-03
322
                
323
                $self->basic_auth("Git Area", sub {
complete private repository ...
Yuki Kimoto authored on 2013-11-16
324
                  my ($auth_user, $auth_password) = @_;
add warnings when authentica...
Yuki Kimoto authored on 2014-02-18
325
                  
326
                  if (!defined $auth_user || !length $auth_user) {
327
                    $self->app->log->warn("Authentication: User name is empty");
328
                  }
329
                  
fix warnings
Yuki Kimoto authored on 2013-11-18
330
                  $auth_user = '' unless defined $auth_user;
331
                  $auth_password = '' unless defined $auth_password;
fixed receive pack bug and a...
Yuki Kimoto authored on 2013-10-03
332
                  
complete collaborator featur...
Yuki Kimoto authored on 2013-11-17
333
                  my $is_valid =
334
                    ($user eq $auth_user || $api->is_collaborator($user, $project, $auth_user))
335
                    && $api->check_user_and_password($auth_user, $auth_password);
fixed receive pack bug and a...
Yuki Kimoto authored on 2013-10-03
336
                  
337
                  return $is_valid;
338
                });
339
              }
340
              else {
341
                return 1;
342
              }
343
            });
344
            
redirect .git access to /use...
Yuki Kimoto authored on 2014-02-26
345
            # /
346
            $r->get('/')->to(cb => sub {
347
              my $self = shift;
348
              
349
              my $user = $self->param('user');
350
              my $project = $self->param('project');
351
              
352
              $self->redirect_to("/$user/$project");
353
            });
354
            
fixed receive pack bug and a...
Yuki Kimoto authored on 2013-10-03
355
            # /info/refs
remove Mojolicious::Plugin::...
Yuki Kimoto authored on 2016-03-28
356
            $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
357
            
358
            # /git-upload-pack or /git-receive-pack
359
            $r->any('/git-(:service)'
360
              => [service => qr/(?:upload-pack|receive-pack)/]
remove Mojolicious::Plugin::...
Yuki Kimoto authored on 2016-03-28
361
              => sub { shift->render_maybe('smart-http/service') }
fixed receive pack bug and a...
Yuki Kimoto authored on 2013-10-03
362
            );
363
            
364
            # Static file
remove Mojolicious::Plugin::...
Yuki Kimoto authored on 2016-03-28
365
            $r->get('/(*Path)' => sub { shift->render_maybe('smart-http/static') });
fixed receive pack bug and a...
Yuki Kimoto authored on 2013-10-03
366
          }
add /info/refs request
Yuki Kimoto authored on 2013-10-01
367
        }
368
                
add need_login_always_option
Yuki Kimoto authored on 2013-08-21
369
        # Project
370
        {
allow . as project name
Yuki Kimoto authored on 2014-04-21
371
          my $r = $r->route('/#project');
add need_login_always_option
Yuki Kimoto authored on 2013-08-21
372
          
add private reporitory featu...
Yuki Kimoto authored on 2013-11-16
373
          {
374
            my $r = $r->under(sub {
375
              my $self = shift;
376
              
cleanup
Yuki Kimoto authored on 2013-11-16
377
              # API
378
              my $api = $self->gitprep_api;
improve code structures
Yuki Kimoto authored on 2013-11-19
379
              
380
              # Private
revert encoding support
Yuki Kimoto authored on 2013-11-22
381
              my $user = $self->param('user');
382
              my $project = $self->param('project');
add private reporitory featu...
Yuki Kimoto authored on 2013-11-16
383
              my $private = $self->app->manager->is_private_project($user, $project);
384
              if ($private) {
complete collaborator featur...
Yuki Kimoto authored on 2013-11-17
385
                if ($api->can_access_private_project($user, $project)) {
add private reporitory featu...
Yuki Kimoto authored on 2013-11-16
386
                  return 1;
387
                }
388
                else {
389
                  $self->render('private');
390
                  return 0;
391
                }
392
              }
393
              else {
394
                return 1;
395
              }
396
            });
397
            
398
            # Home
remove Mojolicious::Plugin::...
Yuki Kimoto authored on 2016-03-28
399
            $r->get('/' => sub { shift->render_maybe('/tree') });
add pulls page
Yuki Kimoto authored on 2016-04-12
400

            
improve pull page design
Yuki Kimoto authored on 2016-04-21
401
            # Pull requests
add pulls page
Yuki Kimoto authored on 2016-04-12
402
            $r->get('/pulls' => sub { shift->render_maybe('/pulls') })->to(tab => 'pulls');
add private reporitory featu...
Yuki Kimoto authored on 2013-11-16
403
            
improve pull page design
Yuki Kimoto authored on 2016-04-21
404
            # Pull request
405
            $r->any('/pull/:row_id' => sub { shift->render_maybe('/pull') })->to(tab => 'pulls');
406
            
add private reporitory featu...
Yuki Kimoto authored on 2013-11-16
407
            # Commit
remove Mojolicious::Plugin::...
Yuki Kimoto authored on 2016-03-28
408
            $r->get('/commit/*diff' => sub { shift->render_maybe('/commit') });
add atom feed part
Yuki Kimoto authored on 2014-10-02
409

            
add private reporitory featu...
Yuki Kimoto authored on 2013-11-16
410
            # Commits
remove Mojolicious::Plugin::...
Yuki Kimoto authored on 2016-03-28
411
            $r->get('/commits/*rev_file' => sub { shift->render_maybe('/commits') });
add private reporitory featu...
Yuki Kimoto authored on 2013-11-16
412
            
413
            # Branches
remove Mojolicious::Plugin::...
Yuki Kimoto authored on 2016-03-28
414
            $r->any('/branches/:display' => {display => undef} => sub { shift->render_maybe('/branches') });
added feature that you see p...
Yuki Kimoto authored on 2013-04-11
415

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

            
add private reporitory featu...
Yuki Kimoto authored on 2013-11-16
419
            # Tree
remove Mojolicious::Plugin::...
Yuki Kimoto authored on 2016-03-28
420
            $r->get('/tree/*rev_dir' => sub { shift->render_maybe('/tree') });
add private reporitory featu...
Yuki Kimoto authored on 2013-11-16
421
            
422
            # Blob
remove Mojolicious::Plugin::...
Yuki Kimoto authored on 2016-03-28
423
            $r->get('/blob/*rev_file' => sub { shift->render_maybe('/blob') });
add private reporitory featu...
Yuki Kimoto authored on 2013-11-16
424
            
425
            # Sub module
remove Mojolicious::Plugin::...
Yuki Kimoto authored on 2016-03-28
426
            $r->get('/submodule/*rev_file' => sub { shift->render_maybe('/submodule') });
add blame method
Yuki Kimoto authored on 2013-08-10
427

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

            
add private reporitory featu...
Yuki Kimoto authored on 2013-11-16
431
            # Blame
remove Mojolicious::Plugin::...
Yuki Kimoto authored on 2016-03-28
432
            $r->get('/blame/*rev_file' => sub { shift->render_maybe('/blame') });
add private reporitory featu...
Yuki Kimoto authored on 2013-11-16
433
            
434
            # Archive
remove Mojolicious::Plugin::...
Yuki Kimoto authored on 2016-03-28
435
            # Archive
436
            $r->get('/archive/(*rev).tar.gz' => sub { shift->render_maybe('/archive') })->to(archive_type => 'tar');
437
            $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
438
            
439
            # Compare
add create pull request logi...
Yuki Kimoto authored on 2016-04-19
440
            $r->any('/compare' => sub { shift->render_maybe('/compare') });
441
            $r->any(
cleanup branch
Yuki Kimoto authored on 2016-04-12
442
              '/compare/(:rev1)...(:rev2)'
443
              => [rev1 => qr/[^\.]+/, rev2 => qr/[^\.]+/]
444
              => sub { shift->render_maybe('/compare') }
445
            );
add create pull request logi...
Yuki Kimoto authored on 2016-04-19
446
            $r->any('/compare/(:rev2)' => sub { shift->render_maybe('/compare') });
add private reporitory featu...
Yuki Kimoto authored on 2013-11-16
447
            
448
            # Settings
improve tab design
Yuki Kimoto authored on 2016-01-26
449
            {
450
              my $r = $r->route('/settings')->to(tab => 'settings');
451
              
452
              # Settings
remove Mojolicious::Plugin::...
Yuki Kimoto authored on 2016-03-28
453
              $r->any('/' => sub { shift->render_maybe('/settings') });
improve tab design
Yuki Kimoto authored on 2016-01-26
454
              
455
              # Collaboration
remove Mojolicious::Plugin::...
Yuki Kimoto authored on 2016-03-28
456
              $r->any('/collaboration' => sub { shift->render_maybe('/settings/collaboration') });
improve tab design
Yuki Kimoto authored on 2016-01-26
457
            }
add collaboration page
Yuki Kimoto authored on 2013-11-17
458
            
add private reporitory featu...
Yuki Kimoto authored on 2013-11-16
459
            # Fork
remove Mojolicious::Plugin::...
Yuki Kimoto authored on 2016-03-28
460
            $r->any('/fork' => sub { shift->render_maybe('/fork') });
improve tab design
Yuki Kimoto authored on 2016-01-26
461
            
add private reporitory featu...
Yuki Kimoto authored on 2013-11-16
462
            # Network
improve tab design
Yuki Kimoto authored on 2016-01-26
463
            {
464
              my $r = $r->route('/network')->to(tab => 'graph');
465
              
466
              # Network
remove Mojolicious::Plugin::...
Yuki Kimoto authored on 2016-03-28
467
              $r->get('/' => sub { shift->render_maybe('/network') });
cleanup
Yuki Kimoto authored on 2013-05-14
468

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

            
add private reporitory featu...
Yuki Kimoto authored on 2013-11-16
473
            # Import branch
remove Mojolicious::Plugin::...
Yuki Kimoto authored on 2016-03-28
474
            $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
475
            
476
            # Get branches and tags
remove Mojolicious::Plugin::...
Yuki Kimoto authored on 2016-03-28
477
            $r->get('/api/revs' => sub { shift->render_maybe('/api/revs') });
add private reporitory featu...
Yuki Kimoto authored on 2013-11-16
478
          }
add need_login_always_option
Yuki Kimoto authored on 2013-08-21
479
        }
cleanup
Yuki Kimoto authored on 2013-05-14
480
      }
added AutoRoute plugin
Yuki Kimoto authored on 2013-04-09
481
    }
482
  }
added admin user tests
Yuki Kimoto authored on 2013-05-17
483

            
484
  # Helper
485
  {
486
    # API
487
    $self->helper(gitprep_api => sub { Gitprep::API->new(shift) });
488
  }
added reverse proxy path_dep...
Yuki Kimoto authored on 2013-04-22
489
  
X-Forwarded-HTTPS header is ...
Yuki Kimoto authored on 2016-03-28
490
  # set scheme to https when X-Forwarded-HTTPS header is specified
491
  # This is for the backword compatible only. Now X-Forwarded-Proto is used for this purpose
492
  $self->hook(before_dispatch => sub {
493
    my $c = shift;
494
    if ($c->req->headers->header('X-Forwarded-HTTPS')) {
495
      $c->req->url->base->scheme('https');
496
      $c->app->log->warn("X-Forwarded-HTTPS header is DEPRECATED! use X-Forwarded-Proto instead.");
497
    }
498
  });
499
  
added AutoRoute plugin
Yuki Kimoto authored on 2013-04-09
500
  # Reverse proxy support
added reverse proxy path_dep...
Yuki Kimoto authored on 2013-04-22
501
  my $reverse_proxy_on = $self->config->{reverse_proxy}{on};
502
  my $path_depth = $self->config->{reverse_proxy}{path_depth};
503
  if ($reverse_proxy_on) {
504
    $ENV{MOJO_REVERSE_PROXY} = 1;
505
    if ($path_depth) {
506
      $self->hook('before_dispatch' => sub {
507
        my $self = shift;
508
        for (1 .. $path_depth) {
509
          my $prefix = shift @{$self->req->url->path->parts};
510
          push @{$self->req->url->base->path->parts}, $prefix;
511
        }
512
      });
added AutoRoute plugin
Yuki Kimoto authored on 2013-04-09
513
    }
added reverse proxy path_dep...
Yuki Kimoto authored on 2013-04-22
514
  }
cleanup
Yuki Kimoto authored on 2013-10-11
515
  
516
  # Smart HTTP Buffer size
fix bug that lerge repositor...
Yuki Kimoto authored on 2014-02-17
517
  $ENV{GITPREP_SMART_HTTP_BUFFER_SIZE} ||= 16384;
copy gitweblite soruce code
root authored on 2012-11-23
518
}
519

            
520
1;