File delete, album delete and album rename. Sugoooi!

This commit is contained in:
Pitu 2017-01-20 03:28:26 -03:00
parent bb0f746598
commit bae03cdc25
7 changed files with 322 additions and 128 deletions

View File

@ -35,8 +35,8 @@ albumsController.list = function(req, res, next){
for(let album of albums) album.files = albumsCount[album.id] for(let album of albums) album.files = albumsCount[album.id]
return res.json({ success: true, albums }) 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){ albumsController.create = function(req, res, next){
@ -58,7 +58,7 @@ albumsController.create = function(req, res, next){
}).then(() => { }).then(() => {
return res.json({ success: true }) return res.json({ success: true })
}) })
}) }).catch(function(error) { console.log(error); res.json({success: false, description: 'error'}) })
} }
albumsController.delete = function(req, res, next){ 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(() => { db.table('albums').where('id', id).update({ enabled: 0 }).then(() => {
return res.json({ success: true }) 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 module.exports = albumsController

View File

@ -54,7 +54,7 @@ tokenController.change = function(req, res, next){
config.adminToken = token config.adminToken = token
res.json({ success: true }) res.json({ success: true })
}) }).catch(function(error) { console.log(error); res.json({success: false, description: 'error'}) })
} }
module.exports = tokenController module.exports = tokenController

View File

@ -4,7 +4,7 @@ const multer = require('multer')
const randomstring = require('randomstring') const randomstring = require('randomstring')
const db = require('knex')(config.database) const db = require('knex')(config.database)
//const crypto = require('crypto') //const crypto = require('crypto')
//const fs = require('fs') const fs = require('fs')
let uploadsController = {} 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){ uploadsController.list = function(req, res){
if(req.headers.auth !== config.adminToken) 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 module.exports = uploadsController

View File

@ -51,9 +51,8 @@ let init = function(db, config){
] ]
).then(() => { ).then(() => {
printAndSave(config, clientToken, adminToken) printAndSave(config, clientToken, adminToken)
}) }).catch(function(error) { console.log(error) })
}).catch(function(error) { console.log(error) })
})
}) })

View File

@ -7,6 +7,7 @@
<link rel="stylesheet" type="text/css" href="/css/style.css"> <link rel="stylesheet" type="text/css" href="/css/style.css">
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/sweetalert/1.1.3/sweetalert.min.js"></script> <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/sweetalert/1.1.3/sweetalert.min.js"></script>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/axios/0.15.3/axios.min.js"></script> <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/axios/0.15.3/axios.min.js"></script>
<script type="text/javascript" src="https://use.fontawesome.com/cd26baa9bd.js"></script>
<script type="text/javascript" src="/js/panel.js"></script> <script type="text/javascript" src="/js/panel.js"></script>
</head> </head>
<body> <body>

View File

@ -20,10 +20,10 @@ panel.verifyToken = function(token, reloadOnError = false){
type: 'admin', type: 'admin',
token: token token: token
}) })
.then(function (response) { .then(function (response) {
if(response.data.success === false){ if(response.data.success === false){
swal({ swal({
title: "An error ocurred", title: "An error ocurred",
text: response.data.description, text: response.data.description,
type: "error" type: "error"
@ -34,18 +34,18 @@ panel.verifyToken = function(token, reloadOnError = false){
} }
}) })
return; return;
} }
axios.defaults.headers.common['auth'] = token; axios.defaults.headers.common['auth'] = token;
localStorage.admintoken = token; localStorage.admintoken = token;
panel.token = token; panel.token = token;
return panel.prepareDashboard(); return panel.prepareDashboard();
}) })
.catch(function (error) { .catch(function (error) {
return swal("An error ocurred", 'There was an error with the request, please check the console for more information.', "error"); return swal("An error ocurred", 'There was an error with the request, please check the console for more information.', "error");
console.log(error); console.log(error);
}); });
} }
@ -76,26 +76,27 @@ panel.getUploads = function(album = undefined){
url = '/api/album/' + album url = '/api/album/' + album
axios.get(url) axios.get(url)
.then(function (response) { .then(function (response) {
if(response.data.success === false){ if(response.data.success === false){
if(response.data.description === 'not-authorized') return panel.verifyToken(panel.token); if(response.data.description === 'not-authorized') return panel.verifyToken(panel.token);
else return swal("An error ocurred", response.data.description, "error"); else return swal("An error ocurred", response.data.description, "error");
} }
panel.page.innerHTML = ''; panel.page.innerHTML = '';
var container = document.createElement('div'); var container = document.createElement('div');
container.innerHTML = ` container.innerHTML = `
<table class="table is-striped is-narrow"> <table class="table is-striped is-narrow">
<thead> <thead>
<tr> <tr>
<th>File</th> <th>File</th>
<th>Album</th> <th>Album</th>
<th>Date</th> <th>Date</th>
</tr> <th></th>
</thead> </tr>
<tbody id="table"> </thead>
</tbody> <tbody id="table">
</table>`; </tbody>
</table>`;
panel.page.appendChild(container); panel.page.appendChild(container);
var table = document.getElementById('table'); var table = document.getElementById('table');
@ -105,56 +106,100 @@ panel.getUploads = function(album = undefined){
var tr = document.createElement('tr'); var tr = document.createElement('tr');
tr.innerHTML = ` tr.innerHTML = `
<tr> <tr>
<th><a href="${item.file}" target="_blank">${item.file}</a></th> <th><a href="${item.file}" target="_blank">${item.file}</a></th>
<th>${item.album}</th> <th>${item.album}</th>
<td>${item.date}</td> <td>${item.date}</td>
</tr> <td>
`; <a class="button is-small is-danger is-outlined" title="Delete album" onclick="panel.deleteFile(${item.id})">
<span class="icon is-small">
<i class="fa fa-trash-o"></i>
</span>
</a>
</td>
</tr>
`;
table.appendChild(tr); table.appendChild(tr);
} }
}) })
.catch(function (error) { .catch(function (error) {
return swal("An error ocurred", 'There was an error with the request, please check the console for more information.', "error"); return swal("An error ocurred", 'There was an error with the request, please check the console for more information.', "error");
console.log(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(){ panel.getAlbums = function(){
axios.get('/api/albums') axios.get('/api/albums')
.then(function (response) { .then(function (response) {
if(response.data.success === false){ if(response.data.success === false){
if(response.data.description === 'not-authorized') return panel.verifyToken(panel.token); if(response.data.description === 'not-authorized') return panel.verifyToken(panel.token);
else return swal("An error ocurred", response.data.description, "error"); else return swal("An error ocurred", response.data.description, "error");
} }
panel.page.innerHTML = ''; panel.page.innerHTML = '';
var container = document.createElement('div'); var container = document.createElement('div');
container.className = "container"; container.className = "container";
container.innerHTML = ` container.innerHTML = `
<h2 class="subtitle">Create new album</h2> <h2 class="subtitle">Create new album</h2>
<p class="control has-addons has-addons-centered"> <p class="control has-addons has-addons-centered">
<input id="albumName" class="input" type="text" placeholder="Name"> <input id="albumName" class="input" type="text" placeholder="Name">
<a id="submitAlbum" class="button is-primary">Submit</a> <a id="submitAlbum" class="button is-primary">Submit</a>
</p> </p>
<h2 class="subtitle">List of albums</h2> <h2 class="subtitle">List of albums</h2>
<table class="table is-striped is-narrow"> <table class="table is-striped is-narrow">
<thead> <thead>
<tr> <tr>
<th>Name</th> <th>Name</th>
<th>Files</th> <th>Files</th>
<th>Created At</th> <th>Created At</th>
</tr> <th></th>
</thead> </tr>
<tbody id="table"> </thead>
</tbody> <tbody id="table">
</table>`; </tbody>
</table>`;
panel.page.appendChild(container); panel.page.appendChild(container);
var table = document.getElementById('table'); var table = document.getElementById('table');
@ -164,11 +209,23 @@ panel.getAlbums = function(){
var tr = document.createElement('tr'); var tr = document.createElement('tr');
tr.innerHTML = ` tr.innerHTML = `
<tr> <tr>
<th>${item.name}</th> <th>${item.name}</th>
<th>${item.files}</th> <th>${item.files}</th>
<td>${item.date}</td> <td>${item.date}</td>
</tr> <td>
`; <a class="button is-small is-primary is-outlined" title="Edit name" onclick="panel.renameAlbum(${item.id})">
<span class="icon is-small">
<i class="fa fa-pencil"></i>
</span>
</a>
<a class="button is-small is-danger is-outlined" title="Delete album" onclick="panel.deleteAlbum(${item.id})">
<span class="icon is-small">
<i class="fa fa-trash-o"></i>
</span>
</a>
</td>
</tr>
`;
table.appendChild(tr); table.appendChild(tr);
} }
@ -178,11 +235,94 @@ panel.getAlbums = function(){
}); });
}) })
.catch(function (error) { .catch(function (error) {
return swal("An error ocurred", 'There was an error with the request, please check the console for more information.', "error"); return swal("An error ocurred", 'There was an error with the request, please check the console for more information.', "error");
console.log(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', { axios.post('/api/albums', {
name: document.getElementById('albumName').value name: document.getElementById('albumName').value
}) })
.then(function (response) { .then(function (response) {
if(response.data.success === false){ if(response.data.success === false){
if(response.data.description === 'not-authorized') return panel.verifyToken(panel.token); if(response.data.description === 'not-authorized') return panel.verifyToken(panel.token);
else return swal("An error ocurred", response.data.description, "error"); 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.getAlbumsSidebar();
panel.getAlbums(); panel.getAlbums();
return; return;
}) })
.catch(function (error) { .catch(function (error) {
return swal("An error ocurred", 'There was an error with the request, please check the console for more information.', "error"); return swal("An error ocurred", 'There was an error with the request, please check the console for more information.', "error");
console.log(error); console.log(error);
}); });
} }
panel.getAlbumsSidebar = function(){ panel.getAlbumsSidebar = function(){
axios.get('/api/albums/sidebar') axios.get('/api/albums/sidebar')
.then(function (response) { .then(function (response) {
if(response.data.success === false){ if(response.data.success === false){
if(response.data.description === 'not-authorized') return panel.verifyToken(panel.token); if(response.data.description === 'not-authorized') return panel.verifyToken(panel.token);
else return swal("An error ocurred", response.data.description, "error"); else return swal("An error ocurred", response.data.description, "error");
} }
var albumsContainer = document.getElementById('albumsContainer'); var albumsContainer = document.getElementById('albumsContainer');
albumsContainer.innerHTML = ''; albumsContainer.innerHTML = '';
if(response.data.albums === undefined) return; if(response.data.albums === undefined) return;
@ -241,11 +381,11 @@ panel.getAlbumsSidebar = function(){
} }
}) })
.catch(function (error) { .catch(function (error) {
return swal("An error ocurred", 'There was an error with the request, please check the console for more information.', "error"); return swal("An error ocurred", 'There was an error with the request, please check the console for more information.', "error");
console.log(error); console.log(error);
}); });
} }
@ -256,28 +396,28 @@ panel.getAlbum = function(item){
panel.changeTokens = function(){ panel.changeTokens = function(){
axios.get('/api/tokens') axios.get('/api/tokens')
.then(function (response) { .then(function (response) {
if(response.data.success === false){ if(response.data.success === false){
if(response.data.description === 'not-authorized') return panel.verifyToken(panel.token); if(response.data.description === 'not-authorized') return panel.verifyToken(panel.token);
else return swal("An error ocurred", response.data.description, "error"); else return swal("An error ocurred", response.data.description, "error");
} }
panel.page.innerHTML = ''; panel.page.innerHTML = '';
var container = document.createElement('div'); var container = document.createElement('div');
container.className = "container"; container.className = "container";
container.innerHTML = ` container.innerHTML = `
<h2 class="subtitle">Manage your tokens</h2> <h2 class="subtitle">Manage your tokens</h2>
<label class="label">Client token:</label> <label class="label">Client token:</label>
<p class="control has-addons"> <p class="control has-addons">
<input id="clientToken" class="input is-expanded" type="text" placeholder="Your client token"> <input id="clientToken" class="input is-expanded" type="text" placeholder="Your client token">
<a id="submitClientToken" class="button is-primary">Save</a> <a id="submitClientToken" class="button is-primary">Save</a>
</p> </p>
<label class="label">Admin token:</label> <label class="label">Admin token:</label>
<p class="control has-addons"> <p class="control has-addons">
<input id="adminToken" class="input is-expanded" type="text" placeholder="Your admin token"> <input id="adminToken" class="input is-expanded" type="text" placeholder="Your admin token">
<a id="submitAdminToken" class="button is-primary">Save</a> <a id="submitAdminToken" class="button is-primary">Save</a>
</p> </p>
`; `;
@ -295,11 +435,11 @@ panel.changeTokens = function(){
}); });
}) })
.catch(function (error) { .catch(function (error) {
return swal("An error ocurred", 'There was an error with the request, please check the console for more information.', "error"); return swal("An error ocurred", 'There was an error with the request, please check the console for more information.', "error");
console.log(error); console.log(error);
}); });
} }
@ -309,14 +449,14 @@ panel.submitToken = function(type, token){
type: type, type: type,
token: token token: token
}) })
.then(function (response) { .then(function (response) {
if(response.data.success === false){ if(response.data.success === false){
if(response.data.description === 'not-authorized') return panel.verifyToken(panel.token); if(response.data.description === 'not-authorized') return panel.verifyToken(panel.token);
else return swal("An error ocurred", response.data.description, "error"); else return swal("An error ocurred", response.data.description, "error");
} }
swal({ swal({
title: "Woohoo!", title: "Woohoo!",
text: 'Your token was changed successfully.', text: 'Your token was changed successfully.',
type: "success" type: "success"
@ -331,11 +471,11 @@ panel.submitToken = function(type, token){
}) })
}) })
.catch(function (error) { .catch(function (error) {
return swal("An error ocurred", 'There was an error with the request, please check the console for more information.', "error"); return swal("An error ocurred", 'There was an error with the request, please check the console for more information.', "error");
console.log(error); console.log(error);
}); });
} }

View File

@ -13,12 +13,15 @@ routes.get ('/check', (req, res, next) => {
routes.get ('/uploads', (req, res, next) => uploadController.list(req, res)) routes.get ('/uploads', (req, res, next) => uploadController.list(req, res))
routes.post ('/upload', (req, res, next) => uploadController.upload(req, res, next)) 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.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 ('/album/:id', (req, res, next) => uploadController.list(req, res, next))
routes.get ('/albums', (req, res, next) => albumsController.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.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', (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 ('/albums/test', (req, res, next) => albumsController.test(req, res, next))
routes.get ('/tokens', (req, res, next) => tokenController.list(req, res)) routes.get ('/tokens', (req, res, next) => tokenController.list(req, res))