From 72d5df14dfc14a5bac0ffbacfddfbb221f5dc91c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andrej=20Rama=C5=A1euski?= <andrej@x2.cz> Date: Wed, 31 Jan 2024 16:54:51 +0100 Subject: [PATCH] Opravy API, podpora Chobotnice --- .drone.yml | 16 ------------- VERSION | 2 +- lib/PZ.pm | 4 ++++ lib/PZ/Controller/Shortcut.pm | 8 +++++-- lib/PZ/Helpers/Octopus.pm | 43 +++++++++++++++++++++++++++++++++++ p_z.conf | 3 +++ 6 files changed, 57 insertions(+), 19 deletions(-) delete mode 100644 .drone.yml create mode 100644 lib/PZ/Helpers/Octopus.pm diff --git a/.drone.yml b/.drone.yml deleted file mode 100644 index e425335..0000000 --- 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 24ba9a3..834f262 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -2.7.0 +2.8.0 diff --git a/lib/PZ.pm b/lib/PZ.pm index 4951ab1..7483ab1 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 a293765..d992049 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 0000000..e058a74 --- /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 75679d0..52c5b69 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}, + }, }; -- GitLab