Enable complex routes for plugins (#595)
This commit is contained in:
parent
ec83414576
commit
f1ef6e8938
|
@ -19,19 +19,19 @@ has 'defaultRoute' => ( is => 'rw', default => 'index.html' );
|
||||||
# Routes initialization
|
# Routes initialization
|
||||||
|
|
||||||
sub addRoute {
|
sub addRoute {
|
||||||
my ( $self, $word, $dest, $methods ) = (@_);
|
my ( $self, $word, $dest, $methods, $transform ) = (@_);
|
||||||
$methods ||= [qw(GET POST PUT DELETE)];
|
$methods ||= [qw(GET POST PUT DELETE)];
|
||||||
foreach my $method (@$methods) {
|
foreach my $method (@$methods) {
|
||||||
$self->genRoute( $self->routes->{$method}, $word, $dest );
|
$self->genRoute( $self->routes->{$method}, $word, $dest, $transform );
|
||||||
}
|
}
|
||||||
return $self;
|
return $self;
|
||||||
}
|
}
|
||||||
|
|
||||||
sub genRoute {
|
sub genRoute {
|
||||||
my ( $self, $routes, $word, $dest ) = @_;
|
my ( $self, $routes, $word, $dest, $transform ) = @_;
|
||||||
if ( ref $word eq 'ARRAY' ) {
|
if ( ref $word eq 'ARRAY' ) {
|
||||||
foreach my $w (@$word) {
|
foreach my $w (@$word) {
|
||||||
$self->genRoute( $routes, $w, $dest );
|
$self->genRoute( $routes, $w, $dest, $transform );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
@ -42,11 +42,14 @@ sub genRoute {
|
||||||
}
|
}
|
||||||
elsif ( $word =~ m#/# ) {
|
elsif ( $word =~ m#/# ) {
|
||||||
$word =~ s#^(.*?)/##;
|
$word =~ s#^(.*?)/##;
|
||||||
return $self->genRoute( $routes->{$1}, $word, $dest );
|
return $self->genRoute( $routes->{$1}, $word, $dest, $transform );
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
$dest ||= $word;
|
$dest ||= $word;
|
||||||
}
|
}
|
||||||
|
if ( $transform and ( not ref($dest) or ref($dest) eq 'CODE' ) ) {
|
||||||
|
$dest = $transform->($dest);
|
||||||
|
}
|
||||||
if ( my $t = ref $dest ) {
|
if ( my $t = ref $dest ) {
|
||||||
if ( $t eq 'CODE' ) {
|
if ( $t eq 'CODE' ) {
|
||||||
$routes->{$word} = $dest;
|
$routes->{$word} = $dest;
|
||||||
|
@ -54,13 +57,14 @@ sub genRoute {
|
||||||
elsif ( $t eq 'HASH' ) {
|
elsif ( $t eq 'HASH' ) {
|
||||||
$routes->{$word} ||= {};
|
$routes->{$word} ||= {};
|
||||||
foreach my $w ( keys %$dest ) {
|
foreach my $w ( keys %$dest ) {
|
||||||
$self->genRoute( $routes->{$word}, $w, $dest->{$w} );
|
$self->genRoute( $routes->{$word}, $w, $dest->{$w},
|
||||||
|
$transform );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
elsif ( $t eq 'ARRAY' ) {
|
elsif ( $t eq 'ARRAY' ) {
|
||||||
$routes->{$word} ||= {};
|
$routes->{$word} ||= {};
|
||||||
foreach my $w ( @{$dest} ) {
|
foreach my $w ( @{$dest} ) {
|
||||||
$self->genRoute( $routes->{$word}, $w );
|
$self->genRoute( $routes->{$word}, $w, $transform );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
|
|
@ -34,10 +34,10 @@ sub init {
|
||||||
$self->type($type);
|
$self->type($type);
|
||||||
if ( my $path = $self->conf->{"issuerDB${type}Path"} ) {
|
if ( my $path = $self->conf->{"issuerDB${type}Path"} ) {
|
||||||
$path =~ s/^.*?(\w+).*?$/$1/;
|
$path =~ s/^.*?(\w+).*?$/$1/;
|
||||||
$self->addUnauthRoute( $path => '_redirect', ['GET'] );
|
$self->addUnauthRoute( $path => { '*' => '_redirect' }, ['GET'] );
|
||||||
$self->addUnauthRoute( $path => '_pRedirect', ['POST'] );
|
$self->addUnauthRoute( $path => { '*' => '_pRedirect' }, ['POST'] );
|
||||||
$self->addAuthRoute( $path => "_forAuthUser", ['GET'] );
|
$self->addAuthRoute( $path => { '*' => "_forAuthUser" }, ['GET'] );
|
||||||
$self->addAuthRoute( $path => "_pForAuthUser", ['POST'] );
|
$self->addAuthRoute( $path => { '*' => "_pForAuthUser" }, ['POST'] );
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
$self->lmLog( "No path declared for issuer $type. Skipping", 'debug' );
|
$self->lmLog( "No path declared for issuer $type. Skipping", 'debug' );
|
||||||
|
|
|
@ -11,27 +11,32 @@ extends 'Lemonldap::NG::Common::Module';
|
||||||
|
|
||||||
sub addAuthRoute {
|
sub addAuthRoute {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
return $self->_addRoute('addAuthRoute',@_);
|
return $self->_addRoute( 'addAuthRoute', @_ );
|
||||||
}
|
}
|
||||||
|
|
||||||
sub addUnauthRoute {
|
sub addUnauthRoute {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
return $self->_addRoute('addUnauthRoute',@_);
|
return $self->_addRoute( 'addUnauthRoute', @_ );
|
||||||
}
|
}
|
||||||
|
|
||||||
sub _addRoute {
|
sub _addRoute {
|
||||||
my ( $self, $type, $word, $subName, $methods ) = @_;
|
my ( $self, $type, $word, $subName, $methods, $transform ) = @_;
|
||||||
die 'Only simple route are authorizated here. Uses $self->p->addAuthRoute'
|
$transform //= sub {
|
||||||
if ( ref $subName );
|
my ($sub) = @_;
|
||||||
$self->can($subName) or die "Unknown sub $subName";
|
if ( ref $sub ) {
|
||||||
$self->p->$type(
|
return sub {
|
||||||
$word,
|
shift;
|
||||||
sub {
|
return $sub->( $self, @_ );
|
||||||
my $p = shift;
|
}
|
||||||
return $self->$subName(@_);
|
}
|
||||||
},
|
else {
|
||||||
$methods
|
return sub {
|
||||||
);
|
shift;
|
||||||
|
return $self->$sub(@_);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
return $self->p->$type( $word, $subName, $methods, $transform );
|
||||||
}
|
}
|
||||||
|
|
||||||
1;
|
1;
|
||||||
|
|
Loading…
Reference in New Issue
Block a user