Skip to content

Commit e7737d7

Browse files
author
Kaitlyn Parkhurst
committed
Add dispatch table and config.
1 parent 22d6708 commit e7737d7

1 file changed

Lines changed: 101 additions & 0 deletions

File tree

Web/lib/BlogDB/Web.pm

Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
package BlogDB::Web;
2+
use Mojo::Base 'Mojolicious', -signatures;
3+
use BlogDB::DB;
4+
5+
sub startup ($self) {
6+
7+
# Load config, this will give us $self->config.
8+
$self->plugin('NotYAMLConfig', { file => 'blogdb.yml' });
9+
10+
# Seed the secrets for session management.
11+
$self->secrets($self->config->{secrets});
12+
13+
# Set the session cookie expires to 30 days.
14+
$self->sessions->default_expiration(2592000);
15+
16+
# Use Text::Xslate for template rendering.
17+
$self->plugin(xslate_renderer => {
18+
template_options => {
19+
syntax => 'Metakolon',
20+
}
21+
});
22+
23+
# Create $self->db as a BlogDB::DB connection.
24+
$self->helper( db => sub {
25+
return state $db = BlogDB::DB->connect($self->config->{database}->{blogdb});
26+
});
27+
28+
# Create $self->set_template
29+
$self->helper( set_template => sub ($c, $name) {
30+
$c->stash->{template} = sprintf( "%s/%s", $c->config->{template_dir}, $name );
31+
});
32+
33+
# Get the router.
34+
my $r = $self->routes;
35+
36+
# Create a dispatch chain that requires the user is logged in.
37+
my $auth = $r->under( '/' => sub ($c) {
38+
39+
# Login via session cookie.
40+
if ( $c->session('uid') ) {
41+
my $person = $c->db->resultset('Person')->find( $c->session('uid') );
42+
43+
if ( $person && $person->is_enabled ) {
44+
$c->stash->{person} = $person;
45+
return 1;
46+
}
47+
$c->redirect_to( $c->url_for( 'auth_login' ) );
48+
return undef;
49+
}
50+
51+
$c->redirect_to( $c->url_for( 'auth_login' ) );
52+
return undef;
53+
});
54+
55+
# Home Page
56+
$r->get('/')->to( 'Root#get_homepage' )->name('homepage');
57+
58+
# Standard user stuff: register, forgot password, login and logout.
59+
$r->get ( '/register' )->to( 'Root#get_register' )->name('register');
60+
$r->post( '/register' )->to( 'Root#post_register')->name('do_register');
61+
$r->get ( '/forgot' )->to( 'Root#get_forgot' )->name('forgot_password');
62+
$r->post( '/forgot' )->to( 'Root#post_forgot' )->name('do_forgot_password');
63+
$r->get ( '/forgot/:token')->to( 'Root#get_reset' )->name('reset_password');
64+
$r->post( '/forgot/:token')->to( 'Root#post_reset' )->name('do_reset_password');
65+
$r->post( '/login' )->to( 'Root#post_login' )->name('do_login');
66+
$r->post( '/logout' )->to( 'Root#post_logout' )->name('do_logout');
67+
68+
# /user/ routes
69+
$r->get ( '/user/:name' )->to( 'User#get_user' )->name( 'user' );
70+
$auth->post( '/user/:name/follow' )->to( 'User#post_follow' )->name( 'do_follow_user' );
71+
$auth->post( '/user/:name/unfollow' )->to( 'User#post_unfollow')->name( 'do_unfollow_user' );
72+
$auth->get ( '/user/settings' )->to( 'User#get_settings' )->name( 'user_settings' );
73+
$auth->post( '/user/settings/bio' )->to( 'User#post_bio' )->name( 'do_user_bio' );
74+
$auth->post( '/user/settings/about' )->to( 'User#post_about' )->name( 'do_user_about' );
75+
$auth->post( '/user/settings/password')->to( 'User#post_password')->name( 'do_user_password' );
76+
$auth->post( '/user/settings/email' )->to( 'User#post_email' )->name( 'do_user_email' );
77+
78+
# /blog/ routes
79+
$r->get ( '/blog/:name' )->to( 'Blog#get_blog' )->name( 'blog' );
80+
$auth->post( '/blog/:name/follow' )->to( 'Blog#post_follow' )->name( 'do_follow_blog' );
81+
$auth->post( '/blog/:name/unfollow' )->to( 'Blog#post_unfollow' )->name( 'do_unfollow_blog' );
82+
$auth->get ( '/blog/:name/settings' )->to( 'Blog#get_settings' )->name( 'blog_settings' );
83+
$auth->post( '/blog/:name' )->to( 'Blog#post_settings' )->name( 'do_blog_settings' );
84+
$auth->post( '/blog/:name/publish' )->to( 'Blog#post_publish' )->name( 'do_publish' );
85+
$auth->post( '/blog/:name/unpublish' )->to( 'Blog#post_unpublish')->name( 'do_unpublish' );
86+
87+
# /new/
88+
$r->post ( '/new' )->to( 'Create#post_new' )->name( 'do_add_new_blog' );
89+
$r->get ( '/new/:name' )->to( 'Create#get_new_blog' )->name( 'update_new_blog' );
90+
$r->post ( '/new/:name' )->to( 'Create#post_new_blog' )->name( 'do_update_new_blog');
91+
$auth->post( '/new/:name/push' )->to( 'Create#post_push_blog')->name( 'do_push_new_blog' );
92+
93+
# /tags/
94+
$r->get ( '/tags' )->to( 'Tags#get_tags' )->name( 'tags' );
95+
$auth->post( '/tags/suggest' )->to( 'Tags#post_suggest_tag')->name( 'do_suggest_tag' );
96+
$auth->post( '/tags/vote' )->to( 'Tags#post_vote_tag' )->name( 'do_vote_tag' );
97+
$auth->post( '/tags/delete' )->to( 'Tags#post_delete_tag' )->name( 'do_delete_tag' );
98+
99+
}
100+
101+
1;

0 commit comments

Comments
 (0)