---
name: "Lemonldap::NG::Manager::Build"
section: "3pm"
platform: "linux"
package: "liblemonldap-ng-manager-perl"
version: "2.21.2+ds-1+deb13u3"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/Lemonldap::NG::Manager::Build"
---

# Lemonldap::NG::Manager::Build(3pm)

Static files generator of Lemonldap::NG Web-SSO system.

## NAME

Lemonldap::NG::Manager::Build - Static files generator of Lemonldap::NG Web-SSO system.

## SYNOPSIS

```
  use Lemonldap::NG::Manager::Build;

  Lemonldap::NG::Manager::Build->run(
    structFile            => "site/htdocs/static/struct.json",
    confTreeFile          => "site/htdocs/static/js/conftree.js",
    managerConstantsFile  => "lib/Lemonldap/NG/Common/Conf/ReConstants.pm",
    managerAttributesFile => 'lib/Lemonldap/NG/Manager/Attributes.pm',
    defaultValuesFile     => "lib/Lemonldap/NG/Common/Conf/DefaultValues.pm",
    firstLmConfFile       => "_example/conf/lmConf-1.json",
    reverseTreeFile       => "site/htdocs/static/reverseTree.json",
  );
```

## DESCRIPTION

Lemonldap::NG::Manager::Build is only used to build javascript files and Lemonldap::NG constants Perl files. It must be launched after each change.

### DEVELOPER CORNER

To add a new parameter, you have to:

- declare it in Manager/Build/Attributes.pm;

  - declare its position in the tree in Manager/Build/Tree.pm (or Manager/Build/CTrees.pm for complex nodes);

  - refresh files by using this (or launch any build makefile target at the root of the Lemonldap::NG project sources).

  See below for details.

*Files generated*

\`scripts/jsongenerator.pl\` file uses Lemonldap::NG::Manager::Build::Attributes, Lemonldap::NG::Manager::Build::Tree and Lemonldap::NG::Manager::Build::CTrees to generate

- \`site/htdocs/static/struct.json\`:

  Main file containing the tree view;

- \`site/htdocs/static/js/conftree.js\`:

  generates Virtualhosts, SAML and OpenID-Connect partners sub-trees;

- \`site/htdocs/static/reverseTree.json\`:

  map used by manager diff to find attribute position in the tree;

- \`Lemonldap::NG::Manager::Constants\`:

  constants used by all Perl manager components;

- \`Lemonldap::NG::Common::Conf::DefaultValues\`:

  constants used to read configuration;

- \`Lemonldap::NG::Manager::Attributes\`:

  parameters attributes used by the manager during configuration upload;

- lmConf-1.json:

  first configuration in file format;

*Attribute declaration*

set your new attribute as a key of **attributes()** function that points to a hash ref containing:

- type (required):

  content type must be declared in sub **types()** in the same file (except if attribute embeds its own tests) and must match to a form stored in static/forms/ directory;

- help (optional):

  Relative HTML path to help page (relative to /doc/pages/documentation/\<version\>/);

- default (recommended):

  default value to set if not defined;

- select (optional):

  required only if type is \`select\`. In this case, it must contain an array of { k =\> \<keyName\>, v =\> \<display name\> } hashref

- documentation (recommended):

  some words for other developers

- test (optional):

  if test is not defined for this type or if test must be more restrictive, set here a regular expression or a subroutine. Arguments passed to subroutine are (keyValue, newConf, currentKey). It returns 2 arguments: a boolean result and a message (if non empty message will be displayed as warning or error depending of result);

- msgFail (optional):

  for regexp based tests, message to display in case of error. Words to translate have to be written as so: \_\_toTranslate\_\_;

- keyTest (optional):

  for keys/values attributes, test to be applied on key;

- keyMsgFail (optional):

  for regexp based key tests, same as msgFail for keys test;

If you want to declare a new type, you have to declare following properties:

- test, msgFail, keyTest, keyMsgFail as shown above,

  - form: form to use if it doesn't have the same name.

  *Tree location*

The tree is now very simple: it contains nodes and leaves. Leaves are designed only by their attribute name. All description must be done in the file described above. Nodes are array member designed as this:

```
  {
    title => 'titleToTranslate',
    help  => 'helpUrl',
    form  => 'relativeUrl',
    nodes => [
      ... nodes or leaf ...
    ]
  }
```

Explanations:

- title (required):

  it must contain an entry of static/languages/lang.json

- help (recommended):

  as above, the relative HTML path to the help page (relative to /doc/pages/documentation/\<version\>/);

- form (optional):

  the name of a static/forms/\<name\>.html file

- nodes:

  array of sub nodes and leaf attached to this node

- group:

  must never be used in conjunction with nodes. Array of leaves only to be displayed in the same form

- nodes\_cond:

  array of sub nodes that will be displayed with a filter. Not yet documented here, see the source code of site/htdocs/static/js/filterFunctions.js.

- nodes\_filter:

  filter entry in site/htdocs/static/js/filterFunctions.js for the same feature.

## SEE ALSO

\<http://lemonldap-ng.org/\>

## AUTHORS

- LemonLDAP::NG team \<http://lemonldap-ng.org/team\>

  ## BUG REPORT

Use OW2 system to report bug or ask for features: \<https://gitlab.ow2.org/lemonldap-ng/lemonldap-ng/issues\>

Note that if you want to post a ticket for a conf upload problem, please see Lemonldap::NG::Manager::Conf::Parser before.

## DOWNLOAD

Lemonldap::NG is available at \<https://lemonldap-ng.org/download\>

## COPYRIGHT AND LICENSE

See COPYING file for details.

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 \<http://www.gnu.org/licenses/\>.
