diff --git a/rugwebsite/__init__.py b/rugwebsite/__init__.py index 944ab81..0cc076c 100644 --- a/rugwebsite/__init__.py +++ b/rugwebsite/__init__.py @@ -1 +1 @@ -__version__ = '0.1.28' \ No newline at end of file +__version__ = '0.1.29' \ No newline at end of file diff --git a/rugwebsite/__pycache__/models.cpython-35.pyc b/rugwebsite/__pycache__/models.cpython-35.pyc index ec35209..26f5036 100644 Binary files a/rugwebsite/__pycache__/models.cpython-35.pyc and b/rugwebsite/__pycache__/models.cpython-35.pyc differ diff --git a/rugwebsite/__pycache__/urls.cpython-35.pyc b/rugwebsite/__pycache__/urls.cpython-35.pyc index c839a1a..bb85c7c 100644 Binary files a/rugwebsite/__pycache__/urls.cpython-35.pyc and b/rugwebsite/__pycache__/urls.cpython-35.pyc differ diff --git a/rugwebsite/__pycache__/views.cpython-35.pyc b/rugwebsite/__pycache__/views.cpython-35.pyc index c8e1905..51a57b7 100644 Binary files a/rugwebsite/__pycache__/views.cpython-35.pyc and b/rugwebsite/__pycache__/views.cpython-35.pyc differ diff --git a/rugwebsite/forms.py b/rugwebsite/forms.py new file mode 100755 index 0000000..833bfe4 --- /dev/null +++ b/rugwebsite/forms.py @@ -0,0 +1,6 @@ +from django import forms + + +class RequestGDPRDelete(forms.Form): + email = forms.EmailField(widget=forms.EmailInput) + diff --git a/rugwebsite/migrations/0001_initial.py b/rugwebsite/migrations/0001_initial.py new file mode 100644 index 0000000..484e5af --- /dev/null +++ b/rugwebsite/migrations/0001_initial.py @@ -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)), + ], + ), + ] diff --git a/rugwebsite/models.py b/rugwebsite/models.py index e69de29..85fc5be 100755 --- a/rugwebsite/models.py +++ b/rugwebsite/models.py @@ -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) diff --git a/rugwebsite/templates/rugwebsite/base.html b/rugwebsite/templates/rugwebsite/base.html index e8d120f..ee48ff5 100755 --- a/rugwebsite/templates/rugwebsite/base.html +++ b/rugwebsite/templates/rugwebsite/base.html @@ -1,4 +1,5 @@ {% load staticfiles %} + @@ -41,24 +42,30 @@ {% if user.is_authenticated %}
  • {% block accountlink %}Welcome {{ user.get_username }}{% endblock %} - {% comment %}
    +
    {% endcomment %} +
  • +
  • + About personal data +
  • {% else %}
  • Login via the University of Groningen Single Sign on.
  • +
  • + About personal data +
  • {% endif %} - {% if user.is_authenticated %} + {% if user.is_authenticated or shownav %}
    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 %} +
    + GDPR +
    +{% endblock %} + + +{% block content %} +
    +
    +
    +

    GDPR

    +

    Privacyverklaring

    +
    + Verzoek tot verwijderen persoonsgegevens + {% if show_agree_button %} +
    + Toestemming geven + {% endif %} + +
    +
    + {% 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 %} + +{% 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. +

    +
    + {% csrf_token %} + {% bootstrap_form form %} + +
    +
    +
    +
    + +{% endblock content%} + +{% block nav %} +
    + GDPR +
    + +{% 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 %} +
    + GDPR +
    + +{% 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})