Do you want to contribute to LemonLdap::NG project ?
Contribute to Project
LemonLDAP::NG is mostly written in Perl and Javascript. Community applies the following rules:
Perl:
code must be written in modern object-oriented code (using Mouse) (except handler and Apache::Session inheritance)
code must be formatted using the make tidy command
Javascript:
Javascript code is written in
<component>/site/js-src
and bundled using rollupjs:make minify
will generate JS files
Get code
Configure SSH
On Debian developper station :
ssh-keygen -o -t rsa -b 4096 -C "your@email"
Go to your gitlab account : https://gitlab.ow2.org/profile/keys
cat ~/.ssh/id_rsa.pub
Copy id_rsa.pub content to key section and enter a name into “Title” and click “Add key” button. Test ssh connexion :
ssh -T git@gitlab.ow2.org
Accept messages
Configure Git
As user:
git config --global user.name "Name Surname"
git config --global user.email "your@mail"
git config --global color.ui true
git config --list
Clone repository
As user, create directory in directory:
git clone git@gitlab.ow2.org:lemonldap-ng/lemonldap-ng.git
cd lemonldap-ng/
# Use your own clone for pushes
git remote set-url --push origin git@gitlab.ow2.org:user/lemonldap-ng.git
Run LemonLDAP::NG
Container-based setup
The following commands are based on Podman <https://podman.io/>. To get them working in a
Docker environment, just replace podman
with docker
.
Build image:
podman build . -t llng-local-dev
Start container:
podman run -it -v ./:/app -p 8080:8080 -p 3000:3000 llng-local-dev
Open http://auth.llng.localhost:8080/ in your browser.
Run tests:
podman run -it -v ./:/app llng-local-dev make test
Note
this will not be efficient if you want to run tests multiple times (eg while developing) as the patch and build steps will be run each time. You can speed-up this by starting the dev. server container, then running your tests inside the running container with the following command.
podman exec -it <container-id> make test
Manual setup
Install basic tools
As root:
apt install make devscripts equivs yui-compressor git uglifyjs rollup node-rollup-plugin-babel autopkgtest cpanminus
Install dependencies
# Install build dependancies
mk-build-deps debian/control
sudo apt install ./lemonldap-ng-build-deps*deb
apt install apache2 libapache2-mod-fcgid libapache2-mod-perl2 # install Apache
cpanm Perl::Tidy@$(make tidyversion)
For SAML:
apt install liblasso-perl libglib-perl
Configure hosts file
echo '127.0.0.1 auth.example.com manager.example.com test1.example.com test2.example.com' >> /etc/hosts
Unit tests
Launch unit tests:
make test # or manager_test, portal_test, ... to launch unit tests
Same tests launched on a simulated install
make autopkgtest # or autopkg_portal, autopkg_manager, ... to launch unit tests
Execute an unit test :
# Building project
cd ~/lemonldap-ng/; make
# Go to parent test directory
cd ~/lemonldap-ng/lemonldap-ng-portal
# and execute the unit test:
prove -v t/67-CheckUser.t
# Run unit test at debug log level
DEBUG=1 prove -v t/67-CheckUser.t
Launch tests with LDAP backend
apt install slapd
make LLNGTESTLDAP=1 test
Note
slapd might fail to start if you use Apparmor or SELinux, check your system logs if that happens
Other commands
Start a test web server on port 19876:
make start_web_server # TESTUSESSL=1 to enable SSL engine (only available for Apache) make start_web_server TESTWEBSERVER=nginx # to use Nginx web server make stop_web_server make reload_web_server # to reload LL:NG conf
Clean test files
make clean
Compile Javascript and minify
make minify
Rebuild manager tree, this is needed everytime you add a new option
make json
Update Perl manifest
make manifest
Reformat Perl files
make tidy
Add a translation key
If you need to create a new parameter in Manager or add a new message in Portal, you must add a key in JSON languages files.
To ease this process, use the script scripts/addTrEntry
provided in the sources:
$ scripts/addTrEntry
Usage:
scripts/addTrEntry <option> key enText <frText>
scripts/addTrEntry <option> key '$otherkey'
Options:
--portal -p: add entry in portal translation instead of manager
--modify -m: modify an existing entry
--delete -d: delete an existing key
--reorder -r: reorder files
--help -h: display this
For example:
$ scripts/addTrEntry MyNewParameter 'A new parameter' 'Un nouveau paramètre'
Documentation
Install dependencies:
apt install python3-sphinx python3-sphinx-bootstrap-theme
Then edit sources in doc/sources/admin.
You can check the result with:
make documentation
firefox doc/pages/documentation/current/start.html
Javascript
Javascript code is produced by rollupjs.
Source script must be created in lemonldap-ng-portal/site/js-src
, then run this command:
make minify
On Debian, you can install rollupjs and the needed dependencies with:
apt install rollup node-rollup-plugin-babel
Debugging
$req and req->{env} variables can be dumped by using logParams = 1 in lemonldap-ng.ini file. High debug level can be enabled in Manager/Conf/Parser.pm with HIGHDEBUG => 1