= GDPR Compliance = **This document is WORK IN PROGRESS (WIP).** This document provides what are considered the best-practices for GDPR compliance. This is not a legal document nor should it be considered legal advice. It is up to each project to individually decide upon how GDPR affects them and what is to be configured for each project. = TLDR: Enable GDPR Related Features = These are the short and quick instructions to enable GDPR related features. Read the explanation below for more details about these features. == Terms of Use == * See [wiki:TermsOfUse this page] for details. * In the project config file `config.xml`, set **`enable_login_mustagree_termsofuse`** to true (1): `1` == Enable Consent Policies == * On the ops page, select "Manage consent types" and enable "Enroll and Stats Export" * In the project config file `config.xml`, set **enable_privacy_by_default** to true (1): `1` * In the project config file `config.xml`, set **disable_account_creation_rpc** to true (1): `1` == Enable terms of use in your web project settings == * In the web project config file: `html/project/project.inc`, add: `define("TERMSOFUSE_FILE", "../../terms_of_use.txt");` * Please note that this will show the same text in the browser as in the TermsOfUse pop-up of the BOINC manager. If you wish to further customize the text shown on the web page, you could use a copy of the terms of use file in `html/user` and add html code with links. == Enable User Account Deletion == * In project config file `config.xml`, set **enable_delete_account** to either 1 or 2 (see below for explanation of settings): `1` * In project config file `config.xml`, add the following project tasks: {{{ run_in_ops ./delete_expired_tokens.php 24 hours 0 delete_expired_tokens.out run_in_ops ./delete_expired_users_and_hosts.php 24 hours 0 delete_expired_users_and_hosts.out }}} == == = GDPR Introduction = [https://tinyurl.com/yad2m7uv A Presentation] on GDPR and BOINC. Brief Summary 1. Projects should have a TermsOfUse. 1. Users need to consent to a projects terms-of-use. And consent to other policies. 1. Users have a 'right-of-access' in obtaining their own user's data. 1. Users have a 'right-of-erasure', being able to delete their own accounts. 1. Data protection by design and default. The initial settings for user accounts maximize their privacy. This document discusses * How to enable GDPR related features * Consent to policies, * User deletion, * Data protection by design and default. = = = Explanation of GDPR Related Features = The following describes the GDPR features and what they do. == Consent to policies == [http://boinc.berkeley.edu/trac/wiki/UserOptInConsent#Usage Usage information] There are two types of consent that come with all BOINC projects: `ENROLL` and `STATSEXPORT`: corresponding to a consent to the project's terms-of-use during enrollment and consent to statistics exports. By default, these consent types are disabled. To enable these policies, use the **Manage consent types** page accessible from the main OPS page. === Account creation === When `ENROLL` consent type is enabled, users must agree to the project's terms-of-use before creating an account. This must be an 'active' measure: clicking a checkbox. In order to by fully-compliant with GDPR, **only allow users to create accounts through the Web site**. How may a user create an account? * A BOINC client. The GUI BOINC Manager is a client. * The BOINC CLI `boinccmd` is a client. * Project's Web site allows for account creation. * The `config.xml` option **disable_web_account_creation** must be set to false (0). * An account manager (AM) may create an account for a user. Of these, only the Web site is guaranteed to have the user see and consent to the project's terms-of-use. To configure this: 1. In `config.xml`, set **disable_account_creation_rpc** to true (1): `1` * If this is configured, **account managers will not be able to create accounts for users**. They are able to configure existing users' accounts. BOINC Client GUI: Versions after v6.10.0 show the project's terms-of-use to the user, who must click-through in order to continue and create an account. Thus the create_account RPC has been modified to detect BOINC clients greater than or equal to this version. If the client is greater than or equal to, we assume consent has been given and the database is updated accordingly. Also - to force users who may not have previously consented to the terms of user, the flag `1` will cause users who log into the website but who have not yet agreed to the terms of user to be redirected to a page where they will be required to consent in order to continue to use the website. === Statistics Exports === `STATSEXPORT`, if enabled will only export statistics for users who have consented to having their statistics exported. This consent is disabled by default for each user. * The user must go to their **project preferences page** and then enable the corresponding checkbox. == Data Deletion == GDPR provides a right to users to have their data deleted from the system. See [https://gdpr-info.eu/art-17-gdpr Article 17 of the GDPR]. This capability was implemented within BOINC in the design outlined [http://boinc.berkeley.edu/trac/wiki/RightToErasure here] in Server Release 1.0. BOINC projects can enable this feature by setting the field with the [https://boinc.berkeley.edu/trac/wiki/ProjectOptions project config] file to one of the following options: * 0 = Users are not given the option to delete their account (Default value) * 1 = User data is anonymized. This means that user records and host records are left in the database but personal information is replaced with nonsense data. Other user related records not required for processing are deleted. * 2 = All user data is deleted. This means that all user related records are deleted from the database. * 3 = Project defined implementation. Projects can implement a function in project.inc: project_delete_account($user) and this function will then be used when a user delete's their account. Projects should also enable the following tasks in their [https://boinc.berkeley.edu/trac/wiki/ProjectTasks project tasks] in their project config file in order to ensure proper processing: {{{ run_in_ops ./delete_expired_tokens.php 24 hours 0 delete_expired_tokens.out run_in_ops ./delete_expired_users_and_hosts.php 24 hours 0 delete_expired_users_and_hosts.out }}}