gdpr added

This commit is contained in:
H.T. Kruitbosch 2018-05-04 15:09:27 +02:00
parent 9268ac8e13
commit c86b41c48a
19 changed files with 622 additions and 8 deletions

View File

@ -1 +1 @@
__version__ = '0.1.28' __version__ = '0.1.29'

6
rugwebsite/forms.py Executable file
View File

@ -0,0 +1,6 @@
from django import forms
class RequestGDPRDelete(forms.Form):
email = forms.EmailField(widget=forms.EmailInput)

View File

@ -0,0 +1,43 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11.7 on 2018-05-04 11:30
from __future__ import unicode_literals
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
initial = True
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
]
operations = [
migrations.CreateModel(
name='GDPRAgreed',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('agreed_at', models.DateTimeField()),
('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
],
),
migrations.CreateModel(
name='PendingGDPRAgree',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('token', models.TextField()),
('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
],
),
migrations.CreateModel(
name='PendingGDPRDelete',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('token', models.TextField()),
('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
],
),
]

View File

@ -0,0 +1,71 @@
from django.contrib.auth.models import User
from django.contrib.auth.signals import user_logged_out
from django.contrib.contenttypes.models import ContentType
from django.contrib.sessions.models import Session
from django.db import models
from django.utils import timezone
from django.core.mail import EmailMultiAlternatives
from django.template.loader import get_template
from django.conf import settings
class GDPRAgreed(models.Model):
user = models.ForeignKey('auth.User', on_delete=models.CASCADE)
agreed_at = models.DateTimeField()
class PendingGDPRAgree(models.Model):
user = models.ForeignKey('auth.User', on_delete=models.CASCADE)
token = models.TextField()
def agree(self):
GDPRAgreed(user=self.user, agreed_at=timezone.now()).save()
self.delete()
def email(self):
html_content = get_template('rugwebsite/email/gdpr_consent.html').render(
{'user': self.user, 'token': self.token, 'url': settings.SITE_URL}
)
text_content = get_template('rugwebsite/email/gdpr_consent.txt').render(
{'user': self.user, 'token': self.token, 'url': settings.SITE_URL}
)
msg = EmailMultiAlternatives(
'Over uw persoonsgegevens',
text_content,
'no-reply@cosmo.service.rug.nl',
[self.user.email])
msg.attach_alternative(html_content, "text/html")
msg.send()
class PendingGDPRDelete(models.Model):
user = models.ForeignKey('auth.User', on_delete=models.CASCADE)
token = models.TextField()
def forget(self, request):
self.user.username = 'deleted_at_{}'.format(timezone.now())
self.user.first_name = ''
self.user.last_name = ''
self.user.email = ''
self.user.is_active = False
self.user.save()
user_logged_out.send(sender=self.user.__class__, request=request, user=self.user)
self.delete()
def email(self):
html_content = get_template('rugwebsite/email/gdpr_delete.html').render(
{'user': self.user, 'token': self.token, 'url': settings.SITE_URL}
)
text_content = get_template('rugwebsite/email/gdpr_delete.txt').render(
{'user': self.user, 'token': self.token, 'url': settings.SITE_URL}
)
msg = EmailMultiAlternatives(
'Verzoek verwijdering persoonsgegevens',
text_content,
'cosmo@rug.nl',
[self.user.email])
msg.attach_alternative(html_content, "text/html")
msg.send(fail_silently=False)

View File

@ -1,4 +1,5 @@
{% load staticfiles %} {% load staticfiles %}
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en" style="background: #fff;"> <html lang="en" style="background: #fff;">
<head> <head>
@ -41,24 +42,30 @@
{% if user.is_authenticated %} {% if user.is_authenticated %}
<li class="rug-nav--meta__item rug-mr-xs"> <li class="rug-nav--meta__item rug-mr-xs">
{% block accountlink %}<a href="#" class=""><span class="rug-icon rug-icon--user rug-mr-xs" aria-hidden="true"></span><span>Welcome {{ user.get_username }}</span></a>{% endblock %} {% block accountlink %}<a href="#" class=""><span class="rug-icon rug-icon--user rug-mr-xs" aria-hidden="true"></span><span>Welcome {{ user.get_username }}</span></a>{% endblock %}
{% comment %}<div class="rug-nav--meta__flyout"> <div class="rug-nav--meta__flyout">
<ul class="rug-list--unstyled"> <ul class="rug-list--unstyled">
<li> <li>
<a href="{% url 'logout' %}?next={{ request.path }}" data-opener="logout" class="js--popup-opener"><span aria-hidden="true" class="rug-icon rug-icon--caret-right rug-mr-xs"></span>Log out</a> <a href="{% url 'logout' %}?next={{ request.path }}" data-opener="logout" class="js--popup-opener"><span aria-hidden="true" class="rug-icon rug-icon--caret-right rug-mr-xs"></span>Log out</a>
</li> </li>
</ul>{% endcomment %} </ul>
</div> </div>
</li> </li>
<li class="rug-nav--meta__item rug-mr-xs">
<a href="{% url 'gdpr' %}" class=""><span class="rug-icon rug-icon--user rug-mr-xs" aria-hidden="true"></span><span>About personal data</span></a>
</li>
{% else %} {% else %}
<li class="rug-nav--meta__item rug-mr-xs"> <li class="rug-nav--meta__item rug-mr-xs">
<a href="{% url 'saml:saml2_auth' %}?provider=RuG" class=""><span class="rug-icon rug-icon--user rug-mr-xs" aria-hidden="true"></span><span>Login via the University of Groningen Single Sign on.</span></a> <a href="{% url 'saml:saml2_auth' %}?provider=RuG" class=""><span class="rug-icon rug-icon--user rug-mr-xs" aria-hidden="true"></span><span>Login via the University of Groningen Single Sign on.</span></a>
</li> </li>
<li class="rug-nav--meta__item rug-mr-xs">
<a href="{% url 'gdpr' %}" class=""><span class="rug-icon rug-icon--user rug-mr-xs" aria-hidden="true"></span><span>About personal data</span></a>
</li>
{% endif %} {% endif %}
</ul> </ul>
</nav> </nav>
</div> </div>
</div> </div>
{% if user.is_authenticated %} {% if user.is_authenticated or shownav %}
<div class="rug-background-menu rug-shadow-box-inset"> <div class="rug-background-menu rug-shadow-box-inset">
<div class="rug-nav-left-white"></div> <div class="rug-nav-left-white"></div>
<div class="rug-nav-center-1600"> <div class="rug-nav-center-1600">

View File

@ -0,0 +1,38 @@
<p>Beste {{ user.first_name }} {{ user.last_name }},</p>
<p>
Omdat vanaf 25 mei aanstaande nieuwe privacy-wetgeving van de EU ingaat, willen wij u informeren over de
persoonsgegevens die wij van u hebben. U heeft in het verleden gebruik gemaakt van
{% block gdpr_title %}Super Awesome Website{% endblock %} door in te loggen met uw centrale RUG personeels-
of studentnummer en wachtwoord. Toen zijn uw RUG e-mailadres, voornaam, achternaam en student- of personeelsnummer
gekopieerd naar onze database. Op die manier kunt u inloggen en gebruik maken van onze website.
</p>
<p>
Samengevat worden de gegevens gebruikt voor authenticatie op onze website en in sommige gevallen voor het
beoordelen van vakgebonden opdrachten die u via onze website maakt. Meer informatie vind u op de volgende pagina.
</p>
<a href="{{ url }}{% url 'gdpr-agree' user.email token %}">{{ url }}{% url 'gdpr-agree' user.email token %}</a>
<p>
Wij willen u vragen voor 25 mei aanstaande toestemming te geven om deze gegevens te bewaren. Doet u dat niet,
dan verdwijnt uw
account op 25 mei. U kunt dan wel opnieuw inloggen, maar dan wordt er een nieuw account aangemaakt en heeft
geen toegang meer tot gegevens die voorheen aan uw account gebonden waren en niet uw persooonsgegevens zijn.
Mogelijk betekent dat ook opdrachten die nog niet officieel beoordeeld zijn, dan niet meer beoordeeld kunnen worden,
omdat niet meer te achterhalen valt wie die heeft uitgevoerd. Mocht u nog wachten op zo'n beoordeling maar wel uw
persoonsgegevens willen verwijderen, dan adviseren wij u eerst akkoord te gaan, maar na de officiele beoordeling uw
persoonsgegevens alsnog te verwijderen. Dat kan eenvoudig via een link op de website.
</p>
<p>
Geeft u wel toestemming dan kunt u later alsnog uw persoonsgegevens verwijderen. <strong>Met de volgende link kunt
u toestemming geven, door op "Toestemming geven" te klikken.</strong>
</p>
<a href="{{ url }}{% url 'gdpr-agree' user.email token %}?agree">{{ url }}{% url 'gdpr-agree' user.email token %}?agree</a>
<p>Met vriendelijke groet,</p>
<p>{% block gdpr_close %}Super Awesome Website{% endblock %}</p>

View File

@ -0,0 +1,35 @@
Beste {{ user.first_name }} {{ user.last_name }},
Omdat vanaf 25 mei aanstaande nieuwe privacy-wetgeving van de EU ingaat, willen wij u informeren over de
persoonsgegevens die wij van u hebben. U heeft in het verleden gebruik gemaakt van
{% block gdpr_title %}Super Awesome Website{% endblock %} door in te loggen met uw centrale RUG personeels-
of studentnummer en wachtwoord. Toen zijn uw RUG e-mailadres, voornaam, achternaam en student- of personeelsnummer
gekopieerd naar onze database. Op die manier kunt u inloggen en gebruik maken van onze website.
Samengevat worden de gegevens gebruikt voor authenticatie op onze website en in sommige gevallen voor het
beoordelen van vakgebonden opdrachten die u via onze website maakt. Meer informatie vind u op de volgende pagina.
{{ url }}{% url 'gdpr-agree' user.email token %}
Wij willen u vragen voor 25 mei aanstaande toestemming te geven om deze gegevens te bewaren. Doet u dat niet,
dan verdwijnt uw account op 25 mei. U kunt dan wel opnieuw inloggen, maar dan wordt er een nieuw account aangemaakt
en heeft geen toegang meer tot gegevens die voorheen aan uw account gebonden waren en niet uw persooonsgegevens zijn.
Mogelijk betekent dat ook opdrachten die nog niet officieel beoordeeld zijn, dan niet meer beoordeeld kunnen worden,
omdat niet meer te achterhalen valt wie die heeft uitgevoerd. Mocht u nog wachten op zo'n beoordeling maar wel uw
persoonsgegevens willen verwijderen, dan adviseren wij u eerst akkoord te gaan, maar na de officiele beoordeling uw
persoonsgegevens alsnog te verwijderen. Dat kan eenvoudig via een link op de website.
Geeft u wel toestemming dan kunt u later alsnog uw persoonsgegevens verwijderen. Met de volgende link geeft
u toestemming.
{{ url }}{% url 'gdpr-agree' user.email token %}?agree
Met vriendelijke groet,
{% block gdpr_close %}Super Awesome Website{% endblock %}

View File

@ -0,0 +1,26 @@
<p>Beste {{ user.first_name }} {{ user.last_name }},</p>
<p>
Op uw verzoek sturen we u een link om uw persoonsgegevens van
{% block gdpr_title %}Super Awesome Website{% endblock %}
te verwijderen. Wanneer u uw persoonsgegevens verwijdert, wordt ook uw personeels- of studentnummer verwijderd.
Dat betekend dat wij geen manier meer hebben om u the authenticeren en u kunt daarna dus niet meer inloggen.
</p>
<p>
Logt u wel opnieuw in, dan worden uw gegevens opnieuw uit de centrale database van de RUG gehaald, en
krijgt u een nieuw en leeg account. In dat geval staan uw persoonsgegevens, namelijk e-mailadres, voornaam,
achternaam en student- of personeelsnummer weer in onze database.
</p>
<p>
Uw wachtwoord wordt door de centrale database van de RUG beheert, daar hebben wij geen toegang toe.
Wij gebruiken dezelfde authenticatie als bijvoorbeeld Nestor, progresswww en my university.
</p>
<p>Gebruik deze link om al uw persoonsgegevens te verwijderen, u kunt niet meer inloggen.</p>
<a href="{{ url }}{% url 'gdpr-delete' user.email token %}">{{ url }}{% url 'gdpr-delete' user.email token %}</a>
<p>Met vriendelijke groet,</p>
<p>{% block gdpr_close %}Super Awesome Website{% endblock %}</p>

View File

@ -0,0 +1,24 @@
Beste {{ user.first_name }} {{ user.last_name }},
Op uw verzoek sturen we u een link om uw persoonsgegevens van {% block gdpr_title %}Super Awesome Website{% endblock %}
te verwijderen. Wanneer u uw persoonsgegevens verwijdert, wordt ook uw personeels- of studentnummer verwijderd.
Dat betekend dat wij geen manier meer hebben om u the authenticeren en u kunt daarna dus niet meer inloggen.
Logt u wel opnieuw in, dan worden uw gegevens opnieuw uit de centrale database van de RUG gehaald, en
krijgt u een nieuw en leeg account. In dat geval staan uw persoonsgegevens, namelijk e-mailadres, voornaam,
achternaam en student- of personeelsnummer weer in onze database.
Uw wachtwoord wordt door de centrale database van de RUG beheert, daar hebben wij geen toegang toe.
Wij gebruiken dezelfde authenticatie als bijvoorbeeld Nestor, progresswww en my university.
Gebruik deze link om al uw persoonsgegevens te verwijderen, u kunt niet meer inloggen.
{{ url }}{% url 'gdpr-delete' user.email token %}
Met vriendelijke groet,
{% block gdpr_close %}Super Awesome Website{% endblock %}

View File

@ -0,0 +1,190 @@
{% extends "rugwebsite/base.html" %}
{% load static %}
{% load bootstrap4 %}
{% block nav %}
<div class="rug-nav-item rug-nav-item-active">
<a href="{% url 'gdpr' %}">GDPR</a>
</div>
{% endblock %}
{% block content %}
<div class="container">
<div class="row">
<div class="col-md-4">
<h1>GDPR</h1>
<p>Privacyverklaring</p>
<br/>
<a href="{% url 'gdpr-request-delete' %}">Verzoek tot verwijderen persoonsgegevens</a>
{% if show_agree_button %}
<br/>
<a href="#" data-toggle="modal" data-target="#gdpr-agree-modal">Toestemming geven</a>
{% endif %}
</div>
<div class="col-md-8">
{% block gdpr_content %}
<h1>Privacyverklaring {% block gdpr_title %}Super Awesome Website{% endblock %}</h1>
<h2>Inleiding</h2>
<p>
De Rijksuniversiteit Groningen (RUG) wil zorgvuldig omgaan met uw persoonsgegevens. Op grond van de
privacywetgeving, die de RUG in acht neemt, is de RUG daar ook verantwoordelijk voor. In deze privacyverklaring
wordt u geïnformeerd over hoe de RUG gegevens van u verwerkt en over de rechten die u hebt. Deze privacyverklaring
is een aanvulling op de
<a href="https://www.rug.nl/language-centre/about-us/quality-assurance/bescherming-persoonsgegevens.pdf">
Regeling Bescherming Persoonsgegevens Studenten en Personeel
</a>
van de RUG. Bij tegenstrijdigheid prevaleert deze privacyverklaring.
</p>
<h2>Contactgegevens verantwoordelijke</h2>
<p>U kunt met uw vragen en verzoeken bij de RUG terecht. U kunt terecht bij:</p>
<p>Rijksuniversiteit Groningen</p>
<p>Postadres: Postbus 72 9700 AB Groningen</p>
<p>E-mail: privacy@rug.nl</p>
<p>Contactpersoon {% block gdpr_c_title %}{% endblock %}: {% block gdpr_contact %}{% endblock %}</p>
<p>Functionaris voor de Gegevensbescherming: Arjen Deenen</p>
<h2>Doel en grondslag verwerking</h2>
<p>
De RUG verwerkt uw persoonsgegevens in het kader van educatie. Het bijhouden van uw
{% block gdpr_content_summary %}voornaam, achternaam, e-mailadres en personeels- of studentnummer{% endblock %},
dient daarbij verschillende doelen:
</p>
{% block gdpr_goals %}
<ul>
<li>educatie, de beoordeling van opdrachten voor vakken waarvoor u de workbench nodig heeft,</li>
<li>authenticatie, zodat u kunt inloggen op de workbench, uw annotaties kunt zien of aanpassen wanneer
dat gepast is.</li>
</ul>
{% endblock gdpr_goals %}
<p>
Verder worden de annotaties die u met de workbench maakt opgeslagen en gekoppeld aan deze persoonsgegevens.
Als vergeten wilt worden, kunt uw persoonsgegevens <a href="{% url 'gdpr-request-delete' %}">hier</a> verwijderen. U ontvangt
een e-mail met een link waarop u moet klikken. Dan worden uw personeels- of studentnummer, ur voor- en achternaam
en uw e-mailadres verwijdert en kunt u geen gebruik meer maken van de dienst.
</p>
<p>
Samengevat wil de RUG met deze website gegevens verzamelen voor wetenschappelijk onderzoek. Het realiseren van
deze doelen is te rechtvaardigen op basis van de volgende grondslagen
</p>
{% block gdpr_grondslagen %}
<ul>
<li>ondubbelzinnige toestemming,</li>
<li>noodzakelijk voor uitvoering overeenkomst, of</li>
<li>noodzakelijk voor invulling publiekrechtelijke taak (bij bestuursorgaan).</li>
</ul>
{% endblock gdpr_grondslagen %}
<h2>Verwerkte persoonsgegevens</h2>
<p>De RUG verwerkt in het kader van educatie de volgende persoonsgegevens van u:</p>
<ul>
<li>Voor- en achternaam, om u eenvoudig te kunnen identificeren in andere administraties,</li>
<li>e-mailadres, om contact met u op te kunnen nemen,</li>
<li>personeels- of student-nummer, om u eenduidig te kunnen koppelen aan bijvoorbeeld een cijferlijst en om het
mogelijk te maken u in te laten loggen.</li>
</ul>
<p>
Uw wachtwoord wordt op geen enkele manier door ons opgeslagen of verwerkt, voor authenticatie gebruiken
wij de algemene aucount registratie van de RUG, die wordt beheerd door de afdeling Identity and Access Management
(IAM) van de RUG.
</p>
<h2>Ontvangers van uw persoonsgegevens</h2>
<p>
Binnen de organisatie van de RUG worden uw persoonsgegevens uitsluitend verwerkt door de personen voor wie dat
noodzakelijk is in het kader van het uitzetten en houden van educatie en onderzoek.
</p>
<p>
Voor het opzetten en uitvoeren van de Pictures-And-Text workbench schakelt de RUG geen externe partner (verwerker)
in. Alle geautomatiseerde verwerking vindt plaats binnen de RUG bij het Centrum voor Informatietechnologie.
</p>
<h2>Bewaartermijnen</h2>
<p>
De RUG bewaart uw persoonsgegevens totdat u een verwijderdverzoek indient. Dan worden uw voornaam,
achternaam, student- of personeelsnummer en e-mailadres verwijderd, maar niet de annotaties die u heeft
toegevoegd, omdat dit geen persoonsgegevens betreft.
</p>
<p>
U kunt <a href="{% url 'gdpr-request-delete' %}">hier</a> een verwijderverzoek indienen. Dat gaat volledig
eletronisch, niemand wordt op de hoogte gesteld van het verzoek en uw verzoek hoeft niet handmatig
goedgekeurd te worden.
<p>
Houdt u er rekening mee dat de gegevens nodig zijn voor het behalen van cijfers, mocht u verwijdering eisen
voordat uw werk beoordeeld is, dan kunt u mogelijk uw vakken niet met succes afsluiten.
</p>
<h2>Uw rechten</h2>
<p>
U hebt op grond van de privacywetgeving diverse rechten. U kunt voor de uitoefening van uw rechten contact opnemen
met de RUG. Uw verzoeken worden binnen een maand na ontvangst beoordeeld en afgehandeld. Voor behandeling wordt
vastgesteld dat het verzoek is ingediend door een bevoegd persoon en dat het legitiem is. Daarom kan om uw
legitimatie worden gevraagd voordat het verzoek in behandeling wordt genomen.
</p>
<p>
U hebt het recht te verzoeken om een overzicht van de over u verwerkte persoonsgegevens en de verwerkingen daarvan.
Als u vindt dat uw persoonsgegevens onjuist zijn of als u niet langer wilt dat uw gegevens worden verwerkt, kunt u
vragen om deze gegevens aan te passen of om verwerking van uw persoonsgegevens te stoppen en deze te verwijderen.
U hebt in bepaalde gevallen ook recht op een afschrift van uw persoonsgegevens in een bruikbaar formaat. Om uw
verzoek te beoordelen en af te handelen, worden vanzelfsprekend uw persoonsgegevens verwerkt.
</p>
<p>
Naast het feit dat u bij de RUG terecht kunt met uw vragen, verzoeken en klachten, hebt u het recht om een klacht
in te dienen bij de toezichthoudende autoriteit. Dit is in Nederland de Autoriteit Persoonsgegevens.
</p>
<h2>Veranderingen in deze privacyverklaring</h2>
<p>
De RUG kan deze privacyverklaring wijzigen. Aanleiding hiervoor kan zijn: (wijziging van)wet- en regelgeving,
wijziging in het overkoepelende privacybeleid van de RUG en voortschrijden van de techniek. Uiteraard wordt u
hiervan tijdig op de hoogte gesteld.
</p>
{% endblock gdpr_content %}
</div>
</div>
</div>
{% if show_agree_button %}
<div class="modal fade" tabindex="-1" role="dialog" id="gdpr-agree-modal">
<div class="modal-dialog" role="gdpr-agree">
<div class="modal-content">
<div class="modal-header">
<h4 class="modal-title">Gaat u akkoord?</p>
</div>
<div class="modal-body">
Gaat u akoord met het opslaan van uw persoonsgegevens volgens de privacyverklaring?
</div>
<div class="modal-footer">
<button type="button" class="btn btn-danger" data-dismiss="modal">Nee</button>
<a href="{% url 'gdpr-agree' email token %}?agree" class="btn btn-success">Ja</a>
</div>
</div>
</div>
</div>
{% endif %}
{% endblock content%}

View File

@ -0,0 +1,24 @@
{% extends "rugwebsite/base.html" %}
{% load static %}
{% block content %}
<h1>Hartelijk dank!</h1>
<p>
{% if already_agreed %}
U was al eerder akoord gegaan.<br/>
<br/>
Eventueel kunt u <a href="{% url 'gdpr-request-delete' %}">hier</a> een verwijder verzoek indienen.
{% elif token_not_found %}
Er ging iets mis, neem contact op met de Data Protection Officer van de RUG. Excuses voor het ongemak.
<br/>
Eventueel kunt u <a href="{% url 'gdpr-request-delete' %}">hier</a> een verwijder verzoek indienen.
{% else %}
We zullen uw persoonsgegevens zorgvuldig bewaren. Mocht u in de toekomst van gedachte veranderen, dan kunt u ze
<a href="{% url 'gdpr-request-delete' %}">hier</a>
verwijderen.
{% endif %}
</p>
{% endblock content %}

View File

@ -0,0 +1,14 @@
{% extends "rugwebsite/base.html" %}
{% load static %}
{% block content %}
<h1>Uw persoonsgegevens zijn verwijderd</h1>
<p>
Uw versoonsgegevens zijn verwijdert. Als u opnieuw inlogt, worden uw gegevens opnieuw opgehaald uit de centrale
RUG administratie en krijgt u een nieuw account.
</p>
{% endblock content %}

View File

@ -0,0 +1,38 @@
{% extends "rugwebsite/base.html" %}
{% load static %}
{% load bootstrap4 %}
{% block content %}
<div class="container">
<div class="row">
<div class="col-md-4">
<h1>GDPR</h1>
<p>Persoonsgegevens verwijderen</p>
<br/>
</div>
<div class="col-md-8">
<h1>Verzoek tot verwijderen persoonsgegevens</h1>
<p>
Vul uw e-mail adres in, wij sturen u een e-mail met een link waarmee uw persoonsgegevens verwijderd kunnen worden.
</p>
<form action="{% url 'gdpr-request-delete' %}" method="post" accept-charset="utf-8" >
{% csrf_token %}
{% bootstrap_form form %}
<button class="btn btn-default" type="submit">Verzoek indienen</button>
</form>
</div>
</div>
</div>
{% endblock content%}
{% block nav %}
<div class="rug-nav-item">
<a href="{% url 'gdpr' %}">GDPR</a>
</div>
<div class="rug-nav-item rug-nav-item-active">
<a href="{% url 'gdpr-request-delete' %}">Verwijderverzoek</a>
</div>
{% endblock %}

View File

@ -0,0 +1,26 @@
{% extends "rugwebsite/base.html" %}
{% load static %}
{% block nav %}
<div class="rug-nav-item">
<a href="{% url 'gdpr' %}">GDPR</a>
</div>
<div class="rug-nav-item rug-nav-item-active">
<a href="{% url 'gdpr-request-delete' %}">Verwijderverzoek</a>
</div>
{% endblock %}
{% block content %}
<h1>Verzoek tot verwijderen persoonsgegevens</h1>
<p>
{% if found %}
We hebben een e-mail verstuurd waarmee u uw persoonsgegevens kunt verwijderen.
{% else %}
We hebben geen account met dat adres, probeer het nogmaals. <br/>
<a href="{% url 'gdpr-request-delete' %}">Nogmaals proberen</a>.
{% endif %}
</p>
{% endblock content %}

View File

@ -1,9 +1,10 @@
from django.conf.urls import include, url from django.conf.urls import include, url
import django_saml2_pro_auth.urls as saml_urls import django_saml2_pro_auth.urls as saml_urls
from rugwebsite.views import home from rugwebsite.views import home, gdpr, request_gdpr_delete
urlpatterns = [ urlpatterns = [
url(r'gdpr/$', gdpr, name='gdpr'),
url(r'gdpr-forget-me/$', request_gdpr_delete, name='gdpr-forget-me'),
url(r'', include(saml_urls, namespace='saml')), url(r'', include(saml_urls, namespace='saml')),
url(r'$', home), url(r'$', home),
] ]

View File

@ -1,8 +1,79 @@
from django.contrib.auth.decorators import login_required
from django.contrib.auth.models import User
from django.shortcuts import render from django.shortcuts import render
from rugwebsite.forms import RequestGDPRDelete
from rugwebsite.models import PendingGDPRAgree, GDPRAgreed, PendingGDPRDelete
from django.utils.crypto import get_random_string
def home(request): def home(request):
return render(request, 'rugwebsite/home.html', {'shownav': True})
return render(request, 'rugwebsite/home.html', { def gdpr(request):
return render(request, 'rugwebsite/gdpr.html', {'show_agree_button': False, 'shownav': True})
})
@login_required
def gdpr_ask_agreement(request):
if not request.user.is_superuser:
raise PermissionError()
for user in User.objects.filter(username='herbert').all():
token = get_random_string(length=32)
pending = PendingGDPRAgree(user=user, token=token)
pending.save()
pending.email()
return render(request, 'rugwebsite/gdpr.html', {'show_agree_button': False, 'shownav': True})
def gdpr_request_delete(request):
if request.method == 'POST':
form = RequestGDPRDelete(request.POST)
if form.is_valid():
users = list(User.objects.filter(email=form.cleaned_data['email']).all())
for user in users:
token = get_random_string(length=32)
pending = PendingGDPRDelete(user=user, token=token)
pending.save()
pending.email()
return render(request, 'rugwebsite/gdpr_request_delete_successful.html', {'shownav': True, 'found': len(users) > 0})
else:
form = RequestGDPRDelete()
return render(request, 'rugwebsite/gdpr_request_delete.html', {'form': form, 'shownav': True})
def gdpr_delete(request, email, token):
pending = list(PendingGDPRDelete.objects.filter(user__email=email, token=token).all())
if len(pending) > 0:
for pending in pending:
pending.forget(request)
return render(request, 'rugwebsite/gdpr_delete.html', {'deleted': True, 'shownav': True})
return render(request, 'rugwebsite/gdpr_delete.html', {'deleted': False, 'shownav': True})
def gdpr_agree(request, email, token):
if 'agree' not in request.GET:
return render(request, 'rugwebsite/gdpr.html', {'show_agree_button': True, 'shownav': True, 'email': email,
'token': token})
result = {
'already_agreed': GDPRAgreed.objects.filter(user__email=email).exists(),
'show_agree_buttom': False,
'shownav': True
}
if not result['already_agreed']:
pending = list(PendingGDPRAgree.objects.filter(token=token, user__email=email).all())
if len(pending) == 1:
pending[0].agree()
else:
if GDPRAgreed.objects.filter(user__email=email).exists():
result['already_agreed'] = True
else:
result['token_not_found'] = True
return render(request, 'rugwebsite/gdpr_agree_success.html', result, {'shownav': True})