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 = `
-
-
- File |
- Album |
- Date |
-
-
-
-
-
`;
+
+
+ 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
-
-
- Name |
- Files |
- Created 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))