1
0

hostAccessEditor.html 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <!-- Notes: This should be open in its original path-->
  5. <link rel="stylesheet" href="../script/semantic/semantic.min.css">
  6. <script src="../script/jquery-3.6.0.min.js"></script>
  7. <script src="../script/semantic/semantic.min.js"></script>
  8. <style>
  9. .accessRule{
  10. cursor: pointer;
  11. border-radius: 0.4em !important;
  12. border: 1px solid rgb(233, 233, 233) !important;
  13. }
  14. .accessRule:hover{
  15. background-color: rgb(241, 241, 241) !important;
  16. }
  17. .accessRule.active{
  18. background-color: rgb(241, 241, 241) !important;
  19. }
  20. .accessRule .selected{
  21. position: absolute;
  22. top: 1em;
  23. right: 0.6em;
  24. }
  25. .accessRule:not(.active) .selected{
  26. display:none;
  27. }
  28. #accessRuleList{
  29. padding: 0.6em;
  30. border: 1px solid rgb(228, 228, 228);
  31. border-radius: 0.4em !important;
  32. max-height: calc(100vh - 15em);
  33. min-height: 300px;
  34. overflow-y: auto;
  35. }
  36. </style>
  37. </head>
  38. <body>
  39. <br>
  40. <div class="ui container">
  41. <div class="ui header">
  42. <div class="content">
  43. Host Access Settings
  44. <div class="sub header" id="epname"></div>
  45. </div>
  46. </div>
  47. <div class="ui divider"></div>
  48. <p>Select an access rule to apply blacklist / whitelist filtering</p>
  49. <div id="accessRuleList">
  50. <div class="ui segment accessRule">
  51. <div class="ui header">
  52. <i class="filter icon"></i>
  53. <div class="content">
  54. Account Settings
  55. <div class="sub header">Manage your preferences</div>
  56. </div>
  57. </div>
  58. </div>
  59. </div>
  60. <br>
  61. <button class="ui basic button" onclick="applyChangeAndClose()"><i class="ui green check icon"></i> Apply Change</button>
  62. <button class="ui basic button" style="float: right;" onclick="parent.hideSideWrapper();"><i class="remove icon"></i> Close</button>
  63. <br><br><br>
  64. </div>
  65. <script>
  66. let editingEndpoint = {};
  67. if (window.location.hash.length > 1){
  68. let payloadHash = window.location.hash.substr(1);
  69. try{
  70. payloadHash = JSON.parse(decodeURIComponent(payloadHash));
  71. $("#epname").text(payloadHash.ep);
  72. editingEndpoint = payloadHash;
  73. }catch(ex){
  74. console.log("Unable to load endpoint data from hash")
  75. }
  76. }
  77. function initAccessRuleList(callback = undefined){
  78. $("#accessRuleList").html("<small>Loading</small>");
  79. $.get("/api/access/list", function(data){
  80. if (data.error == undefined){
  81. $("#accessRuleList").html("");
  82. data.forEach(function(rule){
  83. let icon = `<i class="ui grey filter icon"></i>`;
  84. if (rule.ID == "default"){
  85. icon = `<i class="ui yellow star icon"></i>`;
  86. }else if (rule.BlacklistEnabled && !rule.WhitelistEnabled){
  87. //This is a blacklist filter
  88. icon = `<i class="ui red filter icon"></i>`;
  89. }else if (rule.WhitelistEnabled && !rule.BlacklistEnabled){
  90. //This is a whitelist filter
  91. icon = `<i class="ui green filter icon"></i>`;
  92. }else if (rule.WhitelistEnabled && rule.BlacklistEnabled){
  93. //Whitelist and blacklist filter
  94. icon = `<i class="ui yellow filter icon"></i>`;
  95. }
  96. $("#accessRuleList").append(`<div class="ui basic segment accessRule" ruleid="${rule.ID}" onclick="selectThisRule(this);">
  97. <h5 class="ui header">
  98. ${icon}
  99. <div class="content">
  100. ${rule.Name}
  101. <div class="sub header">${rule.ID}</div>
  102. </div>
  103. </h5>
  104. <p>${rule.Desc}</p>
  105. ${rule.BlacklistEnabled?`<small><i class="ui red filter icon"></i> Blacklist Enabled</small>`:""}
  106. ${rule.WhitelistEnabled?`<small><i class="ui green filter icon"></i> Whitelist Enabled</small>`:""}
  107. <div class="selected"><i class="ui large green check icon"></i></div>
  108. </div>`);
  109. });
  110. accessRuleList = data;
  111. $(".dropdown").dropdown();
  112. if (callback != undefined){
  113. callback();
  114. }
  115. }
  116. });
  117. }
  118. initAccessRuleList(function(){
  119. $.ajax({
  120. url: "/api/proxy/detail",
  121. method: "POST",
  122. data: {"type":"host", "epname": editingEndpoint.ep },
  123. success: function(data){
  124. console.log(data);
  125. if (data.error != undefined){
  126. alert(data.error);
  127. }else{
  128. let currentAccessFilter = data.AccessFilterUUID;
  129. if (currentAccessFilter == ""){
  130. //Use default
  131. currentAccessFilter = "default";
  132. }
  133. $(`.accessRule[ruleid=${currentAccessFilter}]`).addClass("active");
  134. }
  135. }
  136. })
  137. });
  138. function selectThisRule(accessRuleObject){
  139. let accessRuleID = $(accessRuleObject).attr("ruleid");
  140. $(".accessRule").removeClass('active');
  141. $(accessRuleObject).addClass('active');
  142. }
  143. function applyChangeAndClose(){
  144. let newAccessRuleID = $(".accessRule.active").attr("ruleid");
  145. let targetEndpoint = editingEndpoint.ep;
  146. $.ajax({
  147. url: "/api/access/attach",
  148. method: "POST",
  149. data: {
  150. id: newAccessRuleID,
  151. host: targetEndpoint
  152. },
  153. success: function(data){
  154. if (data.error != undefined){
  155. parent.msgbox(data.error, false);
  156. }else{
  157. parent.msgbox("Access Rule Updated");
  158. //Modify the parent list if exists
  159. if (parent != undefined && parent.updateAccessRuleNameUnderHost){
  160. parent.updateAccessRuleNameUnderHost(targetEndpoint, newAccessRuleID);
  161. }
  162. parent.hideSideWrapper();
  163. }
  164. }
  165. })
  166. }
  167. </script>
  168. </body>
  169. </html>