Use eval to decode JSON content (#183)

This commit is contained in:
Clément Oudot 2014-11-14 16:53:56 +00:00
parent 914fe20eb5
commit c64f69a852
2 changed files with 25 additions and 6 deletions

View File

@ -7,7 +7,6 @@ package Lemonldap::NG::Portal::AuthOpenIDConnect;
use strict;
use Lemonldap::NG::Portal::Simple;
use JSON;
use MIME::Base64;
use base qw(Lemonldap::NG::Portal::_OpenIDConnect);
@ -79,7 +78,7 @@ sub extractFormInfo {
my $content = $self->getAuthorizationCodeAccessToken($code);
return PE_ERROR unless $content;
my $json = decode_json $content;
my $json = $self->decodeJSON($content);
if ( $json->{error} ) {
$self->lmLog( "Error in token response:" . $json->{error},
@ -99,9 +98,8 @@ sub extractFormInfo {
my ( $id_token_header, $id_token_payload, $id_token_signature ) =
split( /\./, $id_token );
# TODO check signature
my $id_token_payload_hash =
decode_json( decode_base64($id_token_payload) );
$self->decodeJSON( decode_base64($id_token_payload) );
my $user_id = $id_token_payload_hash->{sub};

View File

@ -32,7 +32,7 @@ sub getCallbackUri {
return $callback_uri;
}
## @method Strind buildAuthorizationCodeAuthnRequest(String state)
## @method String buildAuthorizationCodeAuthnRequest(String state)
# Build Authentication Request URI for Authorization Code Flow
# @param state State
# return String Authentication Request URI
@ -66,7 +66,7 @@ sub buildAuthorizationCodeAuthnRequest {
return $authn_uri;
}
## @method Strind getAuthorizationCodeAccessToken(String code)
## @method String getAuthorizationCodeAccessToken(String code)
# Get Token response with autorization code
# @param code Code
# return String Token response decoded content
@ -99,6 +99,23 @@ sub getAuthorizationCodeAccessToken {
return $response->decoded_content;
}
## @method HashRef decodeJSON(String json)
# Convert JSON to HashRef
# @param json JSON raw content
# @return HashRef JSON decoded content
sub decodeJSON {
my ( $self, $json ) = splice @_;
my $json_hash;
eval { $json_hash = decode_json $json; };
if ($@) {
$json_hash->{error} = "parse_error";
}
return $json_hash;
}
1;
__END__
@ -132,6 +149,10 @@ Build Authentication Request URI for Authorization Code Flow
Get Token response with autorization code
=head2 decodeJSON
Convert JSON to HashRef
=head1 SEE ALSO
L<Lemonldap::NG::Portal::AuthOpenIDConnect>, L<Lemonldap::NG::Portal::UserDBOpenIDConnect>