# Manager main component # # This package contains these parts: # - Properties and private methods # - Initialization method (launched by Lemonldap::NG::Common::PSGI) # that declares routes # - Upload methods (launched by Lemonldap::NG::Common::PSGI::Router) # # It inherits from Conf.pm to responds to display methods and from # Sessions.pm to manage sessions package Lemonldap::NG::Manager; use 5.10.0; use Mouse; our $VERSION = '1.9.0'; use Lemonldap::NG::Common::Conf::Constants; use Lemonldap::NG::Common::PSGI::Constants; extends 'Lemonldap::NG::Handler::PSGI', 'Lemonldap::NG::Manager::Lib'; ## @method boolean init($args) # Launch initialization method # # @param $args hashref to merge with object # @return 0 in case of error, 1 else sub init { my ( $self, $args ) = splice @_; $args ||= {}; foreach my $k ( keys %$args ) { $self->{$k} = $args->{$k}; } my $conf = $self->confAcc; if ( my $localconf = $conf->getLocalConf(MANAGERSECTION) ) { $self->{$_} = $args->{$_} // $localconf->{$_} foreach ( keys %$localconf ); } return 0 unless ( $self->SUPER::init($args) ); # TODO: manage errors unless ( -r $self->{templateDir} ) { $self->error("Unable to read $self->{templateDir}"); return 0; } $self->{enabledModules} ||= "conf, sessions, notifications"; my @links; my @enabledModules = map { push @links, $_; "Lemonldap::NG::Manager::" . ucfirst($_) } split( /[,\s]+/, $self->{enabledModules} ); extends 'Lemonldap::NG::Handler::PSGI', @enabledModules; foreach my $mod (@enabledModules) { no strict 'refs'; &{"${mod}::addRoutes"}($self); } $self->defaultRoute( $enabledModules[0]->defaultRoute ); $self->links( [] ); for ( my $i = 0 ; $i < @links ; $i++ ) { push @{ $self->links }, { target => $enabledModules[$i]->defaultRoute, title => $links[$i] }; } push @{ $self->links }, { target => &{ $Lemonldap::NG::Handler::SharedConf::tsv->{portal} } . '?logout=1', title => 'logout' }; 1; } 1; __END__ =head1 NAME =encoding utf8 Lemonldap::NG::Manager - Perl extension for managing Lemonldap::NG Web-SSO system. =head1 SYNOPSIS #!/usr/bin/env plackup -I pl/lib use Lemonldap::NG::Manager; # This must be the last instruction ! See PSGI for more Lemonldap::NG::Manager->run($opts); =head1 DESCRIPTION Lemonldap::NG::Manager provides a web interface to manage Lemonldap::NG Web-SSO system. The Perl part of Lemonldap::NG::Manager is the REST server. Web interface is written in Javascript, using AngularJS framework and can be found in `site` directory. The REST API is described in REST-API.md file given in source tree. Lemonldap::NG Manager uses L to be compatible with CGI, FastCGI,... It inherits of L =head1 ORGANIZATION Lemonldap::NG Manager contains 4 parts: =over =item Configuration management: see L; =item Session explorer: see L; =item Notification explorer: see L; =item Some files uses to generate static files: see bellow. =back =head2 Generation of static files The `scripts/jsongenerator.pl` file uses Lemonldap::NG::Manager::Build::Attributes, Lemonldap::NG::Manager::Build::Tree and Lemonldap::NG::Manager::Build::CTrees to generate =over =item `site/static/struct.json`: the main file that contains the tree view; =item `site/static/js/conftree.js`: generates sub tree for virtualhosts and SAML and OpenID-Connect partners; =item `Lemonldap::NG::Manager::Constants`: constants used by all Perl manager components; =item `Lemonldap::NG::Common::Conf::DefaultValues`: constants used to read configuration. =back =head1 PARAMETERS You can use a hash ref to override any LemonLDAP::NG parameter. Currently, you can specify where your lemonldap-ng.ini file is: Lemonldap::NG::Manager->run( { confFile => '/path/to/lemonldap-ng.ini' } ); =head2 lemonldap-ng.ini parameters You can override any configuration parameter in lemonldap-ng.ini, but some are required and can't be set to global configuration (as any Lemonldap::NG module, you can also fix them in $opts hash ref passed as argument to run() or new()). [manager] ;protection: choose one of none, authenticate, manager as explain in ; Lemonldap::NG::Handler::PSGI doc. protection = manager ;enabledModules: Modules to display. Default to `conf, sessions, notifications` enabledModules = conf, sessions, notifications ;logLevel: choose one of error, warn, notice, info, debug ; See Lemonldap::NG::Common::PSGI doc for more logLevel = notice ;staticPrefix: set here the URI path to static content ; See Lemonldap::NG::Common::PSGI doc for more staticPrefix = static/ ;languages: Available interface languages languages = en, fr ;templateDir: the path to the directory containing HTML templates ; See Lemonldap::NG::Common::PSGI doc for more templateDir = /usr/share/lemonldap-ng/manager/ =head1 SEE ALSO L, L, L, L, L, L, L L =head1 AUTHORS =over =item Clement Oudot, Eclem.oudot@gmail.comE =item François-Xavier Deltombe, Efxdeltombe@gmail.com.E =item Xavier Guimard, Ex.guimard@free.frE =item Thomas Chemineau, Ethomas.chemineau@gmail.comE =back =head1 BUG REPORT Use OW2 system to report bug or ask for features: L =head1 DOWNLOAD Lemonldap::NG is available at L =head1 COPYRIGHT AND LICENSE =over =item Copyright (C) 2015 by Xavier Guimard, Ex.guimard@free.frE =item Copyright (C) 2015 by Clément Oudot, Eclem.oudot@gmail.comE =back This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see L. =cut