diff --git a/.drone.yml b/.drone.yml deleted file mode 100644 index e425335bd0ee07a0bdbaea64a784ec7df865081c..0000000000000000000000000000000000000000 --- a/.drone.yml +++ /dev/null @@ -1,16 +0,0 @@ -kind: pipeline -name: default - -steps: -- name: docker - image: plugins/docker - settings: - username: test - password: test - repo: andrej/test - password: - from_secret: password - username: - from_secret: username - tags: - - latest diff --git a/VERSION b/VERSION index 24ba9a38de68d00674ec97b283a967699716b9f4..834f2629538327723c074ed4c3addca9888f0256 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -2.7.0 +2.8.0 diff --git a/lib/PZ.pm b/lib/PZ.pm index 4951ab183c8b7f787c848aca5a66d5adae55a1db..7483ab1d497d6ee0d4d01a00fd7461bf70cb2119 100644 --- a/lib/PZ.pm +++ b/lib/PZ.pm @@ -30,6 +30,7 @@ sub startup { $self->plugin("ForwardedFor"); $self->plugin('PZ::Helpers::Core'); $self->plugin('PZ::Helpers::OIDC'); + $self->plugin('PZ::Helpers::Octopus'); my $redis = Mojo::Redis->new( 'redis://' . $cfg->{redis}{server} ); $self->helper( redis => sub { return $redis; } ); @@ -80,6 +81,9 @@ sub startup { return $c->$cb('Authorization header not present') if ! $token; + $token = $c->octopus_auth($token) if length($token) > 32; + return $c->$cb('Invalid token') if ! $token; + my $user = $c->schema->resultset('User')->find( { token => $token } ); diff --git a/lib/PZ/Controller/Shortcut.pm b/lib/PZ/Controller/Shortcut.pm index a293765522247a7319c9e8d072312ece3b032633..d992049796b133f3a15aa901eb9cb1fd1434d247 100644 --- a/lib/PZ/Controller/Shortcut.pm +++ b/lib/PZ/Controller/Shortcut.pm @@ -61,7 +61,9 @@ sub create ($c) { $title = $ua->get($url)->result->dom->at('title')->text; }; - my $shortcut = $c->current_user->add_to_shortcuts({ + my $user = $c->stash->{user} // $c->current_user; + + my $shortcut = $user->add_to_shortcuts({ url => $url, title => $title, shortcut => ($custom || $c->schema->resultset('Shortcut')->generate()) @@ -98,8 +100,10 @@ sub delete ($c) { sub list ($c) { my @shortcuts = (); + my $user = $c->stash->{user} // $c->current_user; + SHORTCUT: - foreach my $shortcut ( $c->current_user->shortcuts( + foreach my $shortcut ( $user->shortcuts( { deleted => undef }, { order_by => {-desc => 'created'} }, ) ) { diff --git a/lib/PZ/Helpers/Octopus.pm b/lib/PZ/Helpers/Octopus.pm new file mode 100644 index 0000000000000000000000000000000000000000..e058a74725e91d736da1738d7f2c0a178d8d3510 --- /dev/null +++ b/lib/PZ/Helpers/Octopus.pm @@ -0,0 +1,43 @@ +package PZ::Helpers::Octopus; + +use strict; +use warnings; + +use base 'Mojolicious::Plugin'; +use Mojo::JWT; + +sub register { + my ($class, $self) = @_; + + $self->helper( octopus_auth => sub { + my $c = shift; + my $token = shift // return undef; + + my $claims; + + eval { + $claims = Mojo::JWT->new( + secret => $self->cfg->{octopus}{secret} + )->decode($token); + }; + + if ( $@ ) { + $c->app->log->warn( $@ ); + return undef; + } + + my $user = $c->schema->resultset('User')->update_or_create( + uuid => $claims->{uuid}, + { key => 'uuid', } + ); + + $user->set_token; + + return $user->token; + }); + +} + +1; + +__END__ diff --git a/p_z.conf b/p_z.conf index 75679d0767e769393d893a26330b2d8306e3b69d..52c5b698f3a692826ca858155a93bc0635ae5d50 100644 --- a/p_z.conf +++ b/p_z.conf @@ -34,4 +34,7 @@ piratar => 'https://a.pirati.cz/piratar/100/', domain => $ENV{DOMAIN}, dev_mode => ( $ENV{MOJO_MODE} eq 'development'), + octopus => { + secret => $ENV{OCTOPUS_SECRET}, + }, };