webserv.html 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231
  1. <div class="standardContainer">
  2. <div class="ui basic segment">
  3. <h2>Static Web Server</h2>
  4. <p>A simple static web server that serve html css and js files</p>
  5. </div>
  6. <div class="ui divider"></div>
  7. <div class="ui basic segment webservRunningStateWrapper">
  8. <h4 class="ui header" id="webservRunningState">
  9. <i class="green circle icon"></i>
  10. <div class="content">
  11. <span class="webserv_status">Running</span>
  12. <div class="sub header">Listen port :<span class="webserv_port">8081</span></div>
  13. </div>
  14. </h4>
  15. </div>
  16. <h3>Web Server Settings</h3>
  17. <div class="ui form">
  18. <div class="inline field">
  19. <div class="ui toggle checkbox webservRootDisabled">
  20. <input id="webserv_enable" type="checkbox" class="hidden">
  21. <label>Enable Static Web Server</label>
  22. </div>
  23. </div>
  24. <div class="inline field">
  25. <div class="ui toggle checkbox">
  26. <input id="webserv_enableDirList" type="checkbox" class="hidden">
  27. <label>Enable Directory Listing</label>
  28. <small>If this folder do not contains any index files, list the directory of this folder.</small>
  29. </div>
  30. </div>
  31. <div class="field">
  32. <label>Document Root Folder</label>
  33. <input id="webserv_docRoot" type="text" readonly="true">
  34. <small>
  35. The web server root folder can only be changed via startup flags of zoraxy for security reasons.
  36. See the -webserv flag for more details.
  37. </small>
  38. </div>
  39. <div class="field webservRootDisabled">
  40. <label>Port Number</label>
  41. <input id="webserv_listenPort" type="number" step="1" min="0" max="65535" value="8081" onchange="updateWebServLinkExample(this.value);">
  42. <small>Use <code>http://127.0.0.1:<span class="webserv_port">8081</span></code> in proxy rules to access the web server</small>
  43. </div>
  44. </div>
  45. <small><i class="ui blue save icon"></i> Changes are saved automatically</small>
  46. <br>
  47. <div class="ui message">
  48. <div class="ui accordion webservhelp">
  49. <div class="title">
  50. <i class="dropdown icon"></i>
  51. How to access the static web server?
  52. </div>
  53. <div class="content">
  54. There are three ways to access the static web server. <br>
  55. <div class="ui ordered list">
  56. <div class="item">
  57. If you are using Zoraxy as your gateway reverse proxy server,
  58. you can add a new subdomain proxy rule that points to
  59. <a>http://127.0.0.1:<span class="webserv_port">8081</span></a>
  60. </div>
  61. <div class="item">
  62. If you are using Zoraxy under another reverse proxy server,
  63. add <a>http://127.0.0.1:<span class="webserv_port">8081</span></a> to the config of your upper layer reverse proxy server's config file.
  64. </div>
  65. <div class="item">
  66. Directly access the web server via <a>http://{zoraxy_host_ip}:<span class="webserv_port">8081</span></a> (Not recommended)
  67. </div>
  68. <br>
  69. </div>
  70. </div>
  71. </div>
  72. </div>
  73. <div class="ui divider"></div>
  74. <div class="ui basic segment">
  75. <h2>Web Directory Manager</h2>
  76. <p>Manage your files inside your web directory</p>
  77. </div>
  78. <div class="ui basic segment" style="display:none;" id="webdirManDisabledNotice">
  79. <h4 class="ui header">
  80. <i class="ui red times icon"></i>
  81. <div class="content">
  82. Web Directory Manager Disabled
  83. <div class="sub header">Web Directory Manager has been disabled by the system administrator</div>
  84. </div>
  85. </h4>
  86. </div>
  87. <iframe id="webserv_dirManager" src="tools/fs.html" style="width: 100%; height: 800px; border: 0px; overflow-y: hidden;">
  88. </iframe>
  89. <small>If you do not want to enable web access to your web directory, you can disable this feature with <code>-webfm=false</code> startup paramter</small>
  90. <script>
  91. $(".webservhelp").accordion();
  92. $(".ui.checkbox").checkbox();
  93. function setWebServerRunningState(running){
  94. if (running){
  95. $("#webserv_enable").parent().checkbox("set checked");
  96. $("#webservRunningState").find("i").attr("class", "white circle check icon");
  97. $("#webservRunningState").find(".webserv_status").text("Running");
  98. $(".webservRunningStateWrapper").addClass("enabled")
  99. }else{
  100. $("#webserv_enable").parent().checkbox("set unchecked");
  101. $("#webservRunningState").find("i").attr("class", "white circle times icon");
  102. $("#webservRunningState").find(".webserv_status").text("Stopped");
  103. $(".webservRunningStateWrapper").removeClass("enabled")
  104. }
  105. }
  106. function updateWebServState(){
  107. $.get("/api/webserv/status", function(data){
  108. //Clear all event listeners
  109. $("#webserv_enableDirList").off("change");
  110. $("#webserv_enable").off("change");
  111. $("#webserv_listenPort").off("change");
  112. setWebServerRunningState(data.Running);
  113. if (data.EnableDirectoryListing){
  114. $("#webserv_enableDirList").parent().checkbox("set checked");
  115. }else{
  116. $("#webserv_enableDirList").parent().checkbox("set unchecked");
  117. }
  118. $("#webserv_docRoot").val(data.WebRoot + "/html/");
  119. if (!data.EnableWebDirManager){
  120. $("#webdirManDisabledNotice").show();
  121. $("#webserv_dirManager").remove();
  122. }
  123. $("#webserv_listenPort").val(data.ListeningPort);
  124. updateWebServLinkExample(data.ListeningPort);
  125. //Bind checkbox events
  126. $("#webserv_enable").off("change").on("change", function(){
  127. let enable = $(this)[0].checked;
  128. if (enable){
  129. $.get("/api/webserv/start", function(data){
  130. if (data.error != undefined){
  131. msgbox(data.error, false);
  132. }else{
  133. msgbox("Static web server started");
  134. setWebServerRunningState(true);
  135. }
  136. });
  137. }else{
  138. $.get("/api/webserv/stop", function(data){
  139. if (data.error != undefined){
  140. msgbox(data.error, false);
  141. }else{
  142. msgbox("Static web server stopped");
  143. setWebServerRunningState(false);
  144. }
  145. });
  146. }
  147. });
  148. $("#webserv_enableDirList").off("change").on("change", function(){
  149. let enable = $(this)[0].checked;
  150. $.ajax({
  151. url: "/api/webserv/setDirList",
  152. method: "POST",
  153. data: {"enable": enable},
  154. success: function(data){
  155. if (data.error != undefined){
  156. msgbox(data.error, false);
  157. }else{
  158. msgbox("Directory listing setting updated");
  159. }
  160. }
  161. })
  162. });
  163. $("#webserv_listenPort").off("change").on("change", function(){
  164. let newPort = $(this).val();
  165. //Check if the new value is same as listening port
  166. let rpListeningPort = $("#incomingPort").val();
  167. if (rpListeningPort == newPort){
  168. confirmBox("This setting might cause port conflict. Continue Anyway?", function(choice){
  169. if (choice == true){
  170. //Continue anyway
  171. $.ajax({
  172. url: "/api/webserv/setPort",
  173. method: "POST",
  174. data: {"port": newPort},
  175. success: function(data){
  176. if (data.error != undefined){
  177. msgbox(data.error, false);
  178. }else{
  179. msgbox("Listening port updated");
  180. }
  181. updateWebServState();
  182. }
  183. });
  184. }else{
  185. //Cancel. Restore to previous value
  186. updateWebServState();
  187. msgbox("Setting restored");
  188. }
  189. });
  190. }else{
  191. $.ajax({
  192. url: "/api/webserv/setPort",
  193. method: "POST",
  194. data: {"port": newPort},
  195. success: function(data){
  196. if (data.error != undefined){
  197. msgbox(data.error, false);
  198. }else{
  199. msgbox("Listening port updated");
  200. }
  201. }
  202. })
  203. }
  204. });
  205. })
  206. }
  207. updateWebServState();
  208. function updateWebServLinkExample(newport){
  209. $(".webserv_port").text(newport);
  210. }
  211. </script>
  212. </div>