File Coverage

blib/lib/OAuth/Lite2/Server/GrantHandler/ExternalService.pm
Criterion Covered Total %
statement 35 35 100.0
branch 10 16 62.5
condition 8 12 66.6
subroutine 7 7 100.0
pod 1 1 100.0
total 61 71 85.9


line stmt bran cond sub pod time code
1             package OAuth::Lite2::Server::GrantHandler::ExternalService;
2              
3 2     2   1367 use strict;
  2         2  
  2         47  
4 2     2   6 use warnings;
  2         2  
  2         41  
5              
6 2     2   4 use parent 'OAuth::Lite2::Server::GrantHandler';
  2         3  
  2         7  
7 2     2   72 use OAuth::Lite2::Server::Error;
  2         3  
  2         26  
8 2     2   327 use OAuth::Lite2::ParamMethod::AuthHeader;
  2         2  
  2         44  
9 2     2   7 use Carp ();
  2         2  
  2         429  
10              
11             sub handle_request {
12 10     10 1 252 my ($self, $dh) = @_;
13              
14 10         22 my $req = $dh->request;
15              
16 10         28 my $parser = OAuth::Lite2::ParamMethod::AuthHeader->new;
17 10         19 my $header_credentials = $parser->basic_credentials($req);
18 10 50       31 my $client_id = ($header_credentials->{client_id}) ? $header_credentials->{client_id} : $req->param("client_id");
19              
20 10 100       1465 my $assertion = $req->param("assertion")
21             or OAuth::Lite2::Server::Error::InvalidRequest->throw(
22             description => "'assertion' not found"
23             );
24              
25 9 100 100     78 my $user_id = $dh->get_user_id_by_external_assertion(
      100        
      100        
26             client_id => $client_id,
27             assertion => $assertion,
28             type => $req->param("type") || '',
29             iss => $req->param("iss") || '',
30             aud => $req->param("aud") || '',
31             ) or OAuth::Lite2::Server::Error::InvalidGrant->throw;
32              
33 4         148 my $scope = $req->param("scope");
34              
35 4         28 my $auth_info = $dh->create_or_update_auth_info(
36             client_id => $client_id,
37             user_id => $user_id,
38             scope => $scope,
39             );
40 4 50 33     45 Carp::croak "OAuth::Lite2::Server::DataHandler::create_or_update_auth_info doesn't return OAuth::Lite2::Model::AuthInfo"
41             unless ($auth_info
42             && $auth_info->isa("OAuth::Lite2::Model::AuthInfo"));
43              
44 4         8 my $access_token = $dh->create_or_update_access_token(
45             auth_info => $auth_info,
46             );
47 4 50 33     36 Carp::croak "OAuth::Lite2::Server::DataHandler::create_or_update_access_token doesn't return OAuth::Lite2::Model::AccessToken"
48             unless ($access_token
49             && $access_token->isa("OAuth::Lite2::Model::AccessToken"));
50              
51 4         8 my $res = {
52             token_type => 'Bearer',
53             access_token => $access_token->token,
54             };
55 4 50       18 $res->{expires_in} = int($access_token->expires_in)
56             if $access_token->expires_in;
57 4 50       25 $res->{refresh_token} = $auth_info->refresh_token
58             if $auth_info->refresh_token;
59 4 50       24 $res->{scope} = $auth_info->scope
60             if $auth_info->scope;
61              
62 4         23 return $res;
63             }
64              
65             =head1 NAME
66              
67             OAuth::Lite2::Server::GrantHandler::ExternalService - handler for 'federated-assertion' grant_type request
68              
69             =head1 SYNOPSIS
70              
71             my $handler = OAuth::Lite2::Server::GrantHandler::ExternalService->new;
72             my $res = $handler->handle_request( $data_handler );
73              
74             =head1 DESCRIPTION
75              
76             handler for 'federated-assertion' grant_type request.
77              
78             =head1 METHODS
79              
80             =head2 handle_request( $req )
81              
82             See L document.
83              
84             =head1 AUTHOR
85              
86             Ryo Ito, Eritou.06@gmail.comE
87              
88             =head1 COPYRIGHT AND LICENSE
89              
90             Copyright (C) 2014 by Ryo Ito
91              
92             This library is free software; you can redistribute it and/or modify
93             it under the same terms as Perl itself, either Perl version 5.8.8 or,
94             at your option, any later version of Perl 5 you may have available.
95              
96             =cut
97              
98             1;