diff --git a/projet/db/hyperdrive.sql b/projet/db/hyperdrive.sql index b28469cf73a7ce9e6e9f67d3366f698f1e097af6..ce9d4467a757b43e994184c5ef235f3c37320742 100644 --- a/projet/db/hyperdrive.sql +++ b/projet/db/hyperdrive.sql @@ -26,7 +26,6 @@ CREATE TABLE IF NOT EXISTS Files ( paths varchar(400) NOT NULL, lat FLOAT, lng FLOAT, - addedon INT, PRIMARY KEY (file_id), FOREIGN KEY (paths) REFERENCES Paths(paths), FOREIGN KEY (login) REFERENCES Users(login) @@ -66,13 +65,13 @@ VALUES INSERT INTO Files VALUES - ("abcd", "un", 'a', "/a", 46.2054, 6.1459, 1576691707), - ("ab", "deux", 'a', "/a", 46.2054, 6.1459, 1576691707), - ("@dfsg", "trois", 'c', "/c/test", 46.2054, 6.1459, 1576691707), - ("gbvaf", "quatre", 'b', "/b", 46.2054, 6.1459, 1576691707), - ("dsfgh", "cinq", 'd', "/d", 46.2054, 6.1459, 1576691707), - ("sdfa", "six.txt", 'e', "/e", 46.2054, 6.1459, 1576691707), - ("liblb", "myfile.txt", 'noe', "/n", 46.2054, 6.1459, 1576691707); + ("abcd", "un", 'a', "/a", 46.2054, 6.1459), + ("ab", "deux", 'a', "/a", 46.2054, 6.1459), + ("@dfsg", "trois", 'c', "/c/test", 46.2054, 6.1459), + ("gbvaf", "quatre", 'b', "/b", 46.2054, 6.1459), + ("dsfgh", "cinq", 'd', "/d", 46.2054, 6.1459), + ("sdfa", "six.txt", 'e', "/e", 46.2054, 6.1459), + ("liblb", "myfile.txt", 'noe', "/n", 46.2054, 6.1459); INSERT INTO Shares VALUES diff --git a/projet/front/index.html b/projet/front/index.html index 755d6760024f0dc5423cf6e31fe0c05527edd806..8430d32a298de80e98ec83d421504199589d707f 100644 --- a/projet/front/index.html +++ b/projet/front/index.html @@ -34,6 +34,11 @@ <div id="content-drive"> </div> + <form action="/upload/n" method="POST" encType="multipart/form-data"> + Choose a file :<br> + <input type="file" name="my_file"><br> + <input type="submit" value="Send"> + </form> </div> <div id="info"> <h3>Infos</h3> diff --git a/projet/hyperdrive-rest.js b/projet/hyperdrive-rest.js index d07ff335cbc53c8a3ec1a49214db2db02af672e3..a4da66334b36af17363362032385b22ccba6ddfa 100644 --- a/projet/hyperdrive-rest.js +++ b/projet/hyperdrive-rest.js @@ -1,6 +1,20 @@ "use strict"; const CryptoJS = require("crypto-js"); const http = require("http"); +var fileupload = require("express-fileupload"); +var multer = require('multer') + + +var storage = multer.diskStorage( + { + destination: './files/', + filename: function ( req, file, cb ) { + cb( null, Math.round(Math.random()*100) + Date.now().toString() ); + } + } +); +var upload = multer( { storage: storage } ); + const express = require('express'); const app = express(); @@ -260,35 +274,76 @@ app.get('/share/:file_id/:to_user', (req, res) => { /** * 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; - }); +// app.get('/upload/', (req, res) => { +// let d = new Date(); +// let date_upload = d.getTime(); +// // "abcd", "un", "/a", 46.2054, 6.1459, date_upload + + + +// res.send(`Request for an upload (${req.query['file']})`) +// }); - resp.on('end', () => { - console.log(JSON.parse(data)); + + +app.post('/upload*', upload.single('my_file'), (req, res) => { + // res.send(`Request for an upload (${req.query['file']})`) + + let token = req.query["token"] + let user = verify_token(token) + + if (user){ + let path = req.params['0'] + + if (req.file){ + + var file_id = Math.round(Math.random() * 100) + Date.now(); + var file_name = "test" + + + + + let lat; + let lon; + + http.get('http://bot.whatismyipaddress.com', (result) => { + result.setEncoding('utf8'); + result.on('data', function(chunk){ + let ip = chunk; + http.get('http://ip-api.com/json/' + ip, (resp) => { + let data = ''; + resp.on('data', (chunk) => { + data += chunk; + }); + + resp.on('end', () => { + lat = JSON.parse(data).lat.toFixed(3); + lon = JSON.parse(data).lon.toFixed(3); + + // add to BDD + sql.addFile(file_id, file_name, user, path, lat, lon, (result) => { + res.send(result) + }) + + }); + }); }); }); - }); - }); + } + else{ + console.log("Please enter a file"); + } + } + else{ + res.send("Please be connected") + } + - 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){ @@ -388,4 +443,6 @@ app.get('/show-shared-file', (req, res) => { }); app.use(express.static('front')); +app.use(fileupload()); +var upload = multer({ dest: "files/" }) app.listen(port, () => console.log(`Hyperdrive listening on port ${port}!`)) diff --git a/projet/package-lock.json b/projet/package-lock.json index 745535d72e8dc11bc392eda385748d05bd7dcc3b..7ed6f24740dfd435e3cdb4209364c697ddbcf70f 100644 --- a/projet/package-lock.json +++ b/projet/package-lock.json @@ -13,6 +13,11 @@ "negotiator": "0.6.2" } }, + "append-field": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/append-field/-/append-field-1.0.0.tgz", + "integrity": "sha1-HjRA6RXwsSA9I3SOeO3XubW0PlY=" + }, "array-flatten": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", @@ -40,11 +45,35 @@ "type-is": "~1.6.17" } }, + "buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" + }, + "busboy": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/busboy/-/busboy-0.3.1.tgz", + "integrity": "sha512-y7tTxhGKXcyBxRKAni+awqx8uqaJKrSFSNFSeRG5CsWNdmy2BIK+6VGWEW7TZnIO/533mtMEA4rOevQV815YJw==", + "requires": { + "dicer": "0.3.0" + } + }, "bytes": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" }, + "concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, "content-disposition": { "version": "0.5.3", "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", @@ -96,6 +125,14 @@ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" }, + "dicer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/dicer/-/dicer-0.3.0.tgz", + "integrity": "sha512-MdceRRWqltEG2dZqO769g27N/3PXfcKl04VhYnBlo2YhH7zPi88VebsjTKclaOyiuMaGU72hTfw3VkUitGcVCA==", + "requires": { + "streamsearch": "0.1.2" + } + }, "ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -153,6 +190,14 @@ "vary": "~1.1.2" } }, + "express-fileupload": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/express-fileupload/-/express-fileupload-1.1.6.tgz", + "integrity": "sha512-w24zPWT8DkoIxSVkbxYPo9hkTiLpCQQzNsLRTCnecBhfbYv+IkIC5uLw2MIUAxBZ+7UMmXPjGxlhzUXo4RcbZw==", + "requires": { + "busboy": "^0.3.1" + } + }, "finalhandler": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", @@ -245,11 +290,80 @@ "mime-db": "1.42.0" } }, + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "requires": { + "minimist": "0.0.8" + } + }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, + "multer": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/multer/-/multer-1.4.2.tgz", + "integrity": "sha512-xY8pX7V+ybyUpbYMxtjM9KAiD9ixtg5/JkeKUTD6xilfDv0vzzOFcCp4Ljb1UU3tSOM3VTZtKo63OmzOrGi3Cg==", + "requires": { + "append-field": "^1.0.0", + "busboy": "^0.2.11", + "concat-stream": "^1.5.2", + "mkdirp": "^0.5.1", + "object-assign": "^4.1.1", + "on-finished": "^2.3.0", + "type-is": "^1.6.4", + "xtend": "^4.0.0" + }, + "dependencies": { + "busboy": { + "version": "0.2.14", + "resolved": "https://registry.npmjs.org/busboy/-/busboy-0.2.14.tgz", + "integrity": "sha1-bCpiLvz0fFe7vh4qnDetNseSVFM=", + "requires": { + "dicer": "0.2.5", + "readable-stream": "1.1.x" + } + }, + "dicer": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/dicer/-/dicer-0.2.5.tgz", + "integrity": "sha1-WZbAhrszIYyBLAkL3cCc0S+stw8=", + "requires": { + "readable-stream": "1.1.x", + "streamsearch": "0.1.2" + } + }, + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + }, + "readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" + } + } + }, "mysql": { "version": "2.17.1", "resolved": "https://registry.npmjs.org/mysql/-/mysql-2.17.1.tgz", @@ -266,6 +380,11 @@ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + }, "on-finished": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", @@ -396,6 +515,11 @@ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" }, + "streamsearch": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-0.1.2.tgz", + "integrity": "sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo=" + }, "string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", @@ -418,6 +542,11 @@ "mime-types": "~2.1.24" } }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" + }, "unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", @@ -437,6 +566,11 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" } } } diff --git a/projet/package.json b/projet/package.json index 60f74e644348acb1fff078938633f4c1f9611621..00714b1ef2623dee82b55875957d5fc266f8be32 100644 --- a/projet/package.json +++ b/projet/package.json @@ -11,6 +11,8 @@ "dependencies": { "crypto-js": "^3.1.9-1", "express": "^4.17.1", + "express-fileupload": "^1.1.6", + "multer": "^1.4.2", "mysql": "^2.17.1" } } diff --git a/projet/sql-request.js b/projet/sql-request.js index 9559187d1842a4c9c6015c12f0fc7c51ba94efe3..f744498a57fd928bd60775dc7cd4c329a1ac8f6b 100644 --- a/projet/sql-request.js +++ b/projet/sql-request.js @@ -250,6 +250,44 @@ function getSharedFile(user, callback){ }); } +function addFile(file_id, file_name, login, paths, lat, lon, callback){ + + + var q = ` + SELECT COUNT(paths) + FROM Paths + WHERE paths = '${paths}' + AND login = '${login}' + `; + + con.query(q, (err, resp) => { + if (err) { + console.log(err); + return callback(false, err); + } + + + if (resp[0]["COUNT(paths)"] > 0){ + var q = ` + INSERT INTO Files + VALUES ('${file_id}', '${file_name}', '${login}', '${paths}', '${lat}', '${lon}') + `; + con.query(q, (err, resp) => { + if (err) { + console.log(err); + return callback(false, err); + } + return callback("ok"); + }) + + } + + // return callback(resp); + }); + + +} + exports.userExist = userExist; exports.addUser = addUser; exports.addPath = addPath; @@ -258,4 +296,5 @@ exports.changeDirectory = changeDirectory; exports.createPath = createPath; exports.verifyFileID = verifyFileID; exports.getInfo = getInfo; -exports.getSharedFile = getSharedFile; \ No newline at end of file +exports.getSharedFile = getSharedFile; +exports.addFile = addFile; \ No newline at end of file