Aller au contenu principal

Activation des CGU / EULA

CGU signifie conditions générales d'utilisation. EULA signifie End User Licence Agreement. Dans Lagoon, les deux termes désignent le contrat que l'utilisateur final doit accepter avant d'utiliser l'application.

Vue d'ensemble​

Certaines applications doivent demander l'acceptation d'un contrat par l'utilisateur final, par exemple pour l'informer d'un traitement particulier de ses données. Les CGU sont alors affichées dans une popup au lancement de l'application et ne disparaissent qu'après acceptation.

Lagoon prend en charge :

  • l'affichage du contenu CGU/EULA ;
  • la validation par l'utilisateur final ;
  • un mode statique basé sur le Dico.xml du projet client ;
  • un mode dynamique basé sur la base de données ;
  • un mode partagé basé sur des fichiers HTML côté serveur.

Par défaut, une application Lagoon ne définit pas de CGU. Si l'application les nécessite, vous devez activer l'option, choisir un mode de fonctionnement et renseigner le texte dans les langues supportées.

Activer la demande d'acceptation​

Dans le projet Client, activez RequireEulaConsent dans Main.cs.

Main.cs
public class Main : LgCustomApplication
{
protected override void OnConfigureBehavior(ApplicationBehavior app)
{
// Demande l'acceptation des CGU avant l'utilisation de l'application.
app.RequireEulaConsent = true;
}
}

La démonstration active généralement cette configuration uniquement en RELEASE.

Main.cs
public class Main : LgCustomApplication
{
protected override void OnConfigureBehavior(ApplicationBehavior app)
{
#if RELEASE
// Active les CGU en production et charge leur contenu depuis le serveur.
app.RequireEulaConsent = true;
app.EulaFromServer = true;
#endif
}
}

Mode statique : contenu dans Dico.xml​

Le mode statique est le mode par défaut. Le contenu est défini dans le Dico.xml du projet Client avec les clés EulaContent et EulaVersion.

Dico.xml
<string key="EulaContent" fr="Contenu des conditions générales d'utilisation" en="Content of End User Licence Agreement" />
<string key="EulaVersion" fr="1" en="1" />
CléDescription
EulaContentContenu des CGU. Le contenu peut inclure de la mise en forme HTML.
EulaVersionVersion des CGU. Si la valeur change entre deux livraisons, les utilisateurs doivent accepter à nouveau les CGU.

Le numéro de version doit être identique quelle que soit la langue, car la revalidation est globale à l'application.

Mode dynamique : contenu en base de données​

Dans ce mode, les CGU sont stockées en base de données et synchronisées avec le dictionnaire client au lancement de l'application.

Main.cs
public class Main : LgCustomApplication
{
protected override void OnConfigureBehavior(ApplicationBehavior app)
{
// Demande les CGU et charge leur contenu depuis le serveur.
app.RequireEulaConsent = true;
app.EulaFromServer = true;
}
}

La table Eula contient le contenu des CGU par langue et la version courante. Vous pouvez initialiser ces valeurs dans OnModelCreating.

ApplicationDbContext.cs
protected override void OnModelCreating(ModelBuilder builder)
{
base.OnModelCreating(builder);

// Initialise une version commune et un contenu par langue supportée.
builder.Entity<Eula>().HasData(new Eula() { Id = Eula.VersionKey, Value = "1" });
builder.Entity<Eula>().HasData(new Eula() { Id = "fr", Value = "CGU" });
builder.Entity<Eula>().HasData(new Eula() { Id = "en", Value = "EULA" });
}

Le modèle Eula expose les propriétés Id et Value, ainsi que les constantes Eula.VersionKey et Eula.ContentKey.

Modifier les CGU dynamiques​

Lagoon n'embarque pas de page d'administration des CGU côté client. Vous pouvez en ajouter une dans votre application. Côté serveur, le service ILgEulaManager permet de gérer les contenus.

EulaController.cs
[ApiController]
[Route("api/[controller]")]
public class EulaController : LgControllerBase
{
private readonly ILgEulaManager _eulaManager;

public EulaController(ILgEulaManager eulaManager)
{
_eulaManager = eulaManager;
}
}
MéthodeDescription
GetAllEula()Retourne la liste des CGU configurées, avec un contenu HTML assaini.
SetEula(string languageKey, string eula, bool updateVersion = true)Crée ou met à jour le texte pour une langue (le contenu HTML est assaini avant l'enregistrement). Avec updateVersion à true, les utilisateurs devront revalider.
GetEulaVersion()Retourne la version courante des CGU.
ForceEulaRevalidation()Force une revalidation des CGU.
info

Ce service s'utilise pour le mode dynamique. En mode statique, modifiez le Dico.xml. En mode partagé, modifiez les fichiers HTML sources.

Mode partagé : fichiers HTML côté serveur​

Dans ce mode, les CGU sont extraites de fichiers, stockées en base de données et synchronisées avec le dictionnaire client au lancement. Lorsqu'un fichier source est modifié, les applications qui l'utilisent demanderont une revalidation.

Côté client, utilisez la même configuration que le mode dynamique :

Main.cs
public class Main : LgCustomApplication
{
protected override void OnConfigureBehavior(ApplicationBehavior app)
{
// Les CGU sont chargées depuis le serveur.
app.RequireEulaConsent = true;
app.EulaFromServer = true;
}
}

Côté serveur, configurez un fichier par langue dans appsettings.json.

{
"Lagoon": {
"EulaFiles": [
{
"LanguageKey": "en",
"FilePath": "C:\\Temp\\SmallApps_GDPR.htm"
},
{
"LanguageKey": "fr",
"FilePath": "C:\\Temp\\SmallApps_GDPR - FR.htm"
},
{
"LanguageKey": "it",
"FilePath": "C:\\Temp\\SmallApps_GDPR - IT.htm"
}
]
}
}
CléDescription
LanguageKeyCode langue du fichier, par exemple fr, en ou it.
FilePathChemin du fichier HTML contenant le texte des CGU.

Assainissement du contenu HTML​

Les CGU sont affichées à tous les utilisateurs comme du HTML. En mode dynamique et en mode partagé, le serveur assainit donc leur contenu avec le service LgHtmlSanitizer : les scripts, les gestionnaires d'événements, les URL javascript:, les formulaires et les cadres sont supprimés.

  • À l'écriture : SetEula enregistre le contenu assaini.
  • À la lecture : GetAllEula assainit aussi le contenu stocké avant l'introduction de l'assainissement et le contenu des fichiers du mode partagé. La base de données n'est pas modifiée.

Un contenu qui contient une balise html ou body est traité comme un document complet : les éléments style (eux-mêmes assainis), l'attribut class et les règles @page, @media et @font-face sont conservés, pour qu'un fichier exporté d'un traitement de texte garde sa mise en page. Les autres éléments du head (meta, title, link, script…) sont supprimés. Vérifiez le rendu de vos fichiers .htm après la mise à jour.

Les clients qui ont déjà les CGU en cache les téléchargent à nouveau une fois, sans revalidation par les utilisateurs.

attention

Une implémentation personnalisée de ILgEulaManager ne bénéficie pas de cet assainissement : injectez LgHtmlSanitizer et appelez-le vous-même. Le contenu du mode statique (Dico.xml) fait partie de l'application et n'est pas assaini.