diff --git a/projet/db/data.sql b/projet/db/data.sql index 072a7938fc9f9de27f2352648757c4ba3ccb5e3b..6ed4bbf3aef5c0b1eda5d7ea9275580b1c3e3790 100644 --- a/projet/db/data.sql +++ b/projet/db/data.sql @@ -6,7 +6,7 @@ VALUES ("b", "test"), ("c", "test"), ("d", "test"), - ("e", "test"); + ("e", "test"); INSERT INTO Paths VALUES diff --git a/projet/db/hyperdrive.sql b/projet/db/hyperdrive.sql index a7c6d2438d1d27198e5a9e9f870cbba00c151cb6..d1c415c368b3b12ba7d40e1fb059822e39077581 100644 --- a/projet/db/hyperdrive.sql +++ b/projet/db/hyperdrive.sql @@ -47,7 +47,8 @@ VALUES ("b", "test"), ("c", "test"), ("d", "test"), - ("e", "test"); + ("e", "test"), + ("noe", "prov"); INSERT INTO Paths VALUES @@ -57,7 +58,8 @@ VALUES ("/c", "c", NULL), ("/c/test", "c", "/c"), ("/d", "d", NULL), - ("/e", "e", NULL); + ("/e", "e", NULL), + ("/n", "noe", NULL); INSERT INTO Files VALUES @@ -66,7 +68,8 @@ VALUES ("@dfsg", "trois", "/c/test", 46.2054, 6.1459), ("gbvaf", "quatre", "/b", 46.2054, 6.1459), ("dsfgh", "cinq", "/d", 46.2054, 6.1459), - ("sdfa", "six", "/e", 46.2054, 6.1459); + ("sdfa", "six", "/e", 46.2054, 6.1459), + ("liblb", "myfile", "/n", 46.2054, 6.1459); INSERT INTO Shares VALUES diff --git a/projet/hyperdrive-rest.js b/projet/hyperdrive-rest.js index b5f69a3cc6e13b6905bff54ff758b5a837437857..e7642116290d8757a7ce4ef8d6aff9078f9a588c 100644 --- a/projet/hyperdrive-rest.js +++ b/projet/hyperdrive-rest.js @@ -54,31 +54,47 @@ function JWT(pl_user, pl_pass){ } -function add_token(token) { +function add_token(token, user) { - if (valid_tokens.indexOf(token) === -1) { - valid_tokens.push(token.toString()); - } - else { - console.log("Unable to add token to valid_tokens. (token already present)"); + 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; + } } + obj = {}; obj[token.toString()] = user; + valid_tokens.push(obj); + console.log(valid_tokens) + + console.log("Successfully added token."); + } function remove_token(token) { - if (valid_tokens.indexOf(token) != -1) { - var index = valid_tokens.indexOf(token); - valid_tokens.splice(index, 1); - } - else { - console.log("Unable to remove token from valid_tokens. (Token not present)"); + 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) { - return (valid_tokens.indexOf(token) !== -1); + for (let i = 0; i < valid_tokens.length; i++) { + if(Object.keys(valid_tokens[i])[0] == token) + return valid_tokens[i][token]; + } + return false; } @@ -136,7 +152,7 @@ app.get('/login', (req, res) => { "comment": `Password for user '${ user }' true.` }) - add_token(jwt.signedToken); + add_token(jwt.signedToken, user); } else { @@ -236,8 +252,27 @@ app.get('/register/', (req, res) => { * param : user2 * user1 share a file_id with user2 */ -app.get('/share/:file_id', (req, res) => { - res.send(`Request for a file sharing (id: ${req.params['file_id']})`) +app.get('/share/:file_id/:to_user', (req, res) => { + + token = req.query["token"] + user = verify_token(token); + console.log("user : " + user) + + if (req.params['to_user'] && req.params['file_id']){ + + to_user = req.params['to_user']; + 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."); + } + + }) /** diff --git a/projet/sql-request.js b/projet/sql-request.js index 37e54d0f14d3cad14126c7143a1a735284c6322b..2e66161c423c325002bf99981b3d74641e8fb8b2 100644 --- a/projet/sql-request.js +++ b/projet/sql-request.js @@ -124,6 +124,53 @@ function changePath(login, path){ ]; } +// verify if a file_id is at a user +function verify_user_file_id(file_id, login){ + + return new Promise(resolve => { + let q = `SELECT (login) FROM Files as F LEFT JOIN Paths as P ON F.paths = P.paths WHERE F.file_id = '${file_id}';` + con.query(q, function(err, res) { + if (err) { + console.log("Error while veryfing file_id for user"); + console.log(err); + resolve(false); + } + console.log(res.length) + // return new Promise(resolve => resolve("resolved")); + if (res.length > 0){ + if (res[0].login == login) + resolve(true); + resolve(false); + } + resolve(false); + }); + }); +} + +async function addSharing(login, to_user, file_id){ + + verif = await verify_user_file_id(file_id, login); + + if (verif){ + let q = `INSERT INTO Shares VALUES ('${login}', '${to_user}', '${file_id}');`; + con.query(q, function(err, res) { + if (err) { + console.log("Error while adding a share path"); + console.log(err); + return "Error sharing - (DB error)"; + } + }); + // return "New sharing (", login, " --> " + to_user + "( - file_id : " + file_id + ")) added succesfully !"; + return "Sharing ok." + } + else{ + return "Unable to share, this is not your file."; + } + + +} + exports.userExist = userExist; exports.addUser = addUser; -exports.addPath = addPath; \ No newline at end of file +exports.addPath = addPath; +exports.addSharing = addSharing; \ No newline at end of file