package CommitBit::Dispatcher;
use Jifty::Dispatcher -base;
# Log out
before 'logout' => run {
Jifty->web->new_action(
class => 'Logout',
moniker => 'logout',
)->run;
};
before '*' => run {
Jifty->web->navigation->child(
Home => # override the jifty default. ew
label => _('Home'),
url => '/',
sort_order => 1);
if ( Jifty->web->current_user->id ) {
Jifty->web->navigation->child(
prefs =>
label => _('Preferences'),
url => '/prefs',
sort_order => 998
);
Jifty->web->navigation->child(
logout =>
label => _('Logout'),
url => '/logout',
sort_order => 999
);
} else {
Jifty->web->navigation->child(
login =>
label => _('Login'),
url => '/login',
sort_order => 999
);
}
if ( Jifty->web->current_user->user_object
and Jifty->web->current_user->user_object->admin )
{
Jifty->web->navigation->child(
admin =>
label => _('Admin'),
url => '/admin'
);
}
};
before qr'/admin/|/prefs' => run {
unless (Jifty->web->current_user->id) {
tangent '/login';
}
};
# Sign up for an account
on 'signup' => run {
redirect('/') if ( Jifty->web->current_user->id );
set 'action' =>
Jifty->web->new_action(
class => 'Signup',
moniker => 'signupbox'
);
set 'next' => Jifty->web->request->continuation
|| Jifty::Continuation->new(
request => Jifty::Request->new( path => "/" ) );
};
on 'prefs' => run {
set 'action' =>
Jifty->web->new_action(
class => 'UpdateUser',
moniker => 'prefsbox',
record => Jifty->web->current_user->user_object
);
set 'next' => Jifty->web->request->continuation
|| Jifty::Continuation->new(
request => Jifty::Request->new( path => "/" ) );
};
# Login
on 'login' => run {
set 'action' =>
Jifty->web->new_action(
class => 'Login',
moniker => 'loginbox'
);
set 'next' => Jifty->web->request->continuation
|| Jifty::Continuation->new(
request => Jifty::Request->new( path => "/" ) );
};
## LetMes
before qr'^/let/(.*)' => run {
my $let_me = Jifty::LetMe->new();
$let_me->from_token($1);
redirect '/error/let_me/invalid_token' unless $let_me->validate;
Jifty->web->temporary_current_user($let_me->validated_current_user);
my %args = %{$let_me->args};
set $_ => $args{$_} for keys %args;
set let_me => $let_me;
};
on qr'^/let/' => run {
my $let_me = get 'let_me';
show '/let/' . $let_me->path;
};
before qr'^/admin' => run {
my $admin = Jifty->web->navigation->child('admin') || Jifty->web->navigation->child( admin => label => _('Admin'), url => '/admin');
if (Jifty->web->current_user->user_object->admin ) {
$admin->child( 'repos' => label => 'Repositories', url => '/admin/repositories');
}
$admin->child( 'proj' => label => 'Projects', url => '/admin/projects');
};
before qr'^/admin/repository' => run {
unless (Jifty->web->current_user->user_object->admin ) {
redirect '/__jifty/error/permission_denied/not_admin';
}
};
before qr'^/admin/project/([^/]+)(/.*|)$' => run {
my $admin = Jifty->web->navigation->child('admin')->child('proj');
my $proj = $admin->child( $1 => label => $1, url => '/admin/project/'.$1.'/index.html');
$proj->child( base => label => _('Overview'), url => '/admin/project/'.$1.'/index.html');
$proj->child( people => label => _('People'), url => '/admin/project/'.$1.'/people');
};
on qr'^/admin/repository/([^/]+)(/.*|)$' => run {
my $name = $1;
my $path = $2||'index.html';
$name = URI::Escape::uri_unescape($name);
warn "Name - $name - $path";
my $repository = CommitBit::Model::Repository->new();
$repository->load_by_cols( name => $name );
unless ($repository->id) {
redirect '/__jifty/error/repository/not_found';
}
my $admin = Jifty->web->navigation->child('admin')->child('repos');
$radmin = $admin->child($repository->name => url => '/admin/repository/'.$name.'/index.html');
$radmin->child( $repository->name => label => 'Overview', url => '/admin/repository/'.$name.'/index.html');
$radmin->child( $repository->name."projects" => label => 'Projects', url => '/admin/repository/'.$name.'/projects');
set repository => $repository;
show "/admin/repository/$path";
};
on qr'^/(.*?/)?project/([^/]+)(/.*|)$' => run {
my $prefix = $1 ||'';
my $name = $2;
my $path = $3;
warn "Got to $1 $2 $3";
unless (lc($prefix) eq 'admin') {
Jifty->web->navigation->child(admin => label => _('Admin project'), url => '/admin/project/'.$name, order => 5);
}
$name = URI::Escape::uri_unescape($name);
my $project = CommitBit::Model::Project->new();
$project->load_by_cols( name => $name );
unless ($project->id) {
redirect '/__jifty/error/project/not_found';
}
if (lc($prefix) eq 'admin') {
unless ($project->is_project_admin(Jifty->web->current_user)
or Jifty->web->current_user->user_object->admin) {
redirect '/__jifty/error/permission_denied/not_admin';
}
}
set project => $project;
my $url = $prefix . ($path ? '/project/' . $path : '/project/index.html' );
show $url;
};
1;
syntax highlighted by Code2HTML, v. 0.9.1