panel.js 8.9 KB

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