... | ... |
@@ -135,8 +135,10 @@ sub startup { |
135 | 135 |
}, |
136 | 136 |
project_name => sub { |
137 | 137 |
my $value = shift; |
138 |
- |
|
139 |
- return ($value || '') =~ /^[a-zA-Z0-9_\-][a-zA-Z0-9_\-\.]*$/; |
|
138 |
+ return 0 unless defined $value; |
|
139 |
+ return 0 if $value eq '.' || $value eq '..'; |
|
140 |
+ |
|
141 |
+ return ($value || '') =~ /[a-zA-Z0-9_\-\.]+$/; |
|
140 | 142 |
} |
141 | 143 |
); |
142 | 144 |
|
... | ... |
@@ -189,10 +191,8 @@ sub startup { |
189 | 191 |
|
190 | 192 |
# Custom routes |
191 | 193 |
{ |
192 |
- my $id_re = qr/[a-zA-Z0-9_-]+/; |
|
193 |
- |
|
194 | 194 |
# User |
195 |
- my $r = $r->route('/:user', user => $id_re); |
|
195 |
+ my $r = $r->route('/:user'); |
|
196 | 196 |
{ |
197 | 197 |
# Home |
198 | 198 |
$r->get('/' => template '/user'); |
... | ... |
@@ -203,8 +203,7 @@ sub startup { |
203 | 203 |
|
204 | 204 |
# Smart HTTP |
205 | 205 |
{ |
206 |
- |
|
207 |
- my $r = $r->route('/(:project).git', project => $id_re); |
|
206 |
+ my $r = $r->route('/(#project).git'); |
|
208 | 207 |
|
209 | 208 |
{ |
210 | 209 |
my $r = $r->under(sub { |
... | ... |
@@ -267,7 +266,7 @@ sub startup { |
267 | 266 |
|
268 | 267 |
# Project |
269 | 268 |
{ |
270 |
- my $r = $r->route('/:project', project => $id_re); |
|
269 |
+ my $r = $r->route('/#project'); |
|
271 | 270 |
|
272 | 271 |
{ |
273 | 272 |
my $r = $r->under(sub { |