From bae03cdc25e0d52c4e2ca628d21eed0ca63a5c60 Mon Sep 17 00:00:00 2001 From: Pitu Date: Fri, 20 Jan 2017 03:28:26 -0300 Subject: [PATCH] File delete, album delete and album rename. Sugoooi! --- controllers/albumsController.js | 30 ++- controllers/tokenController.js | 2 +- controllers/uploadController.js | 35 ++- database/db.js | 5 +- pages/panel.html | 1 + public/js/panel.js | 374 ++++++++++++++++++++++---------- routes/api.js | 3 + 7 files changed, 322 insertions(+), 128 deletions(-) diff --git a/controllers/albumsController.js b/controllers/albumsController.js index 47ab1d5..8b5b5dd 100644 --- a/controllers/albumsController.js +++ b/controllers/albumsController.js @@ -35,8 +35,8 @@ albumsController.list = function(req, res, next){ for(let album of albums) album.files = albumsCount[album.id] return res.json({ success: true, albums }) - }) - }) + }).catch(function(error) { console.log(error); res.json({success: false, description: 'error'}) }) + }).catch(function(error) { console.log(error); res.json({success: false, description: 'error'}) }) } albumsController.create = function(req, res, next){ @@ -58,7 +58,7 @@ albumsController.create = function(req, res, next){ }).then(() => { return res.json({ success: true }) }) - }) + }).catch(function(error) { console.log(error); res.json({success: false, description: 'error'}) }) } albumsController.delete = function(req, res, next){ @@ -71,8 +71,30 @@ albumsController.delete = function(req, res, next){ db.table('albums').where('id', id).update({ enabled: 0 }).then(() => { return res.json({ success: true }) - }) + }).catch(function(error) { console.log(error); res.json({success: false, description: 'error'}) }) } +albumsController.rename = function(req, res, next){ + if(req.headers.auth !== config.adminToken) + return res.status(401).json({ success: false, description: 'not-authorized'}) + + let id = req.body.id + if(id === undefined || id === '') + return res.json({ success: false, description: 'No album specified' }) + + let name = req.body.name + if(name === undefined || name === '') + return res.json({ success: false, description: 'No name specified' }) + + db.table('albums').where('name', name).then((results) => { + if(results.length !== 0) + return res.json({ success: false, description: 'Name already in use' }) + + db.table('albums').where('id', id).update({ name: name }).then(() => { + return res.json({ success: true }) + }).catch(function(error) { console.log(error); res.json({success: false, description: 'error'}) }) + }).catch(function(error) { console.log(error); res.json({success: false, description: 'error'}) }) + +} module.exports = albumsController \ No newline at end of file diff --git a/controllers/tokenController.js b/controllers/tokenController.js index e302869..ad2b469 100644 --- a/controllers/tokenController.js +++ b/controllers/tokenController.js @@ -54,7 +54,7 @@ tokenController.change = function(req, res, next){ config.adminToken = token res.json({ success: true }) - }) + }).catch(function(error) { console.log(error); res.json({success: false, description: 'error'}) }) } module.exports = tokenController \ No newline at end of file diff --git a/controllers/uploadController.js b/controllers/uploadController.js index 87b3ab6..af9f592 100644 --- a/controllers/uploadController.js +++ b/controllers/uploadController.js @@ -4,7 +4,7 @@ const multer = require('multer') const randomstring = require('randomstring') const db = require('knex')(config.database) //const crypto = require('crypto') -//const fs = require('fs') +const fs = require('fs') let uploadsController = {} @@ -94,11 +94,40 @@ uploadsController.upload = function(req, res, next){ }) }) - }) + }).catch(function(error) { console.log(error); res.json({success: false, description: 'error'}) }) }) } +uploadsController.delete = function(req, res){ + + if(req.headers.auth !== config.adminToken) + return res.status(401).json({ success: false, description: 'not-authorized'}) + + let id = req.body.id + if(id === undefined || id === '') + return res.json({ success: false, description: 'No file specified' }) + + db.table('files').where('id', id).then((file) => { + + fs.stat('./' + config.uploads.folder + '/' + file[0].name, function (err, stats) { + + if (err) { return res.json({ success: false, description: err.toString() }) } + + fs.unlink('./' + config.uploads.folder + '/' + file[0].name, function(err){ + if (err) { return res.json({ success: false, description: err.toString() }) } + + db.table('files').where('id', id).del().then(() =>{ + return res.json({ success: true }) + }).catch(function(error) { console.log(error); res.json({success: false, description: 'error'}) }) + + }) + }) + + }).catch(function(error) { console.log(error); res.json({success: false, description: 'error'}) }) + +} + uploadsController.list = function(req, res){ if(req.headers.auth !== config.adminToken) @@ -141,7 +170,7 @@ uploadsController.list = function(req, res){ }) }) - }) + }).catch(function(error) { console.log(error); res.json({success: false, description: 'error'}) }) } module.exports = uploadsController \ No newline at end of file diff --git a/database/db.js b/database/db.js index 4af2f21..551c8a5 100644 --- a/database/db.js +++ b/database/db.js @@ -51,9 +51,8 @@ let init = function(db, config){ ] ).then(() => { printAndSave(config, clientToken, adminToken) - }) - - }) + }).catch(function(error) { console.log(error) }) + }).catch(function(error) { console.log(error) }) }) diff --git a/pages/panel.html b/pages/panel.html index a8ae048..edf3959 100644 --- a/pages/panel.html +++ b/pages/panel.html @@ -7,6 +7,7 @@ + diff --git a/public/js/panel.js b/public/js/panel.js index f59d3c6..5608ad2 100644 --- a/public/js/panel.js +++ b/public/js/panel.js @@ -20,10 +20,10 @@ panel.verifyToken = function(token, reloadOnError = false){ type: 'admin', token: token }) - .then(function (response) { + .then(function (response) { - if(response.data.success === false){ - swal({ + if(response.data.success === false){ + swal({ title: "An error ocurred", text: response.data.description, type: "error" @@ -34,18 +34,18 @@ panel.verifyToken = function(token, reloadOnError = false){ } }) return; - } + } - axios.defaults.headers.common['auth'] = token; - localStorage.admintoken = token; + axios.defaults.headers.common['auth'] = token; + localStorage.admintoken = token; panel.token = token; return panel.prepareDashboard(); - }) - .catch(function (error) { - return swal("An error ocurred", 'There was an error with the request, please check the console for more information.', "error"); - console.log(error); - }); + }) + .catch(function (error) { + return swal("An error ocurred", 'There was an error with the request, please check the console for more information.', "error"); + console.log(error); + }); } @@ -76,26 +76,27 @@ panel.getUploads = function(album = undefined){ url = '/api/album/' + album axios.get(url) - .then(function (response) { - if(response.data.success === false){ - if(response.data.description === 'not-authorized') return panel.verifyToken(panel.token); - else return swal("An error ocurred", response.data.description, "error"); - } - - panel.page.innerHTML = ''; - var container = document.createElement('div'); + .then(function (response) { + if(response.data.success === false){ + if(response.data.description === 'not-authorized') return panel.verifyToken(panel.token); + else return swal("An error ocurred", response.data.description, "error"); + } + + panel.page.innerHTML = ''; + var container = document.createElement('div'); container.innerHTML = ` - - - - - - - - - -
FileAlbumDate
`; + + + File + Album + Date + + + + + + `; panel.page.appendChild(container); var table = document.getElementById('table'); @@ -105,56 +106,100 @@ panel.getUploads = function(album = undefined){ var tr = document.createElement('tr'); tr.innerHTML = ` - ${item.file} - ${item.album} - ${item.date} - - `; + ${item.file} + ${item.album} + ${item.date} + + + + + + + + + `; table.appendChild(tr); } - }) - .catch(function (error) { - return swal("An error ocurred", 'There was an error with the request, please check the console for more information.', "error"); - console.log(error); - }); + }) + .catch(function (error) { + return swal("An error ocurred", 'There was an error with the request, please check the console for more information.', "error"); + console.log(error); + }); } +panel.deleteFile = function(id){ + swal({ + title: "Are you sure?", + text: "You wont be able to recover the file!", + type: "warning", + showCancelButton: true, + confirmButtonColor: "#ff3860", + confirmButtonText: "Yes, delete it!", + closeOnConfirm: false + }, + function(){ + + axios.post('/api/upload/delete', { + id: id + }) + .then(function (response) { + + if(response.data.success === false){ + if(response.data.description === 'not-authorized') return panel.verifyToken(panel.token); + else return swal("An error ocurred", response.data.description, "error"); + } + + swal("Deleted!", "The file has been deleted.", "success"); + panel.getUploads(); + return; + + }) + .catch(function (error) { + return swal("An error ocurred", 'There was an error with the request, please check the console for more information.', "error"); + console.log(error); + }); + + } + ); +} + panel.getAlbums = function(){ axios.get('/api/albums') - .then(function (response) { - if(response.data.success === false){ - if(response.data.description === 'not-authorized') return panel.verifyToken(panel.token); - else return swal("An error ocurred", response.data.description, "error"); - } + .then(function (response) { + if(response.data.success === false){ + if(response.data.description === 'not-authorized') return panel.verifyToken(panel.token); + else return swal("An error ocurred", response.data.description, "error"); + } - panel.page.innerHTML = ''; - var container = document.createElement('div'); + panel.page.innerHTML = ''; + var container = document.createElement('div'); container.className = "container"; container.innerHTML = `

Create new album

- - Submit + + Submit

List of albums

- - - - - - - - - -
NameFilesCreated At
`; + + + Name + Files + Created At + + + + + + `; panel.page.appendChild(container); var table = document.getElementById('table'); @@ -164,11 +209,23 @@ panel.getAlbums = function(){ var tr = document.createElement('tr'); tr.innerHTML = ` - ${item.name} - ${item.files} - ${item.date} - - `; + ${item.name} + ${item.files} + ${item.date} + + + + + + + + + + + + + + `; table.appendChild(tr); } @@ -178,11 +235,94 @@ panel.getAlbums = function(){ }); - }) - .catch(function (error) { - return swal("An error ocurred", 'There was an error with the request, please check the console for more information.', "error"); - console.log(error); - }); + }) + .catch(function (error) { + return swal("An error ocurred", 'There was an error with the request, please check the console for more information.', "error"); + console.log(error); + }); + +} + +panel.renameAlbum = function(id){ + + swal({ + title: "Rename album", + text: "New name you want to give the album:", + type: "input", + showCancelButton: true, + closeOnConfirm: false, + animation: "slide-from-top", + inputPlaceholder: "My super album" + },function(inputValue){ + if (inputValue === false) return false; + if (inputValue === "") { + swal.showInputError("You need to write something!"); + return false + } + + axios.post('/api/albums/rename', { + id: id, + name: inputValue + }) + .then(function (response) { + + if(response.data.success === false){ + if(response.data.description === 'not-authorized') return panel.verifyToken(panel.token); + else if(response.data.description === 'Name already in use') swal.showInputError("That name is already in use!"); + else swal("An error ocurred", response.data.description, "error"); + return; + } + + swal("Success!", "Your album was renamed to: " + inputValue, "success"); + panel.getAlbumsSidebar(); + panel.getAlbums(); + return; + + }) + .catch(function (error) { + return swal("An error ocurred", 'There was an error with the request, please check the console for more information.', "error"); + console.log(error); + }); + + }); + +} + +panel.deleteAlbum = function(id){ + swal({ + title: "Are you sure?", + text: "This won't delete your files, only the album!", + type: "warning", + showCancelButton: true, + confirmButtonColor: "#ff3860", + confirmButtonText: "Yes, delete it!", + closeOnConfirm: false + }, + function(){ + + axios.post('/api/albums/delete', { + id: id + }) + .then(function (response) { + + if(response.data.success === false){ + if(response.data.description === 'not-authorized') return panel.verifyToken(panel.token); + else return swal("An error ocurred", response.data.description, "error"); + } + + swal("Deleted!", "Your album has been deleted.", "success"); + panel.getAlbumsSidebar(); + panel.getAlbums(); + return; + + }) + .catch(function (error) { + return swal("An error ocurred", 'There was an error with the request, please check the console for more information.', "error"); + console.log(error); + }); + + } + ); } @@ -191,36 +331,36 @@ panel.submitAlbum = function(){ axios.post('/api/albums', { name: document.getElementById('albumName').value }) - .then(function (response) { + .then(function (response) { - if(response.data.success === false){ - if(response.data.description === 'not-authorized') return panel.verifyToken(panel.token); - else return swal("An error ocurred", response.data.description, "error"); - } + if(response.data.success === false){ + if(response.data.description === 'not-authorized') return panel.verifyToken(panel.token); + else return swal("An error ocurred", response.data.description, "error"); + } - swal("Woohoo!", "Album was added successfully", "success"); + swal("Woohoo!", "Album was added successfully", "success"); panel.getAlbumsSidebar(); panel.getAlbums(); return; - }) - .catch(function (error) { - return swal("An error ocurred", 'There was an error with the request, please check the console for more information.', "error"); - console.log(error); - }); + }) + .catch(function (error) { + return swal("An error ocurred", 'There was an error with the request, please check the console for more information.', "error"); + console.log(error); + }); } panel.getAlbumsSidebar = function(){ axios.get('/api/albums/sidebar') - .then(function (response) { - if(response.data.success === false){ - if(response.data.description === 'not-authorized') return panel.verifyToken(panel.token); - else return swal("An error ocurred", response.data.description, "error"); - } + .then(function (response) { + if(response.data.success === false){ + if(response.data.description === 'not-authorized') return panel.verifyToken(panel.token); + else return swal("An error ocurred", response.data.description, "error"); + } - var albumsContainer = document.getElementById('albumsContainer'); + var albumsContainer = document.getElementById('albumsContainer'); albumsContainer.innerHTML = ''; if(response.data.albums === undefined) return; @@ -241,11 +381,11 @@ panel.getAlbumsSidebar = function(){ } - }) - .catch(function (error) { - return swal("An error ocurred", 'There was an error with the request, please check the console for more information.', "error"); - console.log(error); - }); + }) + .catch(function (error) { + return swal("An error ocurred", 'There was an error with the request, please check the console for more information.', "error"); + console.log(error); + }); } @@ -256,28 +396,28 @@ panel.getAlbum = function(item){ panel.changeTokens = function(){ axios.get('/api/tokens') - .then(function (response) { - if(response.data.success === false){ - if(response.data.description === 'not-authorized') return panel.verifyToken(panel.token); - else return swal("An error ocurred", response.data.description, "error"); - } + .then(function (response) { + if(response.data.success === false){ + if(response.data.description === 'not-authorized') return panel.verifyToken(panel.token); + else return swal("An error ocurred", response.data.description, "error"); + } - panel.page.innerHTML = ''; - var container = document.createElement('div'); + panel.page.innerHTML = ''; + var container = document.createElement('div'); container.className = "container"; container.innerHTML = `

Manage your tokens

- - Save + + Save

- - Save + + Save

`; @@ -295,11 +435,11 @@ panel.changeTokens = function(){ }); - }) - .catch(function (error) { - return swal("An error ocurred", 'There was an error with the request, please check the console for more information.', "error"); - console.log(error); - }); + }) + .catch(function (error) { + return swal("An error ocurred", 'There was an error with the request, please check the console for more information.', "error"); + console.log(error); + }); } @@ -309,14 +449,14 @@ panel.submitToken = function(type, token){ type: type, token: token }) - .then(function (response) { + .then(function (response) { - if(response.data.success === false){ - if(response.data.description === 'not-authorized') return panel.verifyToken(panel.token); - else return swal("An error ocurred", response.data.description, "error"); - } + if(response.data.success === false){ + if(response.data.description === 'not-authorized') return panel.verifyToken(panel.token); + else return swal("An error ocurred", response.data.description, "error"); + } - swal({ + swal({ title: "Woohoo!", text: 'Your token was changed successfully.', type: "success" @@ -331,11 +471,11 @@ panel.submitToken = function(type, token){ }) - }) - .catch(function (error) { - return swal("An error ocurred", 'There was an error with the request, please check the console for more information.', "error"); - console.log(error); - }); + }) + .catch(function (error) { + return swal("An error ocurred", 'There was an error with the request, please check the console for more information.', "error"); + console.log(error); + }); } diff --git a/routes/api.js b/routes/api.js index b7c4453..f007de7 100644 --- a/routes/api.js +++ b/routes/api.js @@ -13,12 +13,15 @@ routes.get ('/check', (req, res, next) => { routes.get ('/uploads', (req, res, next) => uploadController.list(req, res)) routes.post ('/upload', (req, res, next) => uploadController.upload(req, res, next)) +routes.post ('/upload/delete', (req, res, next) => uploadController.delete(req, res, next)) routes.post ('/upload/:albumid', (req, res, next) => uploadController.upload(req, res, next)) routes.get ('/album/:id', (req, res, next) => uploadController.list(req, res, next)) routes.get ('/albums', (req, res, next) => albumsController.list(req, res, next)) routes.get ('/albums/:sidebar', (req, res, next) => albumsController.list(req, res, next)) routes.post ('/albums', (req, res, next) => albumsController.create(req, res, next)) +routes.post ('/albums/delete', (req, res, next) => albumsController.delete(req, res, next)) +routes.post ('/albums/rename', (req, res, next) => albumsController.rename(req, res, next)) routes.get ('/albums/test', (req, res, next) => albumsController.test(req, res, next)) routes.get ('/tokens', (req, res, next) => tokenController.list(req, res))