CAW1 2018 Projet de Dan DEVAUCOUP

De Ensiwiki
Aller à : navigation, rechercher
Project schedule.png
Titre du projet CAW1 2018 Projet de Dan DEVAUCOUP
Cadre Projet Web (2AA)
Page principale CAW1_Demonstration_Realisation

Équipe Dan DEVAUCOUP
Encadrants Sébastien Viardot


Description

Notes est une solution d'hébergement dédié de notes et de listes pouvant gérer les notes de plusieurs utilisateurs de façon indépendante.

L'objectif est de proposer une solution indépendante n'utilisant pas de service tiers permattant la protection de la vie privée des utilisateurs.

Technologies utilisées

  • Backend :
- NodeJS avec Express
- Prévu pour une base de données MongoDB
- Tests effectués avec Mocha
  • Fontend :
- VelocityJS avec son module UI
- Superagent

Architecture

Organisation des fichiers

L'organisation est classique d'une application NodeJS/Express :

Le fichier de lancement se trouve dans le répertoire bin. Le fichier app.js définie les principaux mecanismes de l'application et le fichier mongo.js définie le DAO de l'application. Les différentes routes de l'API se trouvent de le dossier routes, le dossier test contient le fichier de test Mocha utilisé pour les tests de l'API. La partie cliente se trouve dans le dossier public. Il contient la page d'accueil HTML statique et les différents fichiers ressources de l'application. Le CSS comme le javascript est découpé en plusieurs fichiers, le fichers de base (style.css ou script.js) contient tout les mecanismes de base pour l'utilisateurs, le fichiers util qui contient des mecanismes dit utilitaires, le fichier popup qui contient tout les mecanismes liés aux popups et enfin le fichier admin (du dossier admin) qui contient tout les mecanismes utiles pour la partie administration. Le CSS contient une page supplémentaire responsive qui contient les styles modifiés pour petit écran, le Javascript contient en plus les bilibiothèques utilisées pour la vue. Le dossier admin contient aussi des composants HTML insérés lors du passage de l'application en mode administration.

Stockage des données

Le stockage des données se fait via le service MongoDB, cette solution a été choisie parce que le service était déjà présent et utilisé sur l'ordinateur chargé de la production. Les données sont organisées en deux collections :

  • Utilisateurs :
Chaque document se décompose avec le nom d'utilisateur, le mot de passe (encrypté), l'heure à laquelle la dernière connexion a été enregistrée, la position à laquelle la dernière connexion a été localisée, la liste des connexions avec la position et l'heure pour chaque connexion.
  • Notes :
Chaque notes est décomposé avec son contenu (ou liste de contenu si c'est une liste) et l'utilisateur correspondant à la note.

Developpement de l'application

L'application a été développée avec NodeJS couplé avec Express. L'idée était de faire une application vers le type dit "REST" API. C'est-à-dire que le serveur fournis une seule vue toujours dans le même état à son départ et c'est l'utilisateur qui l'a fait évolué en fonction de son interaction. L'évolution de la vue est côté client et tout le reste de l'API reste toujours accessible en fonction des droits de l'utilisateur.

Description de l'API

L'API est developpé de façon a renvoyer des codes erreurs si les requetes sont éronées.

  • / :
GET : fourni la vue navigateur
  • /ping :
GET : donne le nom d'utilisateur si le token en cookie est valide
  • /auth :
GET (query token=?) : envoie un cookie avec un code d'identification pour l'utilisateur correspondant au mot de passe envoyé (paramètre token)
* /auth/disconnect
 : GET : supprime le cookie et renvoie le client à la page racine de l'application

Cette partie de l'api necessite l'authentification utilisateur :

  • /user :
* /user/connections
GET : renvoie toutes les connections actives de l'utilisateur connecté
* /user/connection
DELETE (body {coid:?}) : supprime la connection donnée en paramètre si elle appartient à l'utilisateur connecté
* /user/notes
GET : renvoie toutes les notes/listes de l'utilisateur
DELETE (no body) : supprime toutes les notes de l'utilisateur connecté
(body {userId:[?,?,...]}) : si l'utilisateur connecté est un administrateur, supprime toutes les notes de tout les utilisateurs données en paramètre
  • /note :
PUT (body {elem:{title:?,content:?}}) : ajoute une nouvelle note à l'utilisateur avec pour titre le champ title (peut etre vide) et pour contenu le champ content (qui peut etre un tableau pour former une liste)
DELETE (body {noteId:?}) : supprime la note/liste correspondant à l'ID donnée en paramètre si elle appartient à l'utilisateur
* /note/check
POST (body {itemId:?,check:?}) : Coche ou non (paramètre check booléen) l'item visé pour l'ID donné

Cette partie de l'api est accessible qu'avec une identification d'administrateur

  • /users :
GET : renvoie toutes les informations des différents utilisateurs
PUT (body {userids:?}) : renvoie le nouveau ou les nouveaux mots de passes des utilisateurs donnés en paramètre
POST (body {userids:?}) : supprime toutes les connexions des utilisateurs donnés en paramètre
DELETE (body {userids:?}) : supprime le ou les utilisateurs donnés en paramètres
* /users/new
GET (query name=?) : créer un nouvel utilisateur avec pour nom le paramètre donné et renvoie son mot de passe

Cas d'usages

Use case Dan D.png


Suivi du projet

Le projet peu être suivi sur son dépot gitlab.

Une version en production est disponible à cette adresse.