panel.js 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344
  1. let panel = {}
  2. panel.page;
  3. panel.token = localStorage.admintoken;
  4. panel.preparePage = function(){
  5. if(!panel.token){
  6. document.getElementById('auth').style.display = 'flex';
  7. document.getElementById('tokenSubmit').addEventListener('click', function(){
  8. panel.verifyToken(document.getElementById('token').value);
  9. });
  10. return;
  11. }
  12. panel.verifyToken(panel.token, true);
  13. }
  14. panel.verifyToken = function(token, reloadOnError = false){
  15. axios.post('/api/tokens/verify', {
  16. type: 'admin',
  17. token: token
  18. })
  19. .then(function (response) {
  20. if(response.data.success === false){
  21. swal({
  22. title: "An error ocurred",
  23. text: response.data.description,
  24. type: "error"
  25. }, function(){
  26. if(reloadOnError){
  27. localStorage.removeItem("admintoken");
  28. location.reload();
  29. }
  30. })
  31. return;
  32. }
  33. axios.defaults.headers.common['auth'] = token;
  34. localStorage.admintoken = token;
  35. panel.token = token;
  36. return panel.prepareDashboard();
  37. })
  38. .catch(function (error) {
  39. return swal("An error ocurred", 'There was an error with the request, please check the console for more information.', "error");
  40. console.log(error);
  41. });
  42. }
  43. panel.prepareDashboard = function(){
  44. panel.page = document.getElementById('page');
  45. document.getElementById('auth').style.display = 'none';
  46. document.getElementById('dashboard').style.display = 'block';
  47. document.getElementById('itemUploads').addEventListener('click', function(){
  48. panel.getUploads();
  49. });
  50. document.getElementById('itemManageGallery').addEventListener('click', function(){
  51. panel.getAlbums();
  52. });
  53. document.getElementById('itemTokens').addEventListener('click', function(){
  54. panel.changeTokens();
  55. });
  56. panel.getAlbumsSidebar();
  57. }
  58. panel.getUploads = function(album = undefined){
  59. let url = '/api/uploads'
  60. if(album !== undefined)
  61. url = '/api/album/' + album
  62. axios.get(url)
  63. .then(function (response) {
  64. if(response.data.success === false){
  65. if(response.data.description === 'not-authorized') return panel.verifyToken(panel.token);
  66. else return swal("An error ocurred", response.data.description, "error");
  67. }
  68. panel.page.innerHTML = '';
  69. var container = document.createElement('div');
  70. container.innerHTML = `
  71. <table class="table is-striped is-narrow">
  72. <thead>
  73. <tr>
  74. <th>File</th>
  75. <th>Album</th>
  76. <th>Date</th>
  77. </tr>
  78. </thead>
  79. <tbody id="table">
  80. </tbody>
  81. </table>`;
  82. panel.page.appendChild(container);
  83. var table = document.getElementById('table');
  84. for(var item of response.data.files){
  85. var tr = document.createElement('tr');
  86. tr.innerHTML = `
  87. <tr>
  88. <th><a href="${item.file}" target="_blank">${item.file}</a></th>
  89. <th>${item.album}</th>
  90. <td>${item.date}</td>
  91. </tr>
  92. `;
  93. table.appendChild(tr);
  94. }
  95. })
  96. .catch(function (error) {
  97. return swal("An error ocurred", 'There was an error with the request, please check the console for more information.', "error");
  98. console.log(error);
  99. });
  100. }
  101. panel.getAlbums = function(){
  102. axios.get('/api/albums')
  103. .then(function (response) {
  104. if(response.data.success === false){
  105. if(response.data.description === 'not-authorized') return panel.verifyToken(panel.token);
  106. else return swal("An error ocurred", response.data.description, "error");
  107. }
  108. panel.page.innerHTML = '';
  109. var container = document.createElement('div');
  110. container.className = "container";
  111. container.innerHTML = `
  112. <h2 class="subtitle">Create new album</h2>
  113. <p class="control has-addons has-addons-centered">
  114. <input id="albumName" class="input" type="text" placeholder="Name">
  115. <a id="submitAlbum" class="button is-primary">Submit</a>
  116. </p>
  117. <h2 class="subtitle">List of albums</h2>
  118. <table class="table is-striped is-narrow">
  119. <thead>
  120. <tr>
  121. <th>Name</th>
  122. <th>Files</th>
  123. <th>Created At</th>
  124. </tr>
  125. </thead>
  126. <tbody id="table">
  127. </tbody>
  128. </table>`;
  129. panel.page.appendChild(container);
  130. var table = document.getElementById('table');
  131. for(var item of response.data.albums){
  132. var tr = document.createElement('tr');
  133. tr.innerHTML = `
  134. <tr>
  135. <th>${item.name}</th>
  136. <th>${item.files}</th>
  137. <td>${item.date}</td>
  138. </tr>
  139. `;
  140. table.appendChild(tr);
  141. }
  142. document.getElementById('submitAlbum').addEventListener('click', function(){
  143. panel.submitAlbum();
  144. });
  145. })
  146. .catch(function (error) {
  147. return swal("An error ocurred", 'There was an error with the request, please check the console for more information.', "error");
  148. console.log(error);
  149. });
  150. }
  151. panel.submitAlbum = function(){
  152. axios.post('/api/albums', {
  153. name: document.getElementById('albumName').value
  154. })
  155. .then(function (response) {
  156. if(response.data.success === false){
  157. if(response.data.description === 'not-authorized') return panel.verifyToken(panel.token);
  158. else return swal("An error ocurred", response.data.description, "error");
  159. }
  160. swal("Woohoo!", "Album was added successfully", "success");
  161. panel.getAlbumsSidebar();
  162. panel.getAlbums();
  163. return;
  164. })
  165. .catch(function (error) {
  166. return swal("An error ocurred", 'There was an error with the request, please check the console for more information.', "error");
  167. console.log(error);
  168. });
  169. }
  170. panel.getAlbumsSidebar = function(){
  171. axios.get('/api/albums/sidebar')
  172. .then(function (response) {
  173. if(response.data.success === false){
  174. if(response.data.description === 'not-authorized') return panel.verifyToken(panel.token);
  175. else return swal("An error ocurred", response.data.description, "error");
  176. }
  177. var albumsContainer = document.getElementById('albumsContainer');
  178. albumsContainer.innerHTML = '';
  179. if(response.data.albums === undefined) return;
  180. for(var album of response.data.albums){
  181. li = document.createElement('li');
  182. a = document.createElement('a');
  183. a.id = album.id;
  184. a.innerHTML = album.name;
  185. a.addEventListener('click', function(){
  186. panel.getAlbum(this);
  187. });
  188. li.appendChild(a);
  189. albumsContainer.appendChild(li);
  190. }
  191. })
  192. .catch(function (error) {
  193. return swal("An error ocurred", 'There was an error with the request, please check the console for more information.', "error");
  194. console.log(error);
  195. });
  196. }
  197. panel.getAlbum = function(item){
  198. panel.getUploads(item.id);
  199. }
  200. panel.changeTokens = function(){
  201. axios.get('/api/tokens')
  202. .then(function (response) {
  203. if(response.data.success === false){
  204. if(response.data.description === 'not-authorized') return panel.verifyToken(panel.token);
  205. else return swal("An error ocurred", response.data.description, "error");
  206. }
  207. panel.page.innerHTML = '';
  208. var container = document.createElement('div');
  209. container.className = "container";
  210. container.innerHTML = `
  211. <h2 class="subtitle">Manage your tokens</h2>
  212. <label class="label">Client token:</label>
  213. <p class="control has-addons">
  214. <input id="clientToken" class="input is-expanded" type="text" placeholder="Your client token">
  215. <a id="submitClientToken" class="button is-primary">Save</a>
  216. </p>
  217. <label class="label">Admin token:</label>
  218. <p class="control has-addons">
  219. <input id="adminToken" class="input is-expanded" type="text" placeholder="Your admin token">
  220. <a id="submitAdminToken" class="button is-primary">Save</a>
  221. </p>
  222. `;
  223. panel.page.appendChild(container);
  224. document.getElementById('clientToken').value = response.data.clientToken;
  225. document.getElementById('adminToken').value = response.data.adminToken;
  226. document.getElementById('submitClientToken').addEventListener('click', function(){
  227. panel.submitToken('client', document.getElementById('clientToken').value);
  228. });
  229. document.getElementById('submitAdminToken').addEventListener('click', function(){
  230. panel.submitToken('admin', document.getElementById('adminToken').value);
  231. });
  232. })
  233. .catch(function (error) {
  234. return swal("An error ocurred", 'There was an error with the request, please check the console for more information.', "error");
  235. console.log(error);
  236. });
  237. }
  238. panel.submitToken = function(type, token){
  239. axios.post('/api/tokens/change', {
  240. type: type,
  241. token: token
  242. })
  243. .then(function (response) {
  244. if(response.data.success === false){
  245. if(response.data.description === 'not-authorized') return panel.verifyToken(panel.token);
  246. else return swal("An error ocurred", response.data.description, "error");
  247. }
  248. swal({
  249. title: "Woohoo!",
  250. text: 'Your token was changed successfully.',
  251. type: "success"
  252. }, function(){
  253. if(type === 'client')
  254. localStorage.token = token;
  255. else if(type === 'admin')
  256. localStorage.admintoken = token
  257. location.reload();
  258. })
  259. })
  260. .catch(function (error) {
  261. return swal("An error ocurred", 'There was an error with the request, please check the console for more information.', "error");
  262. console.log(error);
  263. });
  264. }
  265. window.onload = function () {
  266. panel.preparePage();
  267. }