|
| 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