OIDC-Lite

 view release on metacpan or  search on metacpan

lib/OIDC/Lite/Server/AuthorizationHandler.pm  view on Meta::CPAN

package OIDC::Lite::Server::AuthorizationHandler;
use strict;
use warnings;

use Params::Validate;
use OAuth::Lite2::Server::Error;

my @DEFINED_DISPLAY_PARAMS = qw(
    page
    popup
    touch
    wap
);

my @DEFINED_PROMPT_PARAMS = qw(
    none
    login
    consent
    select_account
);

sub new {
    my $class = shift;
    my %args = Params::Validate::validate(@_, {
        data_handler => 1,
        response_types => 1,
    });

    my $self = bless {
        data_handler   => $args{data_handler},
        response_types   => $args{response_types},
    }, $class;
    return $self;
}

sub handle_request {
    my ($self) = @_;
    my $dh = $self->{data_handler};
    my $req = $self->{data_handler}->request;

    # response_type
    my $allowed_response_type = $self->{response_types};
    my $response_type = $req->param("response_type")
        or OAuth::Lite2::Server::Error::InvalidRequest->throw(
            description => "'response_type' not found"
        );

    my @response_type_for_sort = split(/\s/, $response_type);
    @response_type_for_sort = sort @response_type_for_sort;
    $response_type = join(' ', @response_type_for_sort);

    my %allowed_response_type_hash;
    $allowed_response_type_hash{$_}++ foreach @$allowed_response_type;
    OAuth::Lite2::Server::Error::InvalidRequest->throw(
        description => "'response_type' not allowed"
    ) unless (exists $allowed_response_type_hash{$response_type});
 
    # client_id
    my $client_id = $req->param("client_id")
        or OAuth::Lite2::Server::Error::InvalidClient->throw(
            description => "'client_id' not found"
        );

    OAuth::Lite2::Server::Error::InvalidClient->throw
        unless ($dh->validate_client_by_id($client_id));

    OAuth::Lite2::Server::Error::InvalidRequest->throw(
        description => "'response_type' not allowed for this 'client_id'"
    ) unless ($dh->validate_client_for_authorization($client_id, $response_type));



( run in 1.131 second using v1.01-cache-2.11-cpan-364913b4093 )