1
0

hostAccessEditor.html 7.9 KB

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