<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<title>Sam&#x27;s Blog</title>
	<subtitle>A collection of notes on technical subjects and others.</subtitle>
	<link rel="self" type="application/atom+xml" href="https://sxv.be/posts/feed.xml"/>
  <link rel="alternate" type="text/html" href="https://sxv.be/posts/"/>
  
	<updated>2026-02-28T00:00:00+00:00</updated>
	
	<id>https://sxv.be/posts/feed.xml</id>
	<entry xml:lang="en">
		<title>An Unreasonable Effort to Port Spliit to Cloudflare</title>
		<published>2026-02-28T00:00:00+00:00</published>
		<updated>2026-02-28T00:00:00+00:00</updated>
		<link rel="alternate" type="text/html" href="https://sxv.be/posts/running-spliit-on-cloudflare/"/>
		<id>https://sxv.be/posts/running-spliit-on-cloudflare/</id>
    
		<content type="html" xml:base="https://sxv.be/posts/running-spliit-on-cloudflare/">&lt;img class=&quot;no-lightense&quot; alt=&quot;Spliit logo&quot; src=&quot;&#x2F;assets&#x2F;spliit-on-cloudflare&#x2F;spliit-logo.png&quot;&#x2F;&gt;
&lt;div align=&quot;center&quot;&gt;
&lt;i&gt;(on Cloudflare)&lt;&#x2F;i&gt;
&lt;&#x2F;div&gt;

&lt;blockquote class=&quot;callout note has-title&quot;&gt;
  
  
  &lt;p class=&quot;title&quot;&gt;
    &lt;span class=&quot;icon&quot;&gt;
      &lt;svg xmlns=&quot;http:&#x2F;&#x2F;www.w3.org&#x2F;2000&#x2F;svg&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;18&quot; height=&quot;18&quot;&gt;&lt;path d=&quot;M12 22C6.47715 22 2 17.5228 2 12C2 6.47715 6.47715 2 12 2C17.5228 2 22 6.47715 22 12C22 17.5228 17.5228 22 12 22ZM12 20C16.4183 20 20 16.4183 20 12C20 7.58172 16.4183 4 12 4C7.58172 4 4 7.58172 4 12C4 16.4183 7.58172 20 12 20ZM11 7H13V9H11V7ZM11 11H13V17H11V11Z&quot; fill=&quot;currentColor&quot;&gt;&lt;&#x2F;path&gt;&lt;&#x2F;svg&gt;

    &lt;&#x2F;span&gt;
    &lt;strong&gt;Summary&lt;&#x2F;strong&gt;
  &lt;&#x2F;p&gt;
  &lt;div class=&quot;content&quot;&gt;
    &lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;spliit-app&#x2F;spliit&quot;&gt;Spliit&lt;&#x2F;a&gt; is a free and open source alternative to Splitwise.&lt;&#x2F;p&gt;
&lt;p&gt;I swapped Spliit&#x27;s ORM (object-relational mapping) layer from Prisma to Drizzle, just so that I could host Spliit on Cloudflare instead of Vercel. It&#x27;s an unreasonable amount of work, but now my instance of Spliit runs blazing fast on the Cloudflare network. &lt;a href=&quot;#how-fast-is-spliit-on-cloudflare-it-s-fast&quot;&gt;Skip to the end&lt;&#x2F;a&gt; for a speed comparison.&lt;&#x2F;p&gt;
&lt;p&gt;Spliit-on-Cloudflare is available on &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;svdvonde&#x2F;spliit-on-cloudflare&quot;&gt;GitHub&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;

  &lt;&#x2F;div&gt;
  
&lt;&#x2F;blockquote&gt;

&lt;h2 id=&quot;porting-spliit-from-vercel-to-cloudflare&quot;&gt;Porting Spliit from Vercel to Cloudflare&lt;a class=&quot;zola-anchor&quot; href=&quot;#porting-spliit-from-vercel-to-cloudflare&quot; aria-label=&quot;Anchor link for: porting-spliit-from-vercel-to-cloudflare&quot; style=&quot;visibility: hidden;&quot;&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;The official Spliit is very easy to deploy on the free tier of &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;vercel.com&quot;&gt;Vercel&lt;&#x2F;a&gt; (a cloud provider), almost in a single click. This type of self-hosted instance is completely functonional, and a good replacement for Splitwise or Tricount.&lt;&#x2F;p&gt;
&lt;p&gt;The problem is that Spliit is (painfully) slow when hosted on the Vercel free tier.
While the web pages load within a reasonable time, the root cause of the slowness seemed to be the Postgres database used to dynamically load data.&lt;&#x2F;p&gt;
&lt;p&gt;Rather than pay for more resources at Vercel, it would be great if I could just deploy Spliit on Cloudflare instead. &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;workers.cloudflare.com&#x2F;&quot;&gt;Cloudflare&#x27;s Workers&lt;&#x2F;a&gt; platform has a plenty generous free tier for small, personal projects, and, knowing Cloudflare&#x27;s network, is designed for speed.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;swapping-prisma-for-drizzle&quot;&gt;Swapping Prisma for Drizzle&lt;a class=&quot;zola-anchor&quot; href=&quot;#swapping-prisma-for-drizzle&quot; aria-label=&quot;Anchor link for: swapping-prisma-for-drizzle&quot; style=&quot;visibility: hidden;&quot;&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;Cloudflare does not support traditional databases such as Postgres, opting instead for Cloudflare&#x27;s own &quot;D1&quot; database that supports SQLite-like interactions.
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;spliit-app&#x2F;spliit&#x2F;pull&#x2F;501&quot;&gt;@bruce965&lt;&#x2F;a&gt; on GitHub had already investigated how to port Spliit from Postgres to SQLite, which is not &lt;em&gt;that&lt;&#x2F;em&gt; much work since the &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;prisma.io&quot;&gt;Prisma&lt;&#x2F;a&gt; ORM framework used by Spliit already supports multiple database backends (such as SQLite).&lt;&#x2F;p&gt;
&lt;p&gt;Here&#x27;s where it gets tricky.
The Cloudflare free tier mandates that a bundled web application, without assets, is at most 3MB gzipped.
When I checked for Spliit + Prisma, bundle size came in around 3.7MB gzipped with most of it consumed by NextJS (&amp;amp; dependencies), and crucially, a &lt;code&gt;.wasm&lt;&#x2F;code&gt; file used solely by Prisma.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;a-github-copilot-success-not-quite&quot;&gt;A GitHub Copilot Success? Not Quite&lt;a class=&quot;zola-anchor&quot; href=&quot;#a-github-copilot-success-not-quite&quot; aria-label=&quot;Anchor link for: a-github-copilot-success-not-quite&quot; style=&quot;visibility: hidden;&quot;&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;This is the part where &lt;em&gt;a bit&lt;&#x2F;em&gt; of effort became an unreasonable amount of effort.
Since I have access to GitHub Copilot pro (using OpenAI GPT-5.3-Codex), I thought to ask it to swap Prisma for &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;drizzle.team&quot;&gt;Drizzle&lt;&#x2F;a&gt;, a more lightweight ORM framework that would not require a &lt;code&gt;.wasm&lt;&#x2F;code&gt; backend.&lt;&#x2F;p&gt;
&lt;p&gt;The result was surprising and frustrating.&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;The surprising part:&lt;&#x2F;strong&gt; I was very surprised to see that, in an afternoon of work and some back and forth trial and error, Github Copilot swapped out around ~1000 lines of code responsible for preparing SQL statements and querying the database. Surprisingly, it managed to get a proof-of-concept up and running.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;The frustrating part:&lt;&#x2F;strong&gt; The code was quite bad, approximately &quot;third year bachelor student&quot;-level, and it required manual review and fixing throughout. The frustrating part was that I now had a proof of concept to work with, which is very easy to sink more time into.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;I manually rewrote the approximately ~1000 lines of code to simplify it and to fix mistakes.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;an-ai-s-bad-solution-to-a-problem&quot;&gt;An AI&#x27;s Bad Solution to a Problem&lt;a class=&quot;zola-anchor&quot; href=&quot;#an-ai-s-bad-solution-to-a-problem&quot; aria-label=&quot;Anchor link for: an-ai-s-bad-solution-to-a-problem&quot; style=&quot;visibility: hidden;&quot;&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;At one point during development, I tried to configure the project to use SQLite locally, and Cloudflare&#x27;s D1 in production. In principle they both speak SQLite SQL.&lt;&#x2F;p&gt;
&lt;p&gt;The code written by Github Copilot worked in local development, but on Cloudflare, SQL statements would fail due to a syntax error on &lt;code&gt;BEGIN TRANSACTION;&lt;&#x2F;code&gt;. I asked Copilot to fix the problem, and it came up with the following solution to wrap all database queries.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;typescript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-storage&quot;&gt;async&lt;&#x2F;span&gt;&lt;span class=&quot;z-storage z-type&quot;&gt; function&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name&quot;&gt; transactionWithFallback&lt;&#x2F;span&gt;&lt;span&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name&quot;&gt;T&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable&quot;&gt;db&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name&quot;&gt; callback&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;:&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable&quot;&gt;db&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span class=&quot;z-storage z-type&quot;&gt; =&amp;gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name&quot;&gt; Promise&lt;&#x2F;span&gt;&lt;span&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name&quot;&gt;T&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name&quot;&gt; Promise&lt;&#x2F;span&gt;&lt;span&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name&quot;&gt;T&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword&quot;&gt;  try&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword&quot;&gt;    return&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt; db&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name&quot;&gt;transaction&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name&quot;&gt;callback&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt;db&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  }&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt; catch&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt;e&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword&quot;&gt;    if&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt;e&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt;message&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name&quot;&gt;contains&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;BEGIN TRANSACTION;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword&quot;&gt;      return&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name&quot;&gt; callback&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt;db&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;In words: try in a transaction, and if the error message includes the magic words, yeet the code again without a transaction ¯\&lt;em&gt;(ツ)&lt;&#x2F;em&gt;&#x2F;¯.&lt;&#x2F;p&gt;
&lt;p&gt;As it turns out, Cloudflare&#x27;s D1 database does &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;blog.cloudflare.com&#x2F;whats-new-with-d1&#x2F;&quot;&gt;not support transactions&lt;&#x2F;a&gt; in this way, and instead requires statements to be batched together. Copilot didn&#x27;t know that. It fixed the issue, but in the same way a student might when a deadline is near.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;bunde-size-revisited&quot;&gt;Bunde Size Revisited&lt;a class=&quot;zola-anchor&quot; href=&quot;#bunde-size-revisited&quot; aria-label=&quot;Anchor link for: bunde-size-revisited&quot; style=&quot;visibility: hidden;&quot;&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;After the unreasonable effort, this is the result on the Bundle size:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Total Upload: 10214.37 KiB &#x2F; gzip: 2961.55 KiB&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Worker Startup Time: 30 ms&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Your Worker has access to the following bindings:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Binding              Resource         &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;env.DB (DB)          D1 Database      &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;env.ASSETS           Assets   &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Success! Tens of kilobytes to spare.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;how-fast-is-spliit-on-cloudflare-it-s-fast&quot;&gt;How Fast is Spliit on Cloudflare? It&#x27;s Fast&lt;a class=&quot;zola-anchor&quot; href=&quot;#how-fast-is-spliit-on-cloudflare-it-s-fast&quot; aria-label=&quot;Anchor link for: how-fast-is-spliit-on-cloudflare-it-s-fast&quot; style=&quot;visibility: hidden;&quot;&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;See the difference between Spliit &lt;code&gt;1.19.1&lt;&#x2F;code&gt; hosted on Vercel (free tier) vs. Cloudflare (free tier).&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Spliit on Vercel load time: &lt;code&gt;5.1 s&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Spliit on Cloudflare load time: &lt;code&gt;0.6 s&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;video width=&quot;100%&quot; controls loop autoplay&gt;
  &lt;source src=&quot;&#x2F;assets&#x2F;spliit-on-cloudflare&#x2F;spliit-vs-spliit-on-cloudflare.mp4&quot; type=&quot;video&#x2F;mp4&quot; &#x2F;&gt;
&lt;&#x2F;video&gt;
&lt;h2 id=&quot;run-spliit-on-cloudflare-yourself&quot;&gt;Run Spliit on Cloudflare Yourself&lt;a class=&quot;zola-anchor&quot; href=&quot;#run-spliit-on-cloudflare-yourself&quot; aria-label=&quot;Anchor link for: run-spliit-on-cloudflare-yourself&quot; style=&quot;visibility: hidden;&quot;&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;Users who want a better free, self-hosted user experience can run Spliit on Cloudflare.&lt;&#x2F;p&gt;
&lt;p&gt;The code is available on &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;svdvonde&#x2F;spliit-on-cloudflare&quot;&gt;GitHub&lt;&#x2F;a&gt;, with instructions to deploy on Cloudflare.&lt;&#x2F;p&gt;
</content>
	</entry>
	<entry xml:lang="en">
		<title>Belgische bedrijven deelde mijn persoonsgegevens zonder mijn toestemming</title>
		<published>2025-09-05T00:00:00+00:00</published>
		<updated>2025-12-24T00:00:00+00:00</updated>
		<link rel="alternate" type="text/html" href="https://sxv.be/posts/belgische-bedrijven-deelde-mijn-persoonsgegevens-zonder-mijn-toestemming/"/>
		<id>https://sxv.be/posts/belgische-bedrijven-deelde-mijn-persoonsgegevens-zonder-mijn-toestemming/</id>
    
		<content type="html" xml:base="https://sxv.be/posts/belgische-bedrijven-deelde-mijn-persoonsgegevens-zonder-mijn-toestemming/">
&lt;blockquote class=&quot;callout warning no-title&quot;&gt;
  
  
  &lt;div class=&quot;icon&quot;&gt;
    &lt;svg xmlns=&quot;http:&#x2F;&#x2F;www.w3.org&#x2F;2000&#x2F;svg&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;18&quot; height=&quot;18&quot;&gt;&lt;path d=&quot;M12.865 3.00017L22.3912 19.5002C22.6674 19.9785 22.5035 20.5901 22.0252 20.8662C21.8732 20.954 21.7008 21.0002 21.5252 21.0002H2.47266C1.92037 21.0002 1.47266 20.5525 1.47266 20.0002C1.47266 19.8246 1.51886 19.6522 1.60663 19.5002L11.1329 3.00017C11.4091 2.52187 12.0206 2.358 12.4989 2.63414C12.651 2.72191 12.7772 2.84815 12.865 3.00017ZM4.20471 19.0002H19.7932L11.9989 5.50017L4.20471 19.0002ZM10.9989 16.0002H12.9989V18.0002H10.9989V16.0002ZM10.9989 9.00017H12.9989V14.0002H10.9989V9.00017Z&quot; fill=&quot;currentColor&quot;&gt;&lt;&#x2F;path&gt;&lt;&#x2F;svg&gt;

  &lt;&#x2F;div&gt;
  &lt;div class=&quot;content&quot;&gt;
    &lt;p&gt;This post is available in Dutch only.&lt;&#x2F;p&gt;

  &lt;&#x2F;div&gt;
  
&lt;&#x2F;blockquote&gt;

&lt;h2 id=&quot;proloog&quot;&gt;Proloog&lt;a class=&quot;zola-anchor&quot; href=&quot;#proloog&quot; aria-label=&quot;Anchor link for: proloog&quot; style=&quot;visibility: hidden;&quot;&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;Op 4 september 2024 word ik op mijn privé telefoonnummer gebeld door de BV Unisol. De dame aan de lijn zegt dat ik een huis heb in Antwerpen. Wanneer ik vraag hoe zij aan die informatie komt, zegt ze dat de data zou kunnen verkregen zijn door, bijvoorbeeld, akkoord te gaan met &quot;&lt;em&gt;cookies op het internet&lt;&#x2F;em&gt;&quot;. Ik ken Unisol niet, ik heb nog nooit met Unisol geïnterageerd, en persoonsgegevens worden niet zomaar gelekt door op &#x27;akkoord&#x27; te klikken bij een cookie banner.&lt;&#x2F;p&gt;
&lt;p&gt;Deze post bevat de geschiedenis van mijn zoektocht naar de bron van mijn gegevens, en naar een antwoord op hoe dit mogelijk is in de tijd van de GDPR.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;privacy-kwestie&#x2F;network1.png&quot; alt=&quot;unisol&quot; &#x2F;&gt;&lt;em&gt;&lt;small&gt;Unisol BV (&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;kbopub.economie.fgov.be&#x2F;kbopub&#x2F;zoeknummerform.html?lang=nl&amp;amp;nummer=0798151137&amp;amp;actionLu=Search&quot;&gt;BE0798151137&lt;&#x2F;a&gt;)&lt;&#x2F;small&gt;&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;een-bemiddelingsverzoek&quot;&gt;Een bemiddelingsverzoek&lt;a class=&quot;zola-anchor&quot; href=&quot;#een-bemiddelingsverzoek&quot; aria-label=&quot;Anchor link for: een-bemiddelingsverzoek&quot; style=&quot;visibility: hidden;&quot;&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;4-september-2024&quot;&gt;4 September 2024&lt;a class=&quot;zola-anchor&quot; href=&quot;#4-september-2024&quot; aria-label=&quot;Anchor link for: 4-september-2024&quot; style=&quot;visibility: hidden;&quot;&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;Uitoefening van het recht op inzage bij de BV Unisol. Geen antwoord.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;17-september-2024&quot;&gt;17 September 2024&lt;a class=&quot;zola-anchor&quot; href=&quot;#17-september-2024&quot; aria-label=&quot;Anchor link for: 17-september-2024&quot; style=&quot;visibility: hidden;&quot;&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;Herinnering via e-mail. Geen antwoord.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;7-oktober-2024-bemiddelingsverzoek-1&quot;&gt;7 Oktober 2024, bemiddelingsverzoek #1&lt;a class=&quot;zola-anchor&quot; href=&quot;#7-oktober-2024-bemiddelingsverzoek-1&quot; aria-label=&quot;Anchor link for: 7-oktober-2024-bemiddelingsverzoek-1&quot; style=&quot;visibility: hidden;&quot;&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;Ik doe een poging tot een bemiddelingsverzoek bij de Gegevensbeschermingsautoriteit (GBA). Dit is noodzakelijk de eerste stap bij het uitblijven van een antwoord inzake gegevensverwerking. Deze poging werd afgewezen wegens onvoldoende informatie. Ik moet bewijzen dat ik ben opgebeld.&lt;&#x2F;p&gt;
&lt;p&gt;De klantendienst van mijn toenmalige operator, Orange, kon of mocht geen belgeschiedenis geven voor klanten met een prepaid simkaart. Bijgevolg oefen ik &lt;strong&gt;28 oktober 2024&lt;&#x2F;strong&gt; het recht op inzage uit bij Orange, met succes, want op &lt;strong&gt;4 november 2024&lt;&#x2F;strong&gt; krijg ik mijn belgeschiedenis.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;8-november-2024-bemiddelingsverzoek-2&quot;&gt;8 November 2024, bemiddelingsverzoek #2&lt;a class=&quot;zola-anchor&quot; href=&quot;#8-november-2024-bemiddelingsverzoek-2&quot; aria-label=&quot;Anchor link for: 8-november-2024-bemiddelingsverzoek-2&quot; style=&quot;visibility: hidden;&quot;&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;Start van een bemiddelingsverzoek bij de GBA, dat op &lt;strong&gt;9 december 2024&lt;&#x2F;strong&gt; ontvankelijk is verklaard. De eerstelijnsdienst van de GBA zal hierbij proberen contact op te nemen met de BV Unisol om alsnog een antwoord te krijgen op mijn verzoek.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;16-januari-2025&quot;&gt;16 Januari 2025&lt;a class=&quot;zola-anchor&quot; href=&quot;#16-januari-2025&quot; aria-label=&quot;Anchor link for: 16-januari-2025&quot; style=&quot;visibility: hidden;&quot;&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;De eerstelijndienst van de GBA stuurt mij het antwoord van de BV Unisol van &lt;strong&gt;11 Januari 2025&lt;&#x2F;strong&gt; (het antwoord van de BV Unisol werd verstuurd op &lt;strong&gt;9 december 2024&lt;&#x2F;strong&gt;). De BV Unisol antwoordt met de volgende info:&lt;&#x2F;p&gt;

&lt;blockquote class=&quot;callout important has-title&quot;&gt;
  
  
  &lt;p class=&quot;title&quot;&gt;
    &lt;span class=&quot;icon&quot;&gt;
      &lt;svg xmlns=&quot;http:&#x2F;&#x2F;www.w3.org&#x2F;2000&#x2F;svg&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;18&quot; height=&quot;18&quot;&gt;&lt;path d=&quot;M12 22C6.47715 22 2 17.5228 2 12C2 6.47715 6.47715 2 12 2C17.5228 2 22 6.47715 22 12C22 17.5228 17.5228 22 12 22ZM12 20C16.4183 20 20 16.4183 20 12C20 7.58172 16.4183 4 12 4C7.58172 4 4 7.58172 4 12C4 16.4183 7.58172 20 12 20ZM11 15H13V17H11V15ZM11 7H13V13H11V7Z&quot; fill=&quot;currentColor&quot;&gt;&lt;&#x2F;path&gt;&lt;&#x2F;svg&gt;

    &lt;&#x2F;span&gt;
    &lt;strong&gt;Claims van de BV Unisol&lt;&#x2F;strong&gt;
  &lt;&#x2F;p&gt;
  &lt;div class=&quot;content&quot;&gt;
    &lt;ol&gt;
&lt;li&gt;Unisol claimt een installatiebedrijf te zijn dat prospectie doet o.a. via koude lijsten.&lt;&#x2F;li&gt;
&lt;li&gt;Het bellen naar deze koude lijsten gebeurt &quot;&lt;em&gt;volledig volgens de regels&lt;&#x2F;em&gt;&quot;.&lt;&#x2F;li&gt;
&lt;li&gt;De lijsten worden aangekocht bij andere bedrijven.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;

  &lt;&#x2F;div&gt;
  
&lt;&#x2F;blockquote&gt;

&lt;p&gt;De GBA informeert mij dat, indien ik niet tevreden ben met dit antwoord op mijn verzoek, ik mijn bemiddelingsverzoek kan omzetten in een klacht.&lt;&#x2F;p&gt;
&lt;p&gt;Ik zet mijn bemiddelingsverzoek om in een klacht.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;klacht-bij-de-gba-deel-1&quot;&gt;Klacht bij de GBA (deel 1)&lt;a class=&quot;zola-anchor&quot; href=&quot;#klacht-bij-de-gba-deel-1&quot; aria-label=&quot;Anchor link for: klacht-bij-de-gba-deel-1&quot; style=&quot;visibility: hidden;&quot;&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;24-februari-2025&quot;&gt;24 Februari 2025&lt;a class=&quot;zola-anchor&quot; href=&quot;#24-februari-2025&quot; aria-label=&quot;Anchor link for: 24-februari-2025&quot; style=&quot;visibility: hidden;&quot;&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;De Geschillenkamer (het administratief geschillenorgaan van de GBA) stelt mij ervan in kennis dat zij, op basis van de inhoud van de klacht, heeft beslist een onderzoek te vragen aan de inspectiedienst.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;21-april-2025&quot;&gt;21 April 2025&lt;a class=&quot;zola-anchor&quot; href=&quot;#21-april-2025&quot; aria-label=&quot;Anchor link for: 21-april-2025&quot; style=&quot;visibility: hidden;&quot;&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;

&lt;blockquote class=&quot;callout important has-title&quot;&gt;
  
  
  &lt;p class=&quot;title&quot;&gt;
    &lt;span class=&quot;icon&quot;&gt;
      &lt;svg xmlns=&quot;http:&#x2F;&#x2F;www.w3.org&#x2F;2000&#x2F;svg&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;18&quot; height=&quot;18&quot;&gt;&lt;path d=&quot;M12 22C6.47715 22 2 17.5228 2 12C2 6.47715 6.47715 2 12 2C17.5228 2 22 6.47715 22 12C22 17.5228 17.5228 22 12 22ZM12 20C16.4183 20 20 16.4183 20 12C20 7.58172 16.4183 4 12 4C7.58172 4 4 7.58172 4 12C4 16.4183 7.58172 20 12 20ZM11 15H13V17H11V15ZM11 7H13V13H11V7Z&quot; fill=&quot;currentColor&quot;&gt;&lt;&#x2F;path&gt;&lt;&#x2F;svg&gt;

    &lt;&#x2F;span&gt;
    &lt;strong&gt;Claims van de BV Unisol&lt;&#x2F;strong&gt;
  &lt;&#x2F;p&gt;
  &lt;div class=&quot;content&quot;&gt;
    &lt;p&gt;De BV Unisol meldt dat de data werd aangekocht bij de NV Infobel.&lt;&#x2F;p&gt;

  &lt;&#x2F;div&gt;
  
&lt;&#x2F;blockquote&gt;

&lt;h2 id=&quot;de-bron-van-data&quot;&gt;De bron van data?&lt;a class=&quot;zola-anchor&quot; href=&quot;#de-bron-van-data&quot; aria-label=&quot;Anchor link for: de-bron-van-data&quot; style=&quot;visibility: hidden;&quot;&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;privacy-kwestie&#x2F;network2.png&quot; alt=&quot;infobel&quot; &#x2F;&gt;
&lt;em&gt;&lt;small&gt;Jungle Bee NV (&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;opencorporates.com&#x2F;companies&#x2F;cw&#x2F;139519&quot;&gt;139519&lt;&#x2F;a&gt;), Infobel NV (&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;kbopub.economie.fgov.be&#x2F;kbopub&#x2F;zoeknummerform.html?lang=nl&amp;amp;nummer=0453604761&amp;amp;actionLu=Search&quot;&gt;BE0453604761&lt;&#x2F;a&gt;), Unisol BV (&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;kbopub.economie.fgov.be&#x2F;kbopub&#x2F;zoeknummerform.html?lang=nl&amp;amp;nummer=0798151137&amp;amp;actionLu=Search&quot;&gt;BE0798151137&lt;&#x2F;a&gt;), The Wave NV (&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;kbopub.economie.fgov.be&#x2F;kbopub&#x2F;zoeknummerform.html?lang=nl&amp;amp;nummer=0453138765&amp;amp;actionLu=Search&quot;&gt;BE0453138765&lt;&#x2F;a&gt;)&lt;&#x2F;small&gt;&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;21-april-2025-paasmaandag-19u35&quot;&gt;21 April 2025, Paasmaandag, 19u35&lt;a class=&quot;zola-anchor&quot; href=&quot;#21-april-2025-paasmaandag-19u35&quot; aria-label=&quot;Anchor link for: 21-april-2025-paasmaandag-19u35&quot; style=&quot;visibility: hidden;&quot;&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;Uitoefening van mijn rechten bij de NV Infobel.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;22-april-2025-9u09&quot;&gt;22 April 2025, 9u09&lt;a class=&quot;zola-anchor&quot; href=&quot;#22-april-2025-9u09&quot; aria-label=&quot;Anchor link for: 22-april-2025-9u09&quot; style=&quot;visibility: hidden;&quot;&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;Antwoord van de NV Infobel (op het bericht van &lt;a href=&quot;https:&#x2F;&#x2F;sxv.be&#x2F;posts&#x2F;belgische-bedrijven-deelde-mijn-persoonsgegevens-zonder-mijn-toestemming&#x2F;#21-april-2025-paasmaandag-19u35&quot;&gt;21 april 2025&lt;&#x2F;a&gt;):&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;Geachte,&lt;&#x2F;p&gt;
&lt;p&gt;Uw gegevens werden zoals gevraagd uit onze databank gewist en zijn dus niet meer beschikbaar voor verder gebruik.&#x2F;&lt;&#x2F;p&gt;
&lt;p&gt;Vriendelijke groet,&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;Vermits mijn verzoek ging over het recht van inzage, vraag ik wat de NV Infobel het recht gaf om de gegevens spontaan te verwijderen, op basis van welk verzoek deze verwijdering is uitgevoerd, en wanneer dit verzoek is uitgevoerd. Bijkomstig vraag ik aan de NV Infobel:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;De categorieën van de gegevens die over mij werden bijgehouden&lt;&#x2F;li&gt;
&lt;li&gt;De bron van mijn gegevens&lt;&#x2F;li&gt;
&lt;li&gt;De ontvangers van mijn gegevens&lt;&#x2F;li&gt;
&lt;li&gt;Of de NV Infobel bij data-uitwisseling ooit een bestand met mijn gegevens (bv. Excel-, XML-, of JSON-bestand) verstuurd heeft via een communicatiekanaal (bv. e-mail), of zelf heeft toegestuurd gekregen. Ook dat is opslag van mijn persoonsgegevens, waarop ik het recht van inzage wens uit te oefenen.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h3 id=&quot;22-april-2025-12u34&quot;&gt;22 April 2025, 12u34&lt;a class=&quot;zola-anchor&quot; href=&quot;#22-april-2025-12u34&quot; aria-label=&quot;Anchor link for: 22-april-2025-12u34&quot; style=&quot;visibility: hidden;&quot;&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;a name=&quot;persoonsgegevens&quot;&gt;&lt;&#x2F;a&gt;
De NV Infobel heeft dan toch nog persoonsgegevens van mij teruggevonden (antwoord op bericht van &lt;a href=&quot;https:&#x2F;&#x2F;sxv.be&#x2F;posts&#x2F;belgische-bedrijven-deelde-mijn-persoonsgegevens-zonder-mijn-toestemming&#x2F;#21-april-2025-paasmaandag-19u35&quot;&gt;21 april 2025&lt;&#x2F;a&gt;).&lt;&#x2F;p&gt;

&lt;blockquote class=&quot;callout important has-title&quot;&gt;
  
  
  &lt;p class=&quot;title&quot;&gt;
    &lt;span class=&quot;icon&quot;&gt;
      &lt;svg xmlns=&quot;http:&#x2F;&#x2F;www.w3.org&#x2F;2000&#x2F;svg&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;18&quot; height=&quot;18&quot;&gt;&lt;path d=&quot;M12 22C6.47715 22 2 17.5228 2 12C2 6.47715 6.47715 2 12 2C17.5228 2 22 6.47715 22 12C22 17.5228 17.5228 22 12 22ZM12 20C16.4183 20 20 16.4183 20 12C20 7.58172 16.4183 4 12 4C7.58172 4 4 7.58172 4 12C4 16.4183 7.58172 20 12 20ZM11 15H13V17H11V15ZM11 7H13V13H11V7Z&quot; fill=&quot;currentColor&quot;&gt;&lt;&#x2F;path&gt;&lt;&#x2F;svg&gt;

    &lt;&#x2F;span&gt;
    &lt;strong&gt;Claims van de NV Infobel&lt;&#x2F;strong&gt;
  &lt;&#x2F;p&gt;
  &lt;div class=&quot;content&quot;&gt;
    &lt;ol&gt;
&lt;li&gt;De NV Infobel claimt &lt;strong&gt;toestemming&lt;&#x2F;strong&gt; als de wettelijke basis voor de verwerking van mijn persoonsgegevens voor &lt;strong&gt;marketingdoeleinden&lt;&#x2F;strong&gt;, en deze toestemming heb ik gegeven aan NV Jungle Bee met wie de NV Infobel een contract had of heeft.&lt;&#x2F;li&gt;
&lt;li&gt;De NV Infobel stuurt mij de volgende van mijn gegevens:
&lt;ul&gt;
&lt;li&gt;Voornaam&lt;&#x2F;li&gt;
&lt;li&gt;Achternaam&lt;&#x2F;li&gt;
&lt;li&gt;Straat&lt;&#x2F;li&gt;
&lt;li&gt;Huisnummer&lt;&#x2F;li&gt;
&lt;li&gt;Postcode&lt;&#x2F;li&gt;
&lt;li&gt;Stad&lt;&#x2F;li&gt;
&lt;li&gt;Mobiele telefoon&lt;&#x2F;li&gt;
&lt;li&gt;Aanmaakdatum: &lt;strong&gt;27 maart 2024&lt;&#x2F;strong&gt; (wanneer Infobel de gegevens ontvangen heeft)&lt;&#x2F;li&gt;
&lt;li&gt;Source URL (waar de gegevens vandaan komen)&lt;&#x2F;li&gt;
&lt;li&gt;Timestamp: &lt;strong&gt;20 november 2022&lt;&#x2F;strong&gt; (wanneer de gegevens zijn verkregen door de NV Jungle Bee)&lt;&#x2F;li&gt;
&lt;li&gt;Email&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;De NV Infobel heeft deze gegevens gedeeld met:
&lt;ol&gt;
&lt;li&gt;De BV Unisol op &lt;strong&gt;19 augustus 2024&lt;&#x2F;strong&gt;&lt;&#x2F;li&gt;
&lt;li&gt;De NV The Wave op &lt;strong&gt;13 februari 2025&lt;&#x2F;strong&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;Volgens de NV Infobel heb ik op 20 november 2022, ongeveer 5 maand na het behalen van een doktoraat in de computerwetenschappen, deelgenomen aan een campagne getiteld &quot;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;archive.is&#x2F;40sWL&quot;&gt;&lt;em&gt;McDonalds voucher t.w.v 250 euro!&lt;&#x2F;em&gt;&lt;&#x2F;a&gt;&quot; (&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;archive.is&#x2F;1fgiS&quot;&gt;sponsors&lt;&#x2F;a&gt;, &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;archive.is&#x2F;FMzWi&quot;&gt;privacyverklaring&lt;&#x2F;a&gt;) waarbij ik al de bovenstaande gegevens heb opgegeven.&lt;&#x2F;p&gt;

  &lt;&#x2F;div&gt;
  
&lt;&#x2F;blockquote&gt;

&lt;p&gt;Ik ontken dat ik deze persoonsgegevens aan de NV Jungle Bee heb verschaft. Een verdacht gegeven is dat het e-mailadres in Infobel&#x27;s database laatst gebruikt werd rond 2012. Dit doet mij vermoeden dat de NV Jungle Bee deze data heeft verkregen via gegevens die ooit op het internet zijn gelekt via hacking. Zulke datasets kunnen makkelijk gekocht worden.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;22-april-2025&quot;&gt;22 April 2025&lt;a class=&quot;zola-anchor&quot; href=&quot;#22-april-2025&quot; aria-label=&quot;Anchor link for: 22-april-2025&quot; style=&quot;visibility: hidden;&quot;&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;Uitoefening van het recht van inzage bij de NV Jungle Bee.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;side-track-een-tweede-bemiddeling&quot;&gt;Side-track: een tweede bemiddeling&lt;a class=&quot;zola-anchor&quot; href=&quot;#side-track-een-tweede-bemiddeling&quot; aria-label=&quot;Anchor link for: side-track-een-tweede-bemiddeling&quot; style=&quot;visibility: hidden;&quot;&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;Naast het hoofdverhaal startte ik een tweede bemiddelingsverzoek bij de GBA. Infobel&#x27;s antwoord van &lt;a href=&quot;https:&#x2F;&#x2F;sxv.be&#x2F;posts&#x2F;belgische-bedrijven-deelde-mijn-persoonsgegevens-zonder-mijn-toestemming&#x2F;#22-april-2025-12u34&quot;&gt;22 april 2025&lt;&#x2F;a&gt; vermeldde niet exact &lt;em&gt;welk&lt;&#x2F;em&gt; bedrijf genaamd &quot;The Wave&quot; de ontvanger was van mijn persoonsgegevens.&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;22 april 2025&lt;&#x2F;strong&gt;: uitoefening recht van inzage uit bij de verkeerde &quot;The Wave&quot;.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;23 mei 2025&lt;&#x2F;strong&gt;: Het verzoek blijft onbeantwoord binnen de termijn van 30 dagen. Ik stuur een herinnering.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;4 juni 2025&lt;&#x2F;strong&gt;: Bemiddelingsverzoek bij de GBA (ontvankelijk is verklaard op &lt;strong&gt;17 juni 2025&lt;&#x2F;strong&gt;).&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;17 juli 2025&lt;&#x2F;strong&gt;: Eerste antwoord van &quot;The Wave&quot;, met hun excuses dat de verschillende mailadressen die ik heb gecontacteerd door omstandigheden niet werden gemonitored.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;22 juli 2025&lt;&#x2F;strong&gt;: Bericht van de NV Infobel, naar aanleiding van contact met &quot;The Wave&quot;, om te verduidelijken dat Infobel de persoonsgegevens heeft gedeeld met een andere &quot;The Wave&quot;.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;19 augustus 2025&lt;&#x2F;strong&gt;: Afsluiting bemiddelingsverzoek bij de GBA.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Einde over dit verhaal over het belang van correcte informatie.&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;klacht-bij-de-gba-deel-2&quot;&gt;Klacht bij de GBA (deel 2)&lt;a class=&quot;zola-anchor&quot; href=&quot;#klacht-bij-de-gba-deel-2&quot; aria-label=&quot;Anchor link for: klacht-bij-de-gba-deel-2&quot; style=&quot;visibility: hidden;&quot;&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;24-april-2025&quot;&gt;24 April 2025&lt;a class=&quot;zola-anchor&quot; href=&quot;#24-april-2025&quot; aria-label=&quot;Anchor link for: 24-april-2025&quot; style=&quot;visibility: hidden;&quot;&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;De Inspectiedienst van de GBA stuurt mij een bericht i.v.m. het lopende onderzoek. De inspectiedienst stelt dat de BV Unisol, namens de NV Infobel, beweert dat alle gegevens werden verkregen met toestemming. Verder heeft de Inspecteur-Generaal de volgende vragen:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;Of het volgens mij klopt dat Infobel mijn gegevens heeft verkregen met mijn toestemming.&lt;&#x2F;li&gt;
&lt;li&gt;Of ik van oordeel ben dat de BV Unisol mij alle beschikbare informatie heeft gegeven m.b.t. de bron van de gegevens.&lt;&#x2F;li&gt;
&lt;li&gt;Een kopie van alle correspondentie met de BV Unisol en&#x2F;of de NV Infobel die tot op heden, of in de toekomst, worden uitgewisseld inzake het dossier.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h2 id=&quot;curacao&quot;&gt;Curaçao&lt;a class=&quot;zola-anchor&quot; href=&quot;#curacao&quot; aria-label=&quot;Anchor link for: curacao&quot; style=&quot;visibility: hidden;&quot;&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;De NV Jungle Bee is, naar mijn mening, een postbusbedrijf gevestigd op de &lt;code&gt;Zuikertuintjeweg Z&#x2F;N (Zuikertuin Tower), Willemstad, Curaçao&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;25-april-2025&quot;&gt;25 April 2025&lt;a class=&quot;zola-anchor&quot; href=&quot;#25-april-2025&quot; aria-label=&quot;Anchor link for: 25-april-2025&quot; style=&quot;visibility: hidden;&quot;&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;Ontvanstbevestiging van de NV Jungle Bee (op het bericht van &lt;a href=&quot;https:&#x2F;&#x2F;sxv.be&#x2F;posts&#x2F;belgische-bedrijven-deelde-mijn-persoonsgegevens-zonder-mijn-toestemming&#x2F;#22-april-2025&quot;&gt;22 april 2025&lt;&#x2F;a&gt;). Zij zullen binnen de 14 werkdagen een antwoord bieden.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;23-mei-2025&quot;&gt;23 Mei 2025&lt;a class=&quot;zola-anchor&quot; href=&quot;#23-mei-2025&quot; aria-label=&quot;Anchor link for: 23-mei-2025&quot; style=&quot;visibility: hidden;&quot;&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;Herinnering van mijn verzoek, mits de legale termijn van 30 dagen is verstreken.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;26-mei-2025&quot;&gt;26 Mei 2025&lt;a class=&quot;zola-anchor&quot; href=&quot;#26-mei-2025&quot; aria-label=&quot;Anchor link for: 26-mei-2025&quot; style=&quot;visibility: hidden;&quot;&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;De NV Jungle Bee zegt antwoord te bieden &quot;voor het einde van de week&quot; (antwoord op bericht van &lt;a href=&quot;https:&#x2F;&#x2F;sxv.be&#x2F;posts&#x2F;belgische-bedrijven-deelde-mijn-persoonsgegevens-zonder-mijn-toestemming&#x2F;#23-mei-2025&quot;&gt;23 mei 2025&lt;&#x2F;a&gt;).&lt;&#x2F;p&gt;
&lt;h3 id=&quot;27-mei-2025-een-datalek-oopsie&quot;&gt;27 Mei 2025: Een datalek &quot;oopsie&quot;&lt;a class=&quot;zola-anchor&quot; href=&quot;#27-mei-2025-een-datalek-oopsie&quot; aria-label=&quot;Anchor link for: 27-mei-2025-een-datalek-oopsie&quot; style=&quot;visibility: hidden;&quot;&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;De NV Jungle Bee beantwoordt mijn verzoek van &lt;a href=&quot;https:&#x2F;&#x2F;sxv.be&#x2F;posts&#x2F;belgische-bedrijven-deelde-mijn-persoonsgegevens-zonder-mijn-toestemming&#x2F;#22-april-2025&quot;&gt;22 april 2025&lt;&#x2F;a&gt;, en beweert dat ik in april 2023 heb deelgenomen aan een campagne getiteld &quot;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;archive.is&#x2F;98V55&quot;&gt;&lt;em&gt;Win een ALDI cadeaubon t.w.v. €500&lt;&#x2F;em&gt;&lt;&#x2F;a&gt;&quot;. De &lt;a href=&quot;https:&#x2F;&#x2F;sxv.be&#x2F;posts&#x2F;belgische-bedrijven-deelde-mijn-persoonsgegevens-zonder-mijn-toestemming&#x2F;#persoonsgegevens&quot;&gt;persoonsgegevens&lt;&#x2F;a&gt; die mij werden toegestuurd zijn niet van mijzelf, maar van iemand met een gelijkaardige naam. Sommige van deze gegevens kan ik onafhankelijk verifiëren als zijnde correct, en horende bij de persoon wiens gegevens de NV Jungle Bee naar mij heeft gelekt.&lt;&#x2F;p&gt;
&lt;p&gt;Naast het aangeven van dit incident, vraag ik verduidelijking i.v.m.:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;De ontvangers zijn van mijn gegevens&lt;&#x2F;li&gt;
&lt;li&gt;De bewaartermijn&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;28-mei-2025&quot;&gt;28 Mei 2025&lt;a class=&quot;zola-anchor&quot; href=&quot;#28-mei-2025&quot; aria-label=&quot;Anchor link for: 28-mei-2025&quot; style=&quot;visibility: hidden;&quot;&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;De NV Jungle Bee beantwoordt mijn verzoek van &lt;a href=&quot;https:&#x2F;&#x2F;sxv.be&#x2F;posts&#x2F;belgische-bedrijven-deelde-mijn-persoonsgegevens-zonder-mijn-toestemming&#x2F;#27-mei-2025-een-datalek-oopsie&quot;&gt;27 mei 2025&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;

&lt;blockquote class=&quot;callout important has-title&quot;&gt;
  
  
  &lt;p class=&quot;title&quot;&gt;
    &lt;span class=&quot;icon&quot;&gt;
      &lt;svg xmlns=&quot;http:&#x2F;&#x2F;www.w3.org&#x2F;2000&#x2F;svg&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;18&quot; height=&quot;18&quot;&gt;&lt;path d=&quot;M12 22C6.47715 22 2 17.5228 2 12C2 6.47715 6.47715 2 12 2C17.5228 2 22 6.47715 22 12C22 17.5228 17.5228 22 12 22ZM12 20C16.4183 20 20 16.4183 20 12C20 7.58172 16.4183 4 12 4C7.58172 4 4 7.58172 4 12C4 16.4183 7.58172 20 12 20ZM11 15H13V17H11V15ZM11 7H13V13H11V7Z&quot; fill=&quot;currentColor&quot;&gt;&lt;&#x2F;path&gt;&lt;&#x2F;svg&gt;

    &lt;&#x2F;span&gt;
    &lt;strong&gt;Claims van de NV Jungle Bee&lt;&#x2F;strong&gt;
  &lt;&#x2F;p&gt;
  &lt;div class=&quot;content&quot;&gt;
    &lt;ul&gt;
&lt;li&gt;De gegevens werden enkel gedeeld met de NV Infobel.&lt;&#x2F;li&gt;
&lt;li&gt;Er is een bewaartermijn van 2 jaar.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;

  &lt;&#x2F;div&gt;
  
&lt;&#x2F;blockquote&gt;

&lt;p&gt;De exacte gegevens die Jungle Bee heeft blijven uit, en ik herinner Jungle Bee aan mijn oorspronkelijke verzoek i.v.m. het recht op inzage.&lt;&#x2F;p&gt;
&lt;p&gt;Ik vraag aan de NV Infobel verduidelijking over de &lt;code&gt;timestamp&lt;&#x2F;code&gt; en &lt;code&gt;aanmaakdatum&lt;&#x2F;code&gt; velden van de &lt;a href=&quot;https:&#x2F;&#x2F;sxv.be&#x2F;posts&#x2F;belgische-bedrijven-deelde-mijn-persoonsgegevens-zonder-mijn-toestemming&#x2F;#persoonsgegevens&quot;&gt;persoonsgegevens&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;

&lt;blockquote class=&quot;callout important has-title&quot;&gt;
  
  
  &lt;p class=&quot;title&quot;&gt;
    &lt;span class=&quot;icon&quot;&gt;
      &lt;svg xmlns=&quot;http:&#x2F;&#x2F;www.w3.org&#x2F;2000&#x2F;svg&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;18&quot; height=&quot;18&quot;&gt;&lt;path d=&quot;M12 22C6.47715 22 2 17.5228 2 12C2 6.47715 6.47715 2 12 2C17.5228 2 22 6.47715 22 12C22 17.5228 17.5228 22 12 22ZM12 20C16.4183 20 20 16.4183 20 12C20 7.58172 16.4183 4 12 4C7.58172 4 4 7.58172 4 12C4 16.4183 7.58172 20 12 20ZM11 15H13V17H11V15ZM11 7H13V13H11V7Z&quot; fill=&quot;currentColor&quot;&gt;&lt;&#x2F;path&gt;&lt;&#x2F;svg&gt;

    &lt;&#x2F;span&gt;
    &lt;strong&gt;Claims van de NV Infobel&lt;&#x2F;strong&gt;
  &lt;&#x2F;p&gt;
  &lt;div class=&quot;content&quot;&gt;
    &lt;p&gt;Infobel bevestigt dat &quot;timestamp&quot; overeen komt met de datum waarop de data is verzameld door de NV Jungle Bee, en &quot;aanmaakdatum&quot; verwijst naar de datum waarop de NV Jungle Bee de gegevens heeft gedeeld met Infobel.&lt;&#x2F;p&gt;

  &lt;&#x2F;div&gt;
  
&lt;&#x2F;blockquote&gt;

&lt;h3 id=&quot;8-juni-2025&quot;&gt;8 Juni 2025&lt;a class=&quot;zola-anchor&quot; href=&quot;#8-juni-2025&quot; aria-label=&quot;Anchor link for: 8-juni-2025&quot; style=&quot;visibility: hidden;&quot;&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;De NV Jungle Bee stuurt mij een kopie van al mijn gegevens in hun database (antwoord op bericht van &lt;a href=&quot;https:&#x2F;&#x2F;sxv.be&#x2F;posts&#x2F;belgische-bedrijven-deelde-mijn-persoonsgegevens-zonder-mijn-toestemming&#x2F;#28-mei-2025&quot;&gt;28 mei 2025&lt;&#x2F;a&gt;).&lt;&#x2F;p&gt;

&lt;blockquote class=&quot;callout important has-title&quot;&gt;
  
  
  &lt;p class=&quot;title&quot;&gt;
    &lt;span class=&quot;icon&quot;&gt;
      &lt;svg xmlns=&quot;http:&#x2F;&#x2F;www.w3.org&#x2F;2000&#x2F;svg&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;18&quot; height=&quot;18&quot;&gt;&lt;path d=&quot;M12 22C6.47715 22 2 17.5228 2 12C2 6.47715 6.47715 2 12 2C17.5228 2 22 6.47715 22 12C22 17.5228 17.5228 22 12 22ZM12 20C16.4183 20 20 16.4183 20 12C20 7.58172 16.4183 4 12 4C7.58172 4 4 7.58172 4 12C4 16.4183 7.58172 20 12 20ZM11 15H13V17H11V15ZM11 7H13V13H11V7Z&quot; fill=&quot;currentColor&quot;&gt;&lt;&#x2F;path&gt;&lt;&#x2F;svg&gt;

    &lt;&#x2F;span&gt;
    &lt;strong&gt;Claims van de NV Jungle Bee&lt;&#x2F;strong&gt;
  &lt;&#x2F;p&gt;
  &lt;div class=&quot;content&quot;&gt;
    &lt;p&gt;Mijn gegevens bij de NV Jungle Bee komen grotendeels overeen met de &lt;a href=&quot;#persoonsgegevens&quot;&gt;persoonsgegevens&lt;&#x2F;a&gt; bij Infobel. Ik constateer de volgende afwijkingen en bijkomstige info.&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Voornaam: &lt;code&gt;Sam Vanden&lt;&#x2F;code&gt;. Bij Infobel werd dit correct weergegeven als &lt;code&gt;Sam&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Achternaam: &lt;code&gt;Vonder&lt;&#x2F;code&gt;. Bij Infobel werd dit correct weergegeven als &lt;code&gt;Van den Vonder&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;IP adres: &lt;code&gt;146.103.0.7&lt;&#x2F;code&gt;, een IP adres dat op dit moment in handen is van de &quot;Brander Group Inc.&quot; (een IP adressen broker).&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;

  &lt;&#x2F;div&gt;
  
&lt;&#x2F;blockquote&gt;

&lt;h3 id=&quot;update-voor-de-gba&quot;&gt;Update voor de GBA&lt;a class=&quot;zola-anchor&quot; href=&quot;#update-voor-de-gba&quot; aria-label=&quot;Anchor link for: update-voor-de-gba&quot; style=&quot;visibility: hidden;&quot;&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;strong&gt;8 juni 2025&lt;&#x2F;strong&gt; stuur ik een update naar de GBA i.v.m. mijn lopende dossier, dat alle communicatie bevat die ik tot dit punt heb gevoerd.&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;een-verwachte-partij-uit-onverwachte-hoek&quot;&gt;Een verwachte partij uit onverwachte hoek&lt;a class=&quot;zola-anchor&quot; href=&quot;#een-verwachte-partij-uit-onverwachte-hoek&quot; aria-label=&quot;Anchor link for: een-verwachte-partij-uit-onverwachte-hoek&quot; style=&quot;visibility: hidden;&quot;&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;privacy-kwestie&#x2F;network3.png&quot; alt=&quot;infobel&quot; &#x2F;&gt;
&lt;em&gt;&lt;small&gt;Jungle Bee NV (&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;opencorporates.com&#x2F;companies&#x2F;cw&#x2F;139519&quot;&gt;139519&lt;&#x2F;a&gt;), Infobel NV (&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;kbopub.economie.fgov.be&#x2F;kbopub&#x2F;zoeknummerform.html?lang=nl&amp;amp;nummer=0453604761&amp;amp;actionLu=Search&quot;&gt;BE0453604761&lt;&#x2F;a&gt;), Unisol BV (&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;kbopub.economie.fgov.be&#x2F;kbopub&#x2F;zoeknummerform.html?lang=nl&amp;amp;nummer=0798151137&amp;amp;actionLu=Search&quot;&gt;BE0798151137&lt;&#x2F;a&gt;), The Wave NV (&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;kbopub.economie.fgov.be&#x2F;kbopub&#x2F;zoeknummerform.html?lang=nl&amp;amp;nummer=0453138765&amp;amp;actionLu=Search&quot;&gt;BE0453138765&lt;&#x2F;a&gt;), Proximus NV PR (&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;kbopub.economie.fgov.be&#x2F;kbopub&#x2F;zoeknummerform.html?lang=nl&amp;amp;nummer=0202239951&amp;amp;actionLu=Search&quot;&gt;BE0202239951&lt;&#x2F;a&gt;), Yource Operations BV (&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.kvk.nl&#x2F;bestellen&#x2F;#&#x2F;34214461000017334500&quot;&gt;NL34214461&lt;&#x2F;a&gt;)&lt;&#x2F;small&gt;&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;23-juli-2025&quot;&gt;23 Juli 2025&lt;a class=&quot;zola-anchor&quot; href=&quot;#23-juli-2025&quot; aria-label=&quot;Anchor link for: 23-juli-2025&quot; style=&quot;visibility: hidden;&quot;&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;Uitoefening recht van inzage bij The Wave.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;5-augustus-2025&quot;&gt;5 Augustus 2025&lt;a class=&quot;zola-anchor&quot; href=&quot;#5-augustus-2025&quot; aria-label=&quot;Anchor link for: 5-augustus-2025&quot; style=&quot;visibility: hidden;&quot;&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;Antwoord van The Wave op het bericht van &lt;a href=&quot;https:&#x2F;&#x2F;sxv.be&#x2F;posts&#x2F;belgische-bedrijven-deelde-mijn-persoonsgegevens-zonder-mijn-toestemming&#x2F;#23-juli-2025&quot;&gt;23 juli 2025&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;

&lt;blockquote class=&quot;callout important has-title&quot;&gt;
  
  
  &lt;p class=&quot;title&quot;&gt;
    &lt;span class=&quot;icon&quot;&gt;
      &lt;svg xmlns=&quot;http:&#x2F;&#x2F;www.w3.org&#x2F;2000&#x2F;svg&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;18&quot; height=&quot;18&quot;&gt;&lt;path d=&quot;M12 22C6.47715 22 2 17.5228 2 12C2 6.47715 6.47715 2 12 2C17.5228 2 22 6.47715 22 12C22 17.5228 17.5228 22 12 22ZM12 20C16.4183 20 20 16.4183 20 12C20 7.58172 16.4183 4 12 4C7.58172 4 4 7.58172 4 12C4 16.4183 7.58172 20 12 20ZM11 15H13V17H11V15ZM11 7H13V13H11V7Z&quot; fill=&quot;currentColor&quot;&gt;&lt;&#x2F;path&gt;&lt;&#x2F;svg&gt;

    &lt;&#x2F;span&gt;
    &lt;strong&gt;Claims van de NV The Wave&lt;&#x2F;strong&gt;
  &lt;&#x2F;p&gt;
  &lt;div class=&quot;content&quot;&gt;
    &lt;ul&gt;
&lt;li&gt;Zij zijn uitsluitend een tussenpersoon tussen Infobel en Proximus&lt;&#x2F;li&gt;
&lt;li&gt;Zij verwerken mijn gegevens niet zelfstandig&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;De gegevens waarover The Wave beschikt ten tijde van mijn uitoefening zijn:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;Telefoonnummer&lt;&#x2F;li&gt;
&lt;li&gt;Een unieke identifier voor de overdracht tussen Infobel en Proximus&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;

  &lt;&#x2F;div&gt;
  
&lt;&#x2F;blockquote&gt;

&lt;p&gt;Ik vraag verduidelijking aan The Wave i.v.m. de wettelijke basis van de verwerking.&lt;&#x2F;p&gt;
&lt;p&gt;Ik oefen het recht van inzage uit bij Proximus.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;6-augustus-2025&quot;&gt;6 Augustus 2025&lt;a class=&quot;zola-anchor&quot; href=&quot;#6-augustus-2025&quot; aria-label=&quot;Anchor link for: 6-augustus-2025&quot; style=&quot;visibility: hidden;&quot;&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;Antwoord van The Wave op het bericht van &lt;a href=&quot;https:&#x2F;&#x2F;sxv.be&#x2F;posts&#x2F;belgische-bedrijven-deelde-mijn-persoonsgegevens-zonder-mijn-toestemming&#x2F;#5-augustus-2025&quot;&gt;5 augustus 2025&lt;&#x2F;a&gt;:&lt;&#x2F;p&gt;

&lt;blockquote class=&quot;callout important has-title&quot;&gt;
  
  
  &lt;p class=&quot;title&quot;&gt;
    &lt;span class=&quot;icon&quot;&gt;
      &lt;svg xmlns=&quot;http:&#x2F;&#x2F;www.w3.org&#x2F;2000&#x2F;svg&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;18&quot; height=&quot;18&quot;&gt;&lt;path d=&quot;M12 22C6.47715 22 2 17.5228 2 12C2 6.47715 6.47715 2 12 2C17.5228 2 22 6.47715 22 12C22 17.5228 17.5228 22 12 22ZM12 20C16.4183 20 20 16.4183 20 12C20 7.58172 16.4183 4 12 4C7.58172 4 4 7.58172 4 12C4 16.4183 7.58172 20 12 20ZM11 15H13V17H11V15ZM11 7H13V13H11V7Z&quot; fill=&quot;currentColor&quot;&gt;&lt;&#x2F;path&gt;&lt;&#x2F;svg&gt;

    &lt;&#x2F;span&gt;
    &lt;strong&gt;Claims van de NV The Wave&lt;&#x2F;strong&gt;
  &lt;&#x2F;p&gt;
  &lt;div class=&quot;content&quot;&gt;
    &lt;ul&gt;
&lt;li&gt;De wettelijke basis van The Wave voor de verwerking is gebaseerd op mijn &lt;strong&gt;toestemming&lt;&#x2F;strong&gt; (&quot;consent&quot;) voor de verwerking van mijn data voor &lt;strong&gt;marketingdoeleinden&lt;&#x2F;strong&gt;, alsook de &lt;strong&gt;overdracht&lt;&#x2F;strong&gt; van mijn data van de NV Infobel naar partners, inclusief Proximus.&lt;&#x2F;li&gt;
&lt;li&gt;Sterker nog, The Wave claimt slechts een &#x27;subprocessor&#x27; te zijn in naam van Proximus, bijgevolg is de dataverwerking van The Wave ook gebaseerd op mijn &lt;strong&gt;toestemming&lt;&#x2F;strong&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;The Wave slaagt geen data op, behalve mijn telefoonnummer, dat wordt opgeslagen op basis van &lt;strong&gt;legitiem belang&lt;&#x2F;strong&gt; (&quot;legitimate interest&quot;, The Wave verwijst naar &lt;code&gt;Art. 6.1.f.&lt;&#x2F;code&gt; van de GDPR). Volgens The Wave moet dit telefoonnummer worden bijgehouden als bewijs van overdracht naar Proximus, in het geval dat Proximus gerechtelijk procedeert tegen The Wave (bv. in geval van disputen over kwantiteit of kwaliteit van de data).&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;

  &lt;&#x2F;div&gt;
  
&lt;&#x2F;blockquote&gt;

&lt;h3 id=&quot;7-augustus-2025&quot;&gt;7 Augustus 2025&lt;a class=&quot;zola-anchor&quot; href=&quot;#7-augustus-2025&quot; aria-label=&quot;Anchor link for: 7-augustus-2025&quot; style=&quot;visibility: hidden;&quot;&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;Ik krijg een cold-call op mijn telefoonnummer in naam van Proximus.&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;De Nederlandstalige medewerker (als in: van Nederland) aan de telefoon meldt dat zij mijn telecomaanbod willen bekijken omdat &quot;&lt;em&gt;ze toevallig in de buurt zijn&lt;&#x2F;em&gt;&quot;.&lt;&#x2F;li&gt;
&lt;li&gt;De medewerker noemt mij meneer&#x2F;mevrouw &quot;Vonder&quot;.&lt;&#x2F;li&gt;
&lt;li&gt;Het adres dat deze medewerker ziet komt overeen met het adres geregistreerd bij Jungle Bee.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;zoektocht-naar-extra-info&quot;&gt;Zoektocht naar extra info&lt;a class=&quot;zola-anchor&quot; href=&quot;#zoektocht-naar-extra-info&quot; aria-label=&quot;Anchor link for: zoektocht-naar-extra-info&quot; style=&quot;visibility: hidden;&quot;&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;10-augustus-2025&quot;&gt;10 Augustus 2025&lt;a class=&quot;zola-anchor&quot; href=&quot;#10-augustus-2025&quot; aria-label=&quot;Anchor link for: 10-augustus-2025&quot; style=&quot;visibility: hidden;&quot;&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;Ik beantwoord The Wave&#x27;s bericht van &lt;a href=&quot;https:&#x2F;&#x2F;sxv.be&#x2F;posts&#x2F;belgische-bedrijven-deelde-mijn-persoonsgegevens-zonder-mijn-toestemming&#x2F;#6-augustus-2025&quot;&gt;6 augustus 2025&lt;&#x2F;a&gt; met bijkomstige vragen:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Heeft The Wave van de NV Infobel bepaalde garanties gekregen m.b.t. mijn toestemming?&lt;&#x2F;li&gt;
&lt;li&gt;Kan The Wave de precieze doeleinden benoemen waarvoor zij denkt mijn toestemming te hebben? Ik vermeld dat het voor de GDPR zeer belangrijk is dat deze doeleinden ondubbelzinnig en specifiek zijn. Bijvoorbeeld, dit belang wordt bedadrukt door het geval waar Google een boete heeft gekregen van €50 miljoen in 2019 o.a. doordat &quot;toestemming&quot; niet specifiek of ondubbelzinnig was.&lt;&#x2F;li&gt;
&lt;li&gt;Heeft The Wave informatie ontvangen van Infobel of Jungle Bee m.b.t. de specifieke bedrijven of categorieën van bedrijven waarmee mijn persoonsgegevens gedeeld mogen worden?&lt;&#x2F;li&gt;
&lt;li&gt;Kan The Wave details geven i.v.m. de criteria die gebruikt worden door Infobel of Jungle Bee om te bepalen met welke partners mijn persoonsgegevens gedeeld kunnen worden?&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;21-augustus-2025&quot;&gt;21 Augustus 2025&lt;a class=&quot;zola-anchor&quot; href=&quot;#21-augustus-2025&quot; aria-label=&quot;Anchor link for: 21-augustus-2025&quot; style=&quot;visibility: hidden;&quot;&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;Spontaan bericht van de DPO van de NV Infobel, met hun CEO in CC. Samengevat: naar aanleiding van de &quot;bezorgdheden&quot; die ik heb geuit wil de NV Infobel mij geruststellen over het belang dat zij hecht aan de bescherming van de privacy van de personen waarvan zij gegevens verwerken. Aldus, in het kader van &quot;&lt;em&gt;een transparante en open dialoog&lt;&#x2F;em&gt;&quot; nodigt Infobel mij uit voor een bezoek aan hun infrastructuur.&lt;&#x2F;p&gt;
&lt;p&gt;Tijdens het bezoek zouden zij mij inzicht geven in de activiteiten van Infobel, de manier waarop zij gegevens verzamelen, verwerken, beveiligen. Bovendien zou dit een gelegenheid zijn voor mij om vragen te stellen, en voor hen om te argumenteren op welke manier Infobel voldoet aan de AVG.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;4-september-2025&quot;&gt;4 September 2025&lt;a class=&quot;zola-anchor&quot; href=&quot;#4-september-2025&quot; aria-label=&quot;Anchor link for: 4-september-2025&quot; style=&quot;visibility: hidden;&quot;&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;Antwoord van Proximus op het bericht van &lt;a href=&quot;https:&#x2F;&#x2F;sxv.be&#x2F;posts&#x2F;belgische-bedrijven-deelde-mijn-persoonsgegevens-zonder-mijn-toestemming&#x2F;#5-augustus-2025&quot;&gt;5 augustus 2025&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;

&lt;blockquote class=&quot;callout important has-title&quot;&gt;
  
  
  &lt;p class=&quot;title&quot;&gt;
    &lt;span class=&quot;icon&quot;&gt;
      &lt;svg xmlns=&quot;http:&#x2F;&#x2F;www.w3.org&#x2F;2000&#x2F;svg&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;18&quot; height=&quot;18&quot;&gt;&lt;path d=&quot;M12 22C6.47715 22 2 17.5228 2 12C2 6.47715 6.47715 2 12 2C17.5228 2 22 6.47715 22 12C22 17.5228 17.5228 22 12 22ZM12 20C16.4183 20 20 16.4183 20 12C20 7.58172 16.4183 4 12 4C7.58172 4 4 7.58172 4 12C4 16.4183 7.58172 20 12 20ZM11 15H13V17H11V15ZM11 7H13V13H11V7Z&quot; fill=&quot;currentColor&quot;&gt;&lt;&#x2F;path&gt;&lt;&#x2F;svg&gt;

    &lt;&#x2F;span&gt;
    &lt;strong&gt;Claims van de Proximus&lt;&#x2F;strong&gt;
  &lt;&#x2F;p&gt;
  &lt;div class=&quot;content&quot;&gt;
    &lt;ol&gt;
&lt;li&gt;Proximus rapporteert voornaam&#x2F;achternaam als &lt;code&gt;Sam Vanden&lt;&#x2F;code&gt;&#x2F;&lt;code&gt;Vonder&lt;&#x2F;code&gt;. Dit is consistent met wat de NV Jungle Bee rapporteert, maar niet consistent met Infobel. Verder hebben zij mijn adres en telefoonnummer.&lt;&#x2F;li&gt;
&lt;li&gt;Proximus rapporteert als doel van de verwerking &quot;&lt;em&gt;de prospect te contacteren en haar producten en diensten, merk en promoties aan potentiële klanten te promoten.&lt;&#x2F;em&gt;&quot;&lt;&#x2F;li&gt;
&lt;li&gt;Proximus heeft mijn persoonsgegevens gedeeld met een bedrijf genaamd Yource, uitsluitend in het kader van één telemarketingcampagne.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;

  &lt;&#x2F;div&gt;
  
&lt;&#x2F;blockquote&gt;

&lt;p&gt;Ik wijs het aanbod van Infobel af m.b.t. bezoek aan hun infrastructuur (Infobel&#x27;s bericht van &lt;a href=&quot;https:&#x2F;&#x2F;sxv.be&#x2F;posts&#x2F;belgische-bedrijven-deelde-mijn-persoonsgegevens-zonder-mijn-toestemming&#x2F;#21-augustus-2025&quot;&gt;21 augustus 2025&lt;&#x2F;a&gt;).&lt;&#x2F;p&gt;
&lt;h3 id=&quot;5-september-2025&quot;&gt;5 September 2025&lt;a class=&quot;zola-anchor&quot; href=&quot;#5-september-2025&quot; aria-label=&quot;Anchor link for: 5-september-2025&quot; style=&quot;visibility: hidden;&quot;&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;Uitoefening recht van inzage bij de BV Yource Operations.&lt;&#x2F;li&gt;
&lt;li&gt;Ik vraag bijkomstige info aan de NV Jungle Bee i.v.m. het verwerken van mijn persoonsgegevens. Namelijk:
&lt;ul&gt;
&lt;li&gt;De doeleinden of categoriën van doeleinden waarvoor Jungle Bee meent mijn toestemming te hebben.&lt;&#x2F;li&gt;
&lt;li&gt;Of Jungle Bee aan Infobel een lijst van doeleinden heeft verstrekt waarvoor ik mijn toestemming heb gegeven, en of deze verschilt van de voorgenoemde lijst.&lt;&#x2F;li&gt;
&lt;li&gt;Of Jungle Bee heeft gecommuniceerd naar Infobel m.b.t. de specifieke bedrijven of categorieën van bedrijven waarmee mijn gegevens gedeeld mee kunnen worden.&lt;&#x2F;li&gt;
&lt;li&gt;Of Jungle Bee meer details kan geven over het proces of de criteria die Jungle Bee hanteert om te bepalen met welke partners mijn gegevens gedeeld kunnen worden.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;8-september-2025&quot;&gt;8 September 2025&lt;a class=&quot;zola-anchor&quot; href=&quot;#8-september-2025&quot; aria-label=&quot;Anchor link for: 8-september-2025&quot; style=&quot;visibility: hidden;&quot;&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;Antwoord van Yource (verzoek van &lt;a href=&quot;https:&#x2F;&#x2F;sxv.be&#x2F;posts&#x2F;belgische-bedrijven-deelde-mijn-persoonsgegevens-zonder-mijn-toestemming&#x2F;#5-september-2025&quot;&gt;5 septemer 2025&lt;&#x2F;a&gt;).&lt;&#x2F;p&gt;

&lt;blockquote class=&quot;callout important has-title&quot;&gt;
  
  
  &lt;p class=&quot;title&quot;&gt;
    &lt;span class=&quot;icon&quot;&gt;
      &lt;svg xmlns=&quot;http:&#x2F;&#x2F;www.w3.org&#x2F;2000&#x2F;svg&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;18&quot; height=&quot;18&quot;&gt;&lt;path d=&quot;M12 22C6.47715 22 2 17.5228 2 12C2 6.47715 6.47715 2 12 2C17.5228 2 22 6.47715 22 12C22 17.5228 17.5228 22 12 22ZM12 20C16.4183 20 20 16.4183 20 12C20 7.58172 16.4183 4 12 4C7.58172 4 4 7.58172 4 12C4 16.4183 7.58172 20 12 20ZM11 15H13V17H11V15ZM11 7H13V13H11V7Z&quot; fill=&quot;currentColor&quot;&gt;&lt;&#x2F;path&gt;&lt;&#x2F;svg&gt;

    &lt;&#x2F;span&gt;
    &lt;strong&gt;Claims van Yource Operations BV&lt;&#x2F;strong&gt;
  &lt;&#x2F;p&gt;
  &lt;div class=&quot;content&quot;&gt;
    &lt;p&gt;Youce claimt de rol van &lt;strong&gt;verwerker&lt;&#x2F;strong&gt; (&quot;processor&quot; in de GDPR), en wijst naar Proximus als de &lt;strong&gt;verwerkingsverantwoordelijke&lt;&#x2F;strong&gt; (&quot;controller&quot; in de GDPR).&lt;&#x2F;p&gt;

  &lt;&#x2F;div&gt;
  
&lt;&#x2F;blockquote&gt;

&lt;p&gt;Ik lanceer de volgende communicatie:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Ik vraag aan Yource zij gebruik maken van onderaannemers om de contractuele afspraken met Proximus na te leven.&lt;&#x2F;li&gt;
&lt;li&gt;Ik vraag aan Proximus wat de wettelijke basis is voor hun verwerking.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;9-september-2025&quot;&gt;9 September 2025&lt;a class=&quot;zola-anchor&quot; href=&quot;#9-september-2025&quot; aria-label=&quot;Anchor link for: 9-september-2025&quot; style=&quot;visibility: hidden;&quot;&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;Antwoord van The Wave (verzoek van &lt;a href=&quot;https:&#x2F;&#x2F;sxv.be&#x2F;posts&#x2F;belgische-bedrijven-deelde-mijn-persoonsgegevens-zonder-mijn-toestemming&#x2F;#10-augustus-2025&quot;&gt;10 augustus 2025&lt;&#x2F;a&gt;). The Wave stuurt een uitgebreid antwoord dat eigenlijk niet veel zegt.&lt;&#x2F;p&gt;

&lt;blockquote class=&quot;callout important has-title&quot;&gt;
  
  
  &lt;p class=&quot;title&quot;&gt;
    &lt;span class=&quot;icon&quot;&gt;
      &lt;svg xmlns=&quot;http:&#x2F;&#x2F;www.w3.org&#x2F;2000&#x2F;svg&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;18&quot; height=&quot;18&quot;&gt;&lt;path d=&quot;M12 22C6.47715 22 2 17.5228 2 12C2 6.47715 6.47715 2 12 2C17.5228 2 22 6.47715 22 12C22 17.5228 17.5228 22 12 22ZM12 20C16.4183 20 20 16.4183 20 12C20 7.58172 16.4183 4 12 4C7.58172 4 4 7.58172 4 12C4 16.4183 7.58172 20 12 20ZM11 15H13V17H11V15ZM11 7H13V13H11V7Z&quot; fill=&quot;currentColor&quot;&gt;&lt;&#x2F;path&gt;&lt;&#x2F;svg&gt;

    &lt;&#x2F;span&gt;
    &lt;strong&gt;Claims van de NV The Wave&lt;&#x2F;strong&gt;
  &lt;&#x2F;p&gt;
  &lt;div class=&quot;content&quot;&gt;
    &lt;ul&gt;
&lt;li&gt;I.v.m. garanties van Infobel ten opzichte van The Wave: Enige garanties liggen contractueel vast en zijn dus, naar mijn interpretatie, gebaseerd op het &quot;trust me bro&quot;-principe.&lt;&#x2F;li&gt;
&lt;li&gt;I.v.m. de specifieke doeleinden waarvoor ik toestemming zou hebben gegeven: The Wave heeft deze informatie zelf moeten opvragen bij Infobel, dus ze waren blijkbaar ook niet helemaal zeker waarvoor ik precies toestemming heb gegeven. Zij verwijzen naar de info die ik heb ontvangen van Infobel en Jungle Bee, waar deze bedrijven stellen dat ik toestemming heb gegeven voor mijn gegevens te gebruiken voor &quot;marketingdoeleinden&quot;.&lt;&#x2F;li&gt;
&lt;li&gt;I.v.m. de vraag dat Infobel een lijst van ontvangers heeft gegeven met wie The Wave mijn gegevens mag delen: Dit is niet het geval.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;

  &lt;&#x2F;div&gt;
  
&lt;&#x2F;blockquote&gt;

&lt;h3 id=&quot;11-september-2025&quot;&gt;11 September 2025&lt;a class=&quot;zola-anchor&quot; href=&quot;#11-september-2025&quot; aria-label=&quot;Anchor link for: 11-september-2025&quot; style=&quot;visibility: hidden;&quot;&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;Antwoord van Yource (verzoek van &lt;a href=&quot;https:&#x2F;&#x2F;sxv.be&#x2F;posts&#x2F;belgische-bedrijven-deelde-mijn-persoonsgegevens-zonder-mijn-toestemming&#x2F;#8-september-2025&quot;&gt;8 september 2025&lt;&#x2F;a&gt;)&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Yource kan mij geen informatie geven over onderaannemers, en wijst naar Proximus.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;26-september-2025&quot;&gt;26 September 2025&lt;a class=&quot;zola-anchor&quot; href=&quot;#26-september-2025&quot; aria-label=&quot;Anchor link for: 26-september-2025&quot; style=&quot;visibility: hidden;&quot;&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;Antwoord van proximus (verzoek van &lt;a href=&quot;https:&#x2F;&#x2F;sxv.be&#x2F;posts&#x2F;belgische-bedrijven-deelde-mijn-persoonsgegevens-zonder-mijn-toestemming&#x2F;#8-september-2025&quot;&gt;8 september 2025&lt;&#x2F;a&gt;)&lt;&#x2F;p&gt;

&lt;blockquote class=&quot;callout important has-title&quot;&gt;
  
  
  &lt;p class=&quot;title&quot;&gt;
    &lt;span class=&quot;icon&quot;&gt;
      &lt;svg xmlns=&quot;http:&#x2F;&#x2F;www.w3.org&#x2F;2000&#x2F;svg&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;18&quot; height=&quot;18&quot;&gt;&lt;path d=&quot;M12 22C6.47715 22 2 17.5228 2 12C2 6.47715 6.47715 2 12 2C17.5228 2 22 6.47715 22 12C22 17.5228 17.5228 22 12 22ZM12 20C16.4183 20 20 16.4183 20 12C20 7.58172 16.4183 4 12 4C7.58172 4 4 7.58172 4 12C4 16.4183 7.58172 20 12 20ZM11 15H13V17H11V15ZM11 7H13V13H11V7Z&quot; fill=&quot;currentColor&quot;&gt;&lt;&#x2F;path&gt;&lt;&#x2F;svg&gt;

    &lt;&#x2F;span&gt;
    &lt;strong&gt;Claims van Proximus&lt;&#x2F;strong&gt;
  &lt;&#x2F;p&gt;
  &lt;div class=&quot;content&quot;&gt;
    &lt;ul&gt;
&lt;li&gt;Proximus claimt &#x27;consent&#x27; als basis voor de gegevensverwerking en verwijst expliciet naar het McDonalds wedstrijdformulier waar ik expliciet het vakje zou hebben aangevinkt om commerciële aanbiedingen te ontvangen van andere bedrijven, inclusief Proximus.&lt;&#x2F;li&gt;
&lt;li&gt;De DPO van Proximus maakt geen opmerking over het feit dat Proximus of The Wave bij dit formulier niet zijn opgelijst als ontvanger van persoonsgegevens.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;

  &lt;&#x2F;div&gt;
  
&lt;&#x2F;blockquote&gt;

&lt;hr &#x2F;&gt;
&lt;p&gt;Op het moment van schrijven, 24 december 2025, is mijn klacht bij de gegevensbeschermingsautoriteit lopende.&lt;&#x2F;p&gt;
</content>
	</entry>
	<entry xml:lang="en">
		<title>Set-up and Maintenance of Snipe-IT in a Subdirectory</title>
		<published>2025-04-21T00:00:00+00:00</published>
		<updated>2025-04-21T00:00:00+00:00</updated>
		<link rel="alternate" type="text/html" href="https://sxv.be/posts/set-up-and-maintenance-snipe-it-subdirectory/"/>
		<id>https://sxv.be/posts/set-up-and-maintenance-snipe-it-subdirectory/</id>
    
		<content type="html" xml:base="https://sxv.be/posts/set-up-and-maintenance-snipe-it-subdirectory/">&lt;p&gt;These are notes on installing and configuring the self-hosted instance of &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;grokability&#x2F;snipe-it&quot;&gt;Snipe-IT&lt;&#x2F;a&gt; for the &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;soft.vub.ac.be&quot;&gt;SOFT lab&lt;&#x2F;a&gt;, in particular modifying Snipe-IT to run in a subdirectory.
E.g., &lt;code&gt;my-domain.tld&#x2F;snipe-it&lt;&#x2F;code&gt;, as opposed to &lt;code&gt;snipe-it.my-domain.tld&lt;&#x2F;code&gt;.
This content was also discussed in a &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;grokability&#x2F;snipe-it&#x2F;issues&#x2F;16516&quot;&gt;GitHub issue&lt;&#x2F;a&gt; in Snipe-IT&#x27;s issue tracker. Officially, Snipe-IT does not support running in a subdirectory despite the &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;snipe-it.readme.io&#x2F;docs&#x2F;subdirectories&quot;&gt;official documentation&lt;&#x2F;a&gt; that suggests otherwise.
I found these instructions to be incomplete to get to the desired result.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;installation&quot;&gt;Installation&lt;a class=&quot;zola-anchor&quot; href=&quot;#installation&quot; aria-label=&quot;Anchor link for: installation&quot; style=&quot;visibility: hidden;&quot;&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;I followed the standard steps to &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;snipe-it.readme.io&#x2F;docs&#x2F;docker&quot;&gt;install Snipe-IT via Docker&lt;&#x2F;a&gt;.
Basically, &lt;code&gt;mkdir snipeit&lt;&#x2F;code&gt;, download a default &lt;code&gt;.env&lt;&#x2F;code&gt; file, download a &lt;code&gt;docker-compose.yml&lt;&#x2F;code&gt;, and proceed with instructions.&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;I set up an nginx reverse proxy on the web server where the docker image is running.
On SOFT&#x27;s server (which was called &lt;code&gt;spitter&lt;&#x2F;code&gt;), this snippet is located in &lt;code&gt;&#x2F;etc&#x2F;nginx&#x2F;sites-enabled&#x2F;spitter&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;location &#x2F;snipe-it&#x2F; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    proxy_pass http:&#x2F;&#x2F;localhost:3002&#x2F;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    proxy_set_header X-Forwarded-Proto $scheme;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    proxy_set_header Host $host;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;Based on the &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;snipe-it.readme.io&#x2F;docs&#x2F;subdirectories&quot;&gt;instructions&lt;&#x2F;a&gt; on running Snipe-IT in a subdirectory, I made the following changes:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;To run Snipe-IT in a subdirectory, I modified the following settings in the &lt;code&gt;.env&lt;&#x2F;code&gt; file.&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;APP_VERSION=&#x27;v8.0.4&#x27;&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Note that, at the end of these instructions, I will replace this docker image &lt;code&gt;snipe-it&#x2F;snipe-it:v8.0.4&lt;&#x2F;code&gt; with a custom image &lt;code&gt;snipe-it&#x2F;snipe-it:v8.0.4-patched&lt;&#x2F;code&gt;.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;APP_PORT=3002&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;APP_KEY&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;See instructions on how to generate an app key.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;APP_URL=https:&#x2F;&#x2F;spitter.soft.vub.ac.be&#x2F;snipe-it&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Note that the &lt;code&gt;&#x2F;snipe-it&lt;&#x2F;code&gt; suffix is important to run snipe-it in a subdirectory.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;LIVEWIRE_URL_PREFIX=&#x2F;snipe-it&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;APP_TIMEZONE=&#x27;Europe&#x2F;Brussels&#x27;&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;DB_PASSWORD&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;MYSQL_ROOT_PASSWORD&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;SMTP settings:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;MAIL_MAILER=smtp&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;MAIL_HOST=XXX&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;MAIL_PORT=587&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;MAIL_USERNAME=XXX&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;MAIL_PASSWORD=XXX&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;MAIL_TLS_VERIFY_PEER=true&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;MAIL_FROM_ADDR=XXX&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;MAIL_FROM_NAME=&amp;#39;SOFT Snipe-IT&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;MAIL_REPLYTO_ADDR=XXX&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;MAIL_REPLYTO_NAME=&amp;#39;SOFT Snipe-IT&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;MAIL_AUTO_EMBED_METHOD=&amp;#39;attachment&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;APP_TRUSTED_PROXIES=XXX&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;The IP address of the server on which Snipe-IT will be hosted.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Now it should be possible to go through the initial set-up of Snipe-it by starting the application with &lt;code&gt;docker compose up -d&lt;&#x2F;code&gt;. Note that, at the time of writing, Snipe-IT apparently does not like it when you start the application in detached mode (with the &lt;code&gt;-d&lt;&#x2F;code&gt; flag).
I found it better to run this step under &lt;code&gt;tmux&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;Following Snipe-IT&#x27;s &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;snipe-it.readme.io&#x2F;docs&#x2F;configuring-alerts-backups&quot;&gt;documentation&lt;&#x2F;a&gt;, a cronjob was added to run a command every 10 minutes (documentation suggests every minute, but that seems a lot).&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name&quot;&gt;crontab&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant&quot;&gt; -&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant&quot;&gt;e&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Add the following line:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;*&#x2F;10 * * * * docker compose run --rm app php artisan schedule:run &amp;gt;&amp;gt; &#x2F;dev&#x2F;null 2&amp;gt;&amp;amp;1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;@daily docker compose run --rm app php artisan snipeit:backup &amp;gt;&amp;gt; &#x2F;dev&#x2F;null 2&amp;gt;&amp;amp;1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h3 id=&quot;ldap-configuration&quot;&gt;LDAP Configuration&lt;a class=&quot;zola-anchor&quot; href=&quot;#ldap-configuration&quot; aria-label=&quot;Anchor link for: ldap-configuration&quot; style=&quot;visibility: hidden;&quot;&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;This is the configuration of LDAP authentication that I performed in Snipe-IT&#x27;s control panel.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;LDAP Server: ldaps:&#x2F;&#x2F;soft.vub.ac.be&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;LDAP Bind Username: uid=snipe-it,ou=People,dc=vub,dc=ac,dc=be&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Base Bind DN: ou=People,dc=vub,dc=ac,dc=be&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;LDAP Filter: &amp;amp;(uid=*)(sambaAcctFlags=[U])&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Username Field: uid&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Last Name: sn&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;LDAP First Name: givenname&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;LDAP Authentication Query: uid=&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;LDAP Email: mail&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h3 id=&quot;essential-docker-image-modifications&quot;&gt;Essential Docker Image Modifications&lt;a class=&quot;zola-anchor&quot; href=&quot;#essential-docker-image-modifications&quot; aria-label=&quot;Anchor link for: essential-docker-image-modifications&quot; style=&quot;visibility: hidden;&quot;&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;There are a couple of modifications that should be made to the docker image in order to run Snipe-IT in a subdirectory to fix a few bugs. &lt;em&gt;Normally&lt;&#x2F;em&gt; Snipe-IT will also run without these modifications, but the application is annoying because it will redirect users to the root domain (e.g., &lt;code&gt;soft.vub.ac.be&lt;&#x2F;code&gt;) at certain points, e.g., after login.&lt;&#x2F;p&gt;
&lt;p&gt;I manually made the following changes in the Snipe-IT docker container as follows. A slightly shortened variant of these instructions was given in a &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;snipe&#x2F;snipe-it&#x2F;issues&#x2F;16516&quot;&gt;bug report&lt;&#x2F;a&gt; on GitHub.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name&quot;&gt;docker&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; exec&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant&quot;&gt; -&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant&quot;&gt;it&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; snipeit-app-1&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; &#x2F;bin&#x2F;bash&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Add a line of code to the apache2 config.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name&quot;&gt;vi&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; &#x2F;etc&#x2F;apache2&#x2F;sites-enabled&#x2F;000-default.conf&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Add the following line of code to the VirtualHost block on the top level (e.g., as the first directive above &lt;code&gt;ServerAdmin&lt;&#x2F;code&gt; or &lt;code&gt;DocumentRoot&lt;&#x2F;code&gt;). Note that Snipe-IT&#x27;s &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;snipe-it.readme.io&#x2F;docs&#x2F;subdirectories&quot;&gt;subdirectory instructions&lt;&#x2F;a&gt; say to change it to &lt;code&gt;Alias &#x2F;snipe-it &quot;&#x2F;var&#x2F;www&#x2F;html&#x2F;snipe-it&#x2F;public&quot;&lt;&#x2F;code&gt;, but in Docker the &lt;code&gt;public&lt;&#x2F;code&gt; folder is located in &lt;code&gt;&#x2F;var&#x2F;www&#x2F;html&#x2F;public&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Alias &#x2F;snipe-it &amp;quot;&#x2F;var&#x2F;www&#x2F;html&#x2F;public&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Restart apache:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name&quot;&gt;service&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; apache2&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; restart&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;Patch the &lt;code&gt;.htaccess&lt;&#x2F;code&gt; file.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name&quot;&gt;vi&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; &#x2F;var&#x2F;www&#x2F;html&#x2F;public&#x2F;.htaccess&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Include the following line just below the line at the top that says &lt;code&gt;RewriteEngine On&lt;&#x2F;code&gt;.
This change is done according to Snipe-IT&#x27;s &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;snipe-it.readme.io&#x2F;docs&#x2F;subdirectories&quot;&gt;instructions&lt;&#x2F;a&gt; to run Snipe-IT in a subdirectory.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;RewriteBase &#x2F;snipe-it&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Find the clump that contains the following 3 lines.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;RewriteCond %{REQUEST_FILENAME} !-d&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;RewriteCond %{REQUEST_URI} (.+)&#x2F;$&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;RewriteRule ^ %1 [L,R=301]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Change the second line to the following.
This solves an issue with redirects, where urls with a trailing slash such as &lt;code&gt;&#x2F;snipe-it&#x2F;users&#x2F;&lt;&#x2F;code&gt; were being redirected to &lt;code&gt;&#x2F;users&lt;&#x2F;code&gt; (without &lt;code&gt;&#x2F;snipe-it&lt;&#x2F;code&gt; prefix) instead of &lt;code&gt;&#x2F;snipe-it&#x2F;users&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;RewriteCond %{REQUEST_URI} snipe-it&#x2F;(.+)&#x2F;$&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;Patch a &lt;code&gt;php&lt;&#x2F;code&gt; file.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name&quot;&gt;vi&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; &#x2F;var&#x2F;www&#x2F;html&#x2F;app&#x2F;Http&#x2F;Controllers&#x2F;Auth&#x2F;LoginController.php&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Find the following line of code.
This is &lt;code&gt;line 339&lt;&#x2F;code&gt; at the time of writing (known to be the case in Snipe-IT &lt;code&gt;v8.1.3&lt;&#x2F;code&gt; to &lt;code&gt;v8.3.7&lt;&#x2F;code&gt;).
Note that you can use &lt;code&gt;:set number&lt;&#x2F;code&gt; to turn on line numbers in &lt;code&gt;vi&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;php&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment&quot;&gt;&#x2F;&#x2F;&lt;&#x2F;span&gt;&lt;span class=&quot;z-comment&quot;&gt; Redirect to the users page&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword&quot;&gt;return&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name&quot;&gt; redirect&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;-&amp;gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name&quot;&gt;intended&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;-&amp;gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name&quot;&gt;with&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;success&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name&quot;&gt; trans&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;auth&#x2F;message.signin.success&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Change this to be the following code snippet to solve a bug where users are redirected to the root of the domain (e.g. &lt;code&gt;spitter.soft.vub.ac.be&#x2F;&lt;&#x2F;code&gt;) instead of Snipe-IT&#x27;s root (&lt;code&gt;spitter.soft.vub.ac.be&#x2F;snipe-it&lt;&#x2F;code&gt;).
The snippet below reconstructs the base url + intended url path to what is &lt;em&gt;actually&lt;&#x2F;em&gt; intended.
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;snipe&#x2F;snipe-it&#x2F;issues&#x2F;16516#issuecomment-2733597080&quot;&gt;See explanation about this code&lt;&#x2F;a&gt; on Github.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;php&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment&quot;&gt;&#x2F;&#x2F;&lt;&#x2F;span&gt;&lt;span class=&quot;z-comment&quot;&gt; Redirect to the users page&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment&quot;&gt;&#x2F;&#x2F;&lt;&#x2F;span&gt;&lt;span class=&quot;z-comment&quot;&gt; original redirect statement:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment&quot;&gt;&#x2F;&#x2F;&lt;&#x2F;span&gt;&lt;span class=&quot;z-comment&quot;&gt;return redirect()-&amp;gt;intended()-&amp;gt;with(&amp;#39;success&amp;#39;, trans(&amp;#39;auth&#x2F;message.signin.success&amp;#39;));&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment&quot;&gt;&#x2F;&#x2F;&lt;&#x2F;span&gt;&lt;span class=&quot;z-comment&quot;&gt; Custom bugfix:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-variable z-other&quot;&gt;$&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt;originalUrl&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt; =&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name&quot;&gt; redirect&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;-&amp;gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name&quot;&gt;intended&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;-&amp;gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name&quot;&gt;getTargetUrl&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-variable z-other&quot;&gt;$&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt;baseUrl&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt; =&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name&quot;&gt; url&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;&#x2F;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-variable z-other&quot;&gt;$&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt;path&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt; =&lt;&#x2F;span&gt;&lt;span class=&quot;z-support&quot;&gt; parse_url&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt;$&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt;originalUrl&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-constant&quot;&gt; PHP_URL_PATH&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-variable z-other&quot;&gt;$&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt;safePath&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt; =&lt;&#x2F;span&gt;&lt;span class=&quot;z-support&quot;&gt; is_null&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt;$&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt;path&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt; ?&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt; :&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt; $&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt;path&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-variable z-other&quot;&gt;$&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt;intendedUrl&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt; =&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt; $&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt;baseUrl&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt; .&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt; $&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt;safePath&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword&quot;&gt;return&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name&quot;&gt; redirect&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;-&amp;gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name&quot;&gt;to&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt;$&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt;intendedUrl&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;-&amp;gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name&quot;&gt;with&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;success&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name&quot;&gt; trans&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;auth&#x2F;message.signin.success&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;Exit the docker container&#x27;s bash and save the modified container as a new image.
Otherwise the changes are overrided every time the docker image is recreated.
E.g., every time the &lt;code&gt;.env&lt;&#x2F;code&gt; file changes and you do &lt;code&gt;docker compose up -d&lt;&#x2F;code&gt;, or when an update to Snipe-IT lands.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-support&quot;&gt;exit&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name&quot;&gt;docker&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; commit&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; snipeit-app-1&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; snipe&#x2F;snipe-it:v8.0.4-patched&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;Change Snipe-IT&#x27;s &lt;code&gt;.env&lt;&#x2F;code&gt; file to point to the image &lt;code&gt;v8.0.4-patched&lt;&#x2F;code&gt; instead of &lt;code&gt;v8.0.4&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h2 id=&quot;version-upgrades&quot;&gt;Version Upgrades&lt;a class=&quot;zola-anchor&quot; href=&quot;#version-upgrades&quot; aria-label=&quot;Anchor link for: version-upgrades&quot; style=&quot;visibility: hidden;&quot;&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;Whenever the Docker image of Snipe-IT is updated, you need to pull the image, follow the update steps of Snipe-IT (might involve migrations), and re-do the essential update modifications. For example, to update from &lt;code&gt;v8.0.4&lt;&#x2F;code&gt; to &lt;code&gt;v8.1.3&lt;&#x2F;code&gt;, I performed the following steps.&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Create a Snipe-IT backup in Snipe-IT&#x27;s configuration panel, and download the backup file.&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;Stop Snipe-IT&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name&quot;&gt;docker&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; compose&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; down&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;Edit the &lt;code&gt;.env&lt;&#x2F;code&gt; file to use the new standard docker image.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-support&quot;&gt;cd&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; ~&#x2F;snipeit&lt;&#x2F;span&gt;&lt;span&gt; &amp;amp;&amp;amp;&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name&quot;&gt; vi&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; .env&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;APP_VERSION=&amp;#39;v8.1.3&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;Start Snipe-IT (knowing it will be broken) to get the right docker containers up and running, and to let Snipe-IT do a version upgrade.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name&quot;&gt;docker&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; compose&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; up&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant&quot;&gt; -&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant&quot;&gt;d&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;At this point you can inspect the docker container&#x27;s logs to see if the upgrade performed correctly (e.g., any database migrations)&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name&quot;&gt;docker&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; container&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; logs&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; snipeit-app-1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;Follow the steps above to perform the &lt;a href=&quot;https:&#x2F;&#x2F;sxv.be&#x2F;posts&#x2F;set-up-and-maintenance-snipe-it-subdirectory&#x2F;#essential-docker-image-modifications&quot;&gt;essential docker image modifications&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;Edit the &lt;code&gt;.env&lt;&#x2F;code&gt; file to use the patched docker image.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-support&quot;&gt;cd&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; ~&#x2F;snipeit&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name&quot;&gt;vi&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; .env&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;APP_VERSION=&amp;#39;v8.1.3-patched&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;Start Snipe-IT.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name&quot;&gt;docker&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; compose&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; up&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant&quot;&gt; -&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant&quot;&gt;d&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h2 id=&quot;additional-notes&quot;&gt;Additional Notes&lt;a class=&quot;zola-anchor&quot; href=&quot;#additional-notes&quot; aria-label=&quot;Anchor link for: additional-notes&quot; style=&quot;visibility: hidden;&quot;&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;maintenance-mode&quot;&gt;Maintenance Mode&lt;a class=&quot;zola-anchor&quot; href=&quot;#maintenance-mode&quot; aria-label=&quot;Anchor link for: maintenance-mode&quot; style=&quot;visibility: hidden;&quot;&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;Snipe-IT has a maintenance mode that can be activated to disable the website for public visitors.
It can be activated and deactivated as follows.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name&quot;&gt;docker&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; exec&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant&quot;&gt; -&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant&quot;&gt;it&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; snipeit-app-1&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; &#x2F;bin&#x2F;bash&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name&quot;&gt;php&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; artisan&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; down&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name&quot;&gt;docker&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; exec&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant&quot;&gt; -&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant&quot;&gt;it&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; snipeit-app-1&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; &#x2F;bin&#x2F;bash&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name&quot;&gt;php&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; artisan&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; up&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h3 id=&quot;backups&quot;&gt;Backups&lt;a class=&quot;zola-anchor&quot; href=&quot;#backups&quot; aria-label=&quot;Anchor link for: backups&quot; style=&quot;visibility: hidden;&quot;&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;You can find the location of the Snipe-IT volume (of the docker container) as follows:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name&quot;&gt;docker&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; volume&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; ls&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name&quot;&gt;docker&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; volume&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; inspect&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; snipeit_storage&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;ul&gt;
&lt;li&gt;Snipe-IT&#x27;s volume is stored in &lt;code&gt;&#x2F;home&#x2F;snipe-it&#x2F;.local&#x2F;share&#x2F;docker&#x2F;volumes&#x2F;snipeit_storage&#x2F;_data&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Zip files of backups are stored in &lt;code&gt;&#x2F;home&#x2F;snipe-it&#x2F;.local&#x2F;share&#x2F;docker&#x2F;volumes&#x2F;snipeit_storage&#x2F;_data&#x2F;dumps&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
	</entry>
	<entry xml:lang="en">
		<title>Set-up and Maintenance of the Overleaf Extended Community Edition</title>
		<published>2024-12-13T00:00:00+00:00</published>
		<updated>2024-10-05T00:00:00+00:00</updated>
		<link rel="alternate" type="text/html" href="https://sxv.be/posts/set-up-and-maintenance-overleaf-extended-community-edition/"/>
		<id>https://sxv.be/posts/set-up-and-maintenance-overleaf-extended-community-edition/</id>
    
		<content type="html" xml:base="https://sxv.be/posts/set-up-and-maintenance-overleaf-extended-community-edition/">&lt;p&gt;The following document lists the steps that I executed, from top to bottom, to get an instance running of the &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;yu-i-i&#x2F;overleaf-cep&quot;&gt;Overleaf Extended Community Edition&lt;&#x2F;a&gt; (also knows as Overleaf-CEP) based on Overleaf Community Edition &lt;code&gt;5.x.x&lt;&#x2F;code&gt;.
Such an instance was used at the &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;soft.vub.ac.be&#x2F;&quot;&gt;SOFT lab&lt;&#x2F;a&gt; around 2024-2025 to remove many of the restrictions imposed on the free version at &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;overleaf.com&quot;&gt;overleaf.com&lt;&#x2F;a&gt;, most notably restrictions on collaborative editors.
The self-hosted instance ended when the university acquired an Overleaf institutional license.&lt;&#x2F;p&gt;
&lt;p&gt;Certain details regaring the internal configuration of university-owned servers have been removed or modified.&lt;&#x2F;p&gt;
&lt;p&gt;In addition to the specifics below, I have contributed a shorter version to the &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;yu-i-i&#x2F;overleaf-cep&#x2F;discussions&#x2F;11#discussioncomment-11463011&quot;&gt;Overleaf-CEP discussion page&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;self-hosted-overleaf-installation-configuration&quot;&gt;Self-Hosted Overleaf Installation &amp;amp; Configuration&lt;a class=&quot;zola-anchor&quot; href=&quot;#self-hosted-overleaf-installation-configuration&quot; aria-label=&quot;Anchor link for: self-hosted-overleaf-installation-configuration&quot; style=&quot;visibility: hidden;&quot;&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;initialise-overleaf-community-edition&quot;&gt;Initialise Overleaf Community Edition&lt;a class=&quot;zola-anchor&quot; href=&quot;#initialise-overleaf-community-edition&quot; aria-label=&quot;Anchor link for: initialise-overleaf-community-edition&quot; style=&quot;visibility: hidden;&quot;&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;Follow the instructions to initialise Overleaf via the &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;overleaf&#x2F;toolkit&#x2F;blob&#x2F;master&#x2F;doc&#x2F;quick-start-guide.md&quot;&gt;Overleaf Toolkit&lt;&#x2F;a&gt;.
Then, make the following modifications.&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Edit &lt;code&gt;overleaf-toolkit&#x2F;config&#x2F;overleaf.rc&lt;&#x2F;code&gt;. Set the following properties, and make sure that the selected port (e.g., 4242) is not blocked by the firewall.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;OVERLEAF_LISTEN_IP=0.0.0.0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;OVERLEAF_PORT=4242&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;Edit &lt;code&gt;overleaf-toolkit&#x2F;config&#x2F;variables.env&lt;&#x2F;code&gt;. Set the following property.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;OVERLEAF_SITE_URL=http:&#x2F;&#x2F;spitter.soft.vub.ac.be:4242&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;Run &lt;code&gt;bin&#x2F;up&lt;&#x2F;code&gt; (or &lt;code&gt;bin&#x2F;up -d&lt;&#x2F;code&gt; for detached mode)&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;As a final step, after running through everything else in this document, you can optionally customise Overleaf to SOFT&#x27;s liking. For more info, see &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;overleaf&#x2F;overleaf&#x2F;wiki&#x2F;Configuring-Overleaf&quot;&gt;Configuring Overleaf&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;OVERLEAF_APP_NAME=&amp;quot;SOFT&amp;#39;s Overleaf (Community Edition)&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;OVERLEAF_NAV_TITLE=&amp;quot;SOFT&amp;#39;s Overleaf&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;OVERLEAF_HEADER_IMAGE_URL=&amp;quot;https:&#x2F;&#x2F;soft.vub.ac.be&#x2F;soft&#x2F;sites&#x2F;default&#x2F;files&#x2F;new_logo.png&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;OVERLEAF_ADMIN_EMAIL=sam.van.den.vonder@vub.be&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ENABLE_CRON_RESOURCE_DELETION=true&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;running-for-the-first-time&quot;&gt;Running for the first time&lt;a class=&quot;zola-anchor&quot; href=&quot;#running-for-the-first-time&quot; aria-label=&quot;Anchor link for: running-for-the-first-time&quot; style=&quot;visibility: hidden;&quot;&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;ol&gt;
&lt;li&gt;From the &lt;code&gt;overleaf-toolkit&lt;&#x2F;code&gt; directory, run &lt;code&gt;bin&#x2F;up&lt;&#x2F;code&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;Go to &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;spitter.soft.vub.ac.be:4242&#x2F;launchpad&quot;&gt;http:&#x2F;&#x2F;spitter.soft.vub.ac.be:4242&#x2F;launchpad&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h3 id=&quot;install-the-ldap-community-project&quot;&gt;Install The LDAP Community Project&lt;a class=&quot;zola-anchor&quot; href=&quot;#install-the-ldap-community-project&quot; aria-label=&quot;Anchor link for: install-the-ldap-community-project&quot; style=&quot;visibility: hidden;&quot;&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;There is a community project which adds LDAP support, change tracking, and comments.&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;yu-i-i&#x2F;overleaf-cep&quot;&gt;https:&#x2F;&#x2F;github.com&#x2F;yu-i-i&#x2F;overleaf-cep&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Install it as follows.&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Outside of the &lt;code&gt;overleaf-toolkit&lt;&#x2F;code&gt; directory (e.g., on the same level) clone the &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;yu-i-i&#x2F;overleaf-cep&quot;&gt;overleaf-cep&lt;&#x2F;a&gt; repo.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name&quot;&gt;git&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; clone&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; https:&#x2F;&#x2F;github.com&#x2F;yu-i-i&#x2F;overleaf-cep&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; .&#x2F;overleaf-cep&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;For a production environment, it is likely that you want to use an official release version of Overleaf CE (+ extended features). At the time of writing the Overleaf CEP repo provides tags that correspond to Overleaf releases which were extended by the Overleaf CEP features. For example, the tag &lt;code&gt;v5.2.1-ext&lt;&#x2F;code&gt;. It is recommended to use these official Overleaf release version rather than the &lt;code&gt;main&lt;&#x2F;code&gt; branch because they are more likely to be stable. When a new version is released, hopefully the Overleaf CEP project will soon tag an image with extended features. Otherwise you can still build from &lt;code&gt;main&lt;&#x2F;code&gt;.
To select a release version, just use &lt;code&gt;git checkout&lt;&#x2F;code&gt;:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name&quot;&gt;git&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; checkout&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; v5.2.1-ext&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;Build the community docker image which will be used by overleaf.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-support&quot;&gt;cd&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; overleaf-cep&#x2F;server-ce&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name&quot;&gt;make&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Check the name of the docker image that was stored - it will be printed in the console near the end of the build process. At the time of writing &lt;code&gt;make&lt;&#x2F;code&gt; built a docker image with the name &lt;code&gt;sharelatex&#x2F;sharelatex:HEAD&lt;&#x2F;code&gt;.
You can re-tag this image to correspond what is expected by our configuration of Overlef in the &lt;code&gt;docker-compose.override.yml&lt;&#x2F;code&gt; which will be created in the next step. To retag an image, do this to rename the image to &lt;code&gt;v.5.2.1-ext&lt;&#x2F;code&gt;, which is the current Overleaf CE (+ extended features) version.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name&quot;&gt;docker&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; tag&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; sharelatex&#x2F;sharelatex:HEAD&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; sharelatex&#x2F;sharelatex:v5.2.1-ext&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;Add a special docker-compose override file &lt;code&gt;overleaf-toolkit&#x2F;config&#x2F;docker-compose.override.yml&lt;&#x2F;code&gt; with the following content. Note that &lt;code&gt;sharelatex&#x2F;sharelatex:v5.2.1-ext&lt;&#x2F;code&gt; corresponds to the name of a docker image that was built&#x2F;renamed in the previous step.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;yaml&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;s&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;ervices&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt; s&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;harelatex&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;   i&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;mage&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; s&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;harelatex&#x2F;sharelatex:v5.2.1-ext&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h3 id=&quot;configure-the-ldap-community-project&quot;&gt;Configure the LDAP Community Project&lt;a class=&quot;zola-anchor&quot; href=&quot;#configure-the-ldap-community-project&quot; aria-label=&quot;Anchor link for: configure-the-ldap-community-project&quot; style=&quot;visibility: hidden;&quot;&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;In &lt;code&gt;overleaf-toolkit&#x2F;config&#x2F;variables.env&lt;&#x2F;code&gt; edit the following section to enable (unencrypted!) LDAP login.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;#################&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;## LDAP for CE ##&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;#################&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;EXTERNAL_AUTH=ldap&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;OVERLEAF_LDAP_URL=ldap:&#x2F;&#x2F;soft.vub.ac.be&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;# The following two variables will be changed later&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;# OVERLEAF_LDAP_STARTTLS=true&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;# OVERLEAF_LDAP_TLS_OPTS_CA_PATH=[&amp;quot;&#x2F;etc&#x2F;ssl&#x2F;certs&#x2F;MyCACert.pem&amp;quot;] &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;OVERLEAF_LDAP_SEARCH_BASE=ou=People,dc=vub,dc=ac,dc=be&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;OVERLEAF_LDAP_SEARCH_FILTER=(|(uid={{username}})(mail={{username}}))&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;OVERLEAF_LDAP_EMAIL_ATT=mail&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;OVERLEAF_LDAP_FIRST_NAME_ATT=givenName&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;OVERLEAF_LDAP_LAST_NAME_ATT=sn&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;OVERLEAF_LDAP_NAME_ATT=cn&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;OVERLEAF_LDAP_SEARCH_ATTRIBUTES=[&amp;quot;uid&amp;quot;, &amp;quot;sn&amp;quot;, &amp;quot;givenName&amp;quot;, &amp;quot;mail&amp;quot;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;OVERLEAF_LDAP_PLACEHOLDER=&amp;#39;Username&#x2F;email (e.g., SOFT LDAP)&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;# Via the following configuration, users svdvonde and dvandeun are an admin&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;OVERLEAF_LDAP_ADMIN_SEARCH_BASE=ou=People,dc=vub,dc=ac,dc=be&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;OVERLEAF_LDAP_ADMIN_SEARCH_FILTER=&amp;#39;(|(&amp;amp;(uid=dvandeun)(uid={{username}}))(&amp;amp;(uid=svdvonde)(uid={{username}})))&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;OVERLEAF_LDAP_ADMIN_DN_PROPERTY=username&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;OVERLEAF_LDAP_UPDATE_ADMIN_ON_LOGIN=true&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;# OVERLEAF_LDAP_CONTACTS_FILTER=(gidNumber={{userProperty}})&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;# OVERLEAF_LDAP_CONTACTS_PROPERTY=gidNumber&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;# OVERLEAF_LDAP_CONTACTS_NON_LDAP_VALUE=&amp;#39;*&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;# OVERLEAF_LDAP_BIND_DN=cn=ldap_reader,dc=example,dc=com&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;# OVERLEAF_LDAP_BIND_CREDENTIALS=GoodNewsEveryone&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;# OVERLEAF_LDAP_UPDATE_USER_DETAILS_ON_LOGIN=true   &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;For configuring admins, see &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;yu-i-i&#x2F;overleaf-cep&#x2F;discussions&#x2F;5&quot;&gt;here&lt;&#x2F;a&gt;.
At this point, if the SOFT LDAP server has been configured to accept unencrypted connections, then Overleaf LDAP login should work. At the time of writing, SOFT&#x27;s LDAP is indeed configured like this. Proceed with instructions in order to use LDAPS.&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;In a new directory called &lt;code&gt;overleaf-certificates&lt;&#x2F;code&gt; (on the same level as &lt;code&gt;overleaf-toolkit&lt;&#x2F;code&gt; and &lt;code&gt;overleaf-cep&lt;&#x2F;code&gt;), run the following command to extract the LDAPS server&#x27;s certificates:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name&quot;&gt;openssl&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; s_client&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant&quot;&gt; -&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant&quot;&gt;showcerts&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant&quot;&gt; -&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant&quot;&gt;verify&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant&quot;&gt; 5&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant&quot;&gt; -&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant&quot;&gt;connect&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; soft.vub.ac.be:636&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt; &amp;lt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; &#x2F;dev&#x2F;null&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt; |&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name&quot;&gt;awk&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;&#x2F;BEGIN CERTIFICATE&#x2F;,&#x2F;END CERTIFICATE&#x2F;{ if(&#x2F;BEGIN CERTIFICATE&#x2F;){a++}; out=&amp;quot;cert&amp;quot;a&amp;quot;.pem&amp;quot;; print &amp;gt;out}&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;At the time of writing, this generated 4 certificates: &lt;code&gt;cert1.pem&lt;&#x2F;code&gt;, &lt;code&gt;cert2.pem&lt;&#x2F;code&gt;, &lt;code&gt;cert3.pem&lt;&#x2F;code&gt;, &lt;code&gt;cert4.pem&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;In &lt;code&gt;overleaf-toolkit&#x2F;config&#x2F;docker-compose.override.yml&lt;&#x2F;code&gt;, add a &lt;code&gt;volumes&lt;&#x2F;code&gt; section to copy the certificate from the host system into the docker volume.
The syntax is as follows:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;yaml&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;v&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;olumes&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  -&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; s&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;rc&#x2F;file:dest&#x2F;path&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;This results in the following (for the &lt;code&gt;overleaf&lt;&#x2F;code&gt; user account):&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;yaml&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;s&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;ervices&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt; s&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;harelatex&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;   i&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;mage&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; s&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;harelatex&#x2F;sharelatex:v5.2.1-ext&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;   v&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;olumes&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;     -&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; &#x2F;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;home&#x2F;overleaf&#x2F;overleaf-certificates:&#x2F;etc&#x2F;ssl&#x2F;certs&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;To enable LDAPS you must set the following flags:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;OVERLEAF_LDAP_URL=ldaps:&#x2F;&#x2F;soft.vub.ac.be&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;OVERLEAF_LDAP_STARTTLS=false&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;OVERLEAF_LDAP_TLS_OPTS_CA_PATH=[&amp;quot;&#x2F;etc&#x2F;ssl&#x2F;certs&#x2F;cert1.pem&amp;quot;,&amp;quot;&#x2F;etc&#x2F;ssl&#x2F;certs&#x2F;cert2.pem&amp;quot;,&amp;quot;&#x2F;etc&#x2F;ssl&#x2F;certs&#x2F;cert3.pem&amp;quot;,&amp;quot;&#x2F;etc&#x2F;ssl&#x2F;certs&#x2F;cert4.pem&amp;quot;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h3 id=&quot;enable-ldap-contacts-in-overleaf-s-sharing-menu&quot;&gt;Enable LDAP Contacts in Overleaf&#x27;s Sharing Menu&lt;a class=&quot;zola-anchor&quot; href=&quot;#enable-ldap-contacts-in-overleaf-s-sharing-menu&quot; aria-label=&quot;Anchor link for: enable-ldap-contacts-in-overleaf-s-sharing-menu&quot; style=&quot;visibility: hidden;&quot;&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;In &lt;code&gt;overleaf-toolkit&#x2F;config&#x2F;variables.env&lt;&#x2F;code&gt;, set the following configuration option. The provided LDAP filter tells the Overleaf application that how to look for the contacts of a user. It&#x27;s possible to have this filter be specified in a user-specific way (e.g., belonging to the same &quot;group&quot; in LDAP), but at the time of writing SOFT is small enough that we don&#x27;t need this (and also the LDAP list of users is pretty unorganised). Hence, we use the following LDAP filter.&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;The pattern &lt;code&gt;(&amp;amp; x y z)&lt;&#x2F;code&gt; specifies that all filters &lt;code&gt;x&lt;&#x2F;code&gt; &lt;code&gt;y&lt;&#x2F;code&gt; and &lt;code&gt;z&lt;&#x2F;code&gt; must hold.&lt;&#x2F;li&gt;
&lt;li&gt;The filter &lt;code&gt;(objectClass=person)&lt;&#x2F;code&gt; retrieves all contacts with this object class (which is everyone)&lt;&#x2F;li&gt;
&lt;li&gt;The filter &lt;code&gt;(mail=*)&lt;&#x2F;code&gt; retrieves all contacts that have the &lt;code&gt;mail&lt;&#x2F;code&gt; attribute set to anything. This captures the case where some contacts do not have a &lt;code&gt;mail&lt;&#x2F;code&gt; attribute, which is required for Overleaf.&lt;&#x2F;li&gt;
&lt;li&gt;The filter &lt;code&gt;(sambaAcctFlags=[U])&lt;&#x2F;code&gt; is a proxy way to check for active accounts &lt;code&gt;[U]&lt;&#x2F;code&gt; and disabled accounts &lt;code&gt;[DU]&lt;&#x2F;code&gt;.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-variable z-other&quot;&gt;OVERLEAF_LDAP_CONTACTS_FILTER&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;&amp;amp;&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt;objectClass&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;=&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;p&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;e&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;r&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;s&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;o&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;n&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt;mail&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;=&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;*&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt;sambaAcctFlags&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;=&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;[&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;U&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;ul&gt;
&lt;li&gt;More info about Overleaf&#x27;s LDAP contact search: &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;yu-i-i&#x2F;overleaf-cep&#x2F;discussions&#x2F;4&quot;&gt;https:&#x2F;&#x2F;github.com&#x2F;yu-i-i&#x2F;overleaf-cep&#x2F;discussions&#x2F;4&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;Info about LDAP filters here: &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;ldap.com&#x2F;ldap-filters&#x2F;&quot;&gt;https:&#x2F;&#x2F;ldap.com&#x2F;ldap-filters&#x2F;&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;configure-smtp-emails&quot;&gt;Configure SMTP Emails&lt;a class=&quot;zola-anchor&quot; href=&quot;#configure-smtp-emails&quot; aria-label=&quot;Anchor link for: configure-smtp-emails&quot; style=&quot;visibility: hidden;&quot;&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;Set the following flags in &lt;code&gt;overleaf-toolkit&#x2F;config&#x2F;variables.env&lt;&#x2F;code&gt; to configure SMTP (see &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;overleaf&#x2F;overleaf&#x2F;wiki&#x2F;Configuring-SMTP-Email&quot;&gt;Overleaf&#x27;s Wiki&lt;&#x2F;a&gt; for details).&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;OVERLEAF_EMAIL_FROM_ADDRESS=&amp;quot;SOFT&amp;#39;s Overleaf &amp;lt;XXX&amp;gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;# OVERLEAF_EMAIL_REPLY_TO=&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;OVERLEAF_EMAIL_SMTP_HOST=soft.vub.ac.be&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;OVERLEAF_EMAIL_SMTP_PORT=587&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;OVERLEAF_EMAIL_SMTP_SECURE=false&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;OVERLEAF_EMAIL_SMTP_USER=XXX&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;OVERLEAF_EMAIL_SMTP_PASS=XXX&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;# OVERLEAF_EMAIL_SMTP_NAME=&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;# OVERLEAF_EMAIL_SMTP_LOGGER=false&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;OVERLEAF_EMAIL_SMTP_TLS_REJECT_UNAUTH=true&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;OVERLEAF_EMAIL_SMTP_IGNORE_TLS=false&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;OVERLEAF_CUSTOM_EMAIL_FOOTER=&amp;quot;&amp;lt;div&amp;gt;This self-hosted version of Overleaf (Community Edition) is run by the &amp;lt;a href=&amp;#39;https:&#x2F;&#x2F;soft.vub.ac.be&#x2F;&amp;#39;&amp;gt;Software Languages Lab (SOFT)&amp;lt;&#x2F;a&amp;gt; at the Vrije Universiteit Brussel.&amp;lt;&#x2F;div&amp;gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h3 id=&quot;install-full-texlive&quot;&gt;Install Full TexLive&lt;a class=&quot;zola-anchor&quot; href=&quot;#install-full-texlive&quot; aria-label=&quot;Anchor link for: install-full-texlive&quot; style=&quot;visibility: hidden;&quot;&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;The community-built LDAP image ships with a full TexLive by default.
If, for some reason, this changes in the future, then see the instructions to install full Tex Live here: &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;overleaf&#x2F;toolkit&#x2F;blob&#x2F;master&#x2F;doc&#x2F;ce-upgrading-texlive.md&quot;&gt;https:&#x2F;&#x2F;github.com&#x2F;overleaf&#x2F;toolkit&#x2F;blob&#x2F;master&#x2F;doc&#x2F;ce-upgrading-texlive.md&lt;&#x2F;a&gt;. I believe this installation is required every time Overleaf CE is updated &#x2F; upgraded.&lt;&#x2F;p&gt;
&lt;p&gt;Note that there can be &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;web.archive.org&#x2F;web&#x2F;20240919122201&#x2F;https:&#x2F;&#x2F;old.reddit.com&#x2F;r&#x2F;LaTeX&#x2F;comments&#x2F;1bzlp8j&#x2F;local_overleaf_installation_uses_wrong_texlive&#x2F;?rdt=51056&quot;&gt;issues&lt;&#x2F;a&gt; (Web Archive link) when Overleaf does not yet support the latex Tex Live.
In this case, a &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;web.archive.org&#x2F;web&#x2F;20240919122204&#x2F;https:&#x2F;&#x2F;old.reddit.com&#x2F;r&#x2F;LaTeX&#x2F;comments&#x2F;1bzlp8j&#x2F;local_overleaf_installation_uses_wrong_texlive&#x2F;kysjod7&#x2F;&quot;&gt;Reddit user&lt;&#x2F;a&gt; (Web Archive link) suggests to install an older (but compatible) version of Tex Live instead of trying to upgrade Overleaf to the latest version of Tex Live.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;enable-sandboxed-compiles&quot;&gt;Enable Sandboxed Compiles&lt;a class=&quot;zola-anchor&quot; href=&quot;#enable-sandboxed-compiles&quot; aria-label=&quot;Anchor link for: enable-sandboxed-compiles&quot; style=&quot;visibility: hidden;&quot;&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;In &lt;code&gt;overleaf-toolkit&#x2F;config&#x2F;variables.env&lt;&#x2F;code&gt; set the following variables:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ALL_TEX_LIVE_DOCKER_IMAGES=texlive&#x2F;texlive:latest-full,texlive&#x2F;texlive:TL2023-historic&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ALL_TEX_LIVE_DOCKER_IMAGE_NAMES=TeXLive 2024, TeXLive 2023&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;TEX_LIVE_DOCKER_IMAGE=texlive&#x2F;texlive:latest-full&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;In &lt;code&gt;overleaf-toolkit&#x2F;config&#x2F;overleaf.rc&lt;&#x2F;code&gt; set the following variables.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SERVER_PRO=true&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SIBLING_CONTAINERS_ENABLED=true&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;When running using rootless docker, also set &lt;code&gt;DOCKER_SOCKET_PATH&lt;&#x2F;code&gt; to a correct value. You can find out the current user&#x27;s id with &lt;code&gt;id -u&lt;&#x2F;code&gt; (in my case, &lt;code&gt;1002&lt;&#x2F;code&gt;). Then, typically the socket for a rootless docker is at &lt;code&gt;&#x2F;run&#x2F;user&#x2F;&amp;lt;user id&amp;gt;&#x2F;docker.sock&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;DOCKER_SOCKET_PATH=&#x2F;run&#x2F;user&#x2F;1002&#x2F;docker.sock&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;The value of the property &lt;code&gt;TEX_LIVE_DOCKER_IMAGE&lt;&#x2F;code&gt; is stored in the database for every project that is created. That is because on Overleaf.com users can choose which version of TexLive to compile their project with, and updating the setting &lt;code&gt;TEX_LIVE_DOCKER_IMAGE&lt;&#x2F;code&gt; (e.g., when a new version is released) does not force older documents to compile with the new version of TexLive. Self hosted Overleaf users do not have this option to pick their compiler. However, the value is still stored in the database, and if you want to change which image is used to compile projects then you will have to update all existing projects that are stored in the database. To do so, execute &lt;code&gt;bin&#x2F;mongo&lt;&#x2F;code&gt;. Then, modify the &lt;code&gt;imageName&lt;&#x2F;code&gt; property on all existing projects. For example, the following command will set this property to be &lt;code&gt;texlive&#x2F;texlive:latest-full&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;javascript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-variable z-other&quot;&gt;db&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt;projects&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name&quot;&gt;updateMany&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;{&lt;&#x2F;span&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;span&gt;$set&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;imageName&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;texlive&#x2F;texlive:latest-full&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h3 id=&quot;publishing-with-https-to-overleaf-soft-vub-ac-be&quot;&gt;Publishing with HTTPS to &lt;code&gt;overleaf.soft.vub.ac.be&lt;&#x2F;code&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#publishing-with-https-to-overleaf-soft-vub-ac-be&quot; aria-label=&quot;Anchor link for: publishing-with-https-to-overleaf-soft-vub-ac-be&quot; style=&quot;visibility: hidden;&quot;&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;Follow the instructions in &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;overleaf&#x2F;toolkit&#x2F;blob&#x2F;master&#x2F;doc&#x2F;tls-proxy.md&quot;&gt;https:&#x2F;&#x2F;github.com&#x2F;overleaf&#x2F;toolkit&#x2F;blob&#x2F;master&#x2F;doc&#x2F;tls-proxy.md&lt;&#x2F;a&gt;. At the time of writing, we did the following:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;In &lt;code&gt;overleaf-toolkit&#x2F;config&#x2F;overleaf.rc&lt;&#x2F;code&gt;, set:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;OVERLEAF_LISTEN_IP=127.0.0.1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;# TLS proxy configuration (optional)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;# See documentation in doc&#x2F;tls-proxy.md&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;NGINX_ENABLED=true&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;NGINX_CONFIG_PATH=config&#x2F;nginx&#x2F;nginx.conf&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;NGINX_HTTP_PORT=80&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;# Replace these IP addresses with the external IP address of your host&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;NGINX_HTTP_LISTEN_IP=134.184.43.156&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;NGINX_TLS_LISTEN_IP=134.184.43.156&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;TLS_PRIVATE_KEY_PATH=config&#x2F;nginx&#x2F;certs&#x2F;overleaf_key.pem         # SEE NEXT STEP&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;TLS_CERTIFICATE_PATH=config&#x2F;nginx&#x2F;certs&#x2F;overleaf_certificate.pem # SEE NEXT STEP&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;TLS_PORT=443&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;Find the paths to the certificates in &lt;code&gt;&#x2F;etc&#x2F;nginx&#x2F;sites-available&#x2F;overleaf&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;Set-up nginx on the host machine. In our case, add a section to the existing nginx config based on the example in &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;overleaf&#x2F;overleaf&#x2F;wiki&#x2F;HTTPS-reverse-proxy-using-Nginx&quot;&gt;https:&#x2F;&#x2F;github.com&#x2F;overleaf&#x2F;overleaf&#x2F;wiki&#x2F;HTTPS-reverse-proxy-using-Nginx&lt;&#x2F;a&gt;.
The technical admin said the &lt;code&gt;ssl_ciphers&lt;&#x2F;code&gt; from Cloudflare did not work out of the box, so we used &lt;code&gt;ssl_ciphers &#x27;EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH&#x27;;&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;server {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   listen 443 ssl;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   server_name overleaf.soft.vub.ac.be;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   ssl_certificate &#x2F;etc&#x2F;nginx&#x2F;ssl&#x2F;nginx.crt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   ssl_certificate_key &#x2F;etc&#x2F;nginx&#x2F;ssl&#x2F;nginx.key;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   # used cloudflares config, but excluding TLS 1.0 &amp;amp; 1.1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   # https:&#x2F;&#x2F;github.com&#x2F;cloudflare&#x2F;sslconfig&#x2F;blob&#x2F;master&#x2F;conf&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   ssl_protocols               TLSv1.2 TLSv1.3;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   ssl_ecdh_curve              X25519:P-256:P-384:P-521;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   ssl_ciphers                 &amp;#39;EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH&amp;#39;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   ssl_prefer_server_ciphers   on;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   # config to enable HSTS(HTTP Strict Transport Security) https:&#x2F;&#x2F;developer.mozilla.org&#x2F;en-US&#x2F;docs&#x2F;Security&#x2F;HTTP_Strict_Transport_Security&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   # to avoid ssl stripping https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;SSL_stripping#SSL_stripping&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   # https:&#x2F;&#x2F;ssl-config.mozilla.org&#x2F;#server=nginx&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   add_header Strict-Transport-Security &amp;quot;max-age=63072000&amp;quot; always;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   server_tokens off;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   add_header X-Frame-Options SAMEORIGIN;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   add_header X-Content-Type-Options nosniff;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   client_max_body_size 50M;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   location &#x2F; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      proxy_pass http:&#x2F;&#x2F;localhost:4242;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      proxy_set_header X-Forwarded-Proto $scheme;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      proxy_http_version 1.1;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      proxy_set_header Upgrade $http_upgrade;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      proxy_set_header Connection &amp;quot;upgrade&amp;quot;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      proxy_read_timeout 3m;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      proxy_send_timeout 3m;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;Edit &lt;code&gt;overleaf-toolkit&#x2F;config&#x2F;variables.env&lt;&#x2F;code&gt; and set:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;OVERLEAF_BEHIND_PROXY=true&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;OVERLEAF_SECURE_COOKIE=true&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h3 id=&quot;misc&quot;&gt;Misc&lt;a class=&quot;zola-anchor&quot; href=&quot;#misc&quot; aria-label=&quot;Anchor link for: misc&quot; style=&quot;visibility: hidden;&quot;&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;The following resources were helpful when installing&#x2F;configuring some parts of Overleaf CE:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;With regards to support for comments, change tracking, and LDAP in the Overleaf CE: &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;overleaf&#x2F;overleaf&#x2F;issues&#x2F;1193&quot;&gt;https:&#x2F;&#x2F;github.com&#x2F;overleaf&#x2F;overleaf&#x2F;issues&#x2F;1193&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Setting up LDAP: &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;yu-i-i&#x2F;overleaf-cep&#x2F;discussions&#x2F;3&quot;&gt;https:&#x2F;&#x2F;github.com&#x2F;yu-i-i&#x2F;overleaf-cep&#x2F;discussions&#x2F;3&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Setting up sharing contacts: &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;yu-i-i&#x2F;overleaf-cep&#x2F;discussions&#x2F;4&quot;&gt;https:&#x2F;&#x2F;github.com&#x2F;yu-i-i&#x2F;overleaf-cep&#x2F;discussions&#x2F;4&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;General set-up: &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;blog.felixviola.de&#x2F;overleaf-ce-self-host-your-own-latex-server-tutorial&#x2F;&quot;&gt;https:&#x2F;&#x2F;blog.felixviola.de&#x2F;overleaf-ce-self-host-your-own-latex-server-tutorial&#x2F;&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;General set-up (e.g., nginx): &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;jinli.io&#x2F;en&#x2F;p&#x2F;self-hosted-online-latex-compilation-and-preview-service-overleaf-community-edition&quot;&gt;https:&#x2F;&#x2F;jinli.io&#x2F;en&#x2F;p&#x2F;self-hosted-online-latex-compilation-and-preview-service-overleaf-community-edition&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;maintenance&quot;&gt;Maintenance&lt;a class=&quot;zola-anchor&quot; href=&quot;#maintenance&quot; aria-label=&quot;Anchor link for: maintenance&quot; style=&quot;visibility: hidden;&quot;&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;install-minor-version-updates-of-the-overleaf-cep-community-project&quot;&gt;Install Minor Version Updates of the Overleaf CEP Community Project&lt;a class=&quot;zola-anchor&quot; href=&quot;#install-minor-version-updates-of-the-overleaf-cep-community-project&quot; aria-label=&quot;Anchor link for: install-minor-version-updates-of-the-overleaf-cep-community-project&quot; style=&quot;visibility: hidden;&quot;&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;The deployment of Overleaf is based on the following community project, which adds LDAP support (and some other features) to Overleaf&#x27;s Community Edition.&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;yu-i-i&#x2F;overleaf-cep&quot;&gt;https:&#x2F;&#x2F;github.com&#x2F;yu-i-i&#x2F;overleaf-cep&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;The Overleaf CEP repo provides tags that correspond to Overleaf releases which were extended by the Overleaf CEP features. For example, the tag &lt;code&gt;v5.2.1-ext&lt;&#x2F;code&gt;. It is recommended to use these official Overleaf release version rather than the &lt;code&gt;main&lt;&#x2F;code&gt; branch because they are more likely to be stable. When a new version is released, hopefully the Overleaf CEP project will soon tag an image with extended features. Otherwise you can still build from &lt;code&gt;main&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;To update said repository to the latest version, you need to fetch the new code from github, rebuild the docker image, and restart Overleaf.
Make sure that you are installing only minor versions, and remember that we are not using Overleaf&#x27;s official code base for our self-hosted version, so any updates to the Overleaf Community Edition will have to be incorporated into the &lt;code&gt;overleaf-cep&lt;&#x2F;code&gt; project (by its developer).
When this project is updated, you can update SOFT&#x27;s self hosted version as follows.&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Update the Docker image.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-support&quot;&gt;cd&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; ~&#x2F;overleaf-cep&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name&quot;&gt;git&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; fetch&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant&quot;&gt; -&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant&quot;&gt;-tags&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant&quot;&gt; -&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant&quot;&gt;-prune&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant&quot;&gt; -&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant&quot;&gt;-prune-tags&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name&quot;&gt;git&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; checkout&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; v5.3.0-ext-v1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-support&quot;&gt;cd&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; server-ce&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name&quot;&gt;make&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Check which docker image is built by &lt;code&gt;make&lt;&#x2F;code&gt;. Sometimes you will have to re-tag this image to correspond what is expected by our configuration of Overlef in the &lt;code&gt;docker-compose.override.yml&lt;&#x2F;code&gt;. To retag an image, do this:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name&quot;&gt;docker&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; tag&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; sharelatex&#x2F;sharelatex:HEAD&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; sharelatex&#x2F;sharelatex:v5.3.0-ext-v1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Note: use &lt;code&gt;make&lt;&#x2F;code&gt;, &lt;code&gt;make build-base&lt;&#x2F;code&gt; or &lt;code&gt;make build-community&lt;&#x2F;code&gt; depending on which you need. The Base image generally contains the basic dependencies like &lt;code&gt;wget&lt;&#x2F;code&gt;, plus &lt;code&gt;texlive&lt;&#x2F;code&gt;. It&#x27;s split out because it&#x27;s a pretty heavy set of dependencies, and it&#x27;s nice to not have to rebuild all of that every time.&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;Modify the image that is used by overleaf by editing &lt;code&gt;~&#x2F;overleaf-toolkit&#x2F;config&#x2F;docker-compose.override.yml&lt;&#x2F;code&gt;, such that it uses the image that you tagged in the previous steps. E.g., &lt;code&gt;sharelatex&#x2F;sharelatex:v5.3.0-ext-v1&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;docker pull&lt;&#x2F;code&gt; updates for the required TeXLive images. This can take a while, and is automatically performed when starting Overleaf. By doing it beforehand, the service is restarted quicker since it detects that the images are recent enough (this reduces downtime).&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name&quot;&gt;docker&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; pull&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; texlive&#x2F;texlive:latest-full&lt;&#x2F;span&gt;&lt;span&gt; &amp;amp;&amp;amp;&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name&quot;&gt; docker&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; pull&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; texlive&#x2F;texlive:TL2024-historic&lt;&#x2F;span&gt;&lt;span&gt; &amp;amp;&amp;amp;&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name&quot;&gt; docker&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; pull&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; texlive&#x2F;texlive:TL2023-historic&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;Restart the Overleaf Service.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-support&quot;&gt;cd&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; ~&#x2F;overleaf-toolkit&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name&quot;&gt;bin&#x2F;up&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant&quot;&gt; -&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant&quot;&gt;d&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h3 id=&quot;install-major-version-updates&quot;&gt;Install Major Version Updates&lt;a class=&quot;zola-anchor&quot; href=&quot;#install-major-version-updates&quot; aria-label=&quot;Anchor link for: install-major-version-updates&quot; style=&quot;visibility: hidden;&quot;&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;There are probably special migration instructions when upgrading major versions of Overleaf (e.g., the current 5.X to the future 6.X).
At the time of writing I have not performed such migration, so carefully figure out how to do it yourself using the upgrade instructions of Overleaf Toolkit.
Note that you can create backups, see &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;overleaf&#x2F;overleaf&#x2F;wiki&#x2F;Data-and-Backups&quot;&gt;https:&#x2F;&#x2F;github.com&#x2F;overleaf&#x2F;overleaf&#x2F;wiki&#x2F;Data-and-Backups&lt;&#x2F;a&gt;.
You should check whether upgrading is possible, and if there are instructions associated with doing so.
If the CEP Community project does not provide such instructions, you should check out the Overleaf Community Edition &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;overleaf&#x2F;overleaf&#x2F;wiki&quot;&gt;release notes&lt;&#x2F;a&gt; and the Overleaf Toolkit &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;overleaf&#x2F;toolkit&#x2F;blob&#x2F;master&#x2F;doc&#x2F;README.md&quot;&gt;upgrade instructions&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;offer-a-historic-version-of-texlive&quot;&gt;Offer a historic version of TeXLive&lt;a class=&quot;zola-anchor&quot; href=&quot;#offer-a-historic-version-of-texlive&quot; aria-label=&quot;Anchor link for: offer-a-historic-version-of-texlive&quot; style=&quot;visibility: hidden;&quot;&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;At the time of writing, TeXLive 2024 was released (docker hub: &lt;code&gt;texlive&#x2F;texlive:TL2024-historic&lt;&#x2F;code&gt;). These are the steps that I executed.&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Open &lt;code&gt;config&#x2F;variables.env&lt;&#x2F;code&gt; to update the available TeXLive images.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ALL_TEX_LIVE_DOCKER_IMAGES=texlive&#x2F;texlive:latest-full,texlive&#x2F;texlive:TL2024-historic,texlive&#x2F;texlive:TL2023-historic&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ALL_TEX_LIVE_DOCKER_IMAGE_NAMES=TeXLive 2025,TeXLive 2024,TeXLive 2023&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;(optional) pull the new historic docker image &lt;code&gt;docker pull texlive&#x2F;texlive:TL2024-historic&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;Run &lt;code&gt;bin&#x2F;mongo&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;Update projects to refer to the image of TeXLive that they were using (in my case, 2024) instead of automatically rolling them to 2025.
You can see how many documents were using the latest as follows:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;javascript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-variable z-other&quot;&gt;db&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt;projects&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name&quot;&gt;find&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;{&lt;&#x2F;span&gt;&lt;span&gt;imageName&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;texlive&#x2F;texlive:latest-full&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name&quot;&gt;count&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Remove the argument to &lt;code&gt;find&lt;&#x2F;code&gt; to count all documents. You can update the projects as follows:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;javascript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-variable z-other&quot;&gt;db&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt;projects&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name&quot;&gt;updateMany&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;{&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;imageName&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;texlive&#x2F;texlive:latest-full&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;span&gt;$set&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;imageName&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;texlive&#x2F;texlive:TL2024-historic&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;Restart overleaf to make the updated &lt;code&gt;variables.env&lt;&#x2F;code&gt; take effect.&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
</content>
	</entry>
</feed>
