{% extends 'html/main.html' %}


{% block title %}{% trans %}Help for Pwic.wiki{% endtrans %}{% endblock %}


{% block content %}
	<header>
		<div class="pwic_ph1"><a href="/">{{pwic.emojis.finger_up}} {% trans %}Help for Pwic.wiki (in English only){% endtrans %}</a></div>
	</header>

	<article>
		{% if pwic.env.support_email or pwic.env.support_phone or pwic.env.support_url or pwic.env.support_text %}
			<h1>System support</h1>
			<p>The support team for your project may be different than the one mentioned below. So refer to the special page of your project in priority.</p>
			{% include 'html/block-support.html' %}
		{% endif %}

		<h1>Matrix of the authorizations</h1>
		<table class="pwic_zebra">
			<tr><th>Action</th><th>Admin</th><th>Manager</th><th>Editor</th><th>Validator</th><th>Reader</th></tr>
			<tr><td><a href="#help_setup">Setup the server</a></td><td>{{pwic.emojis.check}}</td><td></td><td></td><td></td><td></td></tr>
			<tr><td><a href="#help_create_backup">Create a backup</a></td><td>{{pwic.emojis.check}} (console)</td><td></td><td></td><td></td><td></td></tr>
			<tr><td><a href="#help_create_project">Create a project</a></td><td>{{pwic.emojis.check}} (console)</td><td></td><td></td><td></td><td></td></tr>
			<tr><td><a href="#help_takeover_project">Take over a project</a></td><td>{{pwic.emojis.check}} (console)</td><td></td><td></td><td></td><td></td></tr>
			<tr><td><a href="#help_split_project">Split a project</a></td><td>{{pwic.emojis.check}} (console)</td><td></td><td></td><td></td><td></td></tr>
			<tr><td><a href="#help_delete_project">Delete a project</a></td><td>{{pwic.emojis.check}} (console)</td><td></td><td></td><td></td><td></td></tr>
			<tr><td><a href="#help_create_user">Create a user account</a></td><td>{{pwic.emojis.check}}</td><td></td><td></td><td></td><td></td></tr>
			<tr><td><a href="#help_pass1">Change the own password</a></td><td>{{pwic.emojis.check}}</td><td>{{pwic.emojis.check}}</td><td>{{pwic.emojis.check}}</td><td>{{pwic.emojis.check}}</td><td>{{pwic.emojis.check}}</td></tr>
			<tr><td><a href="#help_pass2">Change the password of another user</a></td><td>{{pwic.emojis.check}} (console)</td><td></td><td></td><td></td><td></td></tr>
			<tr><td><a href="#help_grant">Grant the authorizations</a></td><td>{{pwic.emojis.check}}</td><td></td><td></td><td></td><td></td></tr>
			<tr><td><a href="#help_create_page">Create a page</a></td><td></td><td>{{pwic.emojis.check}}</td><td></td><td></td><td></td></tr>
			<tr><td><a href="#help_modify_page">Modify a page</a></td><td></td><td>{{pwic.emojis.check}}</td><td>{{pwic.emojis.check}}</td><td></td><td></td></tr>
			<tr><td><a href="#help_move_page">Move a page</a></td><td></td><td>{{pwic.emojis.check}}</td><td></td><td></td><td></td></tr>
			<tr><td><a href="#help_delete_page">Delete a page</a></td><td>{{pwic.emojis.check}} (partial)</td><td>{{pwic.emojis.check}} (partial)</td><td>{{pwic.emojis.check}} (partial)</td><td></td><td></td></tr>
			<tr><td><a href="#help_read_page">Read a page</a></td><td>{{pwic.emojis.check}}</td><td>{{pwic.emojis.check}}</td><td>{{pwic.emojis.check}}</td><td>{{pwic.emojis.check}}</td><td>{{pwic.emojis.check}}</td></tr>
			<tr><td>View the history of a page</td><td>{{pwic.emojis.check}}</td><td>{{pwic.emojis.check}}</td><td>{{pwic.emojis.check}}</td><td>{{pwic.emojis.check}}</td><td>{{pwic.emojis.check}}</td></tr>
			<tr><td><a href="#help_export_page">Export a page</a></td><td>{{pwic.emojis.check}} (partial)</td><td>{{pwic.emojis.check}} (partial)</td><td>{{pwic.emojis.check}} (partial)</td><td>{{pwic.emojis.check}} (partial)</td><td>{{pwic.emojis.check}} (partial)</td></tr>
			<tr><td><a href="#help_validate_page">Validate a revision</a></td><td></td><td></td><td></td><td>{{pwic.emojis.check}}</td><td></td></tr>
			<tr><td><a href="#help_export_project">Export a project</a></td><td>{{pwic.emojis.check}}</td><td></td><td></td><td></td><td></td></tr>
			<tr><td><a href="#help_links">Verify the links</a></td><td></td><td>{{pwic.emojis.check}}</td><td></td><td></td><td></td></tr>
			<tr><td><a href="#help_graph">Graph of the links</a></td><td></td><td>{{pwic.emojis.check}}</td><td></td><td></td><td></td></tr>
			<tr><td><a href="#help_search">Search across the pages</a></td><td>{{pwic.emojis.check}}</td><td>{{pwic.emojis.check}}</td><td>{{pwic.emojis.check}}</td><td>{{pwic.emojis.check}}</td><td>{{pwic.emojis.check}}</td></tr>
			<tr><td><a href="#help_searchdoc">Search across the documents</a></td><td>{{pwic.emojis.check}}</td><td>{{pwic.emojis.check}}</td><td>{{pwic.emojis.check}}</td><td>{{pwic.emojis.check}}</td><td>{{pwic.emojis.check}}</td></tr>
			<tr><td><a href="#help_log">View the activity log</a></td><td>{{pwic.emojis.check}}</td><td></td><td></td><td></td><td></td></tr>
			<tr><td><a href="#help_log_user">View the activity of a user</a></td><td>{{pwic.emojis.check}}</td><td>{{pwic.emojis.check}}</td><td>{{pwic.emojis.check}}</td><td>{{pwic.emojis.check}}</td><td>{{pwic.emojis.check}}</td></tr>
			<tr><td><a href="#help_api">Automate Pwic.wiki (API)</a></td><td>{{pwic.emojis.check}} (partial)</td><td>{{pwic.emojis.check}} (partial)</td><td>{{pwic.emojis.check}} (partial)</td><td>{{pwic.emojis.check}} (partial)</td><td>{{pwic.emojis.check}} (partial)</td></tr>
			<tr><td><a href="#help_bi">Report into BI (OData)</a></td><td>{{pwic.emojis.check}}</td><td>{{pwic.emojis.check}} (partial)</td><td>{{pwic.emojis.check}} (partial)</td><td>{{pwic.emojis.check}} (partial)</td><td>{{pwic.emojis.check}} (partial)</td></tr>
			<tr><td><a href="#help_licenses">Read the licences</a></td><td>{{pwic.emojis.check}}</td><td></td><td></td><td></td><td></td></tr>
		</table>


		<h1 id="help_setup"><a href="#top">{{pwic.emojis.finger_up}}</a> Setup the server</h1>
		<p>Refer to the file <code>README.md</code> available at the root directory of the application to know more about the default setup.</p>

			<h2>Running commands</h2>
			<p>By design, the most important configuration cannot be done online, so you will have to invoke the administration console. Execute the command <code>python3 pwic_admin.py [arguments]</code> under Linux or <code>python pwic_admin.py [arguments]</code> under Windows.</p>
			<p>To simplify this syntax, just type <code>./pa [arguments]</code> under Linux or <code>pa.bat [arguments]</code> under Windows. By convenience, the long syntax for Linux is used below.</p>

			<h2>Initialize the database</h2>
			<p>The initialization consists in creating the SQLite database and the folders that store the uploaded files. It is done once at the beginning with the command <code>python3 pwic_admin.py init-db</code>.</p>
			<p>In rare cases if the Python code fails for example, the database can be locked without timeout. In this case, try first to run the command <code>python3 pwic_admin.py unlock-db</code> else restart the server.</p>

			<h2>Set the parameters</h2>
			<p>With the command <code>python3 pwic_admin.py set-env --help</code>, you can define the following parameters that will change <em>Pwic.wiki</em>'s behavior.</p>
			<p>The project-dependent variables are mostly changeable online in the special page, but not all for security reasons. The project-independent variables generally can be edited through the console only and it often requires the restart of the server. The users will then have to reconnect from another tab, unless you define the option <code>keep_sessions</code>.</p>
				<table>
					<tr>
						<th>Name</th>
						<th class="pwic_desktop">Project-dependent</th>
						<th class="pwic_desktop">Changeable online</th>
						<th>Description</th>
					</tr>
					<tr>
						<td><code>api_cors</code></td>
						<td class="pwic_desktop">{{pwic.emojis.red_check}}</td>
						<td class="pwic_desktop">{{pwic.emojis.red_check}}</td>
						<td>Enable <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS">CORS</a> for the API from the origins separated by a space listed in this option (example: <code>http://site1.tld https://site2.tld</code>). The value <code>*</code> allows all the origins.</td>
					</tr>
					<tr>
						<td><code>api_expose_markdown</code></td>
						<td class="pwic_desktop">{{pwic.emojis.green_check}}</td>
						<td class="pwic_desktop">{{pwic.emojis.red_check}}</td>
						<td>Expose the content of the pages in the API <code>/api/project/get</code> to allow the full copy of the documentation.</td>
					</tr>
					<tr>
						<td><code>api_restrict</code></td>
						<td class="pwic_desktop">{{pwic.emojis.green_check}}</td>
						<td class="pwic_desktop">{{pwic.emojis.green_check}}</td>
						<td>Partially restrict the availability of the public API to the readers. It is recommended if you enable the option <code>no_login</code>.</td>
					</tr>
					<tr>
						<td><code>audit_range</code></td>
						<td class="pwic_desktop">{{pwic.emojis.green_check}}</td>
						<td class="pwic_desktop">{{pwic.emojis.green_check}}</td>
						<td>Number of days in the past for the online visibility of the audit data that are restricted to the administrators. Define the value <code>-1</code> to switch off the listing. The <a href="#help_archive_audit">archived audit data</a> are not visible online.</td>
					</tr>
					<tr>
						<td><code>auto_join</code></td>
						<td class="pwic_desktop">{{pwic.emojis.green_check}}</td>
						<td class="pwic_desktop">{{pwic.emojis.green_check}}</td>
						<td>Any user is granted as a reader depending on the value of the option:
							<br>- <code>active</code>: automatically when the user connects to <em>Pwic.wiki</em>,
							<br>- <code>sso</code>: same as <code>active</code> for the federated authentication only,
							<br>- <code>passive</code>: when the user opens the project on purpose.
							<br>You can add any user manually at any time. To exclude a user alongside with the automatic join, simply disable (not remove) the user from the management screen of the users. The option is useful when you need a public workspace for your team members but you don't want to manage the initial access manually. The option must be defined by project, not globally.</td>
					</tr>
					<tr>
						<td><code>base_url</code></td>
						<td class="pwic_desktop">{{pwic.emojis.red_check}}</td>
						<td class="pwic_desktop">{{pwic.emojis.red_check}}</td>
						<td>Define the base HTTP(S) address of your website so that the links can be rebuilt correctly when some data are exported. Don't write the trailing character <code>/</code>. Restart the server after the option is set. Verify the option <code>https</code>.</td>
					</tr>
					<tr>
						<td><code>client_size_max</code></td>
						<td class="pwic_desktop">{{pwic.emojis.red_check}}</td>
						<td class="pwic_desktop">{{pwic.emojis.red_check}}</td>
						<td>If you handle pages larger than 1 MB, you should enlarge the quantity of data that you can submit by HTTP request else you receive the error 413 <em>Request entity too large</em>. This setting must be configured as well in your reverse proxy server (if you have one).</td>
					</tr>
					<tr>
						<td><code>compressed_cache</code></td>
						<td class="pwic_desktop">{{pwic.emojis.red_check}}</td>
						<td class="pwic_desktop">{{pwic.emojis.red_check}}</td>
						<td>If the option <code>no_cache</code> is disabled, you have the choice to compress the HTML cache of the pages to save some disk space in the database, but a little CPU effort is required to decompress all the output pages. Restart the server after the option is modified and clear the cache the use the new option.</td>
					</tr>
					<tr>
						<td><code>copyright_years</code></td>
						<td class="pwic_desktop">{{pwic.emojis.green_check}}</td>
						<td class="pwic_desktop">{{pwic.emojis.green_check}}</td>
						<td>Override the copyright years in the footer so that it corresponds to your own website.</td>
					</tr>
					<tr>
						<td><code>css</code></td>
						<td class="pwic_desktop">{{pwic.emojis.green_check}}</td>
						<td class="pwic_desktop">{{pwic.emojis.red_check}}</td>
						<td>Define absolute or relative HTTP locations for additional CSS files separated by <code>;</code>. This applies as a default theme.</td>
					</tr>
					<tr>
						<td><code>css_dark</code></td>
						<td class="pwic_desktop">{{pwic.emojis.green_check}}</td>
						<td class="pwic_desktop">{{pwic.emojis.red_check}}</td>
						<td>Define absolute or relative HTTP locations for additional CSS files separated by <code>;</code>. This applies as an overlay of the default theme and if <code>dark_theme</code> is activated.</td>
					</tr>
					<tr>
						<td><code>css_printing</code></td>
						<td class="pwic_desktop">{{pwic.emojis.green_check}}</td>
						<td class="pwic_desktop">{{pwic.emojis.red_check}}</td>
						<td>Define absolute or relative HTTP locations for additional CSS files separated by <code>;</code>. This applies as an overlay of the default theme (the dark theme doesn't apply here) when the user prints the page. This option has no effect on <code>no_printing</code>.</td>
					</tr>
					<tr>
						<td><code>dark_theme</code></td>
						<td class="pwic_desktop">{{pwic.emojis.green_check}}</td>
						<td class="pwic_desktop">{{pwic.emojis.green_check}}</td>
						<td>Enable the dark mode that is less aggressive in terms of brightness.</td>
					</tr>
					<tr>
						<td><code>db_async</code></td>
						<td class="pwic_desktop">{{pwic.emojis.red_check}}</td>
						<td class="pwic_desktop">{{pwic.emojis.red_check}}</td>
						<td>Disable the synchronous commit logic of the database to increase significantly its speed. The increased risk to lose data is the compensation. Restart the server after the option is modified.</td>
					</tr>
					<tr>
						<td><code>document_name_regex</code></td>
						<td class="pwic_desktop">{{pwic.emojis.green_check}}</td>
						<td class="pwic_desktop">{{pwic.emojis.red_check}}</td>
						<td>Set a <a href="https://docs.python.org/3.7/howto/regex.html" target="_blank">regular expression</a> to force any uploaded files to respect a strict naming convention. For example, you can use the pattern <code>\.(7z|gz|zip)$</code> to allow some file extensions only. The file names are always checked in lower case.</td>
					</tr>
					<tr>
						<td><code>document_pixels_max</code></td>
						<td class="pwic_desktop">{{pwic.emojis.green_check}}</td>
						<td class="pwic_desktop">{{pwic.emojis.green_check}}</td>
						<td>Define the maximal number of pixels (simple multiplication of the width by the height) for an uploaded picture. For information, a standard screenshot is around 2 millions pixels.</td>
					</tr>
					<tr>
						<td><code>document_size_max</code></td>
						<td class="pwic_desktop">{{pwic.emojis.green_check}}</td>
						<td class="pwic_desktop">{{pwic.emojis.red_check}}</td>
						<td>All the uploaded files must have a size in bytes lower or equal than this limit. Set the value <code>0</code> to disable the upload of the files.</td>
					</tr>
					<tr>
						<td><code>edit_time_min</code></td>
						<td class="pwic_desktop">{{pwic.emojis.green_check}}</td>
						<td class="pwic_desktop">{{pwic.emojis.red_check}}</td>
						<td>Apply a minimum number of seconds between two edits. This limit does not apply to the managers.</td>
					</tr>
					<tr>
						<td><code>emojis</code></td>
						<td class="pwic_desktop">{{pwic.emojis.green_check}}</td>
						<td class="pwic_desktop">{{pwic.emojis.green_check}}</td>
						<td>List of emojis that can be suggested when you edit a page. They are written in hexadecimal notation and separated by a space. For example, <code>2705 274C 2754</code> will propose <code>&#x2705; &#x274C; &#x2754;</code>. Many websites can help you to identify the Unicode symbols. If the option has the value <code>*</code>, all the default emojis are loaded.</td>
					</tr>
					<tr>
						<td><code>export_project_revisions</code></td>
						<td class="pwic_desktop">{{pwic.emojis.green_check}}</td>
						<td class="pwic_desktop">{{pwic.emojis.red_check}}</td>
						<td>Include all the revisions of the pages when you export a project as a ZIP file. It increases the memory footprint.</td>
					</tr>
					<tr>
						<td><code>feed_size</code></td>
						<td class="pwic_desktop">{{pwic.emojis.green_check}}</td>
						<td class="pwic_desktop">{{pwic.emojis.green_check}}</td>
						<td>Maximal number of entries in the ATOM and RSS feeds.</td>
					</tr>
					<tr>
						<td><code>file_formats_disabled</code></td>
						<td class="pwic_desktop">{{pwic.emojis.green_check}}</td>
						<td class="pwic_desktop">{{pwic.emojis.green_check}}</td>
						<td>List of the file extensions separated with a space that cannot be used to export a page. The value <code>*</code> disables all the formats.</td>
					</tr>
					<tr>
						<td><code>fixed_templates</code></td>
						<td class="pwic_desktop">{{pwic.emojis.red_check}}</td>
						<td class="pwic_desktop">{{pwic.emojis.red_check}}</td>
						<td>The layout of the website is loaded once. This option is recommended in your productive environment to increase the performances. You must restart <em>Pwic.wiki</em> after an update is applied to the source code.</td>
					</tr>
					<tr>
						<td><code>heading_mask</code></td>
						<td class="pwic_desktop">{{pwic.emojis.green_check}}</td>
						<td class="pwic_desktop">{{pwic.emojis.green_check}}</td>
						<td>Codify the headers according to the given format. The default one is <code>1.1.1.1.1.1.</code>. There are 6 levels maximum. You can use the Arabic numerals (<code>1</code>), the Roman notation up to 4999 in uppercase (<code>I</code>) or in lowercase (<code>i</code>), a letter in uppercase (<code>A</code>) or in lowercase (<code>a</code>). The separator is a free character. For example, you can define <code>A)1)a-a.1.a.</code>. The implicit tag name for the header is named with <code>#p</code> followed by the shortest codification, in lowercase and with an underscore (ex: <code>#pi_1_a_a</code>).</td>
					</tr>
					<tr>
						<td><code>http_404</code></td>
						<td class="pwic_desktop">{{pwic.emojis.green_check}}</td>
						<td class="pwic_desktop">{{pwic.emojis.green_check}}</td>
						<td>Enforce the usage of strict HTTP errors <code>404 Not found</code> instead of soft redirections. The option interacts with your SEO.</td>
					</tr>
					<tr>
						<td><code>http_log_file</code></td>
						<td class="pwic_desktop">{{pwic.emojis.red_check}}</td>
						<td class="pwic_desktop">{{pwic.emojis.red_check}}</td>
						<td>- Define the absolute or relative file name to log passively all the HTTP requests. There is no log file when the option is empty.
							<br>- The option is effective upon the restart of the server.
							<br>- Because the log file is exclusively locked, you must terminate <em>Pwic.wiki</em> before you can rotate the logs with the command <code>python3 pwic_admin.py rotate-logs</code>.
							<br>- The log file includes neither user names, nor processed data. It should not be mistaken with the internal audit tables that are updated by name when a relevant write operation occurs in the database.</td>
					</tr>
					<tr>
						<td><code>http_log_format</code></td>
						<td class="pwic_desktop">{{pwic.emojis.red_check}}</td>
						<td class="pwic_desktop">{{pwic.emojis.red_check}}</td>
						<td>The format of the HTTP log file can be modified according to <a href="https://docs.aiohttp.org/en/stable/logging.html#format-specification">this specification</a>.</td>
					</tr>
					<tr>
						<td><code>http_referer</code></td>
						<td class="pwic_desktop">{{pwic.emojis.red_check}}</td>
						<td class="pwic_desktop">{{pwic.emojis.red_check}}</td>
						<td>Enable the check on the HTTP referer for the POST requests (that is for the API) in regards of the option <code>base_url</code> that must be defined. This security feature is not reliable and old-fashioned. The option does not apply on the static files. Restart the server after the option is set.</td>
					</tr>
					<tr>
						<td><code>https</code></td>
						<td class="pwic_desktop">{{pwic.emojis.red_check}}</td>
						<td class="pwic_desktop">{{pwic.emojis.red_check}}</td>
						<td>Enable HTTP<strong>S</strong> provided that you have installed or generated the appropriate certificates whose paths are defined by the internal constants <code>PRIVATE_KEY</code> and <code>PUBLIC_KEY</code>. The new value is effective after the restart of the server.</td>
					</tr>
					<tr>
						<td><code>ip_filter</code></td>
						<td class="pwic_desktop">{{pwic.emojis.red_check}}</td>
						<td class="pwic_desktop">{{pwic.emojis.red_check}}</td>
						<td>List of IP addresses or IP networks separated by a space. The unauthorized addresses are prefixed by the tilde character <code>~</code> and used as <em>AND</em> conditions. The authorized addresses are <em>OR</em> conditions and must be true at least once. Use the prefix <code>#</code> to ignore a value. The IP address used for the check is deducted from the HTTP headers through a custom code. The option does not affect the static files. You need to restart the server to consider the made changes.</td>
					</tr>
					<tr>
						<td><code>keep_drafts</code></td>
						<td class="pwic_desktop">{{pwic.emojis.green_check}}</td>
						<td class="pwic_desktop">{{pwic.emojis.green_check}}</td>
						<td>By default, the drafts are considered as a work in progress, so they are not important milestones for the traceability of the documentation. This option prevents the automatic deletion of the own drafts when a final page is saved. The drafts remain deletable manually.</td>
					</tr>
					<tr>
						<td><code>keep_sessions</code></td>
						<td class="pwic_desktop">{{pwic.emojis.red_check}}</td>
						<td class="pwic_desktop">{{pwic.emojis.red_check}}</td>
						<td>The session of a user is saved in a client-side encrypted cookie, so nobody can change its values. This option prevents the internal cryptographic key from being regenerated when the server starts. The effects are:
							<br>- The sessions of the users are never terminated, unless they expire after some time due to the option <code>session_expiry</code> or you restart <em>Pwic.wiki</em> with the command line option <code>--new-session</code>.
							<br>- While they are writing, the users don't have to reconnect in another tab after the server is restarted, but the session expiry is still applicable.
							<br>- The following message disappear from the console: "<em>Cannot decrypt cookie value, create a new fresh session</em>".
							<br><strong>Warning:</strong> the cryptographic key is stored in the database when the option is enabled. Leaking its value may compromise all the data stored in the database.</td>
					</tr>
					<tr>
						<td><code>language</code></td>
						<td class="pwic_desktop">{{pwic.emojis.green_check}}</td>
						<td class="pwic_desktop">{{pwic.emojis.green_check}}</td>
						<td>Language code used on the project on 2 characters that follows the codification ISO 639-1. If the value is not specified, the language of the connection is used.</td>
					</tr>
					<tr>
						<td><code>legal_notice</code></td>
						<td class="pwic_desktop">{{pwic.emojis.green_check}}</td>
						<td class="pwic_desktop">{{pwic.emojis.red_check}}</td>
						<td>A legal text can be displayed at the bottom of the pages.</td>
					</tr>
					<tr>
						<td><code>link_new_tab</code></td>
						<td class="pwic_desktop">{{pwic.emojis.green_check}}</td>
						<td class="pwic_desktop">{{pwic.emojis.green_check}}</td>
						<td>The external links will open in a new tab. You don't need to regenerate the cache after the value is changed because the option is dynamic client-side.</td>
					</tr>
					<tr>
						<td><code>link_nofollow</code></td>
						<td class="pwic_desktop">{{pwic.emojis.green_check}}</td>
						<td class="pwic_desktop">{{pwic.emojis.green_check}}</td>
						<td>The external links are marked as <code>rel="nofollow"</code> and don't contribute to the search engine optimization (SEO). The option applies server-side on the dynamic content only, so the cache must be regenerated if the option is changed. The option is not recommended by default.</td>
					</tr>
					<tr>
						<td><code>magic_bytes</code></td>
						<td class="pwic_desktop">{{pwic.emojis.red_check}}</td>
						<td class="pwic_desktop">{{pwic.emojis.red_check}}</td>
						<td><em>Pwic.wiki</em> has a predefined list of usual file types and their signature. This security feature ensures that a file has the expected extension of its first bytes. Your local mimes can be listed by running the command <code>python pwic_admin.py show-mime</code>.</td>
					</tr>
					<tr>
						<td><code>maintenance</code></td>
						<td class="pwic_desktop">{{pwic.emojis.red_check}}</td>
						<td class="pwic_desktop">{{pwic.emojis.red_check}}</td>
						<td>The value is displayed on the pages to inform the users of a planned maintenance. The upload and the deletion of the documents are immediately disabled.</td>
					</tr>
					<tr>
						<td><code>manifest</code></td>
						<td class="pwic_desktop">{{pwic.emojis.green_check}}</td>
						<td class="pwic_desktop">{{pwic.emojis.green_check}}</td>
						<td>Enable the progressive web application (PWA) for the project. The web browsers expect your website be setup with HTTPS, either with the option `https`, or behind a reverse proxy server.</td>
					</tr>
					<tr>
						<td><code>mathjax</code></td>
						<td class="pwic_desktop">{{pwic.emojis.green_check}}</td>
						<td class="pwic_desktop">{{pwic.emojis.green_check}}</td>
						<td>Enable the renderer of mathematical expressions. As a special constraints, the sign <code>\</code> must be doubled. For example, the usual form <code>\(\sqrt{x^2}\)</code> should be written as <code>\\(\\sqrt{x^2}\\)</code> in the online editor.</td>
					</tr>
					<tr>
						<td><code>message</code></td>
						<td class="pwic_desktop">{{pwic.emojis.green_check}}</td>
						<td class="pwic_desktop">{{pwic.emojis.green_check}}</td>
						<td>Show an online message for informational purposes only. No HTML is allowed.</td>
					</tr>
					<tr>
						<td><code>no_cache</code></td>
						<td class="pwic_desktop">{{pwic.emojis.green_check}}</td>
						<td class="pwic_desktop">{{pwic.emojis.red_check}}</td>
						<td>Disable the caching of the pages for debugging purposes. When the option is enabled, the existing cache can be cleared from the administration console only.</td>
					</tr>
					<tr>
						<td><code>no_copy_code</code></td>
						<td class="pwic_desktop">{{pwic.emojis.green_check}}</td>
						<td class="pwic_desktop">{{pwic.emojis.green_check}}</td>
						<td>Disable the one-click copy of the source code rendered in the pages. The option does not react to the option <code>no_text_selection</code>.</td>
					</tr>
					<tr>
						<td><code>no_dictation</code></td>
						<td class="pwic_desktop">{{pwic.emojis.green_check}}</td>
						<td class="pwic_desktop">{{pwic.emojis.green_check}}</td>
						<td>Disable the voice recognition when you edit a page. It contributes to a higher level of confidentiality.</td>
					</tr>
					<tr>
						<td><code>no_document_conversion</code></td>
						<td class="pwic_desktop">{{pwic.emojis.green_check}}</td>
						<td class="pwic_desktop">{{pwic.emojis.green_check}}</td>
						<td>Disable the possibility to convert an attached document to Markdown when you edit a page.</td>
					</tr>
					<tr>
						<td><code>no_document_list</code></td>
						<td class="pwic_desktop">{{pwic.emojis.green_check}}</td>
						<td class="pwic_desktop">{{pwic.emojis.green_check}}</td>
						<td>Hide the attachments at the end of the pages. You should then include direct links in your pages.</td>
					</tr>
					<tr>
						<td><code>no_export_project</code></td>
						<td class="pwic_desktop">{{pwic.emojis.green_check}}</td>
						<td class="pwic_desktop">{{pwic.emojis.red_check}}</td>
						<td>Disable the export of the project as an archive for the online administrators.</td>
					</tr>
					<tr>
						<td><code>no_feed</code></td>
						<td class="pwic_desktop">{{pwic.emojis.green_check}}</td>
						<td class="pwic_desktop">{{pwic.emojis.green_check}}</td>
						<td>Disable the ATOM and RSS feeds.</td>
					</tr>
					<tr>
						<td><code>no_graph</code></td>
						<td class="pwic_desktop">{{pwic.emojis.green_check}}</td>
						<td class="pwic_desktop">{{pwic.emojis.green_check}}</td>
						<td>Disable the ability to render the pages of the project in a graph.</td>
					</tr>
					<tr>
						<td><code>no_heading</code></td>
						<td class="pwic_desktop">{{pwic.emojis.green_check}}</td>
						<td class="pwic_desktop">{{pwic.emojis.green_check}}</td>
						<td>Hide the automatic codification of the headers. The option <code>heading_mask</code> is still applicable for the internal naming of the paragraphs, so that you can link directly to them. The option has no effect on the export to OpenDocument.</td>
					</tr>
					<tr>
						<td><code>no_help</code></td>
						<td class="pwic_desktop">{{pwic.emojis.green_check}}</td>
						<td class="pwic_desktop">{{pwic.emojis.green_check}}</td>
						<td>Hide the current help from the footer but the page remains accessible by direct access.</td>
					</tr>
					<tr>
						<td><code>no_highlight</code></td>
						<td class="pwic_desktop">{{pwic.emojis.red_check}}</td>
						<td class="pwic_desktop">{{pwic.emojis.red_check}}</td>
						<td>Disable the highlight of the source codes. Restart the server after the option is modified. The dependent Python package <code>pygments</code> is optional during the setup.</td>
					</tr>
					<tr>
						<td><code>no_history</code></td>
						<td class="pwic_desktop">{{pwic.emojis.green_check}}</td>
						<td class="pwic_desktop">{{pwic.emojis.green_check}}</td>
						<td>Disable the ability to see and search the revisions of a page (a fortiori to access one of its revisions explicitly) when the user is a pure reader. In other words, the pure readers only see the latest revision, or the latest validated revision if the option <code>validated_only</code> is used too.</td>
					</tr>
					<tr>
						<td><code>no_link_review</code></td>
						<td class="pwic_desktop">{{pwic.emojis.green_check}}</td>
						<td class="pwic_desktop">{{pwic.emojis.green_check}}</td>
						<td>Disable the ability to check the broken and orphaned links of a project.</td>
					</tr>
					<tr>
						<td><code>no_login</code></td>
						<td class="pwic_desktop">{{pwic.emojis.red_check}}</td>
						<td class="pwic_desktop">{{pwic.emojis.red_check}}</td>
						<td>- Skip the login screen and assign the anonymous role to your visitors.
							<br>- On contrary to the option <code>auto_join</code>, they don't need a user account to read the pages.
							<br>- You can hide a project by disabling the user account <code>{{pwic.constants.anonymous_user}}</code>.
							<br>- The option <code>robots</code> is recommended when the option is turned on.
						</td>
					</tr>
					<tr>
						<td><code>no_new_user</code></td>
						<td class="pwic_desktop">{{pwic.emojis.green_check}}</td>
						<td class="pwic_desktop">{{pwic.emojis.red_check}}</td>
						<td>When the option is enabled, you can assign only existing user accounts to your project. To create a new user account, use the administration console of <em>Pwic.wiki</em>. The option has no effect on the federated authentication.</td>
					</tr>
					<tr>
						<td><code>no_printing</code></td>
						<td class="pwic_desktop">{{pwic.emojis.green_check}}</td>
						<td class="pwic_desktop">{{pwic.emojis.green_check}}</td>
						<td>To save some trees, enable a basic protection to prevent the printing of a page. It also disables the export to PDF through a virtual printer.</td>
					</tr>
					<tr>
						<td><code>no_search</code></td>
						<td class="pwic_desktop">{{pwic.emojis.green_check}}</td>
						<td class="pwic_desktop">{{pwic.emojis.green_check}}</td>
						<td>Disable the search engine and the search link that you can add to your browser.</td>
					</tr>
					<tr>
						<td><code>no_sitemap</code></td>
						<td class="pwic_desktop">{{pwic.emojis.green_check}}</td>
						<td class="pwic_desktop">{{pwic.emojis.green_check}}</td>
						<td>Disable the sitemap for your project. This publicly generated file helps the crawlers to index your website especially when it is accessible anonymously (refer to the option <code>no_login</code>).</td>
					</tr>
					<tr>
						<td><code>no_sort_table</code></td>
						<td class="pwic_desktop">{{pwic.emojis.green_check}}</td>
						<td class="pwic_desktop">{{pwic.emojis.green_check}}</td>
						<td>Disable the ability to sort the tables by clicking on their header line.</td>
					</tr>
					<tr>
						<td><code>no_space_page</code></td>
						<td class="pwic_desktop">{{pwic.emojis.green_check}}</td>
						<td class="pwic_desktop">{{pwic.emojis.green_check}}</td>
						<td>When a page is created or moved, the option replaces the spaces in its name by an underscore (<code>_</code>).</td>
					</tr>
					<tr>
						<td><code>no_table_csv</code></td>
						<td class="pwic_desktop">{{pwic.emojis.green_check}}</td>
						<td class="pwic_desktop">{{pwic.emojis.green_check}}</td>
						<td>Hide the caption at the end on the long tables that allow their download as a CSV file.</td>
					</tr>
					<tr>
						<td><code>no_text_selection</code></td>
						<td class="pwic_desktop">{{pwic.emojis.green_check}}</td>
						<td class="pwic_desktop">{{pwic.emojis.green_check}}</td>
						<td>Enable a basic protection to prevent the user from playing around with his web browser to copy the text of the main page. It also forces the readers to focus on reading the page.</td>
					</tr>
					<tr>
						<td><code>odata</code></td>
						<td class="pwic_desktop">{{pwic.emojis.red_check}}</td>
						<td class="pwic_desktop">{{pwic.emojis.red_check}}</td>
						<td>Enable the <a href="#help_bi">OData service</a> to report Pwic.wiki into your favorite BI system.</td>
					</tr>
					<tr>
						<td><code>odt_image_height_max</code></td>
						<td class="pwic_desktop">{{pwic.emojis.green_check}}</td>
						<td class="pwic_desktop">{{pwic.emojis.green_check}}</td>
						<td>Maximal height of the pictures exported to OpenDocument expressed in unit <code>cm</code>, <code>in</code>, <code>mm</code>, <code>pc</code>, <code>pt</code> or <code>px</code>. The value <code>600px</code> is used by default.</td>
					</tr>
					<tr>
						<td><code>odt_image_width_max</code></td>
						<td class="pwic_desktop">{{pwic.emojis.green_check}}</td>
						<td class="pwic_desktop">{{pwic.emojis.green_check}}</td>
						<td>Maximal width of the pictures exported to OpenDocument expressed in unit <code>cm</code>, <code>in</code>, <code>mm</code>, <code>pc</code>, <code>pt</code> or <code>px</code>. The value <code>900px</code> is used by default.</td>
					</tr>
					<tr>
						<td><code>odt_page_height</code></td>
						<td class="pwic_desktop">{{pwic.emojis.green_check}}</td>
						<td class="pwic_desktop">{{pwic.emojis.green_check}}</td>
						<td>Height of the paper when you export a page to OpenDocument and expressed in unit <code>cm</code>, <code>in</code>, <code>mm</code>, <code>pc</code>, <code>pt</code> or <code>px</code>. The value <code>29.7cm</code> is used by default (format A4).</td>
					</tr>
					<tr>
						<td><code>odt_page_landscape</code></td>
						<td class="pwic_desktop">{{pwic.emojis.green_check}}</td>
						<td class="pwic_desktop">{{pwic.emojis.green_check}}</td>
						<td>With this option, the page layout is landscape when you export a page to OpenDocument. By default, the portrait layout is used.</td>
					</tr>
					<tr>
						<td><code>odt_page_margin</code></td>
						<td class="pwic_desktop">{{pwic.emojis.green_check}}</td>
						<td class="pwic_desktop">{{pwic.emojis.green_check}}</td>
						<td>Size of the borders of the paper exported to OpenDocument. The value should be expressed in unit <code>cm</code>, <code>in</code>, <code>mm</code>, <code>pc</code>, <code>pt</code> or <code>px</code>. The default value <code>2.5cm</code> (~1 in) is used by convenience.</td>
					</tr>
					<tr>
						<td><code>odt_page_width</code></td>
						<td class="pwic_desktop">{{pwic.emojis.green_check}}</td>
						<td class="pwic_desktop">{{pwic.emojis.green_check}}</td>
						<td>Width of the paper when you export a page to OpenDocument and expressed in unit <code>cm</code>, <code>in</code>, <code>mm</code>, <code>pc</code>, <code>pt</code> or <code>px</code>. The value <code>21cm</code> is used by default (format A4).</td>
					</tr>
					<tr>
						<td><code>page_count_max</code></td>
						<td class="pwic_desktop">{{pwic.emojis.green_check}}</td>
						<td class="pwic_desktop">{{pwic.emojis.red_check}}</td>
						<td>Maximal number of pages that can be defined per project.</td>
					</tr>
					<tr>
						<td><code>password_regex</code></td>
						<td class="pwic_desktop">{{pwic.emojis.red_check}}</td>
						<td class="pwic_desktop">{{pwic.emojis.red_check}}</td>
						<td>Set a <a href="https://docs.python.org/3.7/howto/regex.html" target="_blank">regular expression</a> to force the passwords to respect a predefined format. Few examples can be found <a href="https://stackoverflow.com/questions/19605150">here</a>. The option does not apply when you reset the password from the console.</td>
					</tr>
					<tr>
						<td><code>project_size_max</code></td>
						<td class="pwic_desktop">{{pwic.emojis.green_check}}</td>
						<td class="pwic_desktop">{{pwic.emojis.red_check}}</td>
						<td>Define the maximal disk space in bytes allowed for all the attached documents of a project.</td>
					</tr>
					<tr>
						<td><code>pwic_audit_id</code></td>
						<td class="pwic_desktop">{{pwic.emojis.red_check}}</td>
						<td class="pwic_desktop">{{pwic.emojis.red_check}}</td>
						<td>This option is automatically set in the backup databases only to identify the last known event of the audit log. In case you need to restore the database, you can clean and reuse the existing audit table. The option is used for internal purposes and it cannot be managed manually.</td>
					</tr>
					<tr>
						<td><code>pwic_session</code></td>
						<td class="pwic_desktop">{{pwic.emojis.red_check}}</td>
						<td class="pwic_desktop">{{pwic.emojis.red_check}}</td>
						<td>Non-changeable and private key for the handling of the sessions. Refer to <code>keep_sessions</code> for more details. The value must never be disclosed.</td>
					</tr>
					<tr>
						<td><code>quick_fix</code></td>
						<td class="pwic_desktop">{{pwic.emojis.green_check}}</td>
						<td class="pwic_desktop">{{pwic.emojis.green_check}}</td>
						<td>Under some conditions, a new revision is not created if the content of the page is not changed. A manager can then fix the attributes of a page quickly on behalf of the original author of the latest revision.</td>
					</tr>
					<tr>
						<td><code>registration_link</code></td>
						<td class="pwic_desktop">{{pwic.emojis.red_check}}</td>
						<td class="pwic_desktop">{{pwic.emojis.red_check}}</td>
						<td>HTTP link to request your access to the website. You cannot register yourself.</td>
					</tr>
					<tr>
						<td><code>remote_url</code></td>
						<td class="pwic_desktop">{{pwic.emojis.green_check}}</td>
						<td class="pwic_desktop">{{pwic.emojis.red_check}}</td>
						<td>This option allows the conversion of a remote web page into Markdown when you edit a page. For technical reasons related to CORS, the download is made by the server. The fetched URLs are added to the audit log.</td>
					</tr>
					<tr>
						<td><code>revision_count_max</code></td>
						<td class="pwic_desktop">{{pwic.emojis.green_check}}</td>
						<td class="pwic_desktop">{{pwic.emojis.red_check}}</td>
						<td>Maximal number of revisions that can be defined per page. The deleted revisions don't matter for the total.</td>
					</tr>
					<tr>
						<td><code>revision_size_max</code></td>
						<td class="pwic_desktop">{{pwic.emojis.green_check}}</td>
						<td class="pwic_desktop">{{pwic.emojis.red_check}}</td>
						<td>Maximal number of characters per revision. If needed, adjust the option <code>client_size_max</code> accordingly.</td>
					</tr>
					<tr>
						<td><code>robots</code></td>
						<td class="pwic_desktop">{{pwic.emojis.green_check}}</td>
						<td class="pwic_desktop">{{pwic.emojis.red_check}}</td>
						<td>
							- The <a href="https://en.wikipedia.org/wiki/Meta_element#The_robots_attribute">meta information</a> <code>robots</code> impacts the search engine optimization (SEO) of your projects in case it is made public through the option <code>no_login</code>.
							<br>- The parameter is optionally considered by the crawler. Several values separated with a space are available: <code>archive</code>, <code>noarchive</code>, <code>follow</code>, <code>nofollow</code>, <code>imageindex</code>, <code>noimageindex</code>, <code>index</code>, <code>noindex</code>, <code>snippet</code>, <code>nosnippet</code>, <code>translate</code> and <code>notranslate</code>.
							<br>- Refer also to the related option <code>seo_hide_revs</code>.
							<br>- The values are overridden for some specific pages.</td>
					</tr>
					<tr>
						<td><code>rstrip</code></td>
						<td class="pwic_desktop">{{pwic.emojis.green_check}}</td>
						<td class="pwic_desktop">{{pwic.emojis.green_check}}</td>
						<td>Remove the trailing space characters when a page is saved.</td>
					</tr>
					<tr>
						<td><code>seo_hide_revs</code></td>
						<td class="pwic_desktop">{{pwic.emojis.green_check}}</td>
						<td class="pwic_desktop">{{pwic.emojis.red_check}}</td>
						<td>The old revisions of a page are automatically marked as non-indexable for the public search engines. This dynamic rule overrides some values defined in the option <code>robots</code>. The option is incompatible with <code>validated_only</code>.</td>
					</tr>
					<tr>
						<td><code>session_expiry</code></td>
						<td class="pwic_desktop">{{pwic.emojis.green_check}}</td>
						<td class="pwic_desktop">{{pwic.emojis.red_check}}</td>
						<td>Number of seconds after which a user is automatically disconnected. Don't use a too small value. When a user edits a page, <em>Pwic.wiki</em> warns if the session is lost to not waste the work in progress. The option is effective upon the restart of the server.</td>
					</tr>
					<tr>
						<td><code>show_members_max</code></td>
						<td class="pwic_desktop">{{pwic.emojis.green_check}}</td>
						<td class="pwic_desktop">{{pwic.emojis.green_check}}</td>
						<td>Reduce the display of the members in the special page if their number is greater than the value of this option. Indeed, the list can be big in large organizations. Only the lists of readers and editors are reduced, so that you can always contact the deciders.</td>
					</tr>
					<tr>
						<td><code>skipped_tags</code></td>
						<td class="pwic_desktop">{{pwic.emojis.green_check}}</td>
						<td class="pwic_desktop">{{pwic.emojis.red_check}}</td>
						<td>Specify the list of additional HTML elements separated by a space that must be removed during the rendering of the pages. This filter applies to the export to OpenDocument too. Some tags are mandatorily removed for security reasons. You should regenerate the cache if you make the option more permissive.</td>
					</tr>
					<tr>
						<td><code>strict_cookies</code></td>
						<td class="pwic_desktop">{{pwic.emojis.red_check}}</td>
						<td class="pwic_desktop">{{pwic.emojis.red_check}}</td>
						<td>Enable the strict SameSite for the cookies, but the federated authentication cannot be used anymore. Restart the server after the option is set.</td>
					</tr>
					<tr>
						<td><code>support_email</code></td>
						<td class="pwic_desktop">{{pwic.emojis.green_check}}</td>
						<td class="pwic_desktop">{{pwic.emojis.green_check}}</td>
						<td>A user can write to this email address to get support.</td>
					</tr>
					<tr>
						<td><code>support_phone</code></td>
						<td class="pwic_desktop">{{pwic.emojis.green_check}}</td>
						<td class="pwic_desktop">{{pwic.emojis.green_check}}</td>
						<td>A user can call this phone number to get support.</td>
					</tr>
					<tr>
						<td><code>support_text</code></td>
						<td class="pwic_desktop">{{pwic.emojis.green_check}}</td>
						<td class="pwic_desktop">{{pwic.emojis.green_check}}</td>
						<td>Free text to describe how to get in touch with the support team. You cannot use HTML.</td>
					</tr>
					<tr>
						<td><code>support_url</code></td>
						<td class="pwic_desktop">{{pwic.emojis.green_check}}</td>
						<td class="pwic_desktop">{{pwic.emojis.green_check}}</td>
						<td>Portal address that a user can use to find an extended help.</td>
					</tr>
					<tr>
						<td><code>title</code></td>
						<td class="pwic_desktop">{{pwic.emojis.green_check}}</td>
						<td class="pwic_desktop">{{pwic.emojis.green_check}}</td>
						<td>Suffix appended to the title of the pages that can be used to name the website.</td>
					</tr>
					<tr>
						<td><code>totp</code></td>
						<td class="pwic_desktop">{{pwic.emojis.red_check}}</td>
						<td class="pwic_desktop">{{pwic.emojis.red_check}}</td>
						<td>Enable the <a href="#help_2fa">two-factor authentication</a> (2FA TOTP). The existing secret keys are not removed when the option is disabled. The user accounts can be managed at any moment.</td>
					</tr>
					<tr>
						<td><code>validated_only</code></td>
						<td class="pwic_desktop">{{pwic.emojis.green_check}}</td>
						<td class="pwic_desktop">{{pwic.emojis.green_check}}</td>
						<td>Force the default redirection of the pure readers to the last validated revision of a page if it exists. This feature allows the editors to prepare the upcoming revisions of a page without showing them by default, and to publish only validated pages to the end-users. As a complement, use the option <code>no_history</code> to hide the history of the page.</td>
					</tr>
					<tr>
						<td><code>zip_no_exec</code></td>
						<td class="pwic_desktop">{{pwic.emojis.green_check}}</td>
						<td class="pwic_desktop">{{pwic.emojis.red_check}}</td>
						<td>Forbid the upload of ZIP files that contain an executable content.</td>
					</tr>
				</table>
			<p>To show one or all the parameters, use the command <code>python3 pwic_admin.py show-env</code>.</p>
			<p>In case you need to clean the obsolete variables, run the command <code>python3 pwic_admin.py repair-env</code>. This could happen after <em>Pwic.wiki</em> is upgraded.</p>

			<h2 id="help_sso">Federated authentication</h2>
			<p>You can connect to <em>Pwic.wiki</em> by using a professional third-party identity provider. The mecanism OAuth relies on secret keys and, obviously, a lot of trust. The user connects from another website and <em>Pwic.wiki</em> pings back the server to fetch the main email address of the user. The account is then automatically configured by default. No other personal information are used.</p>
			<p>Several project-independent variables must be defined in the following order. Any change requires the restart of the server.</p>

			<table>
				<tr>
					<th>Name</th>
					<th>Description</th>
					<th><code>github</code></th>
					<th><code>google</code></th>
					<th><code>microsoft</code></th>
				</tr>
				<tr>
					<td><code>base_url</code></td>
					<td>Refer above.</td>
					<td>{{pwic.emojis.green_check}}</td>
					<td>{{pwic.emojis.green_check}}</td>
					<td>{{pwic.emojis.green_check}}</td>
				</tr>
				<tr>
					<td><code>oauth_provider</code></td>
					<td>Name of the third-party identity provider:
						<br>- <code>github</code> (<a href="https://docs.github.com/en/developers/apps/authorizing-oauth-apps">documentation</a>)
						<br>- <code>google</code> (<a href="https://developers.google.com/accounts/docs/OAuth2">documentation</a>)
						<br>- <code>microsoft</code> (<a href="https://docs.microsoft.com/en-us/azure/active-directory/develop/v2-oauth2-auth-code-flow">documentation</a>)
						<br>- No value means that the feature is disabled
					</td>
					<td>{{pwic.emojis.green_check}}</td>
					<td>{{pwic.emojis.green_check}}</td>
					<td>{{pwic.emojis.green_check}}</td>
				</tr>
				<tr>
					<td><code>oauth_tenant</code></td>
					<td>The tenant identifies your organization.</td>
					<td>{{pwic.emojis.red_check}}</td>
					<td>{{pwic.emojis.red_check}}</td>
					<td>{{pwic.emojis.green_check}}</td>
				</tr>
				<tr>
					<td><code>oauth_identifier</code></td>
					<td>Unique identifier of the application as declared in the third-party identity provider.</td>
					<td>{{pwic.emojis.green_check}}</td>
					<td>{{pwic.emojis.green_check}}</td>
					<td>{{pwic.emojis.green_check}}</td>
				</tr>
				<tr>
					<td><code>oauth_secret</code></td>
					<td>Secret password to connect to the third-party identity provider. The saved value is protected in <em>Pwic.wiki</em> against its public exposure.</td>
					<td>{{pwic.emojis.green_check}}</td>
					<td>{{pwic.emojis.green_check}}</td>
					<td>{{pwic.emojis.green_check}}</td>
				</tr>
				<tr>
					<td><code>oauth_domains</code></td>
					<td>List of the authorized domains for the email of the user, separated by a space and ordered by descending priority.</td>
					<td>Optional</td>
					<td>Optional</td>
					<td>Optional</td>
				</tr>
				<tr>
					<td><code>strict_cookies</code></td>
					<td>Remove this option.</td>
					<td>{{pwic.emojis.red_check}}</td>
					<td>{{pwic.emojis.red_check}}</td>
					<td>{{pwic.emojis.red_check}}</td>
				</tr>
			</table>

			<h2 id="help_2fa">Two-factor authentication (2FA TOTP)</h2>
			<p>This feature stands for <em>2-factor authentication</em> (2FA) and <em>Time-based One Time Password</em> (TOTP). The concept is to share a secret key with the user once. When he connects to the website, a PIN code is requested: its value changes every 30 seconds automatically and should be accepted only once. Consequently, this random password managed on a separate device acts as a second source of authentication and strengthens the security of your account.</p>
			<p>The setup is very easy:</p>
				<ul>
					<li>Define the options <code>base_url</code> and <code>totp</code>,</li>
					<li>Install any TOTP-compatible application on your smartphone,</li>
					<li>Run the command <code>./pa reset-totp [username]</code> (Linux) or <code>pa.bat reset-totp [username]</code> (Windows) to generate a secret key for the given user account,</li>
					<li>Transfer privately the generated information into the TOTP application by using the mean of your choice.</li>
				</ul>
			<p>This authentication technique has the benefit to be standard (RFC 6238), offline and easy to activate. It cannot act as a primary authentication method. It is also incompatible with the <a href="#help_sso">federated authentication</a> because some providers include built-in 2FA techniques already (especially SMS).</p>
			<p>2FA is optional, user-specific and can be assigned, removed and updated at any moment.</p>

			<h2>Reverse proxy</h2>
			<p>The feature is supported but not enabled by default because the filter by IP address should not be sensible to some special HTTP headers.</p>
			<p>By using Nginx or Apache, you need to modify the code of the extension named <code>on_ip_header</code> and to configure the format of the HTTP log.</p>

			<h2>Compress the static files</h2>
			<p>Optionally, if you use mobile devices, it is possible to compress the big static files with the command <code>python3 pwic_admin.py compress-static</code>. This will reduce a bit the bandwidth and the loading time.</p>
			<p>The option must be configured as well in your reverse proxy server (if you use one).</p>

			<h2 id="help_execute_sql">SQL queries</h2>
			<p>To facilitate the maintenance of the database remotely, the command <code>python3 pwic_admin.py execute-sql</code> allows you to execute online SQL statements in the console. It is very useful to upgrade <em>Pwic.wiki</em> and perform special operations.</p>


		<h1 id="help_create_backup"><a href="#top">{{pwic.emojis.finger_up}}</a> Create a backup</h1>
		<p>First, it is recommended to warn your users in advance through the option <code>maintenance</code>. Note that it disables the capability to attach or update new documents to the pages.</p>
		<p>At the time of the maintenance, shut down the server with <code>python3 pwic_admin.py shutdown-server</code>, and run the command <code>python3 pwic_admin.py create-backup</code>. A new file is created with the current time stamp. The name of the backup file can be extracted with <code>sed</code> if you have further scripting needs. Basically, it is a copy of the database <strong>without</strong> the documents that remain in the dedicated folder of the projects.</p>
		<p>To restore the backup, simply replace the current database with a previous backup. Any changes made meanwhile will be lost. You must also ensure that the backup file is compatible with your used version of <em>Pwic.wiki</em> and that the salt <code>PWIC_SALT</code> is the same. To resynchronize the documents with the database and vice versa, run the command <code>python3 pwic_admin.py repair-documents --test</code> from the console.</p>
		<p>As an alternative, you can backup the entire folder <code>db/</code> with your own administration tools.</p>


		<h1 id="help_create_project"><a href="#top">{{pwic.emojis.finger_up}}</a> Create a project</h1>
		<p>As per the authorizations are designed, the creation of a new project is only possible in command line. Run the command <code>python3 pwic_admin.py create-project --help</code> for further details.</p>
		<p>By default, you cannot create new pages. You must extend your rights as a manager, or add new dedicated users having that profile. Refer to the matrix above for the feasible actions per profile.</p>
		<p>To show the existing projects and their ownership, run the command: <code>python3 pwic_admin.py show-projects</code>.</p>


		<h1 id="help_takeover_project"><a href="#top">{{pwic.emojis.finger_up}}</a> Take over a project</h1>
		<p>A project can become orphaned if the unique administrator left or is disabled. In this case, it is not possible to assign a new role online.</p>
		<p>Run the command <code>python3 pwic_admin.py takeover-project --help</code> for further details.</p>
		<p>When you <a href="#help_revoke_user">revoke a user</a>, you are warned if a project will be orphaned.</p>


		<h1 id="help_split_project"><a href="#top">{{pwic.emojis.finger_up}}</a> Split a project</h1>
		<p>The operation consists in copying one or several projects into a separate database file. The copied projects are not removed from the original database. The audit log stored in its dedicated database and the documents stored on the drive are not modified.</p>
		<p>After you copied the databases and the documents to the target server, you can <a href="#help_archive_audit">clean the audit data</a> to remove some irrelevant traces.</p>
		<p>Run the command <code>python3 pwic_admin.py split-project --help</code> for further details.</p>
		<p>It is not possible to merge two databases into one, which would be the reverse operation.</p>


		<h1 id="help_delete_project"><a href="#top">{{pwic.emojis.finger_up}}</a> Delete a project</h1>
		<p>Deleting a project cannot be undone. The user accounts are not deleted but their rights are removed from the projects.</p>
		<p>The action is done in the console only through the following command: <code>python3 pwic_admin.py delete-project --help</code>.</p>


		<h1 id="help_create_user"><a href="#top">{{pwic.emojis.finger_up}}</a> Create a user account</h1>
		<p>The users are created by default as readers. The default password is predetermined by the general configuration variable <code>PWIC_DEFAULT_PASSWORD</code>.</p>
		<p>The users must change their password before you can change their authorizations.</p>
		<p>To ensure the consistency of the documentation and the audit tables, it is not possible to delete a user account.</p>
		<p>With the federated authentication, the user accounts are created automatically. You don't need to create them in advance else two password managements will exist simultaneously. To force the use of OAuth, you must reset the password in the console.</p>


		<h1 id="help_pass1"><a href="#top">{{pwic.emojis.finger_up}}</a> Change the own password</h1>
		{% if pwic.user != '' %}
			<p>The form is available in your <a href="/special/user/{{pwic.user|urlencode}}" rel="nofollow">profile page</a>.</p>
		{% endif %}
		<p>It is recommended to setup <em>Pwic.wiki</em> with HTTPS support so that the passwords cannot be intercepted in clear format. The self-signed certicates cannot be used publicly because they generate bypassable errors in your browser.</p>


		<h1 id="help_pass2"><a href="#top">{{pwic.emojis.finger_up}}</a> Change the password of another user</h1>
		<p>The recovery of the lost passwords is an administrative task since <em>Pwic.wiki</em> handles neither emails, nor personal information.</p>
		<p>This command creates the user account if it does not exist, but it grants no role on the projects.</p>
		<p>Run the command <code>python3 pwic_admin.py reset-password --help</code> for further details.</p>


		<h1 id="help_revoke_user"><a href="#top">{{pwic.emojis.finger_up}}</a> Revoke a user</h1>
		<p>The operation revokes the roles of the user on every project. If this user is the unique administrator of some projects, there are displayed.</p>
		<p>The user account is not deleted physically, and replacing it with the default ghost account is not implemented but technically possible.</p>
		<p>Run the command <code>python3 pwic_admin.py revoke-user --help</code> for further details.</p>


		<h1 id="help_grant"><a href="#top">{{pwic.emojis.finger_up}}</a> Grant the authorizations</h1>
		<p>The rights are project-dependent. The form is accessible from the special page.</p>
		<p>The administrators only can grant new rights to the users if they changed their password once.</p>
		<p>A user must have one profile at least (ex: reader) to be able to view the project. To switch from one profile to another for a user, you should first activate the new profile, then deactivate the old profile.</p>
		<p>The profile administrator cannot be removed or disabled oneself to ensure that there is always one administrator per project.</p>
		<p>The assignment of the rights is monitored. You should also consider the separation of duties: no one should be able to do everything.</p>
		<p>The anonymous access is given by the special user account <code>{{pwic.constants.anonymous_user|escape}}</code>. The account cannot be removed. You can disable it or enhance its rights (excluding administrator).</p>


		<h1 id="help_create_page"><a href="#top">{{pwic.emojis.finger_up}}</a> Create a page</h1>
		<p>The creation of new pages is restricted to the managers in order to monitor the documentation efficiently. Each page is codified with an external identifier that can be listed alphabetically in each project overview. If you tick the checkbox to generate a knowledge page, an incremental counter is appended to the name of the page that acts as a prefix.</p>
		<p>If a page is created in reference to another page, its content is copied by default. In that way, you can dedicate a project to store the default templates. It is not possible to refer to a page that doesn't exist or for which you have no access rights.</p>
		<p>A page can be <a href="#help_move_page">renamed and moved</a> to another project as long as you have access rights to the target project.</p>
		<p>Each project must contain the home page <code>{{pwic.constants.default_home|escape}}</code>. It is accessed by default, it is sorted in first place in the header bar, and it holds the link to the special section of the site. Thus it is not recommended to delete this particular page.</p>


		<h1 id="help_modify_page"><a href="#top">{{pwic.emojis.finger_up}}</a> Modify a page</h1>

		<h2>Text content</h2>
		<p>A page is a collection of revisions. A new revision is created each time a page is modified. A past revision cannot be updated, but <a href="#help_delete_page">deleted</a> under some conditions.</p>
		<p>The tags are the base to classify the pages freely. The keywords are separated by a space. You can search for a tag in the search engine by usign a hash (ex: <code>#tag</code>). A tag counts a lot in the evaluation of the results.</p>
		<p>The content of the page follows the Markdown (MD) syntax and you can use HTML markups outside of a code block. The dangerous attributes are automatically removed, but beware to not break the export to OpenDocument.</p>
		<p>If enabled by the option <code>mathjax</code>, you can embed mathematical expressions supported by MathJax. As a special constraints, the sign <code>\</code> must be doubled. For example, the usual form <code>\(\sqrt{x^2}\)</code> should be written as <code>\\(\\sqrt{x^2}\\)</code>. Because it is not possible to preview the formulas before saving, you should save your page as draft.</p>
		<p>Saving as draft means that you are working on a page. The revision needs no particular attention, except the one of the current editor. You can delete your own drafts. They are also automatically deleted once you publish a final version.</p>
		<p>Saving as final means that the document is ready to be reviewed by the validator. It also physically deletes all your own previous revisions marked as draft unless you define the option <code>keep_drafts</code>.</p>
		<p>If you want to save a document which is neither a draft, nor a final version, just save it with none of these flags. Such a revision is a milestone and can be deleted by an administrator only.</p>
		<p>The attribute <em>Reason</em> of the page is a mandatory text that summarizes the purpose of the modification. It is used in the history to search for old revisions at glance.</p>
		<p>The attribute <em>Milestone</em> of the page is an optional free comment that can be used, for example, by the manager to request a delivery date, or by the editor to announce a publishing date. You can also indicate your difficulties, the current progress, etc...</p>
		<p>The attribute <em>Header line</em> means that the page is displayed in the header line. It helps to structure your documentation by themes. There is no limitation in the number of header items and only a manager can set the attribute.</p>
		<p>The attribute <em>Protected page</em> means that the page can be modified by a manager only.</p>
		<p>A manager can change all these attributes without recreating a revision if the option <code>quick_fix</code> is enabled.</p>

		<h2>Attachments</h2>
		<p>You can upload several files for a page. In case it is a picture, you can also include it in the page as a figure, else as a link. All the files are listed on a gallery below the page.</p>
		<p>In any case, many rules apply in the uploading process:</p>
			<ul>
				<li>No revision is created when a file is created, modified or deleted. The changes are instantly considered.</li>
				<li>You cannot recover the deleted files, unless you own a backup.</li>
				<li>The filename must be unique per project and the file is attached to a page:
					<ul>
						<li>The file is created if it doesn't exist yet.</li>
						<li>The file is updated if it exists and is assigned to the current page.</li>
						<li>The file is <ins>not</ins> updated if it exists and is assigned to another page.</li>
					</ul>
				</li>
				<li>The filename may have to respect a naming convention if a regular expression is defined in the variable <code>document_name_regex</code>.</li>
				<li>A file size limit may apply if the administrator has defined the variables <code>document_size_max</code> or <code>project_size_max</code>.</li>
				<li>For security reasons, the content of the file is verified if the option <code>magic_bytes</code> is enabled.</li>
				<li>To host the uploaded files on an external storage, you need to implement a custom code in <code>PwicExtension.on_api_document_*</code>, populate the field <code>documents.exturl</code> and don't keep any local copy.</li>
			</ul>
		<p>For any document stored in the supported formats, you can import its content as a Markdown text by clicking on the button {{pwic.emojis.hammer}}, unless you defined the option <code>no_document_conversion</code>. The images are excluded from the processing. The embedded convertor produces a more suitable content in regards of what the renown tool <em>Pandoc</em> can achieve.</p>


		<h1 id="help_move_page"><a href="#top">{{pwic.emojis.finger_up}}</a> Move a page</h1>
		<p>This feature has two usages:</p>
			<ul>
				<li>Rename a page within the same project,</li>
				<li>Move a page to another project: the page is eventually renamed at the same time, and the documents are moved if the source file names don't exist in the target project already.</li>
			</ul>
		<p>Because the manager is responsible for the organization of the pages, you must have this role for the source and destination projects. The internal links won't be updated automatically, but the list of the affected pages is displayed. The <a href="#help_links">broken links</a> can be found also in the special pages</p>


		<h1 id="help_delete_page"><a href="#top">{{pwic.emojis.finger_up}}</a> Delete a page</h1>
		<p>You delete a revision one by one, not the entire page at once. Moreover some restrictions apply to ensure the consistency of the documentation.</p>
		<p>A manager and an editor can delete their own drafts. An administrator can delete a revision that is neither final, nor validated.</p>
		<p>Because of the incremental numbering, the highest identifier of a deleted page can be reallocated. And the gaps in the numbering of the revisions exist by design.</p>


		<h1 id="help_read_page"><a href="#top">{{pwic.emojis.finger_up}}</a> Read a page</h1>
		<p>You must have an account to be able to read the documentation, unless the option <code>no_login</code> and the anonymous user are enabled for the concerned projects.</p>
		<p>The pages are saved into a cache to improve the overall performances of the server at the cost of the disk space. After certain technical operations or over the time, it might be needed to clear the cache with the command <code>python3 pwic_admin.py clear-cache</code>. To not wait for the on-the-fly caching of the pages, you can regenerate in mass the cache with the command <code>python3 pwic_admin.py regenerate-cache</code>. The cache is not used to export <a href="#help_export_page">a page</a> or <a href="#help_export_project">a project</a>.</p>


		<h1 id="help_export_page"><a href="#top">{{pwic.emojis.finger_up}}</a> Export a page</h1>
		<p>A page is usually read online but you can export it on your desktop in several file formats.</p>

			<h2>html - Web page</h2>
			<p>The export to HTML is a single file that can be opened in your web browser. However, it does not embed the images, the attachments and your custom styles.</p>
			<p>By using the feature "<em>Save as</em>" of your web browser, you can save the page and the loaded pictures, but without the attachments.</p>

			<h2>md - Markdown</h2>
			<p>This format is the basic content used by <em>Pwic.wiki</em>.</p>
			<p>The file can be edited further with a classical raw text editor, but it needs a dedicated application to be rendered nicely.</p>

			<h2>odt - OpenDocument</h2>
			<p>This file format is public but it is not a DOCX document. The file can be edited in MS Word, LibreOffice and more.</p>
			<p>The export is designed to be very similar to the HTML rendering online, like as if you copied-pasted the text in your editor. However, slight differences of layout are expectable.</p>
			<p>The success of the conversion can be altered if you use HTML tags in your pages.</p>

			<h2>pdf - Desktop PDF</h2>
			<p>This format is not supported by <em>Pwic.wiki</em>, so it cannot be disabled in the options.</p>
			<p>By using the feature "<em>Print</em>" of your web browser, select a virtual printer to produce the final PDF file. When doing so, some useless elements of the page are hidden.</p>
			<p>On Windows, you can enable the PDF printer by executing the command <code>%windir%\System32\OptionalFeatures.exe</code>.</p>


		<h1 id="help_validate_page"><a href="#top">{{pwic.emojis.finger_up}}</a> Validate a revision</h1>
		<p>Several conditions are required to validate a page:</p>
			<ul>
				<li>You have changed your password once.</li>
				<li>You have the role "validator" on the project.</li>
				<li>The page to validate is marked as "final" by the editor.</li>
			</ul>


		<h1 id="help_export_project"><a href="#top">{{pwic.emojis.finger_up}}</a> Export a project</h1>
		<p>The administrators are able to download a project as a ZIP file containing all the pages and attached documents. The purposes are the creation of a backup or the preparation of a migration for example.</p>
		<p>The export is audited and can be disabled by setting the administrative variable <code>no_export_project</code>.</p>


		<h1 id="help_links"><a href="#top">{{pwic.emojis.finger_up}}</a> Verify the links</h1>
		<p><em>Pwic.wiki</em> can verify the internal links of the pages to ensure that:</p>
			<ul>
				<li>Each page is linked to another one at least (check for orphans).</li>
				<li>Each page is not linking to a non-existent page (check for broken links).</li>
			</ul>
		<p>The checks apply within a given project. The links to other projects are neither reported as orphan, nor as broken.</p>
		<p>The feature serves as a general monitoring tool for the documentation.</p>


		<h1 id="help_graph"><a href="#top">{{pwic.emojis.finger_up}}</a> Graph of the links</h1>
		<p>The directed graph is a visual representation of the links between the pages. It is possible to detect the pages of high importance and the ones that are insufficiently put into the light.</p>
		<p>In case you link to another project, only the targeted pages are displayed. The title of the page is hidden if you don't have access to the project.</p>
		<p>The pages in red correspond to broken links.</p>
		<p>You can download the graph as a file. After you installed GraphViz, you can regenerate the picture with the command: <code>dot -Tsvg input.gv -o output.svg</code>.</p>


		<h1 id="help_search"><a href="#top">{{pwic.emojis.finger_up}}</a> Search across the pages</h1>
		<p>The search works with exact literals. If you are looking for the word <code>excellent</code> but the page contains the word <code>exellent</code> (without the <code>c</code>), you won't find any result. Consequently, writing without mistake is a main objective not only for search purposes, but also for the general quality of the documentation.</p>
		<p>The search engine doesn't build an index of words. It means that you are able to search within a word. For example, <code>document</code> will match with both <code>document</code> and <code>documents</code>, but <code>documents</code> will match with itself only. Consequently, you should avoid the plural forms to maximize the number of results. This feature is also very important to be able to search for partial technical keywords if the documentation contains lines of code.</p>
		<p>You can search for individual words, but also for sentences if you use double quotes. For exemple, <code>"my documentation"</code> will not match with <code>my last documentation</code>. However, <code>my documentation</code> would match with it because there is no quote (<code>my</code> and <code>documentation</code> are processed separately).</p>
		<p>You can exclude a term by adding a leading minus sign (<code>-</code>). For example, <code>-interface</code> will exclude all the pages that contain the word <code>interface</code>. You can combine negated terms and they will act as an OR condition. It means that if one of the negated terms is part of the page, then the page is fully excluded. In case you want to search the minus sign explicitly, consider using surrounding quotes (<code>"-interface"</code>).</p>
		<p>The terms that are not negated act as an AND condition. It means that all the terms must appear so that the page can be selected. That's why you should not use the keyword <code>and</code> explicitly. It is not possible to make OR conditions with these terms, so do separate searches instead.</p>
		<p>Some special search terms exist:</p>
			<ul>
				<li><code>term</code> searches in the content of the page, or for the exact page identifier. This is the default behavior seen above.</li>
				<li><code>author:term</code> checks the term against the author of the latest revision.</li>
				<li><code>title:term</code> checks the term in the title of the page.</li>
				<li><code>:latest</code> searches for the most recent page.</li>
				<li><code>:draft</code> searches for drafts.</li>
				<li><code>:final</code> searches for final pages.</li>
				<li><code>:validated</code> checks that the page is validated, whoever is the validator.</li>
				<li><code>validator:term</code> checks the term against the validator of the latest revision. If the term is empty, the check returns a match, so do prefer the keyword <code>:validated</code> in that case.</li>
				<li><code>:document</code> checks that the page has at least one document attached.</li>
				<li><code>#tag</code> checks that the tag is assigned to the page according to your own classification logic.</li>
			</ul>
		<p>At the end, the pages are sorted by the number of occurrences of the search terms. Each term that is not negated contribute to the score as a sum. Because of that, your search terms should be at least 3- or 4-character long.</p>
		<p>The search is case-insensitive.</p>


		<h1 id="help_searchdoc"><a href="#top">{{pwic.emojis.finger_up}}</a> Search across the documents</h1>
		<p>The search applies on the name of the page, the file name and the mime of the file.</p>
		<p>The syntax of the terms is similar to the <a href="#help_search">one used for the pages</a>. You can use inclusive and exclusive keywords, but not the special ones that contain <code>:</code>.</p>
		<p>It is not possible to search within the content of the files.</p>


		<h1 id="help_log"><a href="#top">{{pwic.emojis.finger_up}}</a> View the activity log</h1>

			<h2>All the activities</h2>
			<p><em>Pwic.wiki</em> logs many activities to enforce the traceability of the documentation. In case of troubles, it is possible to unwind the events and have a better understanding of the situation.</p>
			<p>Online, the administrators of a project can see the events related to the project only, like the creation of a page, a deletion, a validation... At system level, it is possible to display all the events, including the ones not related to a given project.</p>
			<p>The listing can be filtered out by date and content with the following syntax: <code>python3 pwic_admin.py show-audit --max 365 | grep grant</code> would return all the modifications of the users' rights over the last year.</p>

			<h2>All the logins</h2>
			<p>Run the command <code>python3 pwic_admin.py show-login --days 30</code> to show the last logins of the users over the last given days (30 by default).</p>
			<p>If the users don't delete their cookies and if you use the option <code>keep_sessions</code>, the users won't need to reconnect very often. Therefore an old login date is not necessarily a sign of inactivity.</p>

			<h2>All the inactive writers</h2>
			<p>Run the command <code>python3 pwic_admin.py show-inactivity --days 30</code> to highlight the inactive users who can modify the documentation.</p>
			<p>Some projects being completed, it is possible that they have not received any recent modifications by their owners.</p>

			<h2>Statistics</h2>
			<p>General figures about the server and the projects can be summarized by the command <code>python3 pwic_admin.py show-stats</code>.</p>

			<h2 id="help_archive_audit">Archive the log</h2>
			<p>Because the audit data can grow fast, you can archive the data on a regular basis with the command <code>python3 pwic_admin.py archive-audit --selective 30 --complete 365</code>. In the selective horizon (ie. older than the given number of days), some generic entries are removed but all the core traces of the projects are kept. In the full horizon, all the entries are removed.</p>
			<p>In fact, the entries from the table <code>audit</code> are just moved to the table <code>audit_arch</code> and you can dispose of the data at your convenience through <a href="#help_execute_sql">SQL commands</a>. To remove the old entries physically, you would execute: <code>DELETE FROM audit.audit_arch</code>.</p>
			<p>By design, you cannot remove the entries in the short horizon of 90 days. Also note that archiving the audit data impacts the reliability of the reports above.</p>

		<h1 id="help_log_user"><a href="#top">{{pwic.emojis.finger_up}}</a> View the activity of a user</h1>
		<p>The user page contains a public overview online of the recently modified pages (over the last 30 days) and the uploaded documents.</p>
		<p>Your own user page is mentioned in the footer.</p>

		<h1 id="help_api"><a href="#top">{{pwic.emojis.finger_up}}</a> Automate Pwic.wiki (API)</h1>
		<p>The web interface communicates with <em>Pwic.wiki</em> through an application programming interface (API) whose specifications are <a href="/api">available online</a>.</p>
		<p>You can develop external robots in the limit of your permitted authorizations. Some examples are available in the folder <code>static/api/</code>.</p>
		<p>You can add your own paths by extending the source code.</p>

		<h1 id="help_bi"><a href="#top">{{pwic.emojis.finger_up}}</a> Report into BI</h1>

			<h2 id="help_bi_api">Through API remotely</h2>
			<p>The <em>Application Programming Interface</em> (API) is a set of custom HTTP end-points used by the web user interface to perform all the updates in <em>Pwic.wiki</em> via POST requests only. All the users have access to a partial set of safe features depending on their online authentication.</p>
			<p>The API is usable for the mass automation of the public data in read and write mode. It does not integrate well with BI tools because the data model is not reflected transparently and consistently.</p>
			<p>The API cannot be turned off but you can restrict the users by their authorizations for each project.</p>

			<h2 id="help_bi_odbc">Through ODBC locally</h2>
			<p>If you have a direct and local access to the server, you can use an SQLite ODBC driver locally to integrate <em>Pwic.wiki</em> with your favorite BI tool. However, all the data will be exposed without any filter or check. It is a critical point of failure if you leak the values of the private keys stored in the table <em>env</em>.</p>
			<p>There is no possible option to prevent the local use of an ODBC driver. The access to the database is restricted by the file system only.</p>

			<h2 id="help_bi_odata">Through OData remotely</h2>
			<p>OData is a protocol to share data with external systems. <em>Pwic.wiki</em> implements minimalistic features (read-only, no filter, no stream, basic authentication), so that you can query the data remotely for your reporting. The tested tool is PowerBI that is often used in the business environments.</p>
			<p>First, you need to activate the OData interface through the global option <code>odata</code>. Its effect is immediate.</p>
			<p>Second, the OData feed is available at the following addresses:</p>
				<ul>
					<li><code>/api/odata</code>: the description of the service,</li>
					<li><code>/api/odata/$metadata</code>: the schema of the data,</li>
					<li><code>/api/odata/table</code>: the data with the name <em>table</em> to be replaced by the real name that you want to retrieve. The paths are provided in the root description of the service.</li>
				</ul>
			<p>The data are filtered from source and the private ones remain hidden. The OData cannot be filtered out by a dollar-argument. An authentication through a challenge <em>Basic</em> applies at the lowest level only. You cannot use the federated authentication (<a href="#help_sso">OAuth</a>). For your security within an untrusted network, you should enable HTTPS. The exposed data may differ depending on your authorizations. A basic use of OData is possible with an account having a role of reader on the projects that you wants to report on.</p>
			<p>The mass import of the tables in PowerBI via the shortest path is not supported for an unknown technical reason. Instead, you should add each table by its full path, which will require an authentication each time.</p>

		<h1 id="help_licenses"><a href="#top">{{pwic.emojis.finger_up}}</a> Read the licenses</h1>
		<p><em>Pwic.wiki</em> is released under the terms of the GNU Affero General Public License v3+. For more details, refer to the file <code>LICENSE</code>.</p>
		<p><em>Pwic.wiki</em> also relies on several external resources whose licenses are summarized in the following table:</p>
		<table>
			<tr>
				<th>Name</th>
				<th>Tested version</th>
				<th class="pwic_desktop">Type</th>
				<th>License</th>
			</tr>
			<tr>
				<td><a href="https://github.com/aio-libs/aiohttp">aiohttp</a></td>
				<td>3.11.11 (&gt;=3.8)</td>
				<td class="pwic_desktop">Library for Python</td>
				<td><a href="https://raw.githubusercontent.com/aio-libs/aiohttp/master/LICENSE.txt">Apache 2.0 License</a></td>
			</tr>
			<tr>
				<td><a href="https://github.com/aio-libs/aiohttp-cors">aiohttp-cors</a></td>
				<td>0.7.0</td>
				<td class="pwic_desktop">Library for Python</td>
				<td><a href="https://raw.githubusercontent.com/aio-libs/aiohttp-cors/master/LICENSE">Apache 2.0 License</a></td>
			</tr>
			<tr>
				<td><a href="https://github.com/aio-libs/aiohttp-session">aiohttp-session</a></td>
				<td>2.12.1 (&gt;=2.10)</td>
				<td class="pwic_desktop">Library for Python</td>
				<td><a href="https://raw.githubusercontent.com/aio-libs/aiohttp-session/master/LICENSE">Apache 2.0 License</a></td>
			</tr>
			<tr>
				<td><a href="https://github.com/fabiospampinato/cash">cash.js</a></td>
				<td>8.1.0</td>
				<td class="pwic_desktop">Library for JavaScript</td>
				<td><a href="https://raw.githubusercontent.com/fabiospampinato/cash/master/license">MIT License</a></td>
			</tr>
			<tr>
				<td><a href="https://github.com/codemirror/codemirror5">CodeMirror</a></td>
				<td>5.65.16</td>
				<td class="pwic_desktop">Library for JavaScript</td>
				<td><a href="https://raw.githubusercontent.com/codemirror/codemirror5/master/LICENSE">MIT License</a></td>
			</tr>
			<tr>
				<td><a href="https://github.com/shibukawa/imagesize_py">ImageSize</a></td>
				<td>1.4.1</td>
				<td class="pwic_desktop">Library for Python</td>
				<td><a href="https://raw.githubusercontent.com/shibukawa/imagesize_py/master/LICENSE.rst">MIT License</a></td>
			</tr>
			<tr>
				<td><a href="https://github.com/pallets/jinja">Jinja2</a></td>
				<td>3.1.5</td>
				<td class="pwic_desktop">Library for Python</td>
				<td><a href="https://raw.githubusercontent.com/pallets/jinja/main/LICENSE.txt">BSD-3-Clause License</a></td>
			</tr>
			<tr>
				<td><a href="https://github.com/trentm/python-markdown2">Markdown2</a></td>
				<td>2.4.13 (modified, &gt;=2.3.10, &lt;2.5)</td>
				<td class="pwic_desktop">Library for Python</td>
				<td><a href="https://raw.githubusercontent.com/trentm/python-markdown2/master/LICENSE.txt">MIT License</a></td>
			</tr>
			<tr>
				<td><a href="https://github.com/mathjax/MathJax-src">MathJax</a></td>
				<td>3.1.2</td>
				<td class="pwic_desktop">Library for JavaScript</td>
				<td><a href="https://raw.githubusercontent.com/mathjax/MathJax-src/master/LICENSE">Apache 2.0 License</a></td>
			</tr>
			<tr>
				<td><a href="https://fonts.google.com/specimen/Noto+Sans">Noto Sans</a></td>
				<td>14</td>
				<td class="pwic_desktop">Font</td>
				<td><a href="https://fonts.google.com/specimen/Noto+Sans#license">Open Font License</a></td>
			</tr>
			<tr>
				<td><a href="https://github.com/jazzband/prettytable">PrettyTable</a></td>
				<td>3.13.0</td>
				<td class="pwic_desktop">Library for Python</td>
				<td><a href="https://raw.githubusercontent.com/jazzband/prettytable/main/LICENSE">BSD License</a></td>
			</tr>
			<tr>
				<td><a href="https://github.com/pygments/pygments">pygments</a></td>
				<td>2.19.1</td>
				<td class="pwic_desktop">Library for Python</td>
				<td><a href="https://raw.githubusercontent.com/pygments/pygments/master/README.rst">BSD-2-Clause License</a></td>
			</tr>
			<tr>
				<td><a href="https://github.com/pyauth/pyotp">pyotp</a></td>
				<td>2.9.0</td>
				<td class="pwic_desktop">Library for Python</td>
				<td><a href="https://raw.githubusercontent.com/pyauth/pyotp/develop/LICENSE">MIT License</a></td>
			</tr>
			<tr>
				<td><a href="https://github.com/python/cpython/">Python</a></td>
				<td>3.12.2</td>
				<td class="pwic_desktop">Programming language</td>
				<td><a href="https://raw.githubusercontent.com/python/cpython/master/LICENSE">Python Software Foundation License</a></td>
			</tr>
			<tr>
				<td><a href="https://darkvisitors.com/agents">Robots.txt</a></td>
				<td>-</td>
				<td class="pwic_desktop">Data source</td>
				<td>Freemium</td>
			</tr>
			<tr>
				<td><a href="https://www.sqlite.org">SQLite</a></td>
				<td>3</td>
				<td class="pwic_desktop">Database engine</td>
				<td><a href="https://raw.githubusercontent.com/sqlite/sqlite/master/LICENSE.md">Public domain</a></td>
			</tr>
			<tr>
				<td><a href="https://github.com/ariutta/svg-pan-zoom">SVG pan &amp; zoom</a></td>
				<td>3.5.1</td>
				<td class="pwic_desktop">Library for JavaScript</td>
				<td><a href="https://raw.githubusercontent.com/ariutta/svg-pan-zoom/master/LICENSE">BSD-2-Clause License</a></td>
			</tr>
			<tr>
				<td><a href="https://github.com/swagger-api/swagger-ui">Swagger UI</a></td>
				<td>3.14.1</td>
				<td class="pwic_desktop">Library for JavaScript</td>
				<td><a href="https://raw.githubusercontent.com/swagger-api/swagger-ui/master/LICENSE">Apache 2.0 License</a></td>
			</tr>
			<tr>
				<td><a href="https://github.com/mdaines/viz.js">Viz.js</a></td>
				<td>1.7.1</td>
				<td class="pwic_desktop">Library for JavaScript</td>
				<td><a href="https://raw.githubusercontent.com/mdaines/viz.js/master/LICENSE">MIT License</a></td>
			</tr>
		</table>
	</article>
{% endblock %}
