Lemonldap-NG-Manager

 view release on metacpan or  search on metacpan

lib/Lemonldap/NG/Manager/Api/Providers/SamlSp.pm  view on Meta::CPAN

        "Invalid input: A SAML SP with confKey $add->{confKey} already exists",
        409
    ) if ( defined $self->_getSamlSpByConfKey( $conf, $add->{confKey} ) );

    return $self->sendError( $req,
        "Invalid input: A SAML SP with entityID $entityId already exists", 409 )
      if ( defined $self->_getSamlSpByEntityId( $conf, $entityId ) );

    my $res = $self->_pushSamlSp( $conf, $add->{confKey}, $add, 1 );

    return $self->sendError( $req, $res->{msg}, $res->{code} || 400 )
      unless ( $res->{res} eq 'ok' );

    return $self->sendJSONresponse(
        $req,
        { message => "Successful operation" },
        code => 201
    );
}

sub replaceSamlSp {
    my ( $self, $req ) = @_;

    my $confKey = $req->params('confKey')
      or return $self->sendError( $req, 'confKey is missing', 400 );

    my $replace = $req->jsonBodyToObj;

    return $self->sendError( $req, "Invalid input: " . $req->error, 400 )
      unless ($replace);

    return $self->sendError( $req, 'Invalid input: metadata is missing', 400 )
      unless ( defined $replace->{metadata} );

    $self->logger->debug(
        "[API] SAML SP $confKey configuration replace requested");

    # Get latest configuration
    my $conf = $self->_confAcc->getConf( { noCache => 1 } );

    # Return 404 if not found

    return $self->sendError( $req,
        "SAML service provider '$confKey' not found", 404 )
      unless ( defined $self->_getSamlSpByConfKey( $conf, $confKey ) );

    # check if new entityId exists already
    my $res = $self->_isNewSamlSpEntityIdUnique( $conf, $confKey, $replace );

    return $self->sendError( $req, $res->{msg}, 409 )
      unless ( $res->{res} eq 'ok' );

    $res = $self->_pushSamlSp( $conf, $confKey, $replace, 1 );

    return $self->sendError( $req, $res->{msg}, $res->{code} || 400 )
      unless ( $res->{res} eq 'ok' );

    return $self->sendJSONresponse( $req, undef, code => 204 );
}

sub updateSamlSp {
    my ( $self, $req ) = @_;
    my $res;
    my $confKey = $req->params('confKey')
      or return $self->sendError( $req, 'confKey is missing', 400 );

    my $update = $req->jsonBodyToObj;

    return $self->sendError( $req, "Invalid input: " . $req->error, 400 )
      unless ($update);

    $self->logger->debug(
        "[API] SAML SP $confKey configuration update requested");

    # Get latest configuration
    my $conf    = $self->_confAcc->getConf( { noCache => 1 } );
    my $current = $self->_getSamlSpByConfKey( $conf, $confKey );

    # Return 404 if not found
    return $self->sendError( $req,
        "SAML service provider '$confKey' not found", 404 )
      unless ( defined $current );

    if ( defined $update->{metadata} ) {

        # check if new entityId exists already
        $res = $self->_isNewSamlSpEntityIdUnique( $conf, $confKey, $update );

        return $self->sendError( $req, $res->{msg}, 409 )
          unless ( $res->{res} eq 'ok' );

    }

    $res = $self->_pushSamlSp( $conf, $confKey, $update, 0 );
    return $self->sendError( $req, $res->{msg}, $res->{code} || 400 )
      unless ( $res->{res} eq 'ok' );

    return $self->sendJSONresponse( $req, undef, code => 204 );
}

sub deleteSamlSp {
    my ( $self, $req ) = @_;

    my $confKey = $req->params('confKey')
      or return $self->sendError( $req, 'confKey is missing', 400 );

    # Get latest configuration
    my $conf = $self->_confAcc->getConf( { noCache => 1 } );

    my $delete = $self->_getSamlSpByConfKey( $conf, $confKey );

    # Return 404 if not found

    return $self->sendError( $req,
        "SAML service provider '$confKey' not found", 404 )
      unless ( defined $delete );

    delete $conf->{samlSPMetaDataXML}->{$confKey};
    delete $conf->{samlSPMetaDataOptions}->{$confKey};
    delete $conf->{samlSPMetaDataExportedAttributes}->{$confKey};
    delete $conf->{samlSPMetaDataMacros}->{$confKey};



( run in 2.716 seconds using v1.01-cache-2.11-cpan-75ffa21a3d4 )