/* eslint-disable no-unused-expressions */ /* global swal, axios */ let panel = {} panel.page panel.username panel.token = localStorage.token panel.filesView = localStorage.filesView panel.preparePage = function () { if (!panel.token) { window.location = 'auth' } panel.verifyToken(panel.token, true) } panel.verifyToken = function (token, reloadOnError) { if (reloadOnError === undefined) { reloadOnError = false } axios.post('api/tokens/verify', { token: token }) .then(function (response) { if (response.data.success === false) { swal({ title: 'An error occurred', text: response.data.description, icon: 'error' }).then(() => { if (reloadOnError) { localStorage.removeItem('token') location.location = 'auth' } }) return } axios.defaults.headers.common.token = token localStorage.token = token panel.token = token panel.username = response.data.username return panel.prepareDashboard() }) .catch(function (error) { console.log(error) return swal('An error occurred', 'There was an error with the request, please check the console for more information.', 'error') }) } panel.prepareDashboard = function () { panel.page = document.getElementById('page') document.getElementById('auth').style.display = 'none' document.getElementById('dashboard').style.display = 'block' document.getElementById('itemUploads').addEventListener('click', function () { panel.setActiveMenu(this) }) document.getElementById('itemManageGallery').addEventListener('click', function () { panel.setActiveMenu(this) }) document.getElementById('itemFileLength').addEventListener('click', function () { panel.setActiveMenu(this) }) document.getElementById('itemTokens').addEventListener('click', function () { panel.setActiveMenu(this) }) document.getElementById('itemPassword').addEventListener('click', function () { panel.setActiveMenu(this) }) document.getElementById('itemLogout').innerHTML = `Logout ( ${panel.username} )` panel.getAlbumsSidebar() } panel.logout = function () { localStorage.removeItem('token') location.reload('.') } panel.getUploads = function (album = undefined, page = undefined) { if (page === undefined) page = 0 let url = 'api/uploads/' + page if (album !== undefined) { url = 'api/album/' + album + '/' + page } axios.get(url).then(function (response) { if (response.data.success === false) { if (response.data.description === 'No token provided') return panel.verifyToken(panel.token) else return swal('An error occurred', response.data.description, 'error') } var prevPage = 0 var nextPage = page + 1 if (response.data.files.length < 25) { nextPage = page } if (page > 0) prevPage = page - 1 var pagination = ` ` var listType = `
` var table, item if (panel.filesView === 'thumbs') { panel.page.innerHTML = ` ${pagination}
${listType}
${pagination} ` table = document.getElementById('table') for (item of response.data.files) { var div = document.createElement('div') div.className = 'image-container column is-narrow' if (item.thumb !== undefined) { div.innerHTML = `` } else { div.innerHTML = `

.${item.file.split('.').pop()}

` } div.innerHTML += ` ` table.appendChild(div) } } else { var albumOrUser = 'Album' if (panel.username === 'root') { albumOrUser = 'User' } panel.page.innerHTML = ` ${pagination}
${listType}
File ${albumOrUser} Size Date

${pagination} ` table = document.getElementById('table') for (item of response.data.files) { var tr = document.createElement('tr') var displayAlbumOrUser = item.album if (panel.username === 'root') { displayAlbumOrUser = '' if (item.username !== undefined) { displayAlbumOrUser = item.username } } tr.innerHTML = ` ${item.file} ${displayAlbumOrUser} ${item.size} ${item.date} ` table.appendChild(tr) } } }) .catch(function (error) { console.log(error) return swal('An error occurred', 'There was an error with the request, please check the console for more information.', 'error') }) } panel.setFilesView = function (view, album, page) { localStorage.filesView = view panel.filesView = view panel.getUploads(album, page) } panel.deleteFile = function (id, album = undefined, page = undefined) { swal({ title: 'Are you sure?', text: 'You won\'t be able to recover the file!', icon: 'warning', dangerMode: true, buttons: { cancel: true, confirm: { text: 'Yes, delete it!', closeModal: false } } }).then(value => { if (!value) return axios.post('api/upload/delete', { id: id }) .then(function (response) { if (response.data.success === false) { if (response.data.description === 'No token provided') return panel.verifyToken(panel.token) else return swal('An error occurred', response.data.description, 'error') } swal('Deleted!', 'The file has been deleted.', 'success') panel.getUploads(album, page) }) .catch(function (error) { console.log(error) return swal('An error occurred', 'There was an error with the request, please check the console for more information.', 'error') }) }) } panel.getAlbums = function () { axios.get('api/albums').then(function (response) { if (response.data.success === false) { if (response.data.description === 'No token provided') return panel.verifyToken(panel.token) else return swal('An error occurred', response.data.description, 'error') } panel.page.innerHTML = `

Create new album

Submit

List of albums

Name Files Created At Public link
` var table = document.getElementById('table') for (var item of response.data.albums) { var tr = document.createElement('tr') tr.innerHTML = ` ${item.name} ${item.files} ${item.date} ${item.identifier} ` table.appendChild(tr) } document.getElementById('submitAlbum').addEventListener('click', function () { panel.submitAlbum() }) }) .catch(function (error) { console.log(error) return swal('An error occurred', 'There was an error with the request, please check the console for more information.', 'error') }) } panel.renameAlbum = function (id) { swal({ title: 'Rename album', text: 'New name you want to give the album:', icon: 'info', content: { element: 'input', attributes: { placeholder: 'My super album' } }, buttons: { cancel: true, confirm: { closeModal: false } } }).then(value => { if (!value) return swal.close() axios.post('api/albums/rename', { id: id, name: value }) .then(function (response) { if (response.data.success === false) { if (response.data.description === 'No token provided') 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 occurred', response.data.description, 'error') return } swal('Success!', 'Your album was renamed to: ' + value, 'success') panel.getAlbumsSidebar() panel.getAlbums() }) .catch(function (error) { console.log(error) return swal('An error occurred', 'There was an error with the request, please check the console for more information.', 'error') }) }) } panel.deleteAlbum = function (id) { swal({ title: 'Are you sure?', text: 'This won\'t delete your files, only the album!', icon: 'warning', dangerMode: true, buttons: { cancel: true, confirm: { text: 'Yes, delete it!', closeModal: false } } }).then(value => { if (!value) return axios.post('api/albums/delete', { id: id }) .then(function (response) { if (response.data.success === false) { if (response.data.description === 'No token provided') return panel.verifyToken(panel.token) else return swal('An error occurred', response.data.description, 'error') } swal('Deleted!', 'Your album has been deleted.', 'success') panel.getAlbumsSidebar() panel.getAlbums() }) .catch(function (error) { console.log(error) return swal('An error occurred', 'There was an error with the request, please check the console for more information.', 'error') }) }) } panel.submitAlbum = function () { axios.post('api/albums', { name: document.getElementById('albumName').value }) .then(function (response) { if (response.data.success === false) { if (response.data.description === 'No token provided') return panel.verifyToken(panel.token) else return swal('An error occurred', response.data.description, 'error') } swal('Woohoo!', 'Album was added successfully', 'success') panel.getAlbumsSidebar() panel.getAlbums() }) .catch(function (error) { console.log(error) return swal('An error occurred', 'There was an error with the request, please check the console for more information.', 'error') }) } panel.getAlbumsSidebar = function () { axios.get('api/albums/sidebar') .then(function (response) { if (response.data.success === false) { if (response.data.description === 'No token provided') return panel.verifyToken(panel.token) else return swal('An error occurred', response.data.description, 'error') } var albumsContainer = document.getElementById('albumsContainer') albumsContainer.innerHTML = '' if (response.data.albums === undefined) return var li, a for (var album of response.data.albums) { li = document.createElement('li') a = document.createElement('a') a.id = album.id a.innerHTML = album.name a.addEventListener('click', function () { panel.getAlbum(this) }) li.appendChild(a) albumsContainer.appendChild(li) } }) .catch(function (error) { console.log(error) return swal('An error occurred', 'There was an error with the request, please check the console for more information.', 'error') }) } panel.getAlbum = function (item) { panel.setActiveMenu(item) panel.getUploads(item.id) } panel.changeFileLength = function () { axios.get('api/fileLength/config') .then(function (response) { if (response.data.success === false) { if (response.data.description === 'No token provided') return panel.verifyToken(panel.token) else return swal('An error occurred', response.data.description, 'error') } panel.page.innerHTML = `

Preferred file name length

Default file name length is ${response.data.config.default} characters. ${response.data.config.userChangeable ? `Range allowed for user is ${response.data.config.min} to ${response.data.config.max} characters.` : 'Changing file name length is disabled at the moment.'}

` document.getElementById('setFileLength').addEventListener('click', function () { panel.setFileLength(document.getElementById('fileLength').value) }) }) .catch(function (error) { console.log(error) return swal('An error occurred', 'There was an error with the request, please check the console for more information.', 'error') }) } panel.setFileLength = function (fileLength) { axios.post('api/fileLength/change', { fileLength }) .then(function (response) { if (response.data.success === false) { if (response.data.description === 'No token provided') return panel.verifyToken(panel.token) else return swal('An error occurred', response.data.description, 'error') } swal({ title: 'Woohoo!', text: 'Your file length was successfully changed.', icon: 'success' }).then(() => { location.reload() }) }) .catch(function (error) { console.log(error) return swal('An error occurred', 'There was an error with the request, please check the console for more information.', 'error') }) } panel.changeToken = function () { axios.get('api/tokens') .then(function (response) { if (response.data.success === false) { if (response.data.description === 'No token provided') return panel.verifyToken(panel.token) else return swal('An error occurred', response.data.description, 'error') } panel.page.innerHTML = `

Manage your token

` document.getElementById('getNewToken').addEventListener('click', function () { panel.getNewToken() }) }) .catch(function (error) { console.log(error) return swal('An error occurred', 'There was an error with the request, please check the console for more information.', 'error') }) } panel.getNewToken = function () { axios.post('api/tokens/change') .then(function (response) { if (response.data.success === false) { if (response.data.description === 'No token provided') return panel.verifyToken(panel.token) else return swal('An error occurred', response.data.description, 'error') } swal({ title: 'Woohoo!', text: 'Your token was successfully changed.', icon: 'success' }).then(() => { localStorage.token = response.data.token location.reload() }) }) .catch(function (error) { console.log(error) return swal('An error occurred', 'There was an error with the request, please check the console for more information.', 'error') }) } panel.changePassword = function () { panel.page.innerHTML = `

Change your password

` document.getElementById('sendChangePassword').addEventListener('click', function () { if (document.getElementById('password').value === document.getElementById('passwordConfirm').value) { panel.sendNewPassword(document.getElementById('password').value) } else { swal({ title: 'Password mismatch!', text: 'Your passwords do not match, please try again.', icon: 'error' }).then(() => { panel.changePassword() }) } }) } panel.sendNewPassword = function (pass) { axios.post('api/password/change', {password: pass}) .then(function (response) { if (response.data.success === false) { if (response.data.description === 'No token provided') return panel.verifyToken(panel.token) else return swal('An error occurred', response.data.description, 'error') } swal({ title: 'Woohoo!', text: 'Your password was successfully changed.', icon: 'success' }).then(() => { location.reload() }) }) .catch(function (error) { console.log(error) return swal('An error occurred', 'There was an error with the request, please check the console for more information.', 'error') }) } panel.setActiveMenu = function (item) { var menu = document.getElementById('menu') var items = menu.getElementsByTagName('a') for (var i = 0; i < items.length; i++) { items[i].className = '' } item.className = 'is-active' } window.onload = function () { panel.preparePage() }