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'); $r->get('/:shortcut/qr.png')->to('Shortcut#qr'); } 1;