Add first draft of privacy policy

This commit is contained in:
Niko Strijbol 2019-11-27 14:30:30 +01:00
parent e11ccf565f
commit 2465beae7a
No known key found for this signature in database
GPG key ID: 1A8AEBABD9012251
25 changed files with 384 additions and 35 deletions

11
Rules
View file

@ -135,6 +135,17 @@ compile '/**/*.ics' do
filter :erb
end
#
# PRIVACY
#
compile '/privacy/*' do
filter :kramdown
# Don't write out the privacy items themselves for now
nil
end
#
# REPORTS
#

View file

@ -1,36 +1,3 @@
.blogpost {
position: relative;
#table-of-contents {
@include tablet {
position: absolute;
left: 100%;
}
@include mobile {
text-align: center;
}
#markdown-toc {
@extend .menu-list;
&, ul {
margin: 0;
list-style: none;
}
}
}
}
$sel: '';
@for $i from 1 through 9 {
$sel: if($i == 1, "ul", selector-nest($sel, "ul")) !global;
#markdown-toc.toc-depth-#{$i} #{$sel} {
display: none;
}
}
@keyframes lineAnimation {
to {
width: 80px;

View file

@ -0,0 +1,17 @@
.example {
@extend .box;
&:before {
content: "Voorbeeld. ";
font-weight: bold;
}
}
.to-top {
& a {
font-size: 0.8rem;
}
& hr {
margin-bottom: 0
}
margin-bottom: 1.5rem;
}

View file

@ -0,0 +1,35 @@
// CSS related to the TOC
#table-of-contents {
@include tablet {
position: absolute;
left: 100%;
}
@include mobile {
text-align: center;
}
#markdown-toc {
@extend .menu-list;
&, ul {
margin: 0;
list-style: none;
}
}
}
$sel: '';
@for $i from 1 through 9 {
$sel: if($i == 1, "ul", selector-nest($sel, "ul")) !global;
#markdown-toc.toc-depth-#{$i} #{$sel} {
display: none;
}
}
// Must be applied to the element containing the toc
.toc-container {
position: relative;
}

View file

@ -40,3 +40,5 @@ body {
@import "includes/navbar";
@import "includes/search";
@import "includes/about";
@import "includes/privacy";
@import "includes/toc";

211
content/privacy.erb Normal file
View file

@ -0,0 +1,211 @@
---
title: Privacybeleid
narrow_page: true
typography: true
toc: true
---
<h1 class="title is-1 has-text-centered" id="top">Privacybeleid</h1>
<div id="table-of-contents" class="menu column is-4">
<p class="menu-label">
Inhoudstabel
</p>
<ul class="toc-depth-1" id="markdown-toc">
<li><a href="#opbouw" id="markdown-toc-opbouw">Opbouw</a></li>
<li><a href="#wanneer" id="markdown-toc-opbouw">Wanneer en waar is dit privacybeleid van toepassing?</a></li>
<li><a href="#wie" id="markdown-toc-opbouw">Wie heeft toegang tot de verzamelde data?</a></li>
<li><a href="#welke" id="markdown-toc-opbouw">Welke data worden verzameld en waarvoor worden ze gebruikt?</a></li>
<li><a href="#projecten" id="markdown-toc-opbouw">Overzicht der projecten</a></li>
</ul>
</div>
<div class="content">
<p>Laatst bijgewerkt op <strong><time datetime="2019-11-26">26 november 2019</time></strong>.
</p>
<p>Zeus WPI biedt een waaier aan diensten en projecten aan aan haar leden en het algemene publiek. Met dit privacybeleid wilt ze aangeven hoe en waarvoor ze data verzamelt.</p>
<h2 id="opbouw">Opbouw</h2>
<p>Het privacybeleid is opgebouwd uit twee grote delen: een algemeen deel en een project-specifiek deel. Het eerste deel is het eigenlijk beleid, en legt algemeen uit welke data Zeus verzamelt, waarom ze dat doet en wat ze met de verzamelde data doet. Bepaalde projecten hebben echter uitzonderingen of vergen meer uitleg. Dit komt in deel twee van het privacybeleid, dat per project bepaald hoe het algemene beleid van toepassing is, indien nodig. Staat een project niet in deel twee, dan is uiteraard deel een nog steeds van toepassing.</p>
<h2 id="wanneer">Wanneer en waar is dit privacybeleid van toepassing?</h2>
<p>Zeus WPI stelt een waaier aan projecten beschikbaar aan haar leden en het publiek in het algemeen. Daarbovenop worden de diensten en projecten van Zeus ook door derden gebruikt.</p>
<h3 id="verantwoordelijke">Zeus als dataverantwoordelijke</h3>
<p>Voor het aanbieden van haar projecten, verzamelt Zeus WPI data. In dit geval treedt Zeus op als "Verwerker" in de terminologie van de AVG. Dit betekent dat Zeus de data zelf verzamelt, of opdracht geeft aan derden om de data te verzamelen.</p>
<div class="example">
Voorbeelden van projecten waarbij Zeus de dataverantwoordelijke is, zijn Haldis, Tab, Hydra, enz.
</div>
<h3 id="verwerker">Zeus als verwerker</h3>
<p>Zeus biedt niet alleen projecten aan aan haar leden en andere personen, maar biedt ook diensten aan aan derden. In dat geval dient u zich te wenden tot het privacybeleid van de derde in wiens naam Zeus de data verwerkt. Zeus treedt dan op als "Verwerker".</p>
<div class="example">
Zeus kan de websites van andere verenigingen hosten op haar servers. Dan is niet het privacybeleid van Zeus van toepassing, maar dat van de vereniging wier website bij Zeus gehost wordt.
</div>
<p>Als Zeus optreedt als verwerker, zal Zeus in het algemeen slechts de absoluut noodzakelijke data verzamelen voor de integriteit en goede werking van haar systemen in stand te houden verzamelen. Meer informatie kan u krijgen bij de verantwoordelijke vereniging of personen die gebruik maken van de diensten van Zeus.</p>
<h2 id="wie">Wie heeft toegang tot de verzamelde data?</h2>
<p>In de eerste plaats heeft het bestuur van Zeus WPI toegang tot de gegevens, en in het bijzonder hebben de systeemadministrators toegang tot de data. Het bestuur beperkt zijn inzage in de gegevens tot het strikt noodzakelijke om zijn mandaat te vervullen.</p>
<div class="example">
De systeemadministrators hebben toegang tot alle gegevens, daar zij toegang hebben tot alle infrastructuur van Zeus. Uiteraard houden zij zich niet bezig met het bekijken van de verzamelde data; dit gebeurt enkel indien nodig, zoals wanneer een server crasht.
</div>
<p>Ook kunnen ontwikkelaars van een bepaald project toegang krijgen tot de data van dat project, indien dit nodig zou blijken voor de ontwikkeling van het project. Het bestuur, en de systeemadministrators in het bijzonder, kijken er op toe dat ontwikkelaars van projecten nooit meer toegang hebben dan nodig en dat de data niet misbruikt wordt. </p>
<div class="example">
De ontwikkelaars van Hydra krijgen toegang de API-server en kunnen zo aan de serverlogs.
</div>
<h2 id="welke">Welke data worden verzameld en waarvoor worden ze gebruikt?</h2>
Zeus verzamelt vier grote categorieën van data.
<h3 id="administratie">Administratieve gegevens</h3>
<p>Zeus houdt een reeks administratieve gegevens bij over haar leden, zoals vereist door de statuten of om de goede werking van de vereniging te bewerkstelligen. Onder deze data valt onder meer:</p>
<ul>
<li>
<strong>Accountgegevens</strong>, zoals de gebruikersnaam, UGent-gebruikersnaam, enz. Dit is om de accountfunctionaliteit van de leden, zoals vereist in de statuten, mogelijk te maken.
</li>
<li>
<strong>E-mailadressen</strong>. Dit om de leden in te schrijven op de mailinglijsten, zoals vereist door de statuten.
</li>
</ul>
<p>Deze gegevens worden door u aan Zeus verstrekt op het moment dat u zich inschrijft.</p>
<p>Indien u gebruik maakt van het Google Formulier voor uw inschrijving, worden de gegevens die u daar invult, opgeslagen in Google Drive. Deze zijn onderhevig aan het privacybeleid van Google.</p>
<p>Bij het opheffen van het lidmaatschap worden de data niet automatisch verwijderd, vanwege het ontbreken van een technische oplossing. Indien gewenst, kan u zich wenden tot de vereniging voor een manuele verwijdering van uw administratieve gegevens.</p>
<%= render '/partials/_up.erb' %>
<h3 id="technisch">Technische gegevens</h3>
<p>Hieronder vallen de data nodig om de goede werking van de projecten te garanderen. Concreet betekent de serverlogs. Dit zijn logboeken van de verzoeken die gestuurd worden naar een van de servers van Zeus. In de logboeken zitten volgende data:</p>
<ul>
<li><strong>IP-adressen</strong>, van wie de verzoeken maakte</li>
<li><strong>Tijdstippen</strong>, wanneer de verzoeken gemaakt werden</li>
<li><strong>Doel</strong>, wat er precies opgevraagd werd</li>
<li>
<strong>Technische gegevens</strong>, zoals welk apparaat en software er gebruikt zijn voor het verzoek, welk protocol er gebruikt wordt en hoeveel bytes er verstuurd zijn.
</li>
</ul>
<p>Deze informatie wordt gebruikt om de toestand van de server in de gaten te houden, teneinde de dienstverlening van de server te garanderen. Zo kunnen we de belasting van de server in de gaten houden, misbruik detecteren en foute verzoeken (bv. missende webpagina's) verhelpen.</p>
<div class="example">Een typische gebeurtenis in het logboek ziet er als volgt uit:<br>
<p>
<code>94.XXX.XXX.XXX - [11/Sep/2019:11:18:59 +0200] "GET /api/2.0/association/logo/js.png HTTP/1.1" 200 34464 "-" "okhttp/3.12.2"</code>
</p>
<p>Deze informatie zegt ons:</p>
<ul>
<li>Het <span class="acronym">IP</span>-adres van de gebruiker (hier onherkenbaar gemaakt).</li>
<li>Het tijdstip waarop het verzoek naar de API gestuurd werd.</li>
<li>Technische informatie over het verzoek: wat is er opgevraagd, welk protocol is er gebruikt, hoeveel bytes zijn er verstuurd om aan het verzoek te voldoen.</li>
<li>De
<em><a href="https://nl.wikipedia.org/wiki/Useragent">useragent</a></em> van het verzoek: welk apparaat stuurde het verzoek en waarmee. In dit voorbeeld gaat het bijvoorbeeld over de Android-app.
</li>
</ul>
<p>Specifiek vraagt dit verzoek het logo van een studentenvereniging op, meer bepaald
<a href="https://hydra.ugent.be/api/2.0/association/logo/js.png">dit logo</a>.</p>
</div>
<p>Deze data worden niet automatisch verwerkt; ze dienen om manueel de oorzaken van problemen te vinden. Serverlogs worden onbeperkt bijgehouden.</p>
<%= render '/partials/_up.erb' %>
<h3 id="project">Projectdata</h3>
<p>Veel projecten hebben data nodig om te kunnen functioneren, dus verzameld Zeus die uiteraard ook. Vaak zijn dit gegevens die u zelf ingeeft of laat genereren door het project dat u gebruikt.</p>
<div class="example">
Als u bijvoorbeeld gebruik maakt van Haldis, moet Zeus opslaan wat u besteld hebt, of Haldis zal niet werken.
</div>
<p>Afhankelijk van de applicatie is het niet altijd mogelijk om de gegevens te verwijderen of aanpassen zonder de integriteit of goede werking van het project op de helling te zetten. In dat geval probeert Zeus de data zoveel mogelijk te anonimiseren als u een verwijderverzoek stuurt of zoveel mogelijk data aan te passen als u een aanpassingsverzoek stuurt.</p>
<div class="example">
Bij Tab kan u bijvoorbeeld geen transacties laten verwijderen, maar wel anonimiseren.
</div>
<%= render '/partials/_up.erb' %>
<h3 id="videobeelden">Videobeelden</h3>
<p>Ter beveiliging van de kelder van Zeus hangt er een camera "Cammie" in de kelder. De beelden van deze camera worden live uitgezonden op de website van de vereniging.</p>
TODO: opgelsagen?
<p>Bij het inschrijven hebben alle leden zich akkoord verklaard om opgenomen te worden door Cammie als zij zich in de kelder begeven.</p>
<h2 id="projecten">Overzicht der projecten</h2>
<h3 id="specifiek">Project-specifieke bepalingen</h3>
<p>Deze projecten hebben meer uitleg of hebben uitzonderingen.</p>
<% @responsible = privacy_projects("responsible") %>
<% @responsible.each do |project| %>
<%= render '/partials/_privacy.erb', project: project %>
<%= render '/partials/_up.erb' %>
<% end %>
<h3 id="niet-gebruikt">Niet-gebruikte projecten</h3>
<p>Deze projecten worden niet (meer) gebruikt door Zeus. Indien u deze toch gebruikt moet u zich wenden tot degene die de projecten gebruiken.</p>
<ul>
<% privacy_projects("external").each do |project| %>
<li>
<% if project[:link] %>
<a href="<%= project[:link] %>"><%= project[:name] %></a>
<% else %>
<%= project[:name] %>
<% end %>
</li>
<% end %>
</ul>
<%= render '/partials/_up.erb' %>
<h3 id="als-verwerker">Projecten/diensten als verwerker</h3>
<p>Zeus werkt mee aan volgende projecten of diensten als verwerker, zoals bepaald hierboven.</p>
<ul>
<% privacy_projects("processor").each do |project| %>
<li>
<% if project[:link] %>
<a href="<%= project[:link] %>"><%= project[:name] %></a>
<% else %>
<%= project[:name] %>
<% end %>
</li>
<% end %>
</ul>
<%= render '/partials/_up.erb' %>
<h3 id="in-ontwikkeling">Projecten in ontwikkeling</h3>
<p>Deze projecten zijn nog in ontwikkeling. Het is u verboden persoonlijke data aan deze projecten mee te delen. Indien u dit toch zou doen, dient u ons zo snel mogelijk te contacteren, zodat de data verwijderd kunnen worden.</p>
<ul>
<% privacy_projects("development").each do |project| %>
<li>
<% if project[:link] %>
<a href="<%= project[:link] %>"><%= project[:name] %></a>
<% else %>
<%= project[:name] %>
<% end %>
</li>
<% end %>
</ul>
</div>

View file

@ -0,0 +1,5 @@
---
name: 12urenloop
status: processor
link: https://12urenloop.be/
---

View file

@ -0,0 +1,10 @@
---
name: Blokmap
status: responsible
---
TODO
- Facebook button
- Google Analytics
- Mapbox

View file

@ -0,0 +1,6 @@
---
name: Fathom
status: responsible
---
TODO

View file

@ -0,0 +1,4 @@
---
name: FK Enrolment
status: external
---

4
content/privacy/g2.md Normal file
View file

@ -0,0 +1,4 @@
---
name: G2
status: development
---

View file

@ -0,0 +1,10 @@
---
name: Gamification
status: responsible
---
Met Gamification wordt het project bedoeld dat beschikbaar is via https://zeus.ugent.be/game.
- De website gebruikt de Google Charts-api voor het tonen van grafieken. Hierop is het privacybeleid van Google Charts van toepassing, dat [hier](https://developers.google.com/chart/interactive/docs/security_privacy) beschikbaar is. Zoals ook vermeld op die laatstgenoemde pagina, is het [algemene privacybeleid](https://policies.google.com/privacy) van Google van toepassing.
- De applicatie verzamelt automatisch data vanop Github, zoals commits en issues. Deze data worden verzameld van uit de repositories van Zeus WPI. Deze gegevens zijn uiteraard essentieel voor de werking van Gamification. Daar de gegevens op geautomatiseerde wijze van Github gehaald worden, zijn verwijder- of aanpasverzoeken niet mogelijk.
- Bij het bezoeken van Gamification worden avatars geladen van Github. Hierop is het [privacybeleid van Github](https://help.github.com/en/github/site-policy/github-privacy-statement) van toepassing.

View file

@ -0,0 +1,6 @@
---
name: Gandalf
status: external
---
TODO: host Zeus dit nog?

View file

@ -0,0 +1,7 @@
---
name: Gitlab
status: responsible
---
- Data die je ingeeft
- Wordt niets mee gedaan

6
content/privacy/hydra.md Normal file
View file

@ -0,0 +1,6 @@
---
name: Hydra
status: responsible
---
Dit privacybeleid is niet van toepassing op Hydra, dat zijn eigen [privacybeleid](https://hydra.ugent.be/privacy-policy.html) heeft.

4
content/privacy/lana.md Normal file
View file

@ -0,0 +1,4 @@
---
name: Lana
status: external
---

View file

@ -0,0 +1,10 @@
---
name: Mattermost
status: responsible
---
Bij Mattermost is het [standaardprivacybeleid](https://github.com/mattermost/mattermost-server/blob/master/build/PRIVACY_POLICY.md) van een zelf-gehoste Mattermost-applicatie van toepassing.
Op Mattermost kunnen berichten in twee categorieën ingedeeld worden: openbare berichten en private berichten. Onder private berichten worden alle berichten in private gesprekken of besloten kanalen verstaan. Berichten in openbare kanalen vallen onder openbare berichten.
Daar de private berichten mogelijk een gevoelig karakter hebben, worden deze berichten standaard na een termijn van 1 jaar gewist. U kan een uitzondering bekomen op deze standaardtermijn door contact op te nemen met de systeemadministrators van Zeus.

View file

@ -0,0 +1,5 @@
---
name: Saruman
status: external
link: https://12urenloop.be/
---

View file

@ -0,0 +1,11 @@
---
name: Website
status: responsible
---
De website van Zeus verzamelt bijkomende data:
- De website laadt bibliotheken via een content delivery network van derden, MaxCDN. Zie [hun privacybeleid](https://www.bootstrapcdn.com/privacy-policy/) (Engels).
- Bezoekersstatistieken worden bijgehouden met Fathom, dat Zeus zelf host. Zie [Fathom](#fathom) voor een overzicht van de verzamelde gegevens en waarvoor ze gebruikt worden.
- Op de startpagina wordt data van Gamification geladen, zie [Gamification](#gamification).
- Bepaalde pagina's over evenementen bevatten kaarten van OpenStreetMaps. Zie [hun privacybeleid](https://wiki.osmfoundation.org/wiki/Privacy_Policy) (Engels).

View file

@ -1,4 +1,4 @@
<article class="blogpost column is-offset-2 is-8" markdown="1">
<article class="toc-container column is-offset-2 is-8" markdown="1">
<% if item[:toc] %>
<div id="table-of-contents" class="menu column is-4" markdown="1">

View file

@ -5,7 +5,7 @@
<main class="section">
<% if item[:narrow_page] %>
<div class="columns">
<article class="column is-8 is-offset-2">
<article class="column is-8 is-offset-2 <%= 'toc-container' if @item[:toc] %>">
<% end %>
<%= yield %>

View file

@ -0,0 +1,6 @@
<h4 id="<%= project.identifier.without_ext.split('/')[-1] %>"><%= project[:name] %></h4>
<% if project.compiled_content %>
<%= project.compiled_content %>
<% else %>
<p>Dit project kent geen afwijkingen van het algemeen beleid.</p>
<% end %>

4
layouts/partials/_up.erb Normal file
View file

@ -0,0 +1,4 @@
<div class="to-top">
<hr>
<a class="is-pulled-right" href="#top">Omhoog ↑</a>
</div>

7
lib/helpers/privacy.rb Normal file
View file

@ -0,0 +1,7 @@
module PrivacyHelper
def privacy_projects(status)
@items.find_all('/privacy/*')
.select {|project| project[:status] == status}
.sort_by {|project| project[:name]}
end
end

View file

@ -22,3 +22,4 @@ include TimeHelper
include TileHelper
include AboutHelper
include ReportsHelper
include PrivacyHelper