package LDV; use strict; use warnings; use utf8; use Mojo::Base 'Mojolicious'; sub startup { my ($self) = @_; my $config = $self->app->home->rel_file('conf/ldv.conf'); $self->plugin(Config => {file => $config}); $self->plugin(I18N => {default => 'ru'}); $self->plugin('LDV::Helpers'); $self->app->mode('production'); $self->app->secrets([ $self->app->config->{secret} ]); $self->app->attr(json => sub { require JSON; my $json = JSON->new->utf8; return $json; }); $self->app->attr(email => sub { require LDV::Email; my $email = LDV::Email->new($self->app->config->{email} // {}); return $email; }); $self->app->attr(ldap => sub { require LDV::LDAP; my $ldap = LDV::LDAP->new($self->app->config->{ldap}); return $ldap; }); $self->app->attr(db => sub { require LDV::DB; my $db = LDV::DB->new($self->app->config->{db}); $db->connect; return $db; }); my $r = $self->routes; { # /user my $user = $r->route('/user') -> to(controller => 'user'); $user->get('/') ->to(cb => sub { shift->redirect_to('/user/login'); }); $user->get('/login') ->to(action => 'login'); $user->get('/register') ->to(action => 'register'); $user->get('/profile') ->to(action => 'profile'); $user->post('/auth') ->to(action => 'auth'); $user->get ('/logout') ->to(action => 'logout'); $user->post('/create') ->to(action => 'create'); $user->post('/update') ->to(action => 'update'); $user->get('/eaccess') ->to(action => 'eaccess'); } { # /zerobin my $zb = $r->route('/zerobin') -> to(controller => 'zerobin'); $zb->post('/') -> to(action => 'save'); $zb->get ('/') -> to(action => 'create'); $zb->route('/:time', time => qr/\d+/) ->via('GET') -> to(action => 'view'); $zb->get('/prune') -> to(action => 'prune'); my $conf = $self->app->config->{zerobin}; mkdir $self->app->home->rel_dir($conf->{root}); } { # /imgbin my $conf = $self->app->config->{imgbin}; my $ib = $r->route('/imgbin') -> to(controller => 'imgbin'); $ib->post('/') -> to(action => 'save'); $ib->get ('/') -> to(action => 'create'); $ib->route('/:time', time => qr/\d+/) ->via('GET') -> to(action => 'view'); $ib->get ('/prune') -> to(action => 'prune'); $ib->get ('/latest') -> to(action => 'latest') if ($conf->{show_latest}); mkdir $self->app->home->rel_dir($conf->{root}); mkdir $self->app->home->rel_file('public/images'); mkdir $self->app->home->rel_file('public/images/full'); mkdir $self->app->home->rel_file('public/images/small'); $ENV{MOJO_MAX_MESSAGE_SIZE} = $conf->{maxsize} + 2 * 1024 * 1024; # +2Mb } } 1;