webserv.html 9.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217
  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">
  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">Listening on :<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">
  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">
  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. <iframe id="webserv_dirManager" src="tools/fs.html" style="width: 100%; height: 800px; border: 0px; overflow-y: hidden;">
  79. </iframe>
  80. <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>
  81. <script>
  82. $(".webservhelp").accordion();
  83. $(".ui.checkbox").checkbox();
  84. function setWebServerRunningState(running){
  85. if (running){
  86. $("#webserv_enable").parent().checkbox("set checked");
  87. $("#webservRunningState").find("i").attr("class", "green circle icon");
  88. $("#webservRunningState").find(".webserv_status").text("Running");
  89. }else{
  90. $("#webserv_enable").parent().checkbox("set unchecked");
  91. $("#webservRunningState").find("i").attr("class", "red circle icon");
  92. $("#webservRunningState").find(".webserv_status").text("Stopped");
  93. }
  94. }
  95. function updateWebServState(){
  96. $.get("/api/webserv/status", function(data){
  97. //Clear all event listeners
  98. $("#webserv_enableDirList").off("change");
  99. $("#webserv_enable").off("change");
  100. $("#webserv_listenPort").off("change");
  101. setWebServerRunningState(data.Running);
  102. if (data.EnableDirectoryListing){
  103. $("#webserv_enableDirList").parent().checkbox("set checked");
  104. }else{
  105. $("#webserv_enableDirList").parent().checkbox("set unchecked");
  106. }
  107. $("#webserv_docRoot").val(data.WebRoot + "/html/");
  108. if (!data.EnableWebDirManager){
  109. $("#webserv_dirManager").remove();
  110. }
  111. $("#webserv_listenPort").val(data.ListeningPort);
  112. updateWebServLinkExample(data.ListeningPort);
  113. //Bind checkbox events
  114. $("#webserv_enable").off("change").on("change", function(){
  115. let enable = $(this)[0].checked;
  116. if (enable){
  117. $.get("/api/webserv/start", function(data){
  118. if (data.error != undefined){
  119. msgbox(data.error, false);
  120. }else{
  121. msgbox("Static web server started");
  122. setWebServerRunningState(true);
  123. }
  124. });
  125. }else{
  126. $.get("/api/webserv/stop", function(data){
  127. if (data.error != undefined){
  128. msgbox(data.error, false);
  129. }else{
  130. msgbox("Static web server stopped");
  131. setWebServerRunningState(false);
  132. }
  133. });
  134. }
  135. });
  136. $("#webserv_enableDirList").off("change").on("change", function(){
  137. let enable = $(this)[0].checked;
  138. $.ajax({
  139. url: "/api/webserv/setDirList",
  140. method: "POST",
  141. data: {"enable": enable},
  142. success: function(data){
  143. if (data.error != undefined){
  144. msgbox(data.error, false);
  145. }else{
  146. msgbox("Directory listing setting updated");
  147. }
  148. }
  149. })
  150. });
  151. $("#webserv_listenPort").off("change").on("change", function(){
  152. let newPort = $(this).val();
  153. //Check if the new value is same as listening port
  154. let rpListeningPort = $("#incomingPort").val();
  155. if (rpListeningPort == newPort){
  156. confirmBox("This setting might cause port conflict. Continue Anyway?", function(choice){
  157. if (choice == true){
  158. //Continue anyway
  159. $.ajax({
  160. url: "/api/webserv/setPort",
  161. method: "POST",
  162. data: {"port": newPort},
  163. success: function(data){
  164. if (data.error != undefined){
  165. msgbox(data.error, false);
  166. }else{
  167. msgbox("Listening port updated");
  168. }
  169. updateWebServState();
  170. }
  171. });
  172. }else{
  173. //Cancel. Restore to previous value
  174. updateWebServState();
  175. msgbox("Setting restored");
  176. }
  177. });
  178. }else{
  179. $.ajax({
  180. url: "/api/webserv/setPort",
  181. method: "POST",
  182. data: {"port": newPort},
  183. success: function(data){
  184. if (data.error != undefined){
  185. msgbox(data.error, false);
  186. }else{
  187. msgbox("Listening port updated");
  188. }
  189. }
  190. })
  191. }
  192. });
  193. })
  194. }
  195. updateWebServState();
  196. function updateWebServLinkExample(newport){
  197. $(".webserv_port").text(newport);
  198. }
  199. </script>
  200. </div>