2019-11-08 18:31:50 +01:00
|
|
|
# This module implements all the methods that responds to '/api/*' requests
|
|
|
|
package Lemonldap::NG::Manager::Api;
|
|
|
|
|
2020-11-21 18:19:10 +01:00
|
|
|
use strict;
|
2019-11-08 18:31:50 +01:00
|
|
|
use utf8;
|
|
|
|
use Mouse;
|
|
|
|
|
|
|
|
use Lemonldap::NG::Manager::Api::2F;
|
2020-08-26 15:46:26 +02:00
|
|
|
use Lemonldap::NG::Manager::Api::Misc;
|
2019-12-17 09:56:59 +01:00
|
|
|
use Lemonldap::NG::Manager::Api::Providers::OidcRp;
|
|
|
|
use Lemonldap::NG::Manager::Api::Providers::SamlSp;
|
2020-06-17 08:57:40 +02:00
|
|
|
use Lemonldap::NG::Manager::Api::Providers::CasApp;
|
2020-06-24 16:58:10 +02:00
|
|
|
use Lemonldap::NG::Manager::Api::Menu::Cat;
|
|
|
|
use Lemonldap::NG::Manager::Api::Menu::App;
|
2019-11-08 18:31:50 +01:00
|
|
|
|
2020-12-23 14:57:55 +01:00
|
|
|
extends qw(
|
|
|
|
Lemonldap::NG::Manager::Plugin
|
|
|
|
Lemonldap::NG::Common::Conf::RESTServer
|
|
|
|
Lemonldap::NG::Common::Session::REST
|
|
|
|
);
|
|
|
|
|
2020-11-21 18:19:10 +01:00
|
|
|
our $VERSION = '2.0.10';
|
2019-11-08 18:31:50 +01:00
|
|
|
|
|
|
|
#############################
|
|
|
|
# I. INITIALIZATION METHODS #
|
|
|
|
#############################
|
|
|
|
|
|
|
|
use constant defaultRoute => 'api.html';
|
|
|
|
|
2020-01-27 18:32:59 +01:00
|
|
|
sub init {
|
2019-11-08 18:31:50 +01:00
|
|
|
my ( $self, $conf ) = @_;
|
|
|
|
|
2020-12-28 17:46:38 +01:00
|
|
|
$self->ua( Lemonldap::NG::Common::UserAgent->new($conf) );
|
|
|
|
|
2019-11-08 18:31:50 +01:00
|
|
|
# HTML template
|
|
|
|
$self->addRoute( 'api.html', undef, ['GET'] )
|
|
|
|
|
2019-12-04 17:50:41 +01:00
|
|
|
->addRoute(
|
2019-12-18 16:45:42 +01:00
|
|
|
api => {
|
|
|
|
v1 => {
|
2020-08-26 15:46:26 +02:00
|
|
|
status => 'status',
|
2019-12-18 16:45:42 +01:00
|
|
|
providers => {
|
|
|
|
oidc => {
|
|
|
|
rp => {
|
|
|
|
findByConfKey => {
|
|
|
|
':uPattern' => 'findOidcRpByConfKey'
|
|
|
|
},
|
|
|
|
findByClientId => {
|
|
|
|
':uClientId' => 'findOidcRpByClientId'
|
|
|
|
},
|
|
|
|
':confKey' => 'getOidcRpByConfKey'
|
2019-12-05 15:59:53 +01:00
|
|
|
},
|
2019-12-05 15:06:33 +01:00
|
|
|
},
|
2019-12-18 16:45:42 +01:00
|
|
|
saml => {
|
|
|
|
sp => {
|
|
|
|
findByConfKey => {
|
|
|
|
':uPattern' => 'findSamlSpByConfKey'
|
|
|
|
},
|
|
|
|
findByEntityId => {
|
|
|
|
':uEntityId' => 'findSamlSpByEntityId'
|
|
|
|
},
|
|
|
|
':confKey' => 'getSamlSpByConfKey'
|
2019-12-05 15:06:33 +01:00
|
|
|
},
|
|
|
|
},
|
2020-06-17 08:57:40 +02:00
|
|
|
cas => {
|
|
|
|
app => {
|
|
|
|
findByConfKey => {
|
|
|
|
':uPattern' => 'findCasAppByConfKey'
|
|
|
|
},
|
|
|
|
findByServiceUrl => {
|
|
|
|
':uServiceUrl' => 'findCasAppsByServiceUrl'
|
|
|
|
},
|
|
|
|
':confKey' => 'getCasAppByConfKey'
|
|
|
|
},
|
|
|
|
},
|
2019-12-05 12:40:03 +01:00
|
|
|
},
|
2019-12-19 16:52:51 +01:00
|
|
|
secondFactor => {
|
|
|
|
':uid' => {
|
|
|
|
id => {
|
|
|
|
':id' => 'getSecondFactorsById'
|
|
|
|
},
|
|
|
|
type => {
|
|
|
|
':type' => 'getSecondFactorsByType'
|
|
|
|
},
|
|
|
|
'*' => 'getSecondFactors'
|
|
|
|
},
|
|
|
|
},
|
2020-06-24 16:58:10 +02:00
|
|
|
menu => {
|
|
|
|
cat => {
|
|
|
|
findByConfKey => {
|
|
|
|
':uPattern' => 'findMenuCatByConfKey'
|
|
|
|
},
|
|
|
|
':confKey' => {
|
|
|
|
'*' => 'getMenuCatByConfKey'
|
|
|
|
}
|
|
|
|
},
|
|
|
|
app => {
|
|
|
|
':confKey' => {
|
|
|
|
findByConfKey => {
|
|
|
|
':uPattern' => 'findMenuAppByConfKey'
|
|
|
|
},
|
|
|
|
':appConfKey' => 'getMenuApp'
|
|
|
|
}
|
|
|
|
},
|
|
|
|
},
|
2019-12-04 17:50:41 +01:00
|
|
|
},
|
|
|
|
},
|
|
|
|
['GET']
|
2019-12-06 11:38:02 +01:00
|
|
|
)
|
|
|
|
|
|
|
|
->addRoute(
|
2019-12-18 16:45:42 +01:00
|
|
|
api => {
|
|
|
|
v1 => {
|
|
|
|
providers => {
|
|
|
|
oidc => {
|
|
|
|
rp => 'addOidcRp'
|
|
|
|
},
|
|
|
|
saml => {
|
|
|
|
sp => 'addSamlSp'
|
|
|
|
},
|
2020-06-17 08:57:40 +02:00
|
|
|
cas => {
|
|
|
|
app => 'addCasApp'
|
|
|
|
},
|
2019-12-06 11:38:02 +01:00
|
|
|
},
|
2020-06-24 16:58:10 +02:00
|
|
|
menu => {
|
|
|
|
cat => 'addMenuCat',
|
|
|
|
app => {
|
|
|
|
':confKey' => 'addMenuApp'
|
|
|
|
}
|
|
|
|
},
|
2019-12-06 11:38:02 +01:00
|
|
|
},
|
|
|
|
},
|
|
|
|
['POST']
|
2019-12-09 09:16:21 +01:00
|
|
|
)
|
|
|
|
|
|
|
|
->addRoute(
|
2019-12-18 16:45:42 +01:00
|
|
|
api => {
|
|
|
|
v1 => {
|
|
|
|
providers => {
|
|
|
|
oidc => {
|
2019-12-20 11:13:15 +01:00
|
|
|
rp => { ':confKey' => 'replaceOidcRp' }
|
2019-12-18 16:45:42 +01:00
|
|
|
},
|
|
|
|
saml => {
|
2019-12-20 11:13:15 +01:00
|
|
|
sp => { ':confKey' => 'replaceSamlSp' }
|
2019-12-18 16:45:42 +01:00
|
|
|
},
|
2020-06-17 08:57:40 +02:00
|
|
|
cas => {
|
|
|
|
app => { ':confKey' => 'replaceCasApp' }
|
|
|
|
},
|
2019-12-09 09:16:21 +01:00
|
|
|
},
|
2020-06-24 16:58:10 +02:00
|
|
|
menu => {
|
|
|
|
cat => { ':confKey' => 'replaceMenuCat' },
|
|
|
|
app => {
|
|
|
|
':confKey' => {
|
|
|
|
':appConfKey' => 'replaceMenuApp'
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
2019-12-09 09:16:21 +01:00
|
|
|
},
|
|
|
|
},
|
|
|
|
['PUT']
|
|
|
|
)
|
|
|
|
|
|
|
|
->addRoute(
|
2019-12-18 16:45:42 +01:00
|
|
|
api => {
|
|
|
|
v1 => {
|
|
|
|
providers => {
|
|
|
|
oidc => {
|
2019-12-20 11:13:15 +01:00
|
|
|
rp => { ':confKey' => 'updateOidcRp' }
|
2019-12-18 16:45:42 +01:00
|
|
|
},
|
|
|
|
saml => {
|
2019-12-20 11:13:15 +01:00
|
|
|
sp => { ':confKey' => 'updateSamlSp' }
|
2019-12-18 16:45:42 +01:00
|
|
|
},
|
2020-06-17 08:57:40 +02:00
|
|
|
cas => {
|
|
|
|
app => { ':confKey' => 'updateCasApp' }
|
|
|
|
},
|
2019-12-09 09:16:21 +01:00
|
|
|
},
|
2020-06-24 16:58:10 +02:00
|
|
|
menu => {
|
|
|
|
cat => { ':confKey' => 'updateMenuCat' },
|
|
|
|
app => {
|
|
|
|
':confKey' => {
|
|
|
|
':appConfKey' => 'updateMenuApp'
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
2019-12-09 09:16:21 +01:00
|
|
|
},
|
|
|
|
},
|
|
|
|
['PATCH']
|
2019-12-09 20:32:54 +01:00
|
|
|
)
|
|
|
|
|
|
|
|
->addRoute(
|
2019-12-18 16:45:42 +01:00
|
|
|
api => {
|
|
|
|
v1 => {
|
|
|
|
providers => {
|
|
|
|
oidc => {
|
2019-12-20 11:13:15 +01:00
|
|
|
rp => { ':confKey' => 'deleteOidcRp' }
|
2019-12-18 16:45:42 +01:00
|
|
|
},
|
|
|
|
saml => {
|
2019-12-20 11:13:15 +01:00
|
|
|
sp => { ':confKey' => 'deleteSamlSp' }
|
2019-12-18 16:45:42 +01:00
|
|
|
},
|
2020-06-17 08:57:40 +02:00
|
|
|
cas => {
|
|
|
|
app => { ':confKey' => 'deleteCasApp' }
|
|
|
|
},
|
2019-12-09 20:32:54 +01:00
|
|
|
},
|
2019-12-19 16:52:51 +01:00
|
|
|
secondFactor => {
|
|
|
|
':uid' => {
|
|
|
|
id => {
|
|
|
|
':id' => 'deleteSecondFactorsById'
|
|
|
|
},
|
|
|
|
type => {
|
|
|
|
':type' => 'deleteSecondFactorsByType'
|
|
|
|
},
|
|
|
|
'*' => 'deleteSecondFactors'
|
|
|
|
},
|
|
|
|
},
|
2020-06-24 16:58:10 +02:00
|
|
|
menu => {
|
|
|
|
cat => { ':confKey' => 'deleteMenuCat' },
|
|
|
|
app => {
|
|
|
|
':confKey' => {
|
|
|
|
':appConfKey' => 'deleteMenuApp'
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
2019-12-09 20:32:54 +01:00
|
|
|
},
|
|
|
|
},
|
|
|
|
['DELETE']
|
2019-11-08 18:31:50 +01:00
|
|
|
);
|
2019-12-19 16:52:51 +01:00
|
|
|
|
2019-12-20 11:13:15 +01:00
|
|
|
$self->setTypes($conf);
|
|
|
|
$self->{multiValuesSeparator} ||= '; ';
|
|
|
|
$self->{hiddenAttributes} //= "_password";
|
|
|
|
$self->{TOTPCheck} = $self->{U2FCheck} = $self->{UBKCheck} = '1';
|
2020-01-27 18:32:59 +01:00
|
|
|
return 1;
|
2019-12-04 17:50:41 +01:00
|
|
|
}
|
2019-11-08 18:31:50 +01:00
|
|
|
|
|
|
|
1;
|