From ad71e8ff0d95bda5548e4bbdbe2a37ebc16ab7d9 Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Wed, 7 Mar 2018 13:55:25 +0100 Subject: [PATCH 1/3] implemented positive opt in for GDPR --- rowers/middleware.py | 25 ++++++++++++++++ rowers/models.py | 2 ++ rowers/templates/gdpr_optin.html | 49 ++++++++++++++++++++++++++++++++ rowers/urls.py | 4 ++- rowers/views.py | 27 ++++++++++++++++++ rowsandall_app/settings.py | 1 + 6 files changed, 107 insertions(+), 1 deletion(-) create mode 100644 rowers/templates/gdpr_optin.html diff --git a/rowers/middleware.py b/rowers/middleware.py index e9c90956..c87c6c44 100644 --- a/rowers/middleware.py +++ b/rowers/middleware.py @@ -71,5 +71,30 @@ class PowerTimeFitnessMetricMiddleWare(object): result = do_update(request.user,mode='rower') result = do_update(request.user,mode='water') +from django.shortcuts import redirect +allowed_paths = [ + '/rowers/me/delete', + '/', + '/logout', + '/logout/', + '/rowers/me/gdpr-optin/', + '/rowers/me/gdpr-optin-confirm/', + '/rowers/me/gdpr-optin', + '/rowers/me/gdpr-optin-confirm' + '/rowers/exportallworkouts/', + '/rowers/exportallworkouts', +] + +class GDPRMiddleWare(object): + def process_request(self, request): + if request.user.is_authenticated() and request.path not in allowed_paths: + r = getrower(request.user) + nexturl = request.path + if 'optin' in nexturl: + nexturl = '/rowers/list-workouts' + if not r.gdproptin: + return redirect( + '/rowers/me/gdpr-optin/?next=%s' % nexturl + ) diff --git a/rowers/models.py b/rowers/models.py index 99117e5a..f9d89468 100644 --- a/rowers/models.py +++ b/rowers/models.py @@ -468,6 +468,8 @@ class Rower(models.Model): ('Yoga','Yoga'), ) user = models.OneToOneField(User) + gdproptin = models.BooleanField(default=False) + gdproptindate = models.DateTimeField(blank=True,null=True) # Heart Rate Zone data max = models.IntegerField(default=192,verbose_name="Max Heart Rate") diff --git a/rowers/templates/gdpr_optin.html b/rowers/templates/gdpr_optin.html new file mode 100644 index 00000000..532dd59f --- /dev/null +++ b/rowers/templates/gdpr_optin.html @@ -0,0 +1,49 @@ +{% extends "base.html" %} +{% load staticfiles %} +{% load rowerfilters %} + +{% block title %}GDPR Opt-In{% endblock %} + +{% block content %} +
+

GDPR Opt-In

+
+

+ + To comply with the European Union General Data Protection Regulation, + we need to record your consent to use personal data on this website. + Please take some time to review our data policies. If you agree and + opt in, click the green button at the bottom to be taken to the site. + If you do not agree, please use the red button to delete your + account. This will irreversibly delete all your data on rowsandall.com + and remove your account. + +

+ +

+ This paragraph will contain the data policy +

+ +

+

+

+ + +
+ {% csrf_token %} + +
+ + +
+
+ +
+ +{% endblock %} diff --git a/rowers/urls.py b/rowers/urls.py index c642adc2..71c4b6fd 100644 --- a/rowers/urls.py +++ b/rowers/urls.py @@ -121,7 +121,7 @@ urlpatterns = [ url(r'^400/$', TemplateView.as_view(template_name='400.html'),name='400'), url(r'^403/$', TemplateView.as_view(template_name='403.html'),name='403'), url(r'^imports/$', TemplateView.as_view(template_name='imports.html'), name='imports'), - url(r'^exportallworkouts$',views.workouts_summaries_email_view), + url(r'^exportallworkouts/?$',views.workouts_summaries_email_view), url(r'^agegroupcp/(?P\d+)$',views.agegroupcpview), url(r'^agegroupcp/(?P\d+)/(?P\d+)$',views.agegroupcpview), url(r'^ajax_agegroup/(?P\d+)/(?P\w+.*)/(?P\w+.*)/(?P\d+)$', @@ -338,6 +338,8 @@ urlpatterns = [ url(r'^user-multiflex-data$',views.multiflex_data), url(r'^me/deactivate$',views.deactivate_user), url(r'^me/delete$',views.remove_user), + url(r'^me/gdpr-optin-confirm/?$',views.user_gdpr_confirm), + url(r'^me/gdpr-optin/?$',views.user_gdpr_optin), url(r'^me/teams/$',views.rower_teams_view), url(r'^me/calcdps/$',views.rower_calcdps_view), url(r'^me/exportsettings/$',views.rower_exportsettings_view), diff --git a/rowers/views.py b/rowers/views.py index cda3a8e2..c341e611 100644 --- a/rowers/views.py +++ b/rowers/views.py @@ -594,6 +594,33 @@ def deactivate_user(request): else: raise PermissionDenied +@login_required() +def user_gdpr_optin(request): + r = getrower(request.user) + r.gdproptin = False + r.gdproptindate = None + r.save() + nexturl = request.GET.get('next','/rowers/list-workouts/') + if r.gdproptin: + return HttpResponseRedirect(nexturl) + + return render(request,'gdpr_optin.html',{ + "next": nexturl + }) + +@login_required() +def user_gdpr_confirm(request): + r = getrower(request.user) + r.gdproptin = True + r.gdproptindate = timezone.now() + r.save() + + nexturl = request.GET.get('next','/rowers/list-workouts/') + + return HttpResponseRedirect(nexturl) + + + @login_required() def remove_user(request): pk = request.user.id diff --git a/rowsandall_app/settings.py b/rowsandall_app/settings.py index 052f2af4..e8d1f0b9 100644 --- a/rowsandall_app/settings.py +++ b/rowsandall_app/settings.py @@ -94,6 +94,7 @@ MIDDLEWARE_CLASSES = [ 'async_messages.middleware.AsyncMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', 'tz_detect.middleware.TimezoneMiddleware', + 'rowers.middleware.GDPRMiddleWare', 'rowers.middleware.PowerTimeFitnessMetricMiddleWare', ] From 1a87d72a8d5ac51755245a2707c7d6dc57d1611e Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Wed, 7 Mar 2018 15:59:42 +0100 Subject: [PATCH 2/3] removing google analytics and clicky --- rowers/tasks.py | 18 ++++++++++++++++++ rowers/templates/502.html | 18 ------------------ rowers/views.py | 12 ++++++++++-- rowsandall_app/settings.py | 2 +- templates/basebase.html | 4 +--- 5 files changed, 30 insertions(+), 24 deletions(-) diff --git a/rowers/tasks.py b/rowers/tasks.py index aed1bf59..29619a05 100644 --- a/rowers/tasks.py +++ b/rowers/tasks.py @@ -385,6 +385,24 @@ def handle_sendemail_hard(workoutid, useremail, return 1 +# send email when user deletes account +@app.task +def handle_sendemail_userdeleted(name, email, debug=False, **kwargs): + fullemail = 'roosendaalsander@gmail.com' + subject = 'User account deleted' + message = 'Sander,\n\n' + message += 'The user {name} ({email}) has just deleted his account'.format( + name=name, + email=email + ) + email = EmailMessage(subject,message, + 'Rowsandall ', + [fullemail]) + + res = email.send() + + return 1 + # send email to me when an unrecognized file is uploaded @app.task def handle_sendemail_unrecognized(unrecognizedfile, useremail, diff --git a/rowers/templates/502.html b/rowers/templates/502.html index bbf6f82f..edd8094e 100644 --- a/rowers/templates/502.html +++ b/rowers/templates/502.html @@ -204,24 +204,6 @@ - diff --git a/rowers/views.py b/rowers/views.py index c341e611..74d4b9d4 100644 --- a/rowers/views.py +++ b/rowers/views.py @@ -123,7 +123,8 @@ from rowers.tasks import ( handle_sendemailnewresponse, handle_updatedps, handle_updatecp,long_test_task,long_test_task2, handle_zip_file,handle_getagegrouprecords, - handle_updatefitnessmetric + handle_updatefitnessmetric, + handle_sendemail_userdeleted, ) from scipy.signal import savgol_filter @@ -631,9 +632,16 @@ def remove_user(request): user_form = DeleteUserForm(request.POST,instance=user) if user_form.is_valid(): cd = user_form.cleaned_data - print cd + name = user.first_name+' '+user.last_name + email = user.email + + if cd['delete_user']: user.delete() + res = myqueue(queuehigh, + handle_sendemail_userdeleted, + name, email) + url = reverse(auth_views.logout_then_login) return HttpResponseRedirect(url) return render(request, "userprofile_delete.html", { diff --git a/rowsandall_app/settings.py b/rowsandall_app/settings.py index e8d1f0b9..86f3f1c4 100644 --- a/rowsandall_app/settings.py +++ b/rowsandall_app/settings.py @@ -119,7 +119,7 @@ TEMPLATES = [ 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', 'django.template.context_processors.i18n', - 'context_processors.google_analytics', +# 'context_processors.google_analytics', 'context_processors.warning_message', ], # 'loaders': [ diff --git a/templates/basebase.html b/templates/basebase.html index 3ad39b0b..6aaaac8a 100644 --- a/templates/basebase.html +++ b/templates/basebase.html @@ -26,9 +26,7 @@ {% analytical_head_top %} - {% if GOOGLE_ANALYTICS_PROPERTY_ID %} - {% include "ga.html" %} - {% endif %} + From 100cd9a48f96bf3f0cd8f049e1815c83fa22a2d7 Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Wed, 7 Mar 2018 22:06:27 +0100 Subject: [PATCH 3/3] updated legal text on legal page and GDPR opt in page --- rowers/templates/gdpr_optin.html | 177 +++++++++++++++++++++++++++- rowers/templates/legal.html | 190 +++++++++++++++++++++++++------ 2 files changed, 330 insertions(+), 37 deletions(-) diff --git a/rowers/templates/gdpr_optin.html b/rowers/templates/gdpr_optin.html index 532dd59f..939a307f 100644 --- a/rowers/templates/gdpr_optin.html +++ b/rowers/templates/gdpr_optin.html @@ -7,7 +7,6 @@ {% block content %}

GDPR Opt-In

-

To comply with the European Union General Data Protection Regulation, @@ -19,9 +18,183 @@ and remove your account.

+
+ +

Personal information collection

+

+ rowsandall.com may collect and use the following kinds of information: +

    +
  • information about your use of this website +
  • information that you provide for the purpose of + registering with the website +
  • information about transactions carried out over this website +
  • information that you provide for the purpose of + using this website, for instance heart rate band and weight information. +
  • any other information that you send to rowsandall.com +
+ Explicitly, the following information is collected: +
    +
  • User name, email address, encrypted password (PBKDF2 algorithm + with a SHA256 Hash and a password stretching mechanism recommended + by NIST). +
  • Your birth date. +
  • Your user consent to these GDPR compliance policies, and the + date at which you consented. Without this consent, the site cannot + be used. +
  • Weight category. With individual workouts, you may record your + actual weight during the workout. +
  • Your gender, if you decide to provide it. +
  • Heart rate zones you define. Only the actual values are stored. We do + not keep records of their evolution. +
  • Power zones and Functional Threshold power. Only the + actual values are stored. We do + not keep records of their evolution. +
  • Parameter values used to construct your Critical Power curve + (OTW and OTE). +
  • User preferences, such as the buttons and functionalities + defined in the Workflow left + panel and right panel. +
  • Tokens and their expiry dates used for sharing data with + other fitness sites. You can actually revoke these at any time. +
  • User preferences as shown on the user settings page +
  • Your favorite Flex Charts if defined +
  • The teams you are a member of. +
  • Estimated four minute, 2k and 1 hour ergometer and OTW power values, + based on the workouts you upload, and their evolution during your + usage of the site +
  • For members on the Coach plan, the names and purposes of teams. Names + of team members. (Members who delete their account will be erased from + existing teams.) +
  • Any rowing courses you uploaded +
  • Training targets and training plans +
  • Your uploaded workouts, their names, boat type, start time and date, + time zone information, total distance, duration, weight, average + and maximum heart rate, and references to their locations on third + party sites, rigging parameters (if provided), + summary information, any notes you made, privacy status and + ranking piece status. +
  • Stroke data, including, for each stroke, time, heart rate, + pace, stroke rate, work per stroke, power, average and peak + force, drive length, distance, drive speed, catch and finish angles, + slip, wash, peak force angle, effective angle, rhythm, + efficiency and distance per stroke, as well as any other + data in the data files you shared to rowsandall.com +
  • Images created on the site, from your rowing data, or uploaded + to the site. +
  • Comments you make to your and other people's workouts +
+

- This paragraph will contain the data policy + The site is only accessible to user of 16 years and older. +

+ +

Data Deletion

+ +

All the data mentioned in the previous section are stored in files + and in a database, hosted on our hosting provider's servers. Our + hosting provider is creating backups of those data. The database backups + are retained for 7 days. File backups are retained for 30 days. However, + the file names or content do not contain any links to the users. The + link to the file is stored under the user data in the database, so once + a database entry is removed, there is no way to link a file with data + to a particular user. +

+

+ When a user requests deletion of the data, his account and all data linked to his account + are removed from the database and the files are deleted. This includes all data mentioned in the + previous section. In backups, database entries will be removed after 7 days and files after + 30 days. +

+ +

Data deletion can be initiated by the user through the button on the user settings page.

+ +

Data Security

+ +

The site uses SSL to encrypt data transferred between the server and the client (web browers, + mobile apps, third party sites). Any forms are secured from Cross Site Request Forgery (CSRF) using Django's + CSRF middleware.

+ +

+ We have a double defense against reading or editing of personal data. First, we ensure that all "protected" views + are only visible to logged-in users. Only logged-in users have buttons leading to the private parts of the site. + As a second step, protecting against guessing of URL, before serving data from the database, we check explicitly that the data + is owned by the user in question, redirecting unauthorized requests to a "Permission Denied" page. Private data is collected + through POST requests to prevent them from being visible in URL data. +

+ +

rowsandall.com will take reasonable technical and organisational precautions to prevent the loss, + misuse or alteration of your personal information.

+ +

In case of loss, misuse or alteration of your personal information, we will inform you without undue delay and take measures + to prevent further misuse. In particular, we will deactivate your account, which will not delete the data but make them + inaccessible even for people who obtained the password (including yourself). We will await your instructions. If no + instructions are received within 7 days of contacting you, your account and all your data will be removed. +

+ + +

Data Sharing and access to data

+ +

+ Only the data owner can the site administrator can edit and/or delete the data. Per our data policy, the site administrator will not alter + or delete any data owned by users, unless requested so. As data are not stored on servers that are physically owner by us, or by + our hosting provider, but we use rented server space, we are technically sharing the information to agents or sub-contractors. +

+ +

+ Where rowsandall.com discloses your personal information to its agents or sub-contractors for these purposes, + the agent or sub-contractor in question will be obligated to use that personal information in accordance with the terms of this privacy statement. + Our hosting provider is based in the European Union and is bound by the same GDPR regulation as we are. +

+ +

In addition to the disclosures reasonably necessary for the purposes identified elsewhere above, rowsandall.com + may disclose your personal information to the extent that it is required to do so by law, in connection with + any legal proceedings or prospective legal proceedings, and in order to establish, exercise or defend its legal rights.

+ + +

+ Workout data and charts based on workout data can be shared to anyone by sharing the URL. Workouts have an option to be set to + "private", in which case the data are not visible to anyone except the owner. The site is not searchable for data other than + your own data, so there is no way for other people to track your workouts, unless you share them. +

+ +

+ Cross-border data transfers. Information that rowsandall.com collects may be stored and processed in and transferred + between any of the countries in which rowsandall.com operates to enable the use of the information in accordance with this privacy policy. + In addition, personal information that you submit for publication on the website will be published on the internet and + may be available around the world. + You agree to such cross-border transfers of personal information. +

+ +

+ By accepting an "invitation" to become a member of a team, or by requesting to become part of a team, you agree to automatically + share all your workout data (including workouts done prior to becoming a member of the team) to the team manager (coach) and, + depending to the team policy, to other members of the team. When you leave + a team, all your workout data will immediately become invisible to those who had access to it during your team membership, including + workouts that cover the period of time when you were member of the team. As a member of a team, you grant the team manager + permission to edit workout data + on your behalf, including the creation of charts and cross workout analysis. You also grant the team manager permission to + edit your heart rate and power settings, as well as functional threshold information and the account information accessible on your + settings page under the header "Account Information". The team manager is not able to access or change your passwords, team memberships, + favorite charts, export settings, workflow layout, or secret tokens. Also, the team manager is not able to download all your data, + not can he deactivate or delete your account. +

+ +

+ This site offers the possiblity to synchronize your data with other fitness sites. By clicking on the share or connect button (link, or + equivalent) you agree to share information between rowsandall.com and the other website. Rowsandall.com is not responsible for the privacy + policies or practices of any third party. +

+ +

Data portability

+ +

Through the "download your data" link on the user settings page, each user can download all workout data. Stroke data can be downloaded + through links in the downloaded workout data file.

+ +
+ +

+ To start or continue using the site, please give your consent by clicking on the green Opt In button below.

diff --git a/rowers/templates/legal.html b/rowers/templates/legal.html index 37951f1b..6a4b3d35 100644 --- a/rowers/templates/legal.html +++ b/rowers/templates/legal.html @@ -159,61 +159,181 @@

Credit

This document was created using a Contractology template available at -http://www.freenetlaw.com..

+http://www.freenetlaw.com.. It was modified to reflect the GDPR requirements.

-

Personal information collection

-

rowsandall.com may collect and use the following kinds of information: -

    -
  • information about your use of this website -
  • information that you provide for the purpose of registering with the website -
  • information about transactions carried out over this website -
  • information that you provide for the purpose of using this website, for instance heart rate band and weight information. -
  • any other information that you send to rowsandall.com -

+

Personal information collection

+

+ rowsandall.com may collect and use the following kinds of information: +

    +
  • information about your use of this website +
  • information that you provide for the purpose of + registering with the website +
  • information about transactions carried out over this website +
  • information that you provide for the purpose of + using this website, for instance heart rate band and weight information. +
  • any other information that you send to rowsandall.com +
+ Explicitly, the following information is collected: +
    +
  • User name, email address, encrypted password (PBKDF2 algorithm + with a SHA256 Hash and a password stretching mechanism recommended + by NIST). +
  • Your birth date. +
  • Your user consent to these GDPR compliance policies, and the + date at which you consented. Without this consent, the site cannot + be used. +
  • Weight category. With individual workouts, you may record your + actual weight during the workout. +
  • Your gender, if you decide to provide it. +
  • Heart rate zones you define. Only the actual values are stored. We do + not keep records of their evolution. +
  • Power zones and Functional Threshold power. Only the + actual values are stored. We do + not keep records of their evolution. +
  • Parameter values used to construct your Critical Power curve + (OTW and OTE). +
  • User preferences, such as the buttons and functionalities + defined in the Workflow left + panel and right panel. +
  • Tokens and their expiry dates used for sharing data with + other fitness sites. You can actually revoke these at any time. +
  • User preferences as shown on the user settings page +
  • Your favorite Flex Charts if defined +
  • The teams you are a member of. +
  • Estimated four minute, 2k and 1 hour ergometer and OTW power values, + based on the workouts you upload, and their evolution during your + usage of the site +
  • For members on the Coach plan, the names and purposes of teams. Names + of team members. (Members who delete their account will be erased from + existing teams.) +
  • Any rowing courses you uploaded +
  • Training targets and training plans +
  • Your uploaded workouts, their names, boat type, start time and date, + time zone information, total distance, duration, weight, average + and maximum heart rate, and references to their locations on third + party sites, rigging parameters (if provided), + summary information, any notes you made, privacy status and + ranking piece status. +
  • Stroke data, including, for each stroke, time, heart rate, + pace, stroke rate, work per stroke, power, average and peak + force, drive length, distance, drive speed, catch and finish angles, + slip, wash, peak force angle, effective angle, rhythm, + efficiency and distance per stroke, as well as any other + data in the data files you shared to rowsandall.com +
  • Images created on the site, from your rowing data, or uploaded + to the site. +
  • Comments you make to your and other people's workouts +
+

-

Using personal information

+

+ The site is only accessible to user of 16 years and older. +

-

rowsandall.com may use your personal information to: -

    -
  • administer this website -
  • personalize this website for you -
  • enable your access to and use of the website services -
  • publish information about you on the website -
  • supply to you services that you purchase -

+

Data Deletion

-

Where rowsandall.com discloses your personal information to its agents or sub-contractors for these purposes, the agent or sub-contractor in question will be obligated to use that personal information in accordance with the terms of this privacy statement.

+

All the data mentioned in the previous section are stored in files + and in a database, hosted on our hosting provider's servers. Our + hosting provider is creating backups of those data. The database backups + are retained for 7 days. File backups are retained for 30 days. However, + the file names or content do not contain any links to the users. The + link to the file is stored under the user data in the database, so once + a database entry is removed, there is no way to link a file with data + to a particular user. +

+

+ When a user requests deletion of the data, his account and all data linked to his account + are removed from the database and the files are deleted. This includes all data mentioned in the + previous section. In backups, database entries will be removed after 7 days and files after + 30 days. +

-

In addition to the disclosures reasonably necessary for the purposes identified elsewhere above, rowsandall.com may disclose your personal information to the extent that it is required to do so by law, in connection with any legal proceedings or prospective legal proceedings, and in order to establish, exercise or defend its legal rights.

+

Data deletion can be initiated by the user through the button on the user settings page.

-

Securing your data

+

Data Security

-

rowsandall.com will take reasonable technical and organisational precautions to prevent the loss, misuse or alteration of your personal information.

+

The site uses SSL to encrypt data transferred between the server and the client (web browers, + mobile apps, third party sites). Any forms are secured from Cross Site Request Forgery (CSRF) using Django's + CSRF middleware.

-

rowsandall.com will store all the personal information you provide

+

+ We have a double defense against reading or editing of personal data. First, we ensure that all "protected" views + are only visible to logged-in users. Only logged-in users have buttons leading to the private parts of the site. + As a second step, protecting against guessing of URL, before serving data from the database, we check explicitly that the data + is owned by the user in question, redirecting unauthorized requests to a "Permission Denied" page. Private data is collected + through POST requests to prevent them from being visible in URL data. +

-

Cross-border data transfers

+

rowsandall.com will take reasonable technical and organisational precautions to prevent the loss, + misuse or alteration of your personal information.

-

Information that rowsandall.com collects may be stored and processed in and transferred between any of the countries in which rowsandall.com operates to enable the use of the information in accordance with this privacy policy.

+

In case of loss, misuse or alteration of your personal information, we will inform you without undue delay and take measures + to prevent further misuse. In particular, we will deactivate your account, which will not delete the data but make them + inaccessible even for people who obtained the password (including yourself). We will await your instructions. If no + instructions are received within 7 days of contacting you, your account and all your data will be removed. +

-

In addition, personal information that you submit for publication on the website will be published on the internet and may be available around the world.

-

You agree to such cross-border transfers of personal information.

+

Data Sharing and access to data

-

Updating this statement

+

+ Only the data owner can the site administrator can edit and/or delete the data. Per our data policy, the site administrator will not alter + or delete any data owned by users, unless requested so. As data are not stored on servers that are physically owner by us, or by + our hosting provider, but we use rented server space, we are technically sharing the information to agents or sub-contractors. +

-

rowsandall.com may update this privacy policy by posting a new version on this website.

+

+ Where rowsandall.com discloses your personal information to its agents or sub-contractors for these purposes, + the agent or sub-contractor in question will be obligated to use that personal information in accordance with the terms of this privacy statement. + Our hosting provider is based in the European Union and is bound by the same GDPR regulation as we are. +

-

You should check this page occasionally to ensure you are familiar with any changes.

+

In addition to the disclosures reasonably necessary for the purposes identified elsewhere above, rowsandall.com + may disclose your personal information to the extent that it is required to do so by law, in connection with + any legal proceedings or prospective legal proceedings, and in order to establish, exercise or defend its legal rights.

-

Other websites

+ +

+ Workout data and charts based on workout data can be shared to anyone by sharing the URL. Workouts have an option to be set to + "private", in which case the data are not visible to anyone except the owner. The site is not searchable for data other than + your own data, so there is no way for other people to track your workouts, unless you share them. +

-

This website connects to other websites. By clicking the connect button (link, or equivalent) you agree to share information between rowsandall.com and the other website.

+

+ Cross-border data transfers. Information that rowsandall.com collects may be stored and processed in and transferred + between any of the countries in which rowsandall.com operates to enable the use of the information in accordance with this privacy policy. + In addition, personal information that you submit for publication on the website will be published on the internet and + may be available around the world. + You agree to such cross-border transfers of personal information. +

+ +

+ By accepting an "invitation" to become a member of a team, or by requesting to become part of a team, you agree to automatically + share all your workout data (including workouts done prior to becoming a member of the team) to the team manager (coach) and, + depending to the team policy, to other members of the team. When you leave + a team, all your workout data will immediately become invisible to those who had access to it during your team membership, including + workouts that cover the period of time when you were member of the team. As a member of a team, you grant the team manager + permission to edit workout data + on your behalf, including the creation of charts and cross workout analysis. You also grant the team manager permission to + edit your heart rate and power settings, as well as functional threshold information and the account information accessible on your + settings page under the header "Account Information". The team manager is not able to access or change your passwords, team memberships, + favorite charts, export settings, workflow layout, or secret tokens. Also, the team manager is not able to download all your data, + not can he deactivate or delete your account. +

+ +

+ This site offers the possiblity to synchronize your data with other fitness sites. By clicking on the share or connect button (link, or + equivalent) you agree to share information between rowsandall.com and the other website. Rowsandall.com is not responsible for the privacy + policies or practices of any third party. +

-

rowsandall.com is not responsible for the privacy policies or practices of any third party.

+

Data portability

+ +

Through the "download your data" link on the user settings page, each user can download all workout data. Stroke data can be downloaded + through links in the downloaded workout data file.

- {% endblock content %} \ No newline at end of file + {% endblock content %}