data-auditlog.f7.html 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. <template>
  2. <div class="page">
  3. <div class="page no-navbar">
  4. <div class="page-content">
  5. <div class="block-title">Audit Log</div>
  6. <div class="block block-strong">
  7. <form class="list inline-labels no-hairlines-md" id="settings-form-auditlog" style="margin:0;" autocomplete="off">
  8. <ul>
  9. <li class="item-content item-input item-input-with-info">
  10. <div class="item-inner">
  11. <div class="item-title" style="width: 150px;">Start date</div>
  12. <div class="item-input-wrap">
  13. <input type="date" name="start" placeholder="yyyy-MM-dd" value="" required validate @change="updateButtons">
  14. <span class="input-clear-button"></span>
  15. <div class="item-input-info">Required</div>
  16. </div>
  17. </div>
  18. </li>
  19. <li class="item-content item-input item-input-with-info">
  20. <div class="item-inner">
  21. <div class="item-title" style="width: 150px;">End date</div>
  22. <div class="item-input-wrap">
  23. <input type="date" name="end" placeholder="yyyy-MM-dd" value="" required validate @change="updateButtons">
  24. <span class="input-clear-button"></span>
  25. <div class="item-input-info">Required</div>
  26. </div>
  27. </div>
  28. </li>
  29. </ul>
  30. </form>
  31. <div class="row" style="justify-content: center; margin-top:16px;">
  32. <div>
  33. <button id="dlButton" class="button button-fill disabled" @click="download">Download data (CSV)</button>
  34. </div>
  35. </div>
  36. </div>
  37. </div>
  38. </div>
  39. </template>
  40. <script>
  41. export default {
  42. methods: {
  43. download: function() {
  44. let start = $$('#settings-form-auditlog input[name="start"]').val();
  45. let end = $$('#settings-form-auditlog input[name="end"]').val();
  46. let postData = {
  47. apiKey: '',
  48. start: start,
  49. end: end
  50. };
  51. app.preloader.show();
  52. app.request.post(app.data.config.apiBaseURL + '/ct_admin/auditlog/?apiKey=', postData, function (data) {
  53. // Refresh token if needed
  54. app.methods.refreshToken(data);
  55. // Process response
  56. console.log("admin/auditlog/", data);
  57. app.preloader.hide();
  58. if (data.result == 'ERROR') {
  59. switch (data.reason) {
  60. case 'denied':
  61. app.methods.signout('Access revoked. Pleas signin again.');
  62. break;
  63. case 'internal_error':
  64. app.dialog.alert("Internal error.");
  65. break;
  66. default:
  67. app.dialog.alert("It's not working. Please check the logs.");
  68. break;
  69. }
  70. }
  71. else {
  72. // convert data
  73. const b64toBlob = (b64Data, contentType='', sliceSize=512) => {
  74. const byteCharacters = atob(b64Data);
  75. const byteArrays = [];
  76. for (let offset = 0; offset < byteCharacters.length; offset += sliceSize) {
  77. const slice = byteCharacters.slice(offset, offset + sliceSize);
  78. const byteNumbers = new Array(slice.length);
  79. for (let i = 0; i < slice.length; i++) {
  80. byteNumbers[i] = slice.charCodeAt(i);
  81. }
  82. const byteArray = new Uint8Array(byteNumbers);
  83. byteArrays.push(byteArray);
  84. }
  85. const blob = new Blob(byteArrays, {type: 'text/plain'});
  86. return blob;
  87. }
  88. const blob = b64toBlob(data.data, 'text/plain');
  89. const blobUrl = window.URL.createObjectURL(blob);
  90. // Create an invisible A element
  91. const a = document.createElement("a");
  92. a.style.display = "none";
  93. document.body.appendChild(a);
  94. // Set the HREF to a Blob representation of the data to be downloaded
  95. a.href = blobUrl;/*window.URL.createObjectURL(
  96. new Blob([data], { type })
  97. );*/
  98. // Use download attribute to set set desired file name
  99. a.setAttribute("download", "auditlog_"+start+"_"+end+".csv");
  100. a.setAttribute("class", "link external");
  101. a.setAttribute("target", "_blank");
  102. // Trigger the download by simulating click
  103. a.click();
  104. // Cleanup
  105. window.URL.revokeObjectURL(a.href);
  106. document.body.removeChild(a);
  107. }
  108. }, function (data) {
  109. console.log('error', data);
  110. app.preloader.hide();
  111. app.dialog.alert("Server unavailable.");
  112. }, 'json');
  113. },
  114. updateButtons: function() {
  115. let start = $$('#settings-form-auditlog input[name="start"]').val();
  116. let end = $$('#settings-form-auditlog input[name="end"]').val();
  117. $$('#dlButton').addClass('disabled');
  118. if(start!='' && end!='') {
  119. $$('#dlButton').removeClass('disabled');
  120. }
  121. }
  122. }
  123. }
  124. </script>