[odrs-web/production] Add a privacy policy



commit 77ff25190555c05207688ba5b2bd5dcc93a6aa0b
Author: Richard Hughes <richard hughsie com>
Date:   Fri May 25 20:33:04 2018 +0100

    Add a privacy policy

 app/templates/index.html   |    3 +
 app/templates/privacy.html |  349 ++++++++++++++++++++++++++++++++++++++++++++
 app/views.py               |    5 +
 3 files changed, 357 insertions(+), 0 deletions(-)
---
diff --git a/app/templates/index.html b/app/templates/index.html
index 5f4eb85..92fea65 100644
--- a/app/templates/index.html
+++ b/app/templates/index.html
@@ -65,6 +65,9 @@ To then vote or remove a specific review you need to specify the
 <code>user_key</code> and <code>user_id</code> values along with the
 <code>review_id</code>.
 </p>
+<p>
+  Find the GDPR policy <a href="/privacy">here</a>.
+</p>
 
 <h2>Moderation</h2>
 <p>
diff --git a/app/templates/privacy.html b/app/templates/privacy.html
new file mode 100644
index 0000000..8c6afdc
--- /dev/null
+++ b/app/templates/privacy.html
@@ -0,0 +1,349 @@
+{% extends "default.html" %}
+{% block title %}ODRS: Open Desktop Ratings Service{% endblock %}
+
+{% block content %}
+
+<h1>Privacy Report</h1>
+
+<h2>Introduction</h2>
+<p>
+  We hold personal data about people submitting reviews, moderators, and people
+  accessing the ODRS service for a variety of purposes.
+  This policy sets out how we seek to protect personal data and ensure that
+  people understand the rules governing their use of personal data.
+  In particular, this policy requires that the Data Protection Officer (DPO) be
+  consulted before any significant new data processing activity is initiated to
+  ensure that relevant compliance steps are addressed.
+</p>
+
+<h2>Scope</h2>
+<p>
+  This policy applies to all users who have access to any of the personally
+  identifiable data.
+</p>
+
+<h2>Who is responsible for this policy?</h2>
+<p>
+  As the Data Protection Officer, <a href="mailto:richard hughsie com">Richard Hughes</a>
+  has overall responsibility for the day-to-day implementation of this policy.
+  The DPO is registered with the Information Commissioner’s Office (ICO) in the
+  United Kingdom as a registered data controller.
+</p>
+
+<hr/>
+
+<h1>Our Procedures</h1>
+<h2>Fair and lawful processing</h2>
+<p>
+  We must process personal data fairly and lawfully in accordance with individuals’ rights.
+  This generally means that we should not process personal data unless the
+  individual whose details we are processing has consented to this happening,
+  or where such collection is unavoidable and/or considered pragmatic in the
+  context, e.g. logging the number of upvotes of a specific review.
+</p>
+
+<p>
+  We do not consider an IP address requesting the application ratings data to
+  represent a single user (due to NAT or VPN use), and as such requests are not
+  considered personal data using the draft GDPR guidelines.
+</p>
+
+<h2>Accuracy and relevance</h2>
+<p>
+  We will ensure that any personal data we process is accurate, adequate,
+  relevant and not excessive, given the purpose for which it was obtained.
+  We will not process personal data obtained for one purpose for any unconnected
+  purpose unless the individual concerned has agreed to this or would otherwise
+  reasonably expect this.
+  Individuals may ask that we correct inaccurate personal data relating to them.
+  If you believe that information is inaccurate you should inform the DPO.
+</p>
+
+<h2>Your personal data</h2>
+<p>
+  You must take reasonable steps to ensure that personal data we hold about
+  moderators is accurate and updated as required.
+  For example, if your personal circumstances change, please update them using
+  the profile pages or inform the Data Protection Officer.
+</p>
+
+<h2>Data security</h2>
+<p>
+  We keep personal data secure against loss or misuse.
+  Where other organisations process personal data as a service on our behalf,
+  the DPO will establish what, if any, additional specific data security
+  arrangements need to be implemented in contracts with those third party
+  organisations.
+</p>
+
+<h2>Storing data securely</h2>
+  <p>
+  All data is stored electronically and all passwords are stored adhering to
+  security best practices.
+</p>
+
+<h2>Data retention</h2>
+<p>
+  We must retain personal data for no longer than is necessary.
+  What is necessary will depend on the circumstances of each case, taking into
+  account the reasons that the personal data was obtained, but should be
+  determined in a manner consistent with our data retention guidelines.
+  Anonymized statistics (e.g. review requests) will be kept for a maximum of
+  5 years which allows us to project future service requirements and provide
+  usage graphs over time.
+</p>
+
+<h2>Transferring data internationally</h2>
+<p>
+  There are restrictions on international transfers of personal data.
+  We do not transfer personal data anywhere inside or outside the EU without the
+  approval of the Data Protection Officer, unless required to do so by law.
+</p>
+
+<hr/>
+
+<h1>Subject Access Requests</h1>
+<p>
+  Please note that under the Data Protection Act 1998, individuals are entitled,
+  subject to certain exceptions, to request access to information held about them.
+</p>
+
+<p>
+  On receiving a subject access request, we will refer that request immediately
+  to the DPO. We may ask you to help us comply with those requests.
+  Please also contact the Data Protection Officer if you would like to correct
+  or request information that we hold about you.
+  There are also restrictions on the information to which you are entitled under
+  applicable law.
+</p>
+
+<h2>Processing data in accordance with your rights</h2>
+<p>
+  We will never use identifiable vendor data for direct marketing purposes.
+</p>
+
+<hr/>
+
+<h1>GDPR Provisions</h1>
+<p>
+  Where not specified previously in this policy, the following provisions will
+  be in effect on or before 25 May 2018.
+</p>
+
+<h2>Privacy Notice - transparency of data protection</h2>
+<p>
+  Being transparent and providing accessible information to individuals about how
+  we will use their personal data is important for our project.
+  The following are details on how we collect data and what we will do with it:
+</p>
+
+<h3>Moderator Information</h3>
+<table class="table">
+  <tr class="row">
+    <td class="text-muted col-sm-2">What:</td>
+    <td class="col-sm-10">
+      The moderator real name, password, and supported languages.
+    </td>
+  </tr>
+  <tr class="row">
+    <td class="text-muted col-sm-2">Why collected:</td>
+    <td class="col-sm-10">
+      Secure authentication, to allow moderators to log in an edit or delete reviews.
+    </td>
+  </tr>
+  <tr class="row">
+    <td class="text-muted col-sm-2">Where stored:</td>
+    <td class="col-sm-10">MySQL database on odrs.gnome.org.</td>
+  </tr>
+  <tr class="row">
+    <td class="text-muted col-sm-2">When copied:</td>
+    <td class="col-sm-10">Backed up to off-site secure storage weekly.</td>
+  </tr>
+  <tr class="row">
+    <td class="text-muted col-sm-2">Who has access:</td>
+    <td class="col-sm-10">The ODRS administrators and the DPO.</td>
+  </tr>
+  <tr class="row">
+    <td class="text-muted col-sm-2">Wiped:</td>
+    <td class="col-sm-10">When the moderator requests deletion of the user account.</td>
+  </tr>
+</table>
+
+<h3>Service Event Log</h3>
+<table class="table">
+  <tr class="row">
+    <td class="text-muted col-sm-2">What:</td>
+    <td class="col-sm-10">
+      IP address (unhashed) and REST method requested, along with any error.
+    </td>
+  </tr>
+  <tr class="row">
+    <td class="text-muted col-sm-2">Why collected:</td>
+    <td class="col-sm-10">
+      Providing an event log for showing service problems.
+    </td>
+  </tr>
+  <tr class="row">
+    <td class="text-muted col-sm-2">Where stored:</td>
+    <td class="col-sm-10">MySQL database on odrs.gnome.org.</td>
+  </tr>
+  <tr class="row">
+    <td class="text-muted col-sm-2">When copied:</td>
+    <td class="col-sm-10">Backed up to off-site secure storage weekly.</td>
+  </tr>
+  <tr class="row">
+    <td class="text-muted col-sm-2">Who has access:</td>
+    <td class="col-sm-10">The administrator and the DPO.</td>
+  </tr>
+  <tr class="row">
+    <td class="text-muted col-sm-2">Wiped:</td>
+    <td class="col-sm-10">After 5 years.</td>
+  </tr>
+</table>
+
+<h3>User Votes and Karma</h3>
+<table class="table">
+  <tr class="row">
+    <td class="text-muted col-sm-2">What:</td>
+    <td class="col-sm-10">
+      User ID (hashed), timestamp, access time, karma and votes cast.
+    </td>
+  </tr>
+  <tr class="row">
+    <td class="text-muted col-sm-2">Why collected:</td>
+    <td class="col-sm-10">
+      To know what users have voted on each review, and to prevent abuse by
+      users down or upvoting too many things.
+    </td>
+  </tr>
+  <tr class="row">
+    <td class="text-muted col-sm-2">Where stored:</td>
+    <td class="col-sm-10">MySQL database on odrs.gnome.org.</td>
+  </tr>
+  <tr class="row">
+    <td class="text-muted col-sm-2">When copied:</td>
+    <td class="col-sm-10">Backed up to off-site secure storage weekly.</td>
+  </tr>
+  <tr class="row">
+    <td class="text-muted col-sm-2">Who has access:</td>
+    <td class="col-sm-10">The administrator and the DPO.</td>
+  </tr>
+  <tr class="row">
+    <td class="text-muted col-sm-2">Wiped:</td>
+    <td class="col-sm-10">After 5 years.</td>
+  </tr>
+</table>
+
+<h3>Application Review</h3>
+<table class="table">
+  <tr class="row">
+    <td class="text-muted col-sm-2">What:</td>
+    <td class="col-sm-10">
+      Date created, application ID, locale, review summary, review content,
+      user hash, user IP address (hashed), displayed user name, application
+      version, distibution, chosen star rating.
+    </td>
+  </tr>
+  <tr class="row">
+    <td class="text-muted col-sm-2">Why collected:</td>
+    <td class="col-sm-10">
+      Stores the user-supplied review to be shared .
+    </td>
+  </tr>
+  <tr class="row">
+    <td class="text-muted col-sm-2">Where stored:</td>
+    <td class="col-sm-10">MySQL database on odrs.gnome.org.</td>
+  </tr>
+  <tr class="row">
+    <td class="text-muted col-sm-2">When copied:</td>
+    <td class="col-sm-10">Backed up to off-site secure storage weekly.</td>
+  </tr>
+  <tr class="row">
+    <td class="text-muted col-sm-2">Who has access:</td>
+    <td class="col-sm-10">
+      The administrator and the DPO has access to all fields, anonymous users
+      can access all except the user hash and IP address, although some are
+      masked and only used for sorting (e.g. distro and version).
+    </td>
+  </tr>
+  <tr class="row">
+    <td class="text-muted col-sm-2">Wiped:</td>
+    <td class="col-sm-10">When the review is deleted.</td>
+  </tr>
+</table>
+
+<p>
+  We will ensure any use of personal data is justified using at least one of
+  the conditions for processing and this had been specifically documented above.
+</p>
+
+<h2>Consent</h2>
+<p>
+  The data that we collect is subject to active consent by the data subject.
+  This consent can be revoked at any time.
+  Revoking consent to use data means any provided reviews will be deleted.
+</p>
+
+<h2>Data portability</h2>
+<p>
+  Upon request, a data subject should have the right to receive a copy of their
+  data in a structured format, typically an SQL export.
+  These requests should be processed within one month, provided there is no
+  undue burden and it does not compromise the privacy of other individuals.
+  A data subject may also request that their data is transferred directly to
+  another system. This is available for free.
+</p>
+
+<h2>Right to be forgotten</h2>
+<p>
+  A user may request that any information held on them is deleted or removed,
+  and any third parties who process or use that data must also comply with the request.
+  An erasure request can only be refused if an exemption applies.
+  Users will need to provide the either their IP address or user hash used when
+  creating the review.
+</p>
+
+<h2>Privacy by design and default</h2>
+<p>
+  Privacy by design is an approach to projects that promote privacy and data
+  protection compliance from the start.
+  The DPO will be responsible for conducting Privacy Impact Assessments and
+  ensuring that all changes commence with a privacy plan.
+  When relevant, and when it does not have a negative impact on the data subject,
+  privacy settings will be set to the most private by default.
+</p>
+
+<h2>Reporting breaches</h2>
+<p>
+  All users of the ODRS have an obligation to report actual or potential data
+  protection compliance failures. This allows us to:
+<ul>
+  <li>Investigate the failure and take remedial steps if necessary</li>
+  <li>Maintain a register of compliance failures</li>
+  <li>
+    Notify the Supervisory Authority (SA) of any compliance failures that are
+    material either in their own right or as part of a pattern of failures
+  </li>
+</ul>
+<p>
+  Please refer to the DPO for our reporting procedure.
+</p>
+
+<h2>Monitoring</h2>
+<p>
+  Everyone who actively uses the ODRS must observe this policy.
+  The DPO has overall responsibility for this policy.
+  They will monitor it regularly to make sure it is being adhered to.
+</p>
+
+<hr/>
+
+<h1>Consequences of Failing to Comply</h1>
+<p>
+  We take compliance with this policy very seriously.
+  Failure to comply puts both you and us at risk.
+  If you have any questions or concerns about anything in this policy,
+  do not hesitate to contact the DPO.
+</p>
+
+{% endblock %}
diff --git a/app/views.py b/app/views.py
index 4ed4879..8231dec 100644
--- a/app/views.py
+++ b/app/views.py
@@ -152,6 +152,11 @@ def index():
     """ start page """
     return render_template('index.html')
 
+@app.route('/privacy')
+def privacy():
+    """ privacy page """
+    return render_template('privacy.html')
+
 @app.route('/oars')
 def oars_index():
     """ OARS page """


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]