From 423ce958240fb285435d0160ff6cd9f8918bca17 Mon Sep 17 00:00:00 2001 From: Nicolas Paschoud <nicolas.paschoud@etu.hesge.ch> Date: Wed, 18 Dec 2019 23:05:49 +0100 Subject: [PATCH] Half of the doc --- documentation/Hyperdrive.md | 745 +++++++++++++++++++++++++++++++++++ documentation/hyperdrive.png | Bin 0 -> 39086 bytes 2 files changed, 745 insertions(+) create mode 100644 documentation/Hyperdrive.md create mode 100644 documentation/hyperdrive.png diff --git a/documentation/Hyperdrive.md b/documentation/Hyperdrive.md new file mode 100644 index 0000000..4f09df7 --- /dev/null +++ b/documentation/Hyperdrive.md @@ -0,0 +1,745 @@ +# Hyperdrive + +## Une introduction + +Dans le cadre du cours de Développement Web Avancé, nous avons du réaliser un projet web. Durant ce projet, nous avons du créer une API REST afin d'offrir un accès aux données. Ce projet a été réalisé en Javascript en utilisant Node JS. + +## L'application + +Le projet que nous avons choisi de réaliser est un drive. Pour des besoins personnels, nous avons jugé ce projet pertinent et l'avons donc réalisé. Le but est donc de permettre à un utilisateur de s'enregistrer et de stocker des fichiers sur la plateforme. Il a aussi la possibilité de les organiser en créant des dossiers. Il a aussi la possibilité de les partager avec d'autre utilisateurs du service. Nous avons créer une interface simple découpée en quatre partie : + +- Une zone de menu pour se connecter, se déconnecter et créer des dossiers / importer des fichiers. +- La zone de contenu du drive ou sont affichés tous les dossiers et fichiers de l'utilisateur. +- Une zone d'information sur le fichier (nom, son propriétaire, la date d'upload, l'adresse d'upload) +- Une zone de contenu affichants tous les fichiers que les autres utilisateurs partagent avec lui. + +L'utilisateur a la possibilité de s'inscrire ainsi que de se connecter au service. Lors de sa connexion, il reçoit un token lui permettant d'accéder à l'API. Lors de sa déconnexion, le token est détruit. Pour créer un dossier, il lui suffit de se mettre à un endroit spécifique et de cliquer sur le bouton "New File" après avoir renseigné le nom du dossier à créer. + +Pour permettre la géolocalisation des fichiers, nous avons utilisé 2 API publiques qui sont : + +- https://ip-api.com/ Cette API nous permet de récupérer les informations de localisation d'une adresse IP. Nous pouvons grâce à celle-ci, récupérer les latitude et longitude que nous stockons dans la base de données. +- http://bot.whatismyipaddress.com Cette API permet de récupérer l'adresse ip de l'ordinateur courant. Nous l'utilisons exclusivement pour la raisons suivantes. Nous travaillons en local, et n'avons pas déployé de serveur public. Nous ne pouvons donc pas récupérer l'adresse du client qui fait une requête sur l'API car il s'agit d'une adresse privée. Il est cependant facile de modifier cette partie du code pour utiliser l'adresse du client au cas ou nous voudrions rendre notre API public. + +## Installation + +Avant de faire fonctionner le site, assurez vous d'avoir la plateforme Node JS d'installée. Installer ensuite les packages nécessaire au fonctionnement du site en vous rendant à la racine du projet et en executant la commande suivante : *npm install* + +Pour démarrer le site il faut réaliser ces 2 étapes : + +- Se rendre dans le dossier *db* se trouvant dans la hiérarchie du projet et taper la commande *docker-compose up -d*. Assurez-vous que le port 3306 est libre pour permettre au service MySQL de démarrer correctement. +- Se rendre dans le projet ou se trouve le fichier *hyperdrive-rest*.js et taper la commande *node hyperdrive-rest.js*. après vous être assurer que le port 8080 n'est pas utilisé par un autre service. Le site est accessible à l'adress de votre ordinateur sur le port 8080. + +## Répartition + +Fleury Noé : + +- Upload / Download des fichiers + - Localisation de ceux-ci à l'upload +- JWT +- Partage des fichiers + +Paschoud Nicolas : + +- Base de donnée + - Requêtes SQL (sql-request.js) +- Affichage de l'arborescence dans le drive +- Affichage des informations du fichier + +## Architecture + +Notre architecture se présente sous cette forme. + + + +- Le bloc Client fais des appels à l'API hyperdrive qui lui réponds avec les données que le client souhaite. Le client les traites et les affiches à sa guise. +- L'API Hyperdrive réponds à des requêtes des clients. Il ne fait appel qu'en cas de besoin aux API *whatismyipaddress* et *ip-api*. +- L'API *ip-api* est appelée par hyperdrive seulement lorsque le client upload un fichier. Cet appel permet de retourner l'addresse de la personne en fonction de son IP. Les latitudes et longitudes sont stockée par l'hyperdrive dans le bloc SQL +- Le bloc whatismyipaddress n'est util que dans le cadre du développement. Cette API nous sert à récupérer notre IP pour ensuite faire un appel à *ip-api*. + +## Technologies + +Pour la réalisation de ce projet, nous avons utilisé la plateform Node JS pour la réalisation de notre API REST. Nous avons aussi réaliser une base de données relationnelle MySQL qui se trouve dans un container. Tout notre projet a été réaliser en Javascript en utilisant les modules Node JS suivant : + +- Express +- MySQL +- Crypto-js +- http + + \- Une représentation graphique de l’architecture + \- Les informations sur les technologies utilisées + \- Documentation des routes de l’API (adresse, méthode, paramètre, retours, etc.) - Toute informations utile à la compréhension de votre projet et au travail réalisé + +## Routes + +"use strict"; + +const CryptoJS = require("crypto-js"); + +const http = require("http"); + + + +const express = require('express'); + +const app = express(); + +const port = 8080; + +const sql = require('./sql-request'); + + + + + +///// JWT part ///// + + + +var valid_tokens = []; + + + +String.prototype.hashCode = function() { + + var hash = 0, i, chr; + + if (this.length === 0) return hash; + + for (i = 0; i < this.length; i++) { + + chr = this.charCodeAt(i); + + hash = ((hash << 5) - hash) + chr; + + hash |= 0; // Convert to 32bit integer + + } + + return hash; + +}; + + + +function tob64(elem){ + + return Buffer.from(elem.toString()).toString('base64').slice(0, -2); + +} + + + +function Header(typ, alg){ + + this.typ = typ; + + this.alg = alg; + + + + this.toString = function(){ return "{" + this.typ + "," + this.alg + "}"}; + +} + + + +function Payload(user, pass_enc){ + + this.user = user; + + this.pass_enc = pass_enc; + + + + this.toString = function(){ return "{" + this.user + "," + this.pass_enc + "}"}; + + + +} + + + +function Signature(token){ + + const secret = "our super hyperdrive secret" + new Date(); + + return CryptoJS.HmacSHA512(token, secret); + +} + + + +function JWT(pl_user, pl_pass){ + + this.header = new Header("jwt", "HS512"); + + this.payload = new Payload(pl_user, pl_pass.hashCode()); + + let token = tob64(this.header) + "." + tob64(this.payload); + + let signature = new Signature("token"); + + this.signedToken = token + "." + signature; + +} + + + + + +function add_token(token, user) { + + + + for (let i = 0; i < valid_tokens.length; i++) { + + if(Object.keys(valid_tokens[i])[0] == token){ + + valid_tokens.splice(i, 1); + + console.log("Unable to add token. (token already present)"); + + break; + + } + + } + + let obj = {}; obj[token.toString()] = user; + + valid_tokens.push(obj); + + console.log(valid_tokens) + + + + console.log("Successfully added token."); + + + + + +} + + + +function remove_token(token) { + + + + for (let i = 0; i < valid_tokens.length; i++) { + + if(Object.keys(valid_tokens[i])[0] == token){ + + valid_tokens.splice(i, 1); + + console.log("Successfully removed token from valid_tokens."); + + return true; + + } + + } + + + + console.log("Unable to remove token from valid_tokens. (Token not present)"); + + + + + +} + + + +// verify the token + +// return : user if exist + +function verify_token(token) { + + for (let i = 0; i < valid_tokens.length; i++) { + + if(Object.keys(valid_tokens[i])[0] == token) + + return valid_tokens[i][token]; + + } + + return false; + +} + + + + + +///// End JWT part ///// + + + + + +app.get('/', (req, res) => { + + res.sendFile(__dirname + '/front/index.html'); + +}); + + + +/* Login + + \* param : pseudo + + \* param : password + + */ + +// resCode : [ 0: User now logged in, 1: False password, 2: Invalid username, 3: Empty user or pass ] + +app.get('/login', (req, res) => { + + + + const user = req.query['user']; + + const pass = req.query['pass']; + + sql.userExist(user, pass, (element) => { + + if (element) + + check_login(user, pass, element, res); + + }); + + + +}); + + + +function check_login(user, pass, userObject, res) { + + if (!user || !pass) { + + res.send({ + + "route": "/login", + + "resCode": 4, + + "comment": "Please enter a username and a password." + + }) + + } + + else{ + + if (userObject){ + + if (userObject.passwd == pass.hashCode()) { + + let jwt = new JWT(user, pass); + + + + res.send({ + + "route": "/login", + + "resCode": 0, + + "signedToken": jwt.signedToken, + + "comment": `Password for user '${ user }' true.` + + }) + + + + add_token(jwt.signedToken, user); + + + + } + + else { + + res.send({ + + "route": "/login", + + "resCode": 1, + + "comment": `Password for user '${ user }' false.` + + }) + + } + + } + + else { + + res.send({ + + "route": "/login", + + "resCode": 2, + + "comment": `Username '${ user }' don't exist.` + + }) + + } + + } + +} + + + +// resCode : [ 0: Token is valid, 1: Token is not valid, 3: Empty token ] + +app.get('/testmytoken', (req, res) => { + + + + let token = req.query['token']; + + + + if (!token) { + + res.send({ + + "resCode": 3, + + "comment": "Please enter a token." + + }) + + } + + + + if (verify_token(token)){ + + res.send({ + + "resCode": 0, + + "comment": "Your token is valid." + + }) + + } + + else { + + res.send({ + + "resCode": 1, + + "comment": "Your token is not valid." + + }) + + } + + + +}) + + + +// resCode : [ 0: Logout ok, 1: Already logged out, 3: Empty token ] + +app.get('/logout/', (req, res) => { + + + + let token = req.query['token']; + + + + if (!token) { + + res.send({ + + "resCode": 3, + + "comment": "Please enter a token." + + }) + + } + + + + else { + + if (verify_token(token)){ + + remove_token(token); + + res.send({ + + "resCode": 0, + + "comment": "Your are now logged out." + + }) + + } + + else { + + res.send({ + + "resCode": 1, + + "comment": "Your are already logged out." + + }) + + } + + } + + + + + +}) + + + +/** + + \* Request register + + \* param : pseudo + + \* param : password + + */ + +app.get('/register/', (req, res) => { + + sql.addUser(req.query['login'], req.query['pass']); + + res.send(`Request for a register (${req.query['login']}, ${req.query['pass']})`); + +}) + + + +/** + + \* Request to share a file with a user + + \* param : file_id + + \* param : user1 + + \* param : user2 + + \* user1 share a file_id with user2 + + */ + +app.get('/share/:file_id/:to_user', (req, res) => { + + + + let token = req.query["token"] + + let user = verify_token(token); + + console.log("user : " + user) + + + + if (req.params['to_user'] && req.params['file_id']){ + + let to_user = req.params['to_user']; + + let file_id = req.params['file_id']; + + sql.addSharing(user, to_user, file_id).then(function (r) { + + res.send(r); + + }) + + } + + else{ + + res.send("Unable to share. Please provide a user to share with and a file_id."); + + } + +}) + + + +/** + + \* Request to upload a file + + */ + +app.get('/upload/', (req, res) => { + + let d = new Date(); + + let date_upload = d.getTime(); + + // "abcd", "un", "/a", 46.2054, 6.1459, date_upload + + + + http.get('http://bot.whatismyipaddress.com', (res) => { + + res.setEncoding('utf8'); + + res.on('data', function(chunk){ + + console.log(chunk); + + let ip = chunk; + + http.get('http://ip-api.com/json/' + ip, (resp) => { + + let data = ''; + + resp.on('data', (chunk) => { + + data += chunk; + + }); + + + + resp.on('end', () => { + + console.log(JSON.parse(data)); + + }); + + }); + + }); + + }); + + + + res.send(`Request for an upload (${req.query['file']})`) + +}); + + + +app.get('/download/:file_id', (req, res) => { + + let token = req.query["token"] + + let file_id = req.params["file_id"] + + + + let user = verify_token(token); + + if (user){ + + sql.verifyFileID(user, file_id, (filename) => { + + console.log(filename) + + if (filename){ + + res.download("files/" + file_id, filename); + + } + + else{ + + res.send("Can't download (not your file).") + + } + + }) + + } + + else{ + + res.send("Can't download (please be connected).") + + } + +}) + + + +/** + + \* This function return the content of a new path + + \* param + + */ + +app.get('/change-path*', (req, res) => { + + let path = req.params['0'].split("/"); + + path.pop(); + + path = path.join("/"); + + let tok = req.params['0'].split("/").pop(); + + let name = verify_token(tok); + + if (name) { + + let content = sql.changeDirectory(name, path, + + (content) => { + + res.send(content); + + }); + + } + +}) + + + +app.get('/create-path*', (req, res) => + +### /get-info + +La route get-info nous permet de récupérer les informations d'un fichier + +Paramètres : + +- file_id : Id du fichier dont on souhaite avoir les informations +- token : Il s'agit du token d'authentification + +### /show-shared-file + + + + + +\- Une conclusion \ No newline at end of file diff --git a/documentation/hyperdrive.png b/documentation/hyperdrive.png new file mode 100644 index 0000000000000000000000000000000000000000..e5dbfc582bf08530d910720444fae54da2cc6b62 GIT binary patch literal 39086 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 B8MFWZ literal 0 HcmV?d00001 -- GitLab