Skip to content

Commit

Permalink
feat: zeroaccident (#112)
Browse files Browse the repository at this point in the history
* feat: Ajoute un encart zeroaccident

* fix: Corrige l'affichage responsive de l'encart zeroaccident

* fix: nginx config

* fix: temp redirect to mobile stores

* fix: update zeroaccident

* fix: eslint

* feat: ajoute une page de redirection vers le store pour l'app ZeroAccident

* feat: redirige en fonction de la platform et du device

* fix: Politique de confidentialité 2024
  • Loading branch information
benguedj authored Mar 11, 2024
1 parent de0ff9e commit 6621e59
Show file tree
Hide file tree
Showing 25 changed files with 600 additions and 556 deletions.
40 changes: 1 addition & 39 deletions .kontinuous/env/prod/values.yaml
Original file line number Diff line number Diff line change
@@ -1,40 +1,2 @@
app:
host: 1000jours.fabrique.social.gouv.fr
ingress:
# adjustments for /acvc path
# proxy_upstream_name must be set to correct upstream
# https://docs.unity3d.com/Manual/webgl-deploying.html
annotations:
nginx.ingress.kubernetes.io/server-snippet: |
location ~ .+\.(data|symbols\.json)\.gz$ {
proxy_hide_header X-Content-Type-Options;
proxy_hide_header Content-Type;
gzip off; # Do not attempt dynamic gzip compression on an already compressed file
add_header Content-Encoding gzip;
add_header Content-Type application/gzip; # The correct MIME type here would be application/octet-stream, but due to Safari bug https://bugs.webkit.org/show_bug.cgi?id=247421, it's preferable to use MIME Type application/gzip instead.
set $proxy_upstream_name "nos1000jours-landing-app-http";
proxy_pass http://upstream_balancer;
}
location ~ .+\.js\.gz$ {
proxy_hide_header X-Content-Type-Options;
proxy_hide_header Content-Type;
gzip off; # Do not attempt dynamic gzip compression on an already compressed file
add_header Content-Encoding gzip; # The correct MIME type here would be application/octet-stream, but due to Safari bug https://bugs.webkit.org/show_bug.cgi?id=247421, it's preferable to use MIME Type application/gzip instead.
add_header Content-Type application/javascript; # The correct MIME type here would be application/octet-stream, but due to Safari bug https://bugs.webkit.org/show_bug.cgi?id=247421, it's preferable to use MIME Type application/gzip instead.
set $proxy_upstream_name "nos1000jours-landing-app-http";
proxy_pass http://upstream_balancer;
}
location ~ .+\.wasm\.gz$ {
proxy_hide_header X-Content-Type-Options;
proxy_hide_header Content-Type;
gzip off; # Do not attempt dynamic gzip compression on an already compressed file
add_header Content-Encoding gzip; # The correct MIME type here would be application/octet-stream, but due to Safari bug https://bugs.webkit.org/show_bug.cgi?id=247421, it's preferable to use MIME Type application/gzip instead.
add_header Content-Type application/wasm; # The correct MIME type here would be application/octet-stream, but due to Safari bug https://bugs.webkit.org/show_bug.cgi?id=247421, it's preferable to use MIME Type application/gzip instead.
set $proxy_upstream_name "nos1000jours-landing-app-http";
proxy_pass http://upstream_balancer;
}
nginx.ingress.kubernetes.io/configuration-snippet: |
more_set_headers "Content-Security-Policy: default-src 'none'; connect-src 'self' https://*.gouv.fr; font-src 'self' data:; img-src 'self'; script-src 'self' https://*.gouv.fr 'unsafe-inline' 'unsafe-eval'; frame-src 'self' https://*.gouv.fr; style-src 'self' 'unsafe-inline'";
more_set_headers "X-Frame-Options: sameorigin";
more_set_headers "X-XSS-Protection: 1; mode=block";
more_set_headers "X-Content-Type-Options: none";
host: 1000jours.fabrique.social.gouv.fr
48 changes: 20 additions & 28 deletions .kontinuous/values.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -12,36 +12,28 @@ app:
# proxy_upstream_name must be set to correct upstream
# https://docs.unity3d.com/Manual/webgl-deploying.html
annotations:
nginx.ingress.kubernetes.io/server-snippet: |
location ~ .+\.(data|symbols\.json)\.gz$ {
proxy_hide_header X-Content-Type-Options;
proxy_hide_header Content-Type;
gzip off; # Do not attempt dynamic gzip compression on an already compressed file
add_header Content-Encoding gzip;
add_header Content-Type application/gzip; # The correct MIME type here would be application/octet-stream, but due to Safari bug https://bugs.webkit.org/show_bug.cgi?id=247421, it's preferable to use MIME Type application/gzip instead.
set $proxy_upstream_name "nos1000jours-landing-zeroaccident-fix-app-http";
proxy_pass http://upstream_balancer;
}
location ~ .+\.js\.gz$ {
proxy_hide_header X-Content-Type-Options;
proxy_hide_header Content-Type;
gzip off; # Do not attempt dynamic gzip compression on an already compressed file
add_header Content-Encoding gzip; # The correct MIME type here would be application/octet-stream, but due to Safari bug https://bugs.webkit.org/show_bug.cgi?id=247421, it's preferable to use MIME Type application/gzip instead.
add_header Content-Type application/javascript; # The correct MIME type here would be application/octet-stream, but due to Safari bug https://bugs.webkit.org/show_bug.cgi?id=247421, it's preferable to use MIME Type application/gzip instead.
set $proxy_upstream_name "nos1000jours-landing-zeroaccident-fix-app-http";
proxy_pass http://upstream_balancer;
}
location ~ .+\.wasm\.gz$ {
proxy_hide_header X-Content-Type-Options;
proxy_hide_header Content-Type;
gzip off; # Do not attempt dynamic gzip compression on an already compressed file
add_header Content-Encoding gzip; # The correct MIME type here would be application/octet-stream, but due to Safari bug https://bugs.webkit.org/show_bug.cgi?id=247421, it's preferable to use MIME Type application/gzip instead.
add_header Content-Type application/wasm; # The correct MIME type here would be application/octet-stream, but due to Safari bug https://bugs.webkit.org/show_bug.cgi?id=247421, it's preferable to use MIME Type application/gzip instead.
set $proxy_upstream_name "nos1000jours-landing-zeroaccident-fix-app-http";
proxy_pass http://upstream_balancer;
}
nginx.ingress.kubernetes.io/configuration-snippet: |
more_set_headers "Content-Security-Policy: default-src 'none'; connect-src 'self' https://*.gouv.fr; font-src 'self' data:; img-src 'self'; script-src 'self' https://*.gouv.fr 'unsafe-inline' 'unsafe-eval'; frame-src 'self' https://*.gouv.fr; style-src 'self' 'unsafe-inline'";
more_set_headers "X-Frame-Options: sameorigin";
more_set_headers "X-XSS-Protection: 1; mode=block";
more_set_headers "X-Content-Type-Options: none";
set $gz_type "";
if ($request_uri ~* \.data\.gz$) {
set $gz_type "application/octet-stream";
}
if ($request_uri ~* \.symbols\.json\.gz$) {
set $gz_type "application/json";
}
if ($request_uri ~* \.js\.gz$) {
set $gz_type "application/javascript";
}
if ($request_uri ~* \.wasm\.gz$) {
set $gz_type "application/wasm";
}
if ($gz_type != "") {
gzip off;
more_set_headers "Content-Encoding: gzip";
more_set_headers "Content-Type: $gz_type";
}
2 changes: 1 addition & 1 deletion pages/404.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { useEffect } from "react";
import { useRouter } from "next/router";
import { useEffect } from "react";

export default function Custom404() {
const router = useRouter();
Expand Down
6 changes: 3 additions & 3 deletions pages/_app.js
Original file line number Diff line number Diff line change
Expand Up @@ -28,13 +28,13 @@ class MyApp extends App {
name="viewport"
content="width=device-width, initial-scale=1, shrink-to-fit=yes"
/>
<meta
name="description"
<meta
name="description"
content="Le compagnon numérique 'les 1000 premiers jours'
permet de suivre les étapes du projet de parentalité aux 2 ans de votre enfant.
Des articles rédigés par des professionnels et proposés en fonction de l'étape
à laquelle vous vous trouvez. Ainsi qu'un calendrier présentant tous les événements
des 1000 premiers jours."
des 1000 premiers jours."
/>
<meta name="author" content="" />
</Head>
Expand Down
10 changes: 7 additions & 3 deletions pages/_document.js
Original file line number Diff line number Diff line change
Expand Up @@ -27,14 +27,18 @@ export default class MyDocument extends Document {
} finally {
sheet.seal();
}
}
}
render() {
return (
<Html lang="fr">
<Head>
<link rel="shortcut icon" href="/img/favicon.png" />
<script dangerouslySetInnerHTML={{__html: `!function(t,e){var o,n,p,r;e.SV||(window.posthog=e,e._i=[],e.init=function(i,s,a){function g(t,e){var o=e.split(".");2==o.length&&(t=t[o[0]],e=o[1]),t[e]=function(){t.push([e].concat(Array.prototype.slice.call(arguments,0)))}}(p=t.createElement("script")).type="text/javascript",p.async=!0,p.src=s.api_host+"/static/array.js",(r=t.getElementsByTagName("script")[0]).parentNode.insertBefore(p,r);var u=e;for(void 0!==a?u=e[a]=[]:a="posthog",u.people=u.people||[],u.toString=function(t){var e="posthog";return"posthog"!==a&&(e+="."+a),t||(e+=" (stub)"),e},u.people.toString=function(){return u.toString(1)+".people (stub)"},o="capture identify alias people.set people.set_once set_config register register_once unregister opt_out_capturing has_opted_out_capturing opt_in_capturing reset isFeatureEnabled onFeatureFlags".split(" "),n=0;n<o.length;n++)g(u,o[n]);e._i.push([i,s,a])},e.SV=1)}(document,window.posthog||[]);
posthog.init('phc_4acRsG6jxERKWVghbenbwVNhFLKP9WRm7IeQoXr7TvJ',{api_host:'https://lafabriquenumerique-posthog.cloud-ed.fr'})`}}/>
<script
dangerouslySetInnerHTML={{
__html: `!function(t,e){var o,n,p,r;e.SV||(window.posthog=e,e._i=[],e.init=function(i,s,a){function g(t,e){var o=e.split(".");2==o.length&&(t=t[o[0]],e=o[1]),t[e]=function(){t.push([e].concat(Array.prototype.slice.call(arguments,0)))}}(p=t.createElement("script")).type="text/javascript",p.async=!0,p.src=s.api_host+"/static/array.js",(r=t.getElementsByTagName("script")[0]).parentNode.insertBefore(p,r);var u=e;for(void 0!==a?u=e[a]=[]:a="posthog",u.people=u.people||[],u.toString=function(t){var e="posthog";return"posthog"!==a&&(e+="."+a),t||(e+=" (stub)"),e},u.people.toString=function(){return u.toString(1)+".people (stub)"},o="capture identify alias people.set people.set_once set_config register register_once unregister opt_out_capturing has_opted_out_capturing opt_in_capturing reset isFeatureEnabled onFeatureFlags".split(" "),n=0;n<o.length;n++)g(u,o[n]);e._i.push([i,s,a])},e.SV=1)}(document,window.posthog||[]);
posthog.init('phc_4acRsG6jxERKWVghbenbwVNhFLKP9WRm7IeQoXr7TvJ',{api_host:'https://lafabriquenumerique-posthog.cloud-ed.fr'})`,
}}
/>
</Head>
<body id="page-top">
<Main />
Expand Down
98 changes: 54 additions & 44 deletions pages/cgu.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,23 @@ export default function CGU() {
<ContentLayout title="Conditions générales">
<h3>Présentation</h3>
<p>
1000 premiers jours est un outil qui participe du parcours 1000 jours de soutien à la parentalité. Elle peut traiter des données à caractère personnelles pour les finalités suivantes :
1000 premiers jours est un outil qui participe du parcours 1000 jours de
soutien à la parentalité. Elle peut traiter des données à caractère
personnelles pour les finalités suivantes :
</p>
<ul>
<li>Visualiser dans le territoire de vie du parent, les services, les interlocuteurs et les structures pouvant aider les parents ;</li>
<li>Informer les parents et les futurs parents selon leur parcours parental et l’âge de l’enfant ;</li>
<li>Permettre une évaluation de l’état de la mère après son accouchement.</li>
<li>
Visualiser dans le territoire de vie du parent, les services, les
interlocuteurs et les structures pouvant aider les parents ;
</li>
<li>
Informer les parents et les futurs parents selon leur parcours
parental et l’âge de l’enfant ;
</li>
<li>
Permettre une évaluation de l’état de la mère après son accouchement.
</li>
</ul>

<p>
Le code du logiciel est libre, et peut donc être vérifié et amélioré par
toutes et tous.
Expand All @@ -33,31 +42,31 @@ export default function CGU() {
l’exactitude du contenu des sites externes vers lesquels nous redirigeons
la navigation. Ces sites ne sont pas non plus régis par les mêmes
conditions d’utilisation, notamment en ce qui concerne leur traitement des
données à caractère personnel. Nous mettons 1000 premiers jours à disposition
sans garantie sur sa disponibilité, en « best effort ». Cela signifie que
d’éventuelles indisponibilités n’ouvriront pas droit à compensation
financière.
données à caractère personnel. Nous mettons 1000 premiers jours à
disposition sans garantie sur sa disponibilité, en « best effort ». Cela
signifie que d’éventuelles indisponibilités n’ouvriront pas droit à
compensation financière.
<h3>Vos données</h3>
<p>
1000 premiers jours ne vous demande ni ne stocke d’information nominative
telle que nom, prénoms ou adresse. Pour autant, lorsque vous que vous
demanderez à être contacté, vous nous transmettrez des coordonnées
nécessaires à la prise de contact par nos services. Ces coordonnées sont
des données personnelles et nous en avons donc déclaré le traitement
auprès de la CNIL. Nous conservons ces données pendant deux ans à
compter de la première saisie pour analyser les usages, mesurer l’impact
et la diffusion territoriale de 1000 premiers jours, et améliorer le service.
Vous avez un droit d’accès, de rectification et de suppression de vos
données. Pour l’exercer, envoyez-nous un courriel à l’adresse à
compléter en précisant les coordonnées transmises. Comme nous
n’enregistrons pas d’éléments nominatifs, seuls ces éléments peuvent
nous permettre de retrouver votre utilisation.{" "}
1000 premiers jours ne vous demande ni ne stocke d’information
nominative telle que nom, prénoms ou adresse. Pour autant, lorsque vous
que vous demanderez à être contacté, vous nous transmettrez des
coordonnées nécessaires à la prise de contact par nos services. Ces
coordonnées sont des données personnelles et nous en avons donc déclaré
le traitement auprès de la CNIL. Nous conservons ces données pendant
deux ans à compter de la première saisie pour analyser les usages,
mesurer l’impact et la diffusion territoriale de 1000 premiers jours, et
améliorer le service. Vous avez un droit d’accès, de rectification et de
suppression de vos données. Pour l’exercer, envoyez-nous un courriel à
l’adresse à compléter en précisant les coordonnées transmises. Comme
nous n’enregistrons pas d’éléments nominatifs, seuls ces éléments
peuvent nous permettre de retrouver votre utilisation.{" "}
</p>
<p>
Nous nous engageons à ne jamais exploiter les informations que vous nous
transmettrez dans un but commercial ou publicitaire. De manière
générale, 1000 premiers jours n’accepte aucune forme de publicité autre que
celle que constitue la présentation des aides des partenaires. Nous
générale, 1000 premiers jours n’accepte aucune forme de publicité autre
que celle que constitue la présentation des aides des partenaires. Nous
collectons également des données anonymes d’audience, indépendamment des
suivis de consommation effectués. Cela nous permet par exemple de
déterminer la durée d’un suivi et les pages à améliorer en priorité.
Expand All @@ -69,30 +78,31 @@ export default function CGU() {
</p>
<h3>Évolutions</h3>
<p>
Nous pouvons faire évoluer 1000 premiers jours sans information préalable.
Nous ajoutons régulièrement des aides, améliorons l’interface et
modifions des formulations sur la base de vos retours et des évolutions
règlementaires. Nous pouvons suspendre l’accès à 1000 premiers jours sans
information préalable, notamment pour des raisons de maintenance. Nous
mettons l’application à jour plusieurs fois par semaine.
L’indisponibilité ne dépasse généralement pas une dizaine de secondes.
Nous pouvons amender ces conditions d’utilisation. En cas de changement
significatif, une notification s’affichera lors de l’accès à 1000 premiers jours
au moins 30 jours avant l’entrée en vigueur des nouvelles
conditions. Tout l’historique de ces conditions est librement
Nous pouvons faire évoluer 1000 premiers jours sans information
préalable. Nous ajoutons régulièrement des aides, améliorons l’interface
et modifions des formulations sur la base de vos retours et des
évolutions règlementaires. Nous pouvons suspendre l’accès à 1000
premiers jours sans information préalable, notamment pour des raisons de
maintenance. Nous mettons l’application à jour plusieurs fois par
semaine. L’indisponibilité ne dépasse généralement pas une dizaine de
secondes. Nous pouvons amender ces conditions d’utilisation. En cas de
changement significatif, une notification s’affichera lors de l’accès à
1000 premiers jours au moins 30 jours avant l’entrée en vigueur des
nouvelles conditions. Tout l’historique de ces conditions est librement
accessible.
</p>
<h3>Utilisation</h3>
<p>
1000 premiers jours est en téléchargement libre sur les plateformes Apple App
Store et Google Play. Son utilisation est gratuite et facultative. Si
vous effectuez un suivi de votre consommation, vous acceptez ces
conditions d’utilisation. Comme indiqué dans l’article L. 112-9 du code
des relations entre le public et l’administration. L’utilisation de 1000 premiers jours requiert une connexion internet et un smartphone récent. Nous
nous réservons le droit de bloquer, sans information préalable ni
compensation financière, les usages mettant en péril l’utilisation du
logiciel par d’autres usagers. Cela nous permet d’anticiper
d’éventuelles attaques par déni de service.
1000 premiers jours est en téléchargement libre sur les plateformes
Apple App Store et Google Play. Son utilisation est gratuite et
facultative. Si vous effectuez un suivi de votre consommation, vous
acceptez ces conditions d’utilisation. Comme indiqué dans l’article L.
112-9 du code des relations entre le public et l’administration.
L’utilisation de 1000 premiers jours requiert une connexion internet et
un smartphone récent. Nous nous réservons le droit de bloquer, sans
information préalable ni compensation financière, les usages mettant en
péril l’utilisation du logiciel par d’autres usagers. Cela nous permet
d’anticiper d’éventuelles attaques par déni de service.
</p>
</ContentLayout>
);
Expand Down
Loading

0 comments on commit 6621e59

Please sign in to comment.