Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
75 changes: 69 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,21 +1,84 @@
# OpenStopCovid
## Solution de contact tracing décentralisée, 100 % libre et issue de la société civile
**100% Open Source contact tracing application, powered by contributors and fueled by community.**

## Pour faire tourner ce site en local
## To add a new language
### 1. Copy the folder default to [my-two-letters-language-code]
[Pick the code here](https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes)
```
cp -r default [my-two-letters-language-code]

Example:
cp -r default en
```
### 2. Translate everything in [my-two-letters-language-code]
### 3. Add the[my-two-letters-language-code] to the array `langs` in `_config`
```
vim _config
# initial array
langs = [fr, en]
# new array
langs = [fr, en, my-two-letters-language-code]
```
### You're done

## To run this site locally ##
```
git clone https://github.com/OpenStopCovid/openstopcovid.github.io.git
cd openstopcovid.github.io
git checkout fr # optionnel: sélectionnez une branche existante (fr, en ou master)
git checkout fr # optional: select an existing branch (fr, en, or master)
bundle install
bundle exec jekyll serve
# connectez votre navigateur à l'adresse: [http://localhost:4000](http://localhost:4000)
# connect your browser to the address: [http://localhost:4000]
```

## Pour construire un docker en local
## To build a local docker
```
git clone https://github.com/OpenStopCovid/openstopcovid.github.io.git
cd openstopcovid.github.io
docker build . --tag openstopcovid
docker run -p 80:4000 openstopcovid
# connectez votre navigateur à l'adresse: [http://0.0.0.0:80](http://0.0.0.0)
# connect your browser to the address: [http://0.0.0.0:80](http://0.0.0.0)
```

![OpenStopCovid](./logo.png)

# OpenStopCovid

Mobile tracing apps have a potential to support our efforts to limit the spread of COVID-19 and to keep some semblance of normality despite containment/preventive measures:
* people can be quickly informed that they may have been in contact with an infected person
* people can receive instructions on which further actions to take from public health authorities
* epidemiologists could receive anonymous or pseudonymous research information about the spread from volunteering users

## Disclaimer

Contact tracing technology using mobile applications is under active investigation and development for deployment by different countries. However, it has never been tested at a wide scale and its effectiveness is controversial. As stated by our Open Source licence please note that the software is thus provided "as is", without warranty of any kind. Would you want to deploy your own instance please ensure it complies with the applicable laws or required certifications in your country, state or province.

## Why OpenStopcovid ?

Different initiatives have been taken to tackle the underlying technical difficulties of contact tracing:
* the use of Bluetooth LE (Low Energy) for proximity detection of nearby mobile phones;
* privacy-preserving - personal data should be securely encrypted and dismantled as soon as no longer needed.

The most famous being [BlueTrace](https://bluetrace.io/) by the Singaporean Government, or [DP-3T](https://github.com/DP-3T/documents) and [ROBERT](https://github.com/ROBERT-proximity-tracing/documents) from the Pan-European Privacy-Preserving Proximity Tracing (PEPP-PT) project.

Although all procols have been publicly published, only BlueTrace proposes an Open Source [reference implementation](https://github.com/OpenTrace-community). However, it was published before Google and Apple jointly announced a [framework](https://www.apple.com/covid19/contacttracing) to support contact tracing apps. Moreover, it is thightly coupled to a specific Cloud Provider and we believe that a universal solution should be cloud-agnostic as much as possible.

So far no reference implementation has been published for ROBERT. Moreover, the choice of a centralized approach makes it hardly compatible with the contact tracing framework of Google and Apple. Indeed, Bluetooth tracking on mobile devices requires privileged access to the system in order to work efficiently.

As a consequence, we selected the decentralized [DP-3T](https://github.com/DP-3T/documents) approach as the underlying technology to provide our reference implementation. Currently it is based on the Design 1, which is less complex and more pluggable to the contact tracing framework.

We strongly believe that an easy-to-install, cloud-agnostic, 100% Open Source application is mandatory to increase trust and allow large scale deployment at the level of what is at stake. However, we are also convinced that this technology should only be one piece in the puzzle of the investigative work and keeping human-in-the-loop is important. Contact tracing is inherently "invasive", whatever the technical measures in place to protect against deanonymisation, so the key to protect privacy as much as possible is also in the operational processes, the governance and oversight of the authorities conducting it.

## What's inside ?

The global architecture is depicted by the following diagram:

![Architecture](./architecture.png)

The main components of OpenStopCovid are the following:
* [Backend microservices](https://github.com/OpenStopCovid/dp3t-ms)
* `exposed-keys` microservice to publish exposed keys and get a list of exposed keys
* `codes` microservice to create and use validation codes to declare sick patients
* [User interface for physicians](https://github.com/OpenStopCovid/health-authority-ui) in order to generate validation codes for sick patients
* [Android application]() relying on [DP-3T SDK](https://github.com/DP-3T/dp3t-sdk-android) for end-users
* [iOS application]() relying on [DP-3T SDK](https://github.com/DP-3T/dp3t-sdk-ios) for end-users
22 changes: 13 additions & 9 deletions _config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,18 +11,22 @@ description:
# Your name to show in the footer
author: OpenStopCovid

# Languages
langs: [fr, en]


# --- List of links in the navigation bar --- #

navbar-links:
A propos: "aboutus"
Resources:
- Application mobile: "https://github.com/OpenStopCovid/app"
- Interface médecin: "https://pro-sante.openstopcovid.fr/#home"
- Interface médecin-code: "https://github.com/OpenStopCovid/health-authority-ui"
- Serveur de l'application: "https://github.com/OpenStopCovid/dp3t-ms"
- Specifications: "https://github.com/DP-3T/documents/blob/master/DP3T%20White%20Paper.pdf"
- Documentation: "https://github.com/DP-3T/documents"
Press Kit: "presskit"
about: "aboutus"
ressources:
- appmobile: "https://github.com/OpenStopCovid/app"
- uidoctor: "https://pro-sante.openstopcovid.fr/#home"
- uidoctordev: "https://github.com/OpenStopCovid/health-authority-ui"
- appserv: "https://github.com/OpenStopCovid/dp3t-ms"
- specs: "https://github.com/DP-3T/documents/blob/master/DP3T%20White%20Paper.pdf"
- doc: "https://github.com/DP-3T/documents"
presskit: "presskit"

# --- Local development options ---

Expand Down
62 changes: 3 additions & 59 deletions _includes/header.html
Original file line number Diff line number Diff line change
@@ -1,66 +1,15 @@
<!-- TODO this file has become a mess, refactor it -->

{% assign date_format = site.date_format | default: "%B %-d, %Y" %}

{% if page.bigimg or page.title %}

{% if page.bigimg %}
<div id="header-big-imgs" data-num-img={% if page.bigimg.first %}{{ page.bigimg.size }}{% else %}1{% endif %}
{% for bigimg in page.bigimg %}
{% assign imgnum = forloop.index %}
{% for imginfo in bigimg %}
{% if imginfo[0] %}
data-img-src-{{ imgnum }}="{{ imginfo[0] | relative_url }}"
data-img-desc-{{ imgnum }}="{{ imginfo[1] }}"
{% else %}
data-img-src-{{ imgnum }}="{{ imginfo | relative_url }}"
{% endif %}
{% endfor %}
{% endfor %}
></div>
{% endif %}

<header class="header-section {% if page.bigimg %}has-img{% endif %}">
{% if page.bigimg %}
<div class="big-img intro-header">
<div class="container">
<div class="row">
<div class="col-lg-8 col-lg-offset-2 col-md-10 col-md-offset-1">
<div class="{{ include.type }}-heading">
<h1>{% if page.title %}{{ page.title }}{% else %}<br/>{% endif %}</h1>
{% if page.subtitle %}
{% if include.type == "page" %}
<hr class="small">
<span class="{{ include.type }}-subheading">{{ page.subtitle }}</span>
{% else %}
<h2 class="{{ include.type }}-subheading">{{ page.subtitle }}</h2>
{% endif %}
{% endif %}

{% if include.type == "post" %}
<span class="post-meta">Posted on {{ page.date | date: date_format }}</span>
{% endif %}
</div>
</div>
</div>
</div>
<span class='img-desc'></span>
</div>
{% endif %}
<div class="intro-header no-img">
<div class="container">
<div class="row">
<div class="col-lg-8 col-lg-offset-2 col-md-10 col-md-offset-1">
<div class="{{ include.type }}-heading">
<h1>{% if page.title %}{{ page.title }}{% else %}<br/>{% endif %}</h1>
{% if page.subtitle %}
{% if include.type == "page" %}
<hr class="small">
<span class="{{ include.type }}-subheading">{{ page.subtitle }}</span>
{% else %}
<h2 class="{{ include.type }}-subheading">{{ page.subtitle }}</h2>
{% endif %}
{% endif %}
<h1>{{ page.title }}</h1>
<hr class="small">
<span class="{{ include.type }}-subheading">{{ page.subtitle }}</span>

{% if include.type == "post" %}
<span class="post-meta">Posted on {{ page.date | date: date_format }}</span>
Expand All @@ -71,8 +20,3 @@ <h2 class="{{ include.type }}-subheading">{{ page.subtitle }}</h2>
</div>
</div>
</header>


{% else %}
<div class="intro-header"></div>
{% endif %}
16 changes: 13 additions & 3 deletions _includes/nav.html
Original file line number Diff line number Diff line change
Expand Up @@ -16,20 +16,30 @@

<div class="collapse navbar-collapse" id="main-navbar">
<ul class="nav navbar-nav navbar-right">

{% assign locale = page.url | replace:'/',' ' | truncatewords: 1,"" %}

{%- for link in site.navbar-links -%}
{%- if link[1].first %}

<li class="navlinks-container">
<a class="navlinks-parent" href="javascript:void(0)">{{ link[0] }}</a>
{% assign key = link[0] %}
<!--a class="navlinks-parent" href="javascript:void(0)">{{ page[key] }}</a-->
<a href="javascript:void(0)">{{ page[key] }}</a>
<div class="navlinks-children">
{%- for childlink in link[1] -%}
{%- for linkparts in childlink %}
<a href="{{ linkparts[1] | relative_url }}">{{ linkparts[0] }}</a>
{% assign key = linkparts[0] %}
{%- if page[key] %}
<a href="{{ linkparts[1] | relative_url }}">{{ page[key] }}</a>
{%- endif -%}
{%- endfor -%}
{%- endfor %}
</div>
</li>
{% else %}
<li><a href="{{ link[1] | relative_url }}">{{ link[0] }}</a></li>
{% assign key = link[0] %}
<li><a href="{{ locale | append:'/' | append:link[1] | relative_url }}">{{ page[key] }}</a></li>
{%- endif -%}
{%- endfor -%}
</ul>
Expand Down
7 changes: 0 additions & 7 deletions aboutus.md

This file was deleted.

64 changes: 64 additions & 0 deletions default/index.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
---
layout: page
title: OpenStopCovid
subtitle: Decentralized contact tracing solution<br>100% free and from civil society
ressources: Resources
presskit: Press kit
appmobile: Mobile application
uidoctor: Medical application
uidoctordev: Medical application (code)
appserv: Application server
specs: Specifications
doc: Documentation
lang: en
---

## What is contact tracing ##

Contact tracing consists, for a user, of installing a specific smartphone application that, using Bluetooth technology, locates other devices in the vicinity. In practice, the phone stores pseudonyms in memory that other devices broadcast around them. Most often encrypted, these pseudonyms can only be understood by smartphones equipped with the same application.

This technology has the potential ([but not certainty](https://github.com/DP-3T/documents/issues/224)) to limit the spread of Covid-19 disease in the population. Thus, a dedicated mobile application, developed according to the rules of the art, could allow us to return to a semblance of normal life, without undermining the results of the lockdown that is coming to an end. Let's mention three advantages to be expected from a tracking application:
* A person can be quickly notified when they've been standing too long in close proximity to an infected person.
* A person can be automatically instructed by public health authorities on what action to take.
* A person may, on a voluntary basis, share with epidemiologists anonymous research information related to the spread of the disease in the territory.

However, contact tracing alone cannot be a solution to the pandemic. It can only be part of a broader system.

## Why a decentralized solution

When a user is diagnosed positive, it is possible to calculate the risk incurred by all persons recently crossed by this user. In order to carry out this operation, it is necessary to collect the victim's state of health, the date corresponding to the appearance of symptoms and all the pseudonyms that his smartphone has recorded in the previous days to identify himself to other users. At the same time, it is also necessary to collect the pseudonyms that the smartphone has received from other users during the incubation phase of the disease. By combining these data, a tracking application can determine each person's level of risk of exposure.

The problem here is less how to perform this calculation than where it takes place and what data is transmitted. Based on the DP-3T protocol, developed by the École polytechnique fédérale de Lausanne ([EPFL](https://www.epfl.ch/en/)) and its partners, OpenStopCovid has chosen to adopt a decentralized response to this problem. This means that the calculation takes place in the user's smartphone and that contacts do not leave it. Conversely, a centralized solution necessarily consists of sending pseudonymized contacts to a remote server, a prerequisite for processing that is unacceptable to us.

We believe that it is too risky to gather such data in a central server, however secure it may be. In view of developments in information technology, such anonymous data today may not be anonymous tomorrow. Furthermore, there is the risk of centralising, recording and cross-referencing this information with other information such as, for example, the system logs of telecom operators. The decentralized approach also involves risks, but these remain localized, and therefore minimized, at the level of an individual. These risks are comparable to those induced by the installation of malwares or spy cameras.

## Why a 100% free solution

Contact tracing technologies are interesting from an epidemiological point of view. But at the same time, they pose a risk to individual liberties. This risk can arise in a straightforward way, by bringing about generalised surveillance of the entire population. Or in an insidious way, in the medium and long term, by encouraging people to make do with regular tracking of their actions. To reduce these risks, it is necessary to maintain citizen control over the "source code" (manufacturing plan) of applications.

One strategy to ensure this control is to publish the source code of the application on specialized platforms. This source code, known as "Open Source", will then be accessible to anyone who wants to read and test it, with the aim of verifying that no threats, vulnerabilities or fraudulent behaviour alter the integrity of the data circulating inside.

The other advantage of open source code is that it makes the application ready for contributions from developers outside the project, not just from a small team. Already today, these developers are helping OpenStopCovid to improve the security, performance but also the usability and ergonomics of the application and the components it depends on. These contributors constitute, in a way, an unlimited and international development team.

Conversely, closed source code is free of any cumbersome external control and therefore, by extension, poses legitimacy and security problems for society as a whole.

## Available components

The main components of the project are as follows:

* An Android application
* An iPhone application
* An interface for health professionals (trusted third party)
* Some server-side bricks to secure the device

The architecture we have chosen is directly based on the DP-3T protocol, and uses several reference components. Our implementation is represented by the following diagram:

![Architecture]({{site.url}}/img/architecture.png)

## How to contribute

You can follow our work on [GitHub](https://github.com/OpenStopCovid)

## Contact us

contact@openstopcovid.fr
30 changes: 30 additions & 0 deletions default/presskit.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
---
layout: page
title: Press Kit
subtitle: OpenStopCovid
ressources: Resources
presskit: Press kit
appmobile: Mobile application
uidoctor: Medical application
uidoctordev: Medical application (code)
appserv: Application server
specs: Specifications
doc: Documentation
lang: en
---

## Mobile application for users
![OpenStopCovid](/img/mobile-app/App Protocole D3PT V0-16.png)
![OpenStopCovid](/img/mobile-app/App Protocole D3PT V0-17.png)
![OpenStopCovid](/img/mobile-app/App Protocole D3PT V0-18.png)
![OpenStopCovid](/img/mobile-app/App Protocole D3PT V0-19.png)
![OpenStopCovid](/img/mobile-app/App Protocole D3PT V0-20.png)
<hr>
![OpenStopCovid](/img/mobile-app/App Protocole D3PT V0-15.png)

## Web application for doctors
![OpenStopCovid](/img/medic-app/interface-medecin.png)
<hr>
![OpenStopCovid](/img/medic-app/interface-medecin2.png)
<hr>
![OpenStopCovid](/img/medic-app/interface-medecin3.png)
Loading