CAW1 2017 Projet de Yvan BOURRUT et Nicolas VIOLETTE

De Ensiwiki
Aller à : navigation, rechercher
Project schedule.png
Titre du projet Teem8
Cadre Projet Web (alternant 2a)
Page principale CAW1_Demonstration_Realisation

Équipe Yvan BOURRUT, Nicolas VIOLETTE
Encadrants Sébastien Viardot


Teem8 est un site Web mettant en place une abstraction du principe de "build" dans les jeux vidéos. Il permet aux utilisateurs de saisir des builds en se basant sur un système de template customisable, et de les partager. Une gestion des guildes (regroupements de personnages/joueurs) permet également de générer des statistiques groupée afin d'avoir une vue globale de l'ensemble des membres.

Screencast de présentation

Objectifs

Teem8.png

Problématique de base : Il n'existe pas système en ligne permettant la saisie de builds qui soit indépendant du jeu ciblé. Il n'y a pas moyen non plus d'avoir des statistiques de guilde sur l'ensemble des builds des membres.

Cahier des charges :

  • Site présentant les diverses informations stockées
  • Mise en place d'une modélisation des builds universelle (autant que faire se peut)
  • Gestion des utilisateurs
  • Gestion des guildes
  • Administration des guildes pour les utilisateurs qui en sont maître
  • Gestion de visibilité publique ou privée pour les personnages, les builds et les guildes
  • Possibilité de noter et commenter les builds
  • Aspect du site "responsive" pour les terminaux mobiles
  • Administration globale du site par les webmasters


Cas d'usage

Liste des possibilités (additives selon les rôles)

Pour tous les utilisateurs :

  • Recherche sur le site
  • Accès aux pages dédiées à chaque jeux
  • Accès aux builds publiques et leurs commentaires
  • Accès aux guildes publiques
  • Accès aux profils des utilisateurs

+ Si utilisateur connecté :

    • Modification de sa page de profil
    • Saisie/modification/suppression de personnages
    • Saisie/modification/suppression de guildes
    • Création/modification/suppression de builds
    • Accès aux personnages privés s'ils sont les siens
    • Accès aux guildes privées si elles sont les siennes ou qu'il y possède un personnage
    • Accès aux builds privés s'ils sont les siens
    • Possibilité de commenter les builds

+ Si utilisateur maître d'une ou plusieurs guilde :

      • Modification/suppression de ses guildes
      • Acceptation/Exclusion des personnage de ses guildes

+ Si l'utilisateur est administrateur :

        • Création/suppression des jeux
        • Upload/suppression de templates pour les builds de chaque jeu

Modèle de données

Les classes présentées dans le modèle UML ci-dessus ont été implémenté.

UML teem8.jpg


Choix techniques

Le projet a été réalisé en utilisant le framework Play. Les tests ont été fait avec JUnit pour le modèle, et Selenium pour les vues.

Durant la conception, un certain nombre de problèmes ont nécessité un traitement particulier :

Template

Dans l'optique de rendre le site compatible avec un maximum de jeux, possédant pourtant des mécanismes de builds souvent très différents, nous avons dû trouver une solution pour avoir néanmoins un système de template adaptable. La solution a été de lier chaque jeu à un certain nombre de fichiers zip, contenant principalement du HTML, du Javascript, du CSS et des images, qui s'occupent seulement de l'affichage des builds. Le serveur ne s'occupe que du stockage des données utiles à chaque template, et laisse ceux-ci les traiter pour afficher à l'utilisateur son build sous une forme esthétiquement plaisante qui est cohérente avec l'affichage en-jeu. C'est également les templates (vu qu'ils sont les seuls à savoir quel type de données ils stockent) qui se charge de l'affichage des statistiques dans les pages de guildes. Un template est un fichier zip constitué des éléments suivants :

  • index_build.html et index_guild.html : des <body> de HTML contenant le corps des affichages
  • des fichiers de ressources (js/css/images/...)

Les fonctions javascript des templates peuvent utiliser un certain nombre de fonctions mises à dispositions :

  • getData() : Récupère dans la BDD les données du build ou de la guilde
  • getBasePathRessource() : Récupère l'URL dynamique servant à accéder aux autres ressources du template
  • addFileCss(path) : inclusion de fichier de ressource css
  • addFileJs(path) : inclusion de fichier de ressource javascript
  • Pour les builds seulement :
    • save(data) : stock les données du build dans la BDD
    • canSave() : vérifie les permissions de sauvegarde

Sandboxing

La façon dont les templates de builds ont été implémenté donne la possibilité aux administrateur (mais potentiellement, plus tard, à tout utilisateur "développeur") d'uploader des fichiers html+css+javascript à interpréter. Ceci est prône à de nombreuses failles de sécurités. Nous avons protégé l'application de celles-ci en sandboxant le template dans une iframe (en utilisant des propriété html5 de sécurisation), et en interdisant l'accès au site à tout navigateur trop vieux pour permettre la protection de cette iframe. Ceci n'est pas vraiment gênant car les (très très très) peu nombreux utilisateurs qui utiliseraient de tel navigateur ne se croisent pas avec notre cible de marché (les joueurs de jeux vidéos). Le transit d'information entre la page mère et le contenu de l'iframe est réalisé en utilisant les postMessages, un protocole textuel d'échange permettant de seulement lui fournir les données dont il a besoin pour travailler.

Rendu

Contenu du zip :

  • L'ensemble du code
  • L'ensemble des jeux de tests
  • Fichier de README contenant les instructions d'installation

Screencast de présentation

Futur

Afin de pouvoir être totalement publiée en tant que site autonome, l'application a besoin des points suivants :

  • Développement de templates complets pour quelques jeux
  • Permettre à des utilisateurs "développeurs" de proposer des templates
  • Finalisation de l'aspect esthétique du site (de nombreux détails restent à terminer)
  • Branchement aux API de certains jeux pour récupérer directement les builds des joueurs (et leur éviter la saisie manuelle de ces derniers)
  • Ajout d'éléments "sociaux" plus poussés : commentaires de commentaires, appréciation des builds, liaison aux réseaux sociaux, etc.