File Coverage

blib/lib/Bootylicious/Admin.pm
Criterion Covered Total %
statement 3 3 100.0
branch n/a
condition n/a
subroutine 1 1 100.0
pod n/a
total 4 4 100.0


line stmt bran cond sub pod time code
1             package Bootylicious::Admin;
2              
3 1     1   11403 use Mojolicious::Lite;
  1         2  
  1         8  
4              
5             unshift @{app->plugins->namespaces}, 'Bootylicious::Plugin';
6              
7             plugin 'booty_config';
8             plugin 'model';
9              
10             app->helper(is_logged_in => sub { shift->session->{admin} ? 1 : 0 });
11             app->helper(logout => sub { shift->session(admin => 0, expires => 1) });
12              
13             get '/' => sub {
14             my $self = shift;
15              
16             return $self->redirect_to('login') unless $self->is_logged_in;
17             } => 'index';
18              
19             any [qw/get post/] => '/create_article' => sub {
20             my $self = shift;
21              
22             return unless $self->req->method eq 'POST';
23              
24             my $validator = $self->create_validator;
25              
26             $validator->field('name')->required(1)->regexp(qr/^[a-z0-9-]+$/);
27             $validator->field('format')->required(1)->in(keys %{$self->parsers});
28             $validator->field('title')->required(1);
29             $validator->field('tags');
30             $validator->field('content')->required(1);
31             $validator->field('link')->url(1);
32             $validator->field('author');
33              
34             return unless $self->validate($validator);
35              
36             Bootylicious::Article->new->create($self->articles_root,
37             $validator->values);
38              
39             return $self->redirect_to('admin');
40             } => 'create-article';
41              
42             get '/:year/:month/:name' => sub {
43             my $self = shift;
44              
45             my $article = $self->get_article(@{$self->stash}{qw/year month name/});
46              
47             return $self->reply->not_found unless $article;
48              
49             $self->stash(article => $article);
50              
51             return unless $self->req->method eq 'POST';
52              
53             my $validator = $self->create_validator;
54              
55             $validator->field('title')->required(1);
56             $validator->field('tags');
57             $validator->field('content')->required(1);
58             $validator->field('link')->url(1);
59             $validator->field('author');
60              
61             return unless $self->validate($validator);
62              
63             $article->update($validator->values);
64              
65             return $self->redirect_to('admin');
66             } => 'article';
67              
68             any [qw/get post/] => '/login' => sub {
69             my $self = shift;
70              
71             return $self->reply->not_found if $self->is_logged_in;
72              
73             return unless $self->req->method eq 'POST';
74              
75             my $validator = $self->create_validator;
76              
77             $validator->field('username')->required(1);
78             $validator->field('password')->required(1);
79              
80             return unless $self->validate($validator);
81              
82             my $username = $self->stash('conf')->{username};
83             my $password = $self->stash('conf')->{password};
84              
85             my $values = $validator->values;
86             if ($values->{username} eq $username && $values->{password} eq $password)
87             {
88             $self->session(admin => 1);
89             return $self->redirect_to('index');
90             }
91              
92             $self->stash(
93             validator_errors => {username => 'Wrong username or password'});
94             } => 'login';
95              
96             get '/logout' => sub {
97             my $self = shift;
98              
99             return $self->reply->not_found unless $self->is_logged_in;
100              
101             $self->logout;
102              
103             return $self->redirect_to('login');
104             } => 'logout';
105              
106             1;
107             __DATA__