<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>User Guide on entici</title><link>https://www.entici.org/docs/5.3.0/user-guide/</link><description>Recent content in User Guide on entici</description><generator>Hugo</generator><language>en</language><atom:link href="https://www.entici.org/docs/5.3.0/user-guide/index.xml" rel="self" type="application/rss+xml"/><item><title>API documentation</title><link>https://www.entici.org/docs/5.3.0/user-guide/api-documentation/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.entici.org/docs/5.3.0/user-guide/api-documentation/</guid><description>&lt;p>The following table gives an overview of all available REST interfaces.&lt;/p>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>Name&lt;/th>
 &lt;th>Since&lt;/th>
 &lt;th>Method&lt;/th>
 &lt;th>Path&lt;/th>
 &lt;th>Consumes&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>&lt;a href="#pseudonymize">Pseudonymize&lt;/a>&lt;/td>
 &lt;td>v1.0.0&lt;/td>
 &lt;td>POST&lt;/td>
 &lt;td>&lt;code>/v1/process&lt;/code>&lt;/td>
 &lt;td>Bundle&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="#pseudonymize-batch">Pseudonymize (batch)&lt;/a>&lt;/td>
 &lt;td>v2.1.0&lt;/td>
 &lt;td>POST&lt;/td>
 &lt;td>&lt;code>/v1/process/all&lt;/code>&lt;/td>
 &lt;td>Array of Bundles&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="#pseudonymize-param">Pseudonymize (Param)&lt;/a>&lt;/td>
 &lt;td>v5.1.0&lt;/td>
 &lt;td>POST&lt;/td>
 &lt;td>&lt;code>/entitylist/psn-service/$pseudonymize&lt;/code>&lt;/td>
 &lt;td>Parameters&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="#exists">Exists&lt;/a>&lt;/td>
 &lt;td>v5.1.0&lt;/td>
 &lt;td>POST&lt;/td>
 &lt;td>&lt;code>/entitylist/psn-service/pseudonym/exists&lt;/code>&lt;/td>
 &lt;td>Bundle&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="#depseudonymize">Depseudonymize&lt;/a>&lt;/td>
 &lt;td>v4.0.0&lt;/td>
 &lt;td>POST&lt;/td>
 &lt;td>&lt;code>/v1/resolve&lt;/code>&lt;/td>
 &lt;td>Bundle&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="#save-pseudonym">Save Pseudonym&lt;/a>&lt;/td>
 &lt;td>v2.1.0&lt;/td>
 &lt;td>POST&lt;/td>
 &lt;td>&lt;code>/entitylist/psn-service/pseudonym/save&lt;/code>&lt;/td>
 &lt;td>Parameters&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="#get-bloomfilter">Get Bloomfilter&lt;/a>&lt;/td>
 &lt;td>v2.1.0&lt;/td>
 &lt;td>POST&lt;/td>
 &lt;td>&lt;code>/entitylist/psn-service/bloomfilter&lt;/code>&lt;/td>
 &lt;td>Parameters&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="#translate-pseudonym">Translate Pseudonym&lt;/a>&lt;/td>
 &lt;td>v5.3.0&lt;/td>
 &lt;td>POST&lt;/td>
 &lt;td>&lt;code>/entitylist/depsn-service/pseudonym/translate&lt;/code>&lt;/td>
 &lt;td>Bundle&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;h2 id="pseudonymize">Pseudonymize&lt;/h2>
&lt;p>This REST interface accepts a FHIR Bundle as input.&lt;/p></description></item><item><title>Authentication</title><link>https://www.entici.org/docs/5.3.0/user-guide/authentication/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.entici.org/docs/5.3.0/user-guide/authentication/</guid><description>&lt;p>For authorization and authentication purposes an entici instance requires a Keycloak server with a preconfigured &lt;code>trustcenter&lt;/code> realm.&lt;/p>

&lt;img alt="diagram" class="diagram diagram-kroki diagram-kroki-d2" id="keycloak-clients" src="https://www.entici.org/_6243096181466961564.svg">&lt;p class="figure-caption">&lt;b>Figure 1.&lt;/b> Overview of required Keycloak clients.&lt;/p>
&lt;p>Figure 1 shows an overview of all relevant clients. The legend at the top visualizes the OAuth2 roles by using different background colors. It can be seen that in Keycloak a client can act both as resource server and as client at the same time (e.g. &lt;em>entitylist-webapp&lt;/em>). The client &lt;em>trustcenter-test&lt;/em> is available for testing an external interface of the trustcenter (e.g. &lt;code>/v1/process/&lt;/code>). See &lt;a href="https://www.entici.org/docs/5.3.0/installation-guide/quick-start/#smoke-test">Smoke Test&lt;/a> for more details about how to run the test.&lt;/p></description></item><item><title>Pseudonym Generation</title><link>https://www.entici.org/docs/5.3.0/user-guide/pseudonym-generation/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.entici.org/docs/5.3.0/user-guide/pseudonym-generation/</guid><description>&lt;p>In entici, we distinguish between internal and external pseudonyms. The internal pseudonym is the default pseudonym which will be generated whenever a new resource is pseudonymized. Therefore, the relation between resource and internal pseudonym is 1:1.&lt;/p>
&lt;p>In addition, an arbitrary number of external pseudonyms may be generated for one resource. This mechanism enables project-based pseudonymization. Therefore, the relation between resource and external pseudonym is 1:N.&lt;/p>
&lt;p>All pseudonyms are generated via a cryptographically strong random number generator (RNG). In the unlikely case of a collision, a fall-back mechanism is in place to guarantee unique pseudonyms.&lt;/p></description></item><item><title>Performance Tuning</title><link>https://www.entici.org/docs/5.3.0/user-guide/performance-tuning/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.entici.org/docs/5.3.0/user-guide/performance-tuning/</guid><description>&lt;h2 id="parallel-processing">Parallel Processing&lt;/h2>
&lt;p>Pseudonymization requests can be processed in parallel. The degree of parallelism is controlled by the following configuration parameter:&lt;/p>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>Name&lt;/th>
 &lt;th>Description&lt;/th>
 &lt;th>Default Value&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>&lt;code>PSN_PARALLELISM_LEVEL&lt;/code>&lt;/td>
 &lt;td>Number of parallel threads used for pseudonymization. &lt;br/>Minimum: &lt;code>1&lt;/code>&lt;br/>Maximum: &lt;code>0.5 × number of available processors&lt;/code>&lt;/td>
 &lt;td>&lt;code>8&lt;/code>&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>


&lt;div class="expressive-code">
 &lt;figure class="frame not-content">
 &lt;figcaption class="header">
 &lt;span class="title">&lt;/span>
 &lt;/figcaption>
 &lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="nv">PSN_PARALLELISM_LEVEL&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="m">8&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
 &lt;/figure>
&lt;/div>
&lt;p>Increasing this value allows more requests to be handled concurrently. However, it also increases contention on the database and CPU. The practical upper bound is capped at half the number of available processors to avoid starving other system processes.&lt;/p></description></item><item><title>Troubleshooting</title><link>https://www.entici.org/docs/5.3.0/user-guide/troubleshooting/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.entici.org/docs/5.3.0/user-guide/troubleshooting/</guid><description>&lt;h2 id="issues-with-keycloak-communication">Issues with Keycloak Communication&lt;/h2>
&lt;p>For internal Keycloak instances, or external Keycloak service running on the same Docker host, the trustcenter service containers might face difficulties when connecting to the Keycloak instance (defined in &lt;code>KEYCLOAK_SERVER_NAME&lt;/code>).&lt;/p>
&lt;h4 id="issue-1-firewall-settings">Issue #1: Firewall settings&lt;/h4>
&lt;p>Make sure not to block the entici service containers from connecting to the Docker host by the firewall. For Ubuntu UFW, this can be prevented by:&lt;/p>


&lt;div class="expressive-code">
 &lt;figure class="frame not-content">
 &lt;figcaption class="header">
 &lt;span class="title">&lt;/span>
 &lt;/figcaption>
 &lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># [Setup I] Assuming: KEYCLOAK_SERVER_TYPE=Internal, SERVER_PORT=443&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Open HTTPS port 443&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo ufw allow &lt;span class="m">443&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># [Setup II] Assuming: KEYCLOAK_SERVER_TYPE=External, Keycloak on Docker host on port: 8443 &lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Open HTTPS port 8443&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo ufw allow &lt;span class="m">8443&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
 &lt;/figure>
&lt;/div>
&lt;p>Note that Docker-based published ports are bypassing the firewall policies anyhow on Ubuntu systems by default for external requests [August 2021].&lt;/p></description></item><item><title>Backup</title><link>https://www.entici.org/docs/5.3.0/user-guide/backup/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.entici.org/docs/5.3.0/user-guide/backup/</guid><description>&lt;p>For the following commands, make sure to replace &lt;code>&amp;lt;postgres-user&amp;gt;&lt;/code> with your database user.&lt;/p>
&lt;h2 id="save">Save&lt;/h2>


&lt;div class="expressive-code">
 &lt;figure class="frame not-content">
 &lt;figcaption class="header">
 &lt;span class="title">&lt;/span>
 &lt;/figcaption>
 &lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">docker &lt;span class="nb">exec&lt;/span> -u postgres db_entitylist pg_dump -U &amp;lt;postgres-user&amp;gt; -Fc -c entitylist &amp;gt; dump_entitylist_&lt;span class="sb">`&lt;/span>date +%d-%m-%Y&lt;span class="s2">&amp;#34;_&amp;#34;&lt;/span>%H_%M_%S&lt;span class="sb">`&lt;/span>.sql&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
 &lt;/figure>
&lt;/div>
&lt;h2 id="restore">Restore&lt;/h2>


&lt;div class="expressive-code">
 &lt;figure class="frame not-content">
 &lt;figcaption class="header">
 &lt;span class="title">&lt;/span>
 &lt;/figcaption>
 &lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">docker &lt;span class="nb">exec&lt;/span> -u postgres -i db_entitylist pg_restore -U &amp;lt;postgres-user&amp;gt; -Fc -c -d entitylist &amp;lt; &amp;lt;dump-file&amp;gt;&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
 &lt;/figure>
&lt;/div></description></item></channel></rss>