You can change the default skin in Manager: <code>General Parameters</code>><code>Portal</code>><code>Customization</code>><code>Default skin</code>.
</p>
<p>
Select the <code>Custom</code> skin, then set the name of the skin you want to use in the input below.
Go in <code>General Parameters</code>><code>Portal</code>><code>Customization</code>><code>Skin background</code>. You can define a background by selecting one of the available image. Use <code>None</code> to use the default skin background configuration.
You might want to display different skin depending on the <abbrtitle="Uniform Resource Locator">URL</abbr> that was called before being redirected to the portal, or the <abbrtitle="Internet Protocol">IP</abbr> address of the user.
</p>
<p>
To achieve this, you can create a rule in the Manager: select <code>General Parameters</code>><code>Portal</code>><code>Customization</code>><code>Skin display rules</code> on click on “New key”. Then fill the two fields;
</p>
<ul>
<liclass="level1"><divclass="li"><strong>Rule</strong>: a Perl expression (you can use %ENV hash to get environment variables, or $_url to get <abbrtitle="Uniform Resource Locator">URL</abbr> called before redirection, or $ipAddr to use user <abbrtitle="Internet Protocol">IP</abbr> address). If the rule evaluation is true, the corresponding skin is applied.</div>
</li>
<liclass="level1"><divclass="li"><strong>Skin</strong>: the name of the skin to use.</div>
<liclass="level1"><divclass="li"> images and other media files</div>
</li>
</ul>
<p>
A skin will often refer to the <code>common</code> skin, which is not a real skin, but shared skin objects (like scripts, images and <abbrtitle="Cascading Style Sheets">CSS</abbr>).
<divclass="noteimportant">If you modify directly the skin files, your modifications will certainly be erased on the next upgrade. The best is to create your own skin, based on an existing skin.
Then create symbolic links on template files, as you might not want to rewrite all <abbrtitle="HyperText Markup Language">HTML</abbr> code (else, do as you want).
Then you can add your media to <code>myskin/images</code>, you will be able to use them in <abbrtitle="HyperText Markup Language">HTML</abbr> template with this code:
<liclass="level1"><divclass="li"> Edit myksin/css/skin.css and myskin/css/skin.min.css</div>
</li>
<liclass="level1"><divclass="li"> Create a new <abbrtitle="Cascading Style Sheets">CSS</abbr> file, for example myskin/css/myskin.css and load it in customhead.tpl:</div>
Messages are defined in source code. If they really do not please you, override them! You just need to know the ID of the message (look at Portal/Simple.pm).
You can also define messages in several languages or disable message boxes by using the bareword <code>_hide_</code> :
</p>
<preclass="code file ini"><spanclass="re1">error_en_0</span><spanclass="sy0">=</span><spanclass="re2"> Big brother is watching you, authenticated user</span>
If you have a custom skin, then you can create a lang file in <code>templates/<your skin></code> similar to the default lang files provided in <code>htdocs/static/languages/</code>.
This will allow one to display the tab directly with this <abbrtitle="Uniform Resource Locator">URL</abbr>: <ahref="http://auth.example.com/?tab=test"class="urlextern"title="http://auth.example.com/?tab=test"rel="nofollow">http://auth.example.com/?tab=test</a>
Template parameters are defined in source code. If you need to add a template parameter for your customization, then add to <code>lemonldap-ng.ini</code>:
You can also display environment variables, with the prefix <code>env_</code>:
</p>
<preclass="code file html4strict">Your IP is <spanclass="sc2"><TMPL_VAR <spanclass="kw3">NAME</span><spanclass="sy0">=</span><spanclass="st0">"env_REMOTE_ADDR"</span>></span></pre>
<liclass="level1"><divclass="li"><strong>Check last logins</strong>: displays a checkbox on login form, allowing user to check his login history right after opening session</div>
<liclass="level1"><divclass="li"><strong>Reset password</strong>: display a link to <ahref="resetpassword.html"class="wikilink1"title="documentation:2.0:resetpassword">reset your password page</a> (for password based authentication backends). Number of allowed retries can be set (3 times by default)</div>
<liclass="level1"><divclass="li"><strong>Register</strong>: display a link to <ahref="register.html"class="wikilink1"title="documentation:2.0:register">register page</a> (for password based authentication backends)</div>
<liclass="level1"><divclass="li"><strong>Require old password</strong>: used only in the password changing module of the menu, will check the old password before updating it</div>
</li>
<liclass="level1"><divclass="li"><strong>Hide old password</strong>: used only if the password need to be reset by the user (LDAP password policy), will hide the old password input</div>
</li>
<liclass="level1"><divclass="li"><strong>Send mail on password change</strong>: send a mail if the password is changed from the Menu, or from forced password reset (LDAP password policy)</div>
<liclass="level1"><divclass="li"><strong>User attribute</strong>: which session attribute will be used to display <code>Connected as</code> in the menu</div>
</li>
<liclass="level1"><divclass="li"><strong>New window</strong>: open menu links in new window</div>
<liclass="level1"><divclass="li"><strong>Anti iframe protection</strong>: Set <code>X-Frame-Options</code> and CSP <code>frame-ancestors</code> headers (see <ahref="https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options#Browser_compatibility"class="urlextern"title="https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options#Browser_compatibility"rel="nofollow">Browser compatibility</a>)</div>
<liclass="level1"><divclass="li"><strong>Ping interval</strong>: Number of milliseconds between each ping (Ajax request) on the portal menu. Set to 0 to dismiss checks.</div>
<liclass="level1"><divclass="li"><strong>Show error on expired session</strong>: Display the error “Session expired”, which stops the authentication process. This is enabled by default but can be disabled to prevent transparent authentication (like SSL or Kerberos) to be stopped.</div>
</li>
<liclass="level1"><divclass="li"><strong>Show error on mail not found</strong>: Display error if provided mail is not found in password reset by mail process. Disabled by default to prevent mail enumeration from this page.</div>