-
Andrej Ramašeuski authoredAndrej Ramašeuski authored
PZ.pm 1.94 KiB
package PZ;
use Mojo::Base 'Mojolicious';
use Mojo::Pg;
use Mojo::Redis;
use Mojolicious::Plugin::Authentication;
use Net::OAuth2::Profile::WebServer;
use PZ::Schema;
sub startup {
my $self = shift;
# Nacteni konfigurace
my $cfg = $self->plugin('Config');
$self->helper( cfg => sub { return $cfg; } );
# Podpis pro cookies
$self->secrets($cfg->{session}{secrets});
# Delka session
$self->sessions->default_expiration($cfg->{session}{lifetime});
$self->plugin('PZ::Helpers::OIDC');
my $redis = Mojo::Redis->new( 'redis://' . $cfg->{redis}{server} );
$self->helper( redis => sub { return $redis; } );
# migrace schematu
my $pg = Mojo::Pg->new
->dsn($cfg->{database}{dsn})
->username($cfg->{database}{user})
->password($cfg->{database}{password})
;
$pg->migrations->from_file($self->home . '/sql/migrations.sql');
$pg->migrations->migrate();
$self->helper( pg => sub { return $pg; } );
# Spojeni s databazi
my $schema = PZ::Schema->connect($cfg->{database});
$self->helper( schema => sub { return $schema; } );
$self->plugin('authentication', {
autoload_user => 1,
load_user => sub {
my $c = shift;
return $c->session->{user};
},
validate_user => sub {
my $c = shift;
return undef if ! $c->session->{user};
return $c->session->{user}{id};
},
});
# defautni globalni promenne ve stash
$self->defaults();
# vypnuti cache templatu pri vyvoji
$self->renderer->cache->max_keys(0) if $cfg->{dev_mode};
# router
my $r = $self->routes;
$r->get('/')->to(cb => sub { shift->render('index'); });
$r->post('/')->to('Shortcut#create');
$r->get('/login')->to('OIDC#callback');
$r->get('/logout')->to('OIDC#do_logout');
$r->get('/:shortcut')->to('Shortcut#redirect');