Étude de code: l’application Alerte COVID


→ Louis-Olivier Brassard Guide: naviguez avec les flèches du clavier ou cliquez pour avancer.
mais d’abord
le point de vue de qui?

Moi

→ Développeur web
Je conçois des objets numériques avec les technologies du web
Ma perspective n’est pas celle d’un·e autre informaticien·ne (ou d’un·e philosophe)

Alerte COVID

Développée par

Shopify

Service numérique canadien
3 parties
Quelques aspects
1. Une app respectueuse de la vie privée
2. Souci du poids numérique
estimation des données transférées pour le déploiement en Ontario (7,1 ko/h) et au Canada (23 ko/h)
estimation des données transférées pour le déploiement dans le monde entier (1,5 Mo/h)
spécifications de l’application iOS (12 Mo à télécharger)
raisonnable
Le code

sur GitHub
COVID Alert App GitHub repo
dans un
dépôt (repository)
QUESTIONS
Quel est le code?
Comment fonctionne-t-il?
Comment puis-je l’installer? (l’essayer moi-même!)
Ai-je le droit de le copier/réutiliser?
Comment puis-je contribuer moi aussi?

Inspection du code

Moment:

La notification d’exposition
code notification d’exposition ()
regardons un extrait
Services/
...
- ExposureNotificationService.ts
...
  private async processNotification() {
    const exposureStatus = this.exposureStatus.get();
    if (exposureStatus.type === ExposureStatusType.Exposed && !exposureStatus.notificationSent) {
        PushNotification.presentLocalNotification({
          alertTitle: this.i18n.translate('Notification.ExposedMessageTitle'),
          alertBody: this.i18n.translate('Notification.ExposedMessageBody'),
        });
        await this.exposureStatus.append({
          notificationSent: true,
        });
      }
      if (this.isReminderNeeded(exposureStatus)) {
        PushNotification.presentLocalNotification({
          alertTitle: this.i18n.translate('Notification.DailyUploadNotificationTitle'),
          alertBody: this.i18n.translate('Notification.DailyUploadNotificationBody'),
        });
        await this.exposureStatus.append({
          uploadReminderLastSentAt: new Date().getTime(),
        });
      }
    }
  
if (exposureStatus.type === ExposureStatusType.Exposed && !exposureStatus.notificationSent) {
  PushNotification.presentLocalNotification({
    alertTitle: this.i18n.translate('Notification.ExposedMessageTitle'),
    alertBody: this.i18n.translate('Notification.ExposedMessageBody'),
  });
  await this.exposureStatus.append({
    notificationSent: true,
  });
}
  
euh…


Ok.

Un ticket!

Issue par scoates sur GitHub
Qui?
scoates
Quoi?
capture d’écran ping Google app COVID
When the app runs (on iOS at least), it periodically requests https://clients3.google.com/generate_204. ... This is because the app uses react-native-netinfo, which, by default, exhibits this behaviour.
I urge you to treat this as an urgent security problem that must be fixed ASAP. You are currently leaking PII to Google for all users.
autrement dit
«Hey Google!»
(j’utilise Alerte COVID)
la source du problème?
une «bibliothèque» tierce
du code «caché» que les «auteurs·trices» de l’application n’ont jamais écrit
(introuvable d’ailleurs dans le code du dépôt)
Expression «cloud3.google.com» introuvable dans le dépôt officiel de l’application
la patche a été appliquée et mise en production
scoates release app covid


👍

Étude de cas

Et si on pensait le problème autrement?
Pour une organisation
(ex. un club d’athlétisme)

COCH.APP

Un registre de prises de présences, à faible empreinte numérique, respectueux de la vie privée, axé sur l’accessibilité.
Un outil simple, résilient et accessible
GIF animé de l’application COCH.APP
Un question de design

Merci!



→ Louis-Olivier Brassard

Code source