gdpr added
This commit is contained in:
		| @@ -1 +1 @@ | |||||||
| __version__ = '0.1.28' | __version__ = '0.1.29' | ||||||
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										6
									
								
								rugwebsite/forms.py
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										6
									
								
								rugwebsite/forms.py
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,6 @@ | |||||||
|  | from django import forms | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class RequestGDPRDelete(forms.Form): | ||||||
|  |     email = forms.EmailField(widget=forms.EmailInput) | ||||||
|  |  | ||||||
							
								
								
									
										43
									
								
								rugwebsite/migrations/0001_initial.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										43
									
								
								rugwebsite/migrations/0001_initial.py
									
									
									
									
									
										Normal 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)), | ||||||
|  |             ], | ||||||
|  |         ), | ||||||
|  |     ] | ||||||
| @@ -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) | ||||||
|   | |||||||
| @@ -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"> | ||||||
|   | |||||||
							
								
								
									
										38
									
								
								rugwebsite/templates/rugwebsite/email/gdpr_consent.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								rugwebsite/templates/rugwebsite/email/gdpr_consent.html
									
									
									
									
									
										Normal 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> | ||||||
							
								
								
									
										35
									
								
								rugwebsite/templates/rugwebsite/email/gdpr_consent.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								rugwebsite/templates/rugwebsite/email/gdpr_consent.txt
									
									
									
									
									
										Normal 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 %} | ||||||
							
								
								
									
										26
									
								
								rugwebsite/templates/rugwebsite/email/gdpr_delete.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								rugwebsite/templates/rugwebsite/email/gdpr_delete.html
									
									
									
									
									
										Normal 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> | ||||||
							
								
								
									
										24
									
								
								rugwebsite/templates/rugwebsite/email/gdpr_delete.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								rugwebsite/templates/rugwebsite/email/gdpr_delete.txt
									
									
									
									
									
										Normal 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 %} | ||||||
							
								
								
									
										190
									
								
								rugwebsite/templates/rugwebsite/gdpr.html
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										190
									
								
								rugwebsite/templates/rugwebsite/gdpr.html
									
									
									
									
									
										Executable 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%} | ||||||
							
								
								
									
										24
									
								
								rugwebsite/templates/rugwebsite/gdpr_agree_success.html
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										24
									
								
								rugwebsite/templates/rugwebsite/gdpr_agree_success.html
									
									
									
									
									
										Executable 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 %} | ||||||
							
								
								
									
										14
									
								
								rugwebsite/templates/rugwebsite/gdpr_delete.html
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										14
									
								
								rugwebsite/templates/rugwebsite/gdpr_delete.html
									
									
									
									
									
										Executable 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 %} | ||||||
							
								
								
									
										38
									
								
								rugwebsite/templates/rugwebsite/gdpr_request_delete.html
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										38
									
								
								rugwebsite/templates/rugwebsite/gdpr_request_delete.html
									
									
									
									
									
										Executable 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 %} | ||||||
							
								
								
									
										26
									
								
								rugwebsite/templates/rugwebsite/gdpr_request_delete_successful.html
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										26
									
								
								rugwebsite/templates/rugwebsite/gdpr_request_delete_successful.html
									
									
									
									
									
										Executable 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 %} | ||||||
| @@ -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), | ||||||
| ] | ] | ||||||
|   | |||||||
| @@ -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}) | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user