diff --git a/rugwebsite/templates/rugwebsite/email/gdpr_consent.html b/rugwebsite/templates/rugwebsite/email/gdpr_consent.html
new file mode 100644
index 0000000..9b2ffaa
--- /dev/null
+++ b/rugwebsite/templates/rugwebsite/email/gdpr_consent.html
@@ -0,0 +1,38 @@
+
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 kunt
+ u toestemming geven, door op "Toestemming geven" te klikken.
+
+
+
{{ url }}{% url 'gdpr-agree' user.email token %}?agree
+
+
Met vriendelijke groet,
+
{% block gdpr_close %}Super Awesome Website{% endblock %}
diff --git a/rugwebsite/templates/rugwebsite/email/gdpr_consent.txt b/rugwebsite/templates/rugwebsite/email/gdpr_consent.txt
new file mode 100644
index 0000000..79a6469
--- /dev/null
+++ b/rugwebsite/templates/rugwebsite/email/gdpr_consent.txt
@@ -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 %}
diff --git a/rugwebsite/templates/rugwebsite/email/gdpr_delete.html b/rugwebsite/templates/rugwebsite/email/gdpr_delete.html
new file mode 100644
index 0000000..03728f7
--- /dev/null
+++ b/rugwebsite/templates/rugwebsite/email/gdpr_delete.html
@@ -0,0 +1,26 @@
+
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 %}
\ No newline at end of file
diff --git a/rugwebsite/templates/rugwebsite/email/gdpr_delete.txt b/rugwebsite/templates/rugwebsite/email/gdpr_delete.txt
new file mode 100644
index 0000000..0ed9a9c
--- /dev/null
+++ b/rugwebsite/templates/rugwebsite/email/gdpr_delete.txt
@@ -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 %}
\ No newline at end of file
diff --git a/rugwebsite/templates/rugwebsite/gdpr.html b/rugwebsite/templates/rugwebsite/gdpr.html
new file mode 100755
index 0000000..8c843f0
--- /dev/null
+++ b/rugwebsite/templates/rugwebsite/gdpr.html
@@ -0,0 +1,190 @@
+{% extends "rugwebsite/base.html" %}
+
+{% load static %}
+{% load bootstrap4 %}
+
+{% block nav %}
+
+{% endblock %}
+
+
+{% block content %}
+
+
+
+
+ {% block gdpr_content %}
+
Privacyverklaring {% block gdpr_title %}Super Awesome Website{% endblock %}
+
+
Inleiding
+
+
+ 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
+
+ ‘Regeling Bescherming Persoonsgegevens Studenten en Personeel’
+
+ van de RUG. Bij tegenstrijdigheid prevaleert deze privacyverklaring.
+
+
+
Contactgegevens verantwoordelijke
+
+
U kunt met uw vragen en verzoeken bij de RUG terecht. U kunt terecht bij:
+
+
Rijksuniversiteit Groningen
+
Postadres: Postbus 72 9700 AB Groningen
+
E-mail: privacy@rug.nl
+
Contactpersoon {% block gdpr_c_title %}{% endblock %}: {% block gdpr_contact %}{% endblock %}
+
Functionaris voor de Gegevensbescherming: Arjen Deenen
+
+
+
Doel en grondslag verwerking
+
+
+ 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:
+
+
+ {% block gdpr_goals %}
+
+ - educatie, de beoordeling van opdrachten voor vakken waarvoor u de workbench nodig heeft,
+ - authenticatie, zodat u kunt inloggen op de workbench, uw annotaties kunt zien of aanpassen wanneer
+ dat gepast is.
+
+ {% endblock gdpr_goals %}
+
+
+ Verder worden de annotaties die u met de workbench maakt opgeslagen en gekoppeld aan deze persoonsgegevens.
+ Als vergeten wilt worden, kunt uw persoonsgegevens hier 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.
+
+
+
+ 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
+
+
+ {% block gdpr_grondslagen %}
+
+ - ondubbelzinnige toestemming,
+ - noodzakelijk voor uitvoering overeenkomst, of
+ - noodzakelijk voor invulling publiekrechtelijke taak (bij bestuursorgaan).
+
+ {% endblock gdpr_grondslagen %}
+
+
Verwerkte persoonsgegevens
+
+
+
De RUG verwerkt in het kader van educatie de volgende persoonsgegevens van u:
+
+ - Voor- en achternaam, om u eenvoudig te kunnen identificeren in andere administraties,
+ - e-mailadres, om contact met u op te kunnen nemen,
+ - 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.
+
+
+
+ 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.
+
+
+
Ontvangers van uw persoonsgegevens
+
+
+ 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.
+
+
+
+ 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.
+
+
+
Bewaartermijnen
+
+
+ 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.
+
+
+
+ U kunt hier 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.
+
+ 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.
+
+
+
Uw rechten
+
+
+ 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.
+
+
+
+ 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.
+
+
+
+ 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.
+
+
+
Veranderingen in deze privacyverklaring
+
+
+ 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.
+
+ {% endblock gdpr_content %}
+
+
+
+
+{% if show_agree_button %}
+
+
+
+
+
+ Gaat u akoord met het opslaan van uw persoonsgegevens volgens de privacyverklaring?
+
+
+
+
+
+{% endif %}
+
+{% endblock content%}
\ No newline at end of file
diff --git a/rugwebsite/templates/rugwebsite/gdpr_agree_success.html b/rugwebsite/templates/rugwebsite/gdpr_agree_success.html
new file mode 100755
index 0000000..561f721
--- /dev/null
+++ b/rugwebsite/templates/rugwebsite/gdpr_agree_success.html
@@ -0,0 +1,24 @@
+{% extends "rugwebsite/base.html" %}
+
+{% load static %}
+
+
+{% block content %}
+
Hartelijk dank!
+
+
+{% if already_agreed %}
+ U was al eerder akoord gegaan.
+
+ Eventueel kunt u hier 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.
+
+ Eventueel kunt u hier een verwijder verzoek indienen.
+{% else %}
+ We zullen uw persoonsgegevens zorgvuldig bewaren. Mocht u in de toekomst van gedachte veranderen, dan kunt u ze
+ hier
+ verwijderen.
+{% endif %}
+
+{% endblock content %}
diff --git a/rugwebsite/templates/rugwebsite/gdpr_delete.html b/rugwebsite/templates/rugwebsite/gdpr_delete.html
new file mode 100755
index 0000000..238a0f9
--- /dev/null
+++ b/rugwebsite/templates/rugwebsite/gdpr_delete.html
@@ -0,0 +1,14 @@
+{% extends "rugwebsite/base.html" %}
+
+{% load static %}
+
+
+{% block content %}
+
Uw persoonsgegevens zijn verwijderd
+
+
+ Uw versoonsgegevens zijn verwijdert. Als u opnieuw inlogt, worden uw gegevens opnieuw opgehaald uit de centrale
+ RUG administratie en krijgt u een nieuw account.
+
+
+{% endblock content %}
diff --git a/rugwebsite/templates/rugwebsite/gdpr_request_delete.html b/rugwebsite/templates/rugwebsite/gdpr_request_delete.html
new file mode 100755
index 0000000..e1425f6
--- /dev/null
+++ b/rugwebsite/templates/rugwebsite/gdpr_request_delete.html
@@ -0,0 +1,38 @@
+{% extends "rugwebsite/base.html" %}
+
+{% load static %}
+{% load bootstrap4 %}
+
+
+{% block content %}
+
+
+
+
GDPR
+
Persoonsgegevens verwijderen
+
+
+
+
Verzoek tot verwijderen persoonsgegevens
+
+ Vul uw e-mail adres in, wij sturen u een e-mail met een link waarmee uw persoonsgegevens verwijderd kunnen worden.
+
+
+
+
+
+
+{% endblock content%}
+
+{% block nav %}
+
+
+{% endblock %}
diff --git a/rugwebsite/templates/rugwebsite/gdpr_request_delete_successful.html b/rugwebsite/templates/rugwebsite/gdpr_request_delete_successful.html
new file mode 100755
index 0000000..3a0f1c2
--- /dev/null
+++ b/rugwebsite/templates/rugwebsite/gdpr_request_delete_successful.html
@@ -0,0 +1,26 @@
+{% extends "rugwebsite/base.html" %}
+
+{% load static %}
+
+{% block nav %}
+
+
+{% endblock %}
+
+{% block content %}
+
Verzoek tot verwijderen persoonsgegevens
+
+
+{% 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.
+ Nogmaals proberen.
+{% endif %}
+
+
+{% endblock content %}
diff --git a/rugwebsite/urls.py b/rugwebsite/urls.py
index 5b05bd2..751c549 100755
--- a/rugwebsite/urls.py
+++ b/rugwebsite/urls.py
@@ -1,9 +1,10 @@
from django.conf.urls import include, url
import django_saml2_pro_auth.urls as saml_urls
-from rugwebsite.views import home
-
+from rugwebsite.views import home, gdpr, request_gdpr_delete
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'$', home),
]
diff --git a/rugwebsite/views.py b/rugwebsite/views.py
index 157f402..59a8f9b 100644
--- a/rugwebsite/views.py
+++ b/rugwebsite/views.py
@@ -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 rugwebsite.forms import RequestGDPRDelete
+from rugwebsite.models import PendingGDPRAgree, GDPRAgreed, PendingGDPRDelete
+
+from django.utils.crypto import get_random_string
+
+
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})