Bug 20402: Remove dependency on Mojo::Plugin::OAuth2::Server
authorJulian Maurice <julian.maurice@biblibre.com>
Tue, 17 Apr 2018 17:07:01 +0000 (19:07 +0200)
committerJonathan Druart <jonathan.druart@bugs.koha-community.org>
Tue, 8 May 2018 18:55:42 +0000 (15:55 -0300)
Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>
C4/Installer/PerlDependencies.pm
Koha/REST/V1.pm
Koha/REST/V1/Auth.pm

index cfd8d68..ffc8661 100644 (file)
@@ -893,11 +893,6 @@ our $PERL_DEPS = {
         required => '1',
         min_ver  => '0.16',
     },
-    'Mojolicious::Plugin::OAuth2::Server' => {
-        usage    => 'REST API',
-        required => '1',
-        min_ver  => '0.40',
-    }
 };
 
 1;
index 9059ea5..57ad113 100644 (file)
@@ -19,8 +19,6 @@ use Modern::Perl;
 
 use Mojo::Base 'Mojolicious';
 
-use Koha::OAuth;
-
 use C4::Context;
 
 =head1 NAME
@@ -53,7 +51,6 @@ sub startup {
         $self->secrets([$secret_passphrase]);
     }
 
-    $self->plugin('OAuth2::Server' => Koha::OAuth::config);
     $self->plugin(OpenAPI => {
         url => $self->home->rel_file("api/v1/swagger/swagger.json"),
         route => $self->routes->under('/api/v1')->to('Auth#under'),
index f9b885f..65f0e71 100644 (file)
@@ -21,6 +21,8 @@ use Modern::Perl;
 
 use Mojo::Base 'Mojolicious::Controller';
 
+use Net::OAuth2::AuthorizationServer;
+
 use C4::Auth qw( check_cookie_auth get_session haspermission );
 use C4::Context;
 
@@ -115,10 +117,17 @@ sub authenticate_api_request {
 
     my $authorization_header = $c->req->headers->authorization;
     if ($authorization_header and $authorization_header =~ /^Bearer /) {
-        if (my $oauth = $c->oauth) {
+        my $server = Net::OAuth2::AuthorizationServer->new;
+        my $grant = $server->client_credentials_grant(Koha::OAuth::config);
+        my ($type, $token) = split / /, $authorization_header;
+        my ($valid_token, $error) = $grant->verify_access_token(
+            access_token => $token,
+        );
+
+        if ($valid_token) {
             my $clients = C4::Context->config('api_client');
             $clients = [ $clients ] unless ref $clients eq 'ARRAY';
-            my ($client) = grep { $_->{client_id} eq $oauth->{client_id} } @$clients;
+            my ($client) = grep { $_->{client_id} eq $valid_token->{client_id} } @$clients;
 
             my $patron = Koha::Patrons->find($client->{patron_id});
             my $permissions = $authorization->{'permissions'};