Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add sweet URI fragments support #50

Open
wants to merge 34 commits into
base: main
Choose a base branch
from
Open

Conversation

a2br
Copy link

@a2br a2br commented Oct 30, 2020

Fix #13, Fix #86, Fix #27, Fix #9
Permet d'enregistrer des champs dans l'URI. Démo Heroku

Usages

En mettant un lien avec des params en favori (/iOS Shortcut), ça permettrait aussi de faire un raccourci. Ainsi, on pourrait facilement se baser sur un thème (comme proposé dans les issues #31 et #13), qui pourrait par exemple servir à enregistrer le profil.

Changelog

Met la valeur par défaut des champs sur la valeur définie dans l'URI si précisée. A mesure que les champs sont compétés manuellement, l'URI s'adapte, comme montré plus bas (démo vidéo), et réciproquement : l'URI et le formulaire montreront toujours les mêmes valeurs. Supporte également les raisons, la date, l'heure... Ajouter &auto permet d'auto-cliquer le bouton de téléchargement.

Syntaxe

https://media.interieur.gouv.fr/deplacement-covid-19#key=a,b,c&key2=d

Avec key = alias || key dans form-data.json

Voici un exemple extrêmement complet :

https://media.interieur.gouv.fr/deplacement-covid-19#nom=Dupont&prenom=Camille&date-de-naissance=31/12/2019&lieu-de-naissance=Nice&adresse=1,%20Rue%20de%20la%20Paix&ville=Paris&code-postal=75001&raisons=sport-animaux,travail&date=2020-11-02&heure=07:45&auto

Ici, tous les champs sont complétés! La date est au format yyyy-MM-dd et l'heure hh:mm.
Si &auto est ajouté, le bouton de génération sera automatiquement cliqué dès la page chargée.

Exemple

Les exemples utilisent le domaine de démo, attest-covid.herokuapp.com.

http://attest-covid.herokuapp.com/#prenom=Camille&nom=Dupont&date-de-naissance=01/01/1970&lieu-de-naissance=Paris&adresse=999%20avenue%20de%20France&ville=Paris&code-postal=75001
Enregistrera le profil. La date/heure/raisons restent vierges/en valeur par défaut

@a2br a2br marked this pull request as draft October 30, 2020 12:59
@paris-ci
Copy link

Je crois que le consensus était de stocker les informations non pas dans le query string qui est envoyé au serveur mais directement dans la partie suivant le # de l'URL

@xgaia
Copy link

xgaia commented Oct 30, 2020

Bonjour, passer des arguments dans l'URL va passer ces informations au serveur et donc n'est pas respectueux de la vie privé. Il faudrait plutôt stocker ça dans le navigateur.

@a2br
Copy link
Author

a2br commented Oct 30, 2020

Je comprends. Je n'ai jamais travaillé avec les URI fragments, c'est pour ça que j'ai utilisé les paramètres. Je n'ai pas pensé à l'enjeu concernant la vie privée, merci de me l'avoir rappelé ! Je vais adapter.

@betalabmi betalabmi closed this Oct 30, 2020
@betalabmi betalabmi reopened this Oct 30, 2020
@a2br
Copy link
Author

a2br commented Oct 30, 2020

Utilise maintenant les URI fragments.

@a2br a2br changed the title URI params support URI fragments support Oct 30, 2020
I forgot to remove this console.log()
@a2br
Copy link
Author

a2br commented Oct 30, 2020

Est-ce que vous pensez qu'il faudrait changer le : en = pour l'attribution des valeurs dans l'URI ?
Edit : le switch est maintenant effectué, c'est le = qui est utilisé

@a2br a2br marked this pull request as ready for review October 30, 2020 15:38
The 'creation time' vars didn't need a guard since they were not evaluated
@a2br a2br marked this pull request as draft October 30, 2020 16:06
@a2br a2br marked this pull request as ready for review October 30, 2020 16:15
Copy link

@naholyr naholyr left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Est-ce que vous pensez qu'il faudrait changer le : en = pour l'attribution des valeurs dans l'URI ? Ca pourrait préparer le terrain pour l'éventuelle arrivée de l'heure (hh:mm). Normalement, écrire des valeurs avec des : ne devrait pas poser de problème (ne prend en compte que le premier match), mais ça rendrait l'URI encore plus difficile à lire.

Le point virgule n'est il pas encore plus sûr ?

src/js/form.js Outdated Show resolved Hide resolved
a2br added 3 commits October 30, 2020 17:40
from #key:a,b; to #key=a,b& to look more like URL params
Not working yet, date and hour cannot be set
@a2br
Copy link
Author

a2br commented Oct 30, 2020

Est-ce que vous pensez qu'il faudrait changer le : en = pour l'attribution des valeurs dans l'URI ? Ca pourrait préparer le terrain pour l'éventuelle arrivée de l'heure (hh:mm). Normalement, écrire des valeurs avec des : ne devrait pas poser de problème (ne prend en compte que le premier match), mais ça rendrait l'URI encore plus difficile à lire.

Le point virgule n'est il pas encore plus sûr ?

Le point virgule était déjà utilisé, mais je suis finalement passé au & pour améliorer la visibilité (3ff2bfc), et c'est plus familier grâce aux params qui ont la même syntaxe.

Yes, a whole commit just for that.
@a2br a2br mentioned this pull request Oct 30, 2020
a2br added 2 commits October 30, 2020 18:34
Plus add some end-of-file empty line :)
By using URLSearchParams
@FuReT
Copy link

FuReT commented Nov 3, 2020

Merci pour le feedback, en effet on ne peut pas supprimer des raisons depuis l'URI, c'est un problème. Sera réglé prochainement.

Super merci ;)

@SimonGodefroid
Copy link

Damn, alors ca marche impec sur chromium mais impossible de le faire marcher sur Safari sur iPhone j'imagine que ce sera un edge case a traiter dans une autre issue.

@a2br
Copy link
Author

a2br commented Nov 3, 2020

@FuReT Le problème devrait être réglé. Je déploie le changement sur la branche d'Heroku et ça devrait aller, n'hésite pas à re-signaler un problème.
Edit: oui, pour moi le problème est réglé 👍

@a2br a2br marked this pull request as ready for review November 3, 2020 14:24
@a2br
Copy link
Author

a2br commented Nov 3, 2020

@SimonGodefroid Je serais incapable de debug la version mobile sur Safari, mais est-ce que tu peux donner des précisions s'il te plait?

@SimonGodefroid
Copy link

Bon ben c'est bizarre, je viens de tester sur Mac OS sur Safari sans probleme, en revanche sur iPhone 6SE iOS13 sur Safari je ne vois meme pas le formulaire sur la version Heroku (alors que je le vois sur le site https://media.interieur.gouv.fr/deplacement-covid-19/).

image
image
image

Voila j'ai que ca pas sur que ca aide ni que ce soit encore dans le scope de ta PR... et pour debugger c'est pareil j'ai pas tellement d'idee faudrait deja voir si quelqu'un ici reproduit l'erreur.

@a2br
Copy link
Author

a2br commented Nov 3, 2020

C'est très étrange, je n'ai absolument rien changé de l'interface... C'est la même page, sans formulaire, qui s'affiche quand le serveur n'est pas lancé...

@FuReT
Copy link

FuReT commented Nov 3, 2020

@FuReT Le problème devrait être réglé. Je déploie le changement sur la branche d'Heroku et ça devrait aller, n'hésite pas à re-signaler un problème.
Edit: oui, pour moi le problème est réglé 👍

Je te confirme que c’est ok pour moi sur iOS 14 safari,Firefox et brave. Je test sur plus d’env et te redis.

@SimonGodefroid
Copy link

Okay ouais c'est bizarre sur le vieil iOS de mon iPhone ça pète et ça passe nickel sur la latest (iPhone de ma copine), ça doit être un vieux bug donc edge case. En tout cas c'est top je viens d'essayer et c'est un game changer pour la création d'attestation ! Merci beaucoup pour cette fonctionnalité.

@a2br
Copy link
Author

a2br commented Nov 3, 2020

@SimonGodefroid Merci pour avoir testé ! 😄

@jmleroux
Copy link

jmleroux commented Nov 3, 2020

Testé et approuvé sur Galaxy S7. Merci pour l'initiative, j'espère que la PR sera validée. 👍

@krtab
Copy link

krtab commented Nov 3, 2020

Bonjour,

Je commente pour soutenir cette fonctionnalité ! En effet, le cadre administratif et légal actuel (ou plutôt son absence), fait qu'utiliser une attestation -- a fortiori numérique -- autre que celle officielle peut placer l'usager en situation de difficulté lors d'un contrôle.

La fonctionnalité proposée (et plus généralement toute API permettant de délivrer le pdf officiel) permettrait de développer sa propre interface (plus accessible, en d'autres langues que le français, etc...) sans compromettre la valeur juridique de l'attestation finalement délivrée.

@thomasdeniau
Copy link

J'espère également que cette PR sera acceptée. Il est possible de remplir le formulaire via une action JavaScript depuis Raccourcis sur iOS mais ce serait quand même bien plus propre de prendre les données en paramètre, et cela simplifierait le flot depuis l'appli Tous Anti Covid.

@a2br
Copy link
Author

a2br commented Nov 4, 2020

@thomasdeniau Oui, j'y ai aussi pensé! De même pour TAC, ça servirait d'API.

@ElijT
Copy link

ElijT commented Nov 4, 2020

Bien testé. Ca marche plutôt bien sur différentes configurations(Win10/Ubuntu/Android). Ca sauverait pas mal de temps d'avoir le raccourci!
Si je peux apporter quelques retours d'expérience:
La terminologie des alias pour les motifs de sortie ne me parait pas limpide (anecdotique) et l'utilisation du paramètre &auto est aussi un peu délicate si tous les champs ne sont pas remplis. C'est deux problèmes sont évidemment résolus dans une démarche API de TAC.
Et puis ça motiverait l'installation de TAC: On lance TAC en sortant de chez pour générer l'attestation et activer le tracing!!

@a2br
Copy link
Author

a2br commented Nov 4, 2020

@ElijT oui, &auto n'est pas vraiment fait pour être utilisé directement par un utilisateur, mais plutôt par un programme (donc par Shortcuts / TAC). Je pense rendre ce param + utile en ajoutant la proposition de @naholyr (#50 (comment)) concernant l'heure relative, qui devrait être relativement simple à utiliser par un humain.

@jmleroux jmleroux mentioned this pull request Nov 4, 2020
@yann120
Copy link

yann120 commented Nov 7, 2020

Hello @betalabmi, ça serait quoi le process à suivre pour merge cette PR ?
Beaucoup de monde à l'air de demander l'utilisation des paramètres pour permettre d'avoir des attestations en 1 click grace aux favoris du navigateur.
Et cette PR à l'air de bien tenir la route, @a2br a fait du super boulot! 👏

@FabienZa
Copy link

FabienZa commented Nov 23, 2020

Cette fonctionnalité est vraiment géniale, cependant j'ai une petite question.

L'utilisation des paramètres locaux empêchent (même en utilisant "auto") de faire fonctionner un script "classique" qui n'utilise pas de navigateur et de javascript pour générer l'attestation.

Par exemple impossible de faire un :
wget "..../index.html#mes-data&auto"
cela retourne systématiquement le .html

Est-il possible de contourner ce soucis ? J

De plus je ne comprend pas vraiment l'inconvéniant d'envoyer nos données dans la query au serveur, puisque de toute façon nous les transmettons avec le formulaire dans les millisecondes qui suivent afin de générer le .pdf...

@maximebochon
Copy link

maximebochon commented Nov 23, 2020

@FabienZa

De plus je ne comprend pas vraiment l'inconvéniant d'envoyer nos données dans la query au serveur, puisque de toute façon nous les transmettons avec le formulaire dans les millisecondes qui suivent afin de générer le .pdf...

Les données saisies dans le formulaire ne sont jamais transmises à un serveur. La génération du PDF est faite localement, côté client, en JavaScript. Cela se vérifie à la fois par observation des échanges réseau et par analyse du code source.

Par conséquent, un appel wget, sans interprétation de la page, ne produira pas de PDF. Si votre but est de disposer d'une ligne de commande se substituant à l'ouverture du site dans un navigateur, le mieux est peut-être d'extraire du code source la partie qui génère le PDF et de se créer un script JavaScript exécutable via Node.js.

@FabienZa
Copy link

@FabienZa

De plus je ne comprend pas vraiment l'inconvéniant d'envoyer nos données dans la query au serveur, puisque de toute façon nous les transmettons avec le formulaire dans les millisecondes qui suivent afin de générer le .pdf...

Les données saisies dans le formulaire ne sont jamais transmises à un serveur. La génération du PDF est faite localement, côté client, en JavaScript. Cela se vérifie à la fois par observation des échanges réseau et par analyse du code source.

Par conséquent, un appel wget, sans interprétation de la page, ne produira pas de PDF. Si votre but est de disposer d'une ligne de commande se substituant à l'ouverture du site dans un navigateur, le mieux est peut-être d'extraire du code source la partie qui génère le PDF et de se créer un script JavaScript exécutable via Node.js.

Ha d'accord merci pour la précision, je suppose qu'une API officielle sur laquelle on peut taper pour avoir un .pdf n'est pas prête de voir le jour alors.

@a2br
Copy link
Author

a2br commented Nov 23, 2020

@FabienZa

De plus je ne comprend pas vraiment l'inconvéniant d'envoyer nos données dans la query au serveur, puisque de toute façon nous les transmettons avec le formulaire dans les millisecondes qui suivent afin de générer le .pdf...

Les données saisies dans le formulaire ne sont jamais transmises à un serveur. La génération du PDF est faite localement, côté client, en JavaScript. Cela se vérifie à la fois par observation des échanges réseau et par analyse du code source.

Par conséquent, un appel wget, sans interprétation de la page, ne produira pas de PDF. Si votre but est de disposer d'une ligne de commande se substituant à l'ouverture du site dans un navigateur, le mieux est peut-être d'extraire du code source la partie qui génère le PDF et de se créer un script JavaScript exécutable via Node.js.

Ha d'accord merci pour la précision, je suppose qu'une API officielle sur laquelle on peut taper pour avoir un .pdf n'est pas prête de voir le jour alors.

En effet, ce n'est malheureusement pas utilisable en tant qu'API pour obtenir des fichiers, j'ai opté pour la solution la plus légère, donc l'utilisateur devra toujours se rendre sur la page.

@a2br
Copy link
Author

a2br commented May 5, 2021

Ah donc ils copient-collent le code dans un autre repo à chaque fois qu'un nouveau couvre-feu est annoncé ? @betalabmi vous avez entendu parler du versionnage, j'espère... ?

@yann120
Copy link

yann120 commented May 6, 2021

Ah donc ils copient-collent le code dans un autre repo à chaque fois qu'un nouveau couvre-feu est annoncé ? @betalabmi vous avez entendu parler du versionnage, j'espère... ?

en tout cas, pas sur qu'ils aient découvert la fonctionnalité pour voir les open pull requests et les issues 😅

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment