Kaynağa Gözat

auto update script executed

Toby Chui 1 yıl önce
ebeveyn
işleme
8ffe463866
5 değiştirilmiş dosya ile 590 ekleme ve 557 silme
  1. 34 0
      log/zr_2023-11.log
  2. 2 2
      web/forbidden.html
  3. 157 157
      web/hosterror.html
  4. 394 395
      web/index.html
  5. 3 3
      web/rperror.html

+ 34 - 0
log/zr_2023-11.log

@@ -190,3 +190,37 @@
 2023-11-25 15:56:54.001751|info             [INFO]mDNS Startup scan completed
 2023-11-25 16:11:54.002689|info             [INFO]mDNS scan result updated
 2023-11-25 16:26:54.016062|info             [INFO]mDNS scan result updated
+2023-11-25 16:38:20.739324|info             [INFO]Starting ACME handler
+2023-11-25 16:38:20.745475|info             [INFO]Serving inbound port 443
+2023-11-25 16:38:20.745475|info             [INFO]TLS mode enabled. Serving proxxy request with TLS
+2023-11-25 16:38:20.745475|info             [INFO]Force latest TLS mode disabled. Minimum TLS version is set to v1.0
+2023-11-25 16:38:20.745990|info             [INFO]Port 80 listener enabled
+2023-11-25 16:38:20.745990|info             [INFO]Force HTTPS mode disabled
+2023-11-25 16:38:21.060366|info             [INFO]Dynamic Reverse Proxy service started
+2023-11-25 16:38:21.257232|info             [INFO]Assigned temporary port:32330
+2023-11-25 16:38:21.257232|info             [INFO]Zoraxy started. Visit control panel at http://localhost:8000
+2023-11-25 16:38:26.576849|info             [INFO]Uptime Monitor background service started
+2023-11-25 16:38:50.723957|info             [INFO]mDNS Startup scan completed
+2023-11-25 16:53:50.743519|info             [INFO]mDNS scan result updated
+2023-11-25 17:08:50.745596|info             [INFO]mDNS scan result updated
+2023-11-25 17:23:50.745763|info             [INFO]mDNS scan result updated
+2023-11-25 17:38:50.731134|info             [INFO]mDNS scan result updated
+2023-11-25 17:53:50.738831|info             [INFO]mDNS scan result updated
+2023-11-25 18:08:50.727045|info             [INFO]mDNS scan result updated
+2023-11-25 18:23:50.743713|info             [INFO]mDNS scan result updated
+2023-11-25 18:38:50.734268|info             [INFO]mDNS scan result updated
+2023-11-25 18:53:50.745278|info             [INFO]mDNS scan result updated
+2023-11-25 19:08:50.739969|info             [INFO]mDNS scan result updated
+2023-11-25 19:23:50.739979|info             [INFO]mDNS scan result updated
+2023-11-25 19:38:50.743000|info             [INFO]mDNS scan result updated
+2023-11-25 19:53:50.793600|info             [INFO]mDNS scan result updated
+2023-11-25 20:08:50.890377|info             [INFO]mDNS scan result updated
+2023-11-25 20:23:50.964936|info             [INFO]mDNS scan result updated
+2023-11-25 20:38:51.014378|info             [INFO]mDNS scan result updated
+2023-11-25 20:53:51.035090|info             [INFO]mDNS scan result updated
+2023-11-25 21:08:51.063639|info             [INFO]mDNS scan result updated
+2023-11-25 21:23:51.082403|info             [INFO]mDNS scan result updated
+2023-11-25 21:38:51.103438|info             [INFO]mDNS scan result updated
+2023-11-25 21:53:51.115034|info             [INFO]mDNS scan result updated
+2023-11-25 22:08:51.124284|info             [INFO]mDNS scan result updated
+2023-11-25 22:23:51.137045|info             [INFO]mDNS scan result updated

+ 2 - 2
web/forbidden.html

@@ -39,7 +39,7 @@
                 <h3 style="margin-top: 1em;">403 - Forbidden</h3>
                 <div class="ui divider"></div>
                 <p>You do not have permission to view this directory or page. <br>
-                    This might cause by the region limit setting of this site.</p>
+                    This might be caused by the region limit setting of this site.</p>
                 <div class="ui divider"></div>
                 <div style="text-align: left;">
                     <small>Request time: <span id="reqtime"></span></small><br>
@@ -52,4 +52,4 @@
             $("#requrl").text(window.location.href);
         </script>
     </body>
-</html>
+</html>

+ 157 - 157
web/hosterror.html

@@ -1,157 +1,157 @@
-<!DOCTYPE html>
-<html>
-    <head>
-        <meta name="apple-mobile-web-app-capable" content="yes" />
-        <meta name="viewport" content="user-scalable=no, width=device-width, initial-scale=1, maximum-scale=1"/>
-        <meta charset="UTF-8">
-        <meta name="theme-color" content="#4b75ff">
-        <link rel="icon" type="image/png" href="img/small_icon.png"/>
-        <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/fomantic-ui/2.9.2/semantic.min.css">
-        <link rel="preconnect" href="https://fonts.googleapis.com">
-        <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
-        <link href="https://fonts.googleapis.com/css2?family=Noto+Sans+TC:wght@300;400;500;700;900&display=swap" rel="stylesheet">
-        <script src="https://code.jquery.com/jquery-3.6.4.min.js"></script>
-        <script src="https://cdnjs.cloudflare.com/ajax/libs/fomantic-ui/2.9.2/semantic.min.js"></script>
-        <title>404 - Host Not Found</title>
-        <style>
-            h1, h2, h3, h4, h5, p, a, span{
-                font-family: 'Noto Sans TC', sans-serif;
-                font-weight: 300;
-                color: rgb(88, 88, 88)
-            }
-
-            .diagram{
-                background-color: #ebebeb;
-                box-shadow: 
-                    inset 0px 11px 8px -10px #CCC,
-                    inset 0px -11px 8px -10px #CCC; 
-                padding-bottom: 2em;
-            }
-
-            .diagramHeader{
-                margin-top: 0.2em;
-            }
-
-            @media (max-width:512px) { 
-                .widescreenOnly{
-                    display: none !important;
-                    
-                }
-
-                .four.wide.column:not(.widescreenOnly){
-                    width: 50% !important;
-                }
-
-                .ui.grid{
-                    justify-content: center !important;
-                }
-            }
-        </style>
-    </head>
-    <body>
-        <div>
-            <br><br>
-            <div class="ui container">
-                <h1 style="font-size: 4rem;">Error 404</h1>
-                <p style="font-size: 2rem; margin-bottom: 0.4em;">Target Host Not Found</p>
-                <small id="timestamp"></small>
-            </div>
-            <br><br>
-        </div>
-        <div class="diagram">
-            <div class="ui text container">
-                <div class="ui grid">
-                    <div class="four wide column widescreenOnly" align="center">
-                        <svg version="1.1" id="client_svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
-                            width="100%" viewBox="0 0 200 200" enable-background="new 0 0 200 200" xml:space="preserve">
-                        <path fill="#C9CACA" d="M184.795,143.037c0,9.941-8.059,18-18,18H33.494c-9.941,0-18-8.059-18-18V44.952c0-9.941,8.059-18,18-18
-                            h133.301c9.941,0,18,8.059,18,18V143.037z"/>
-                        <circle fill="#FFFFFF" cx="37.39" cy="50.88" r="6.998"/>
-                        <circle fill="#FFFFFF" cx="54.115" cy="50.88" r="6.998"/>
-                        <path fill="#FFFFFF" d="M167.188,50.88c0,3.865-3.133,6.998-6.998,6.998H72.379c-3.865,0-6.998-3.133-6.998-6.998l0,0
-                            c0-3.865,3.133-6.998,6.998-6.998h87.811C164.055,43.882,167.188,47.015,167.188,50.88L167.188,50.88z"/>
-                        <rect x="31.296" y="66.907" fill="#FFFFFF" width="132.279" height="77.878"/>
-                        <circle fill="#9BCA3E" cx="96.754" cy="144.785" r="37.574"/>
-                        <polyline fill="none" stroke="#FFFFFF" stroke-width="8" stroke-miterlimit="10" points="108.497,133.047 93.373,153.814 
-                            82.989,143.204 "/>
-                        </svg>
-                        <small>You</small>
-                        <h2 class="diagramHeader">Browser</h2>
-                        <p style="font-weight: 500; color: #9bca3e;">Working</p>
-                    </div>  
-                    <div class="two wide column widescreenOnly" style="margin-top: 8em; text-align: center;">
-                        <i class="ui big grey exchange alternate icon" style="color:rgb(167, 167, 167) !important;"></i>
-                    </div>
-                    <div class="four wide column widescreenOnly" align="center">
-                        <svg version="1.1" id="cloud_svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
-                            width="100%" viewBox="0 0 200 200" enable-background="new 0 0 200 200" xml:space="preserve">
-                            <ellipse fill="#9FA0A0" cx="46.979" cy="108.234" rx="25.399" ry="25.139"/>
-                            <circle fill="#9FA0A0" cx="109.407" cy="100.066" r="50.314"/>
-                            <circle fill="#9FA0A0" cx="22.733" cy="129.949" r="19.798"/>
-                            <circle fill="#9FA0A0" cx="172.635" cy="125.337" r="24.785"/>
-                            <path fill="#9FA0A0" d="M193.514,133.318c0,9.28-7.522,16.803-16.803,16.803H28.223c-9.281,0-16.803-7.522-16.803-16.803l0,0
-                                c0-9.28,7.522-16.804,16.803-16.804h148.488C185.991,116.515,193.514,124.038,193.514,133.318L193.514,133.318z"/>
-                            <circle fill="#9BCA3D" cx="100" cy="149.572" r="38.267"/>
-                            <polyline fill="none" stroke="#FFFFFF" stroke-width="8" stroke-miterlimit="10" points="113.408,136.402 95.954,160.369 
-                                83.971,148.123 "/>
-                        </svg>
-
-                        <small>Gateway Node</small>
-                        <h2 class="diagramHeader">Reverse Proxy</h2>
-                        <p style="font-weight: 500; color: #9bca3e;">Working</p>
-                    </div>  
-                    <div class="two wide column widescreenOnly" style="margin-top: 8em; text-align: center;">
-                        <i class="ui big grey exchange alternate icon" style="color:rgb(167, 167, 167) !important;"></i>
-                    </div>
-                    <div class="four wide column" align="center">
-                        <svg version="1.1" id="host_svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
-                            width="100%" viewBox="0 0 200 200" enable-background="new 0 0 200 200" xml:space="preserve">
-                        <path fill="#999999" d="M168.484,113.413c0,9.941,3.317,46.324-6.624,46.324H35.359c-9.941,0-5.873-39.118-5.715-46.324
-                            l17.053-50.909c1.928-9.879,8.059-18,18-18h69.419c9.941,0,15.464,7.746,18,18L168.484,113.413z"/>
-                        <rect x="38.068" y="118.152" fill="#FFFFFF" width="122.573" height="34.312"/>
-                        <circle fill="#BD2426" cx="141.566" cy="135.873" r="8.014"/>
-                        <circle fill="#BD2426" cx="99.354" cy="152.464" r="36.343"/>
-                        <line fill="none" stroke="#FFFFFF" stroke-width="6" stroke-miterlimit="10" x1="90.5" y1="144.125" x2="107.594" y2="161.946"/>
-                        <line fill="none" stroke="#FFFFFF" stroke-width="6" stroke-miterlimit="10" x1="90.5" y1="161.946" x2="107.594" y2="144.79"/>
-                        </svg>
-                        <small id="host"></small>
-                        <h2 class="diagramHeader">Host</h2>
-                        <p style="font-weight: 500; color: #bd2426;">Not Found</p>
-                    </div>
-                  </div>
-            </div>
-        </div>
-        <div>
-            <br>
-            <div class="ui container">
-                <div class="ui stackable grid">
-                    <div class="eight wide column">
-                        <h1>What happend?</h1>
-                        <p>The reverse proxy target domain is not found.<br>For more information, see the error message on the reverse proxy terminal.</p>
-                    </div>
-                    <div class="eight wide column">
-                        <h1>What can I do?</h1>
-                        <h5 style="font-weight: 500;">If you are a visitor of this website: </h5>
-                        <p>Please try again in a few minutes</p>
-                        <h5 style="font-weight: 500;">If you are the owner of this website:</h5>
-                        <div class="ui bulleted list">
-                            <div class="item">Check if the target web server is online</div>
-                            <div class="item">Visit the Reverse Proxy management interface to correct any setting errors</div>
-                        </div>
-                    </div>
-                  </div>
-            </div>
-            <br>
-        </div>
-        <div class="ui divider"></div>
-        <div class="ui container" style="color: grey; font-size: 90%">
-            <p>Powered by Zoraxy</p>
-        </div>
-        <br><br>
-
-        <script>
-            $("#timestamp").text(new Date());
-            $("#host").text(location.href);
-        </script>
-    </body>
-</html>
+<!DOCTYPE html>
+<html>
+    <head>
+        <meta name="apple-mobile-web-app-capable" content="yes" />
+        <meta name="viewport" content="user-scalable=no, width=device-width, initial-scale=1, maximum-scale=1"/>
+        <meta charset="UTF-8">
+        <meta name="theme-color" content="#4b75ff">
+        <link rel="icon" type="image/png" href="img/small_icon.png"/>
+        <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/fomantic-ui/2.9.2/semantic.min.css">
+        <link rel="preconnect" href="https://fonts.googleapis.com">
+        <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
+        <link href="https://fonts.googleapis.com/css2?family=Noto+Sans+TC:wght@300;400;500;700;900&display=swap" rel="stylesheet">
+        <script src="https://code.jquery.com/jquery-3.6.4.min.js"></script>
+        <script src="https://cdnjs.cloudflare.com/ajax/libs/fomantic-ui/2.9.2/semantic.min.js"></script>
+        <title>404 - Host Not Found</title>
+        <style>
+            h1, h2, h3, h4, h5, p, a, span{
+                font-family: 'Noto Sans TC', sans-serif;
+                font-weight: 300;
+                color: rgb(88, 88, 88)
+            }
+
+            .diagram{
+                background-color: #ebebeb;
+                box-shadow: 
+                    inset 0px 11px 8px -10px #CCC,
+                    inset 0px -11px 8px -10px #CCC; 
+                padding-bottom: 2em;
+            }
+
+            .diagramHeader{
+                margin-top: 0.2em;
+            }
+
+            @media (max-width:512px) { 
+                .widescreenOnly{
+                    display: none !important;
+                    
+                }
+
+                .four.wide.column:not(.widescreenOnly){
+                    width: 50% !important;
+                }
+
+                .ui.grid{
+                    justify-content: center !important;
+                }
+            }
+        </style>
+    </head>
+    <body>
+        <div>
+            <br><br>
+            <div class="ui container">
+                <h1 style="font-size: 4rem;">Error 404</h1>
+                <p style="font-size: 2rem; margin-bottom: 0.4em;">Target Host Not Found</p>
+                <small id="timestamp"></small>
+            </div>
+            <br><br>
+        </div>
+        <div class="diagram">
+            <div class="ui text container">
+                <div class="ui grid">
+                    <div class="four wide column widescreenOnly" align="center">
+                        <svg version="1.1" id="client_svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+                            width="100%" viewBox="0 0 200 200" enable-background="new 0 0 200 200" xml:space="preserve">
+                        <path fill="#C9CACA" d="M184.795,143.037c0,9.941-8.059,18-18,18H33.494c-9.941,0-18-8.059-18-18V44.952c0-9.941,8.059-18,18-18
+                            h133.301c9.941,0,18,8.059,18,18V143.037z"/>
+                        <circle fill="#FFFFFF" cx="37.39" cy="50.88" r="6.998"/>
+                        <circle fill="#FFFFFF" cx="54.115" cy="50.88" r="6.998"/>
+                        <path fill="#FFFFFF" d="M167.188,50.88c0,3.865-3.133,6.998-6.998,6.998H72.379c-3.865,0-6.998-3.133-6.998-6.998l0,0
+                            c0-3.865,3.133-6.998,6.998-6.998h87.811C164.055,43.882,167.188,47.015,167.188,50.88L167.188,50.88z"/>
+                        <rect x="31.296" y="66.907" fill="#FFFFFF" width="132.279" height="77.878"/>
+                        <circle fill="#9BCA3E" cx="96.754" cy="144.785" r="37.574"/>
+                        <polyline fill="none" stroke="#FFFFFF" stroke-width="8" stroke-miterlimit="10" points="108.497,133.047 93.373,153.814 
+                            82.989,143.204 "/>
+                        </svg>
+                        <small>You</small>
+                        <h2 class="diagramHeader">Browser</h2>
+                        <p style="font-weight: 500; color: #9bca3e;">Working</p>
+                    </div>  
+                    <div class="two wide column widescreenOnly" style="margin-top: 8em; text-align: center;">
+                        <i class="ui big grey exchange alternate icon" style="color:rgb(167, 167, 167) !important;"></i>
+                    </div>
+                    <div class="four wide column widescreenOnly" align="center">
+                        <svg version="1.1" id="cloud_svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+                            width="100%" viewBox="0 0 200 200" enable-background="new 0 0 200 200" xml:space="preserve">
+                            <ellipse fill="#9FA0A0" cx="46.979" cy="108.234" rx="25.399" ry="25.139"/>
+                            <circle fill="#9FA0A0" cx="109.407" cy="100.066" r="50.314"/>
+                            <circle fill="#9FA0A0" cx="22.733" cy="129.949" r="19.798"/>
+                            <circle fill="#9FA0A0" cx="172.635" cy="125.337" r="24.785"/>
+                            <path fill="#9FA0A0" d="M193.514,133.318c0,9.28-7.522,16.803-16.803,16.803H28.223c-9.281,0-16.803-7.522-16.803-16.803l0,0
+                                c0-9.28,7.522-16.804,16.803-16.804h148.488C185.991,116.515,193.514,124.038,193.514,133.318L193.514,133.318z"/>
+                            <circle fill="#9BCA3D" cx="100" cy="149.572" r="38.267"/>
+                            <polyline fill="none" stroke="#FFFFFF" stroke-width="8" stroke-miterlimit="10" points="113.408,136.402 95.954,160.369 
+                                83.971,148.123 "/>
+                        </svg>
+
+                        <small>Gateway Node</small>
+                        <h2 class="diagramHeader">Reverse Proxy</h2>
+                        <p style="font-weight: 500; color: #9bca3e;">Working</p>
+                    </div>  
+                    <div class="two wide column widescreenOnly" style="margin-top: 8em; text-align: center;">
+                        <i class="ui big grey exchange alternate icon" style="color:rgb(167, 167, 167) !important;"></i>
+                    </div>
+                    <div class="four wide column" align="center">
+                        <svg version="1.1" id="host_svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+                            width="100%" viewBox="0 0 200 200" enable-background="new 0 0 200 200" xml:space="preserve">
+                        <path fill="#999999" d="M168.484,113.413c0,9.941,3.317,46.324-6.624,46.324H35.359c-9.941,0-5.873-39.118-5.715-46.324
+                            l17.053-50.909c1.928-9.879,8.059-18,18-18h69.419c9.941,0,15.464,7.746,18,18L168.484,113.413z"/>
+                        <rect x="38.068" y="118.152" fill="#FFFFFF" width="122.573" height="34.312"/>
+                        <circle fill="#BD2426" cx="141.566" cy="135.873" r="8.014"/>
+                        <circle fill="#BD2426" cx="99.354" cy="152.464" r="36.343"/>
+                        <line fill="none" stroke="#FFFFFF" stroke-width="6" stroke-miterlimit="10" x1="90.5" y1="144.125" x2="107.594" y2="161.946"/>
+                        <line fill="none" stroke="#FFFFFF" stroke-width="6" stroke-miterlimit="10" x1="90.5" y1="161.946" x2="107.594" y2="144.79"/>
+                        </svg>
+                        <small id="host"></small>
+                        <h2 class="diagramHeader">Host</h2>
+                        <p style="font-weight: 500; color: #bd2426;">Not Found</p>
+                    </div>
+                  </div>
+            </div>
+        </div>
+        <div>
+            <br>
+            <div class="ui container">
+                <div class="ui stackable grid">
+                    <div class="eight wide column">
+                        <h1>What happend?</h1>
+                        <p>The reverse proxy target domain is not found.<br>For more information, see the error message on the reverse proxy terminal.</p>
+                    </div>
+                    <div class="eight wide column">
+                        <h1>What can I do?</h1>
+                        <h5 style="font-weight: 500;">If you are a visitor of this website: </h5>
+                        <p>Please try again in a few minutes</p>
+                        <h5 style="font-weight: 500;">If you are the owner of this website:</h5>
+                        <div class="ui bulleted list">
+                            <div class="item">Check if the target web server is online</div>
+                            <div class="item">Visit the Reverse Proxy management interface to correct any setting errors</div>
+                        </div>
+                    </div>
+                  </div>
+            </div>
+            <br>
+        </div>
+        <div class="ui divider"></div>
+        <div class="ui container" style="color: grey; font-size: 90%">
+            <p>Powered by Zoraxy</p>
+        </div>
+        <br><br>
+
+        <script>
+            $("#timestamp").text(new Date());
+            $("#host").text(location.href);
+        </script>
+    </body>
+</html>

+ 394 - 395
web/index.html

@@ -1,395 +1,394 @@
-<!DOCTYPE html>
-<html>
-    <head>
-        <meta name="apple-mobile-web-app-capable" content="yes" />
-        <meta name="viewport" content="user-scalable=no, width=device-width, initial-scale=1, maximum-scale=1"/>
-        <meta charset="UTF-8">
-        <meta name="theme-color" content="#4b75ff">
-        <link rel="icon" type="image/png" href="./favicon.png" />
-        <title>Control Panel | Zoraxy</title>
-        <link rel="stylesheet" href="script/semantic/semantic.min.css">
-        <script src="script/jquery-3.6.0.min.js"></script>
-        <script src="../script/ao_module.js"></script>
-        <script src="script/semantic/semantic.min.js"></script>
-        <script src="script/tablesort.js"></script>
-        <script src="script/countryCode.js"></script>
-        <script src="script/chart.js"></script>
-        <script src="script/utils.js"></script>
-        <link rel="stylesheet" href="main.css">
-    </head>
-    <body>
-        <div class="menubar">
-            <div class="item">
-                <img class="logo" src="img/logo.svg">
-            </div>
-
-            <div class="ui right floated buttons menutoggle" style="padding-top: 2px;">
-                <button class="ui basic icon button" onclick="$('.toolbar').fadeToggle('fast');"><i class="content icon"></i></button>
-            </div>
-            <div class="ui right floated buttons" style="padding-top: 2px;">
-                <button class="ui basic icon button" onclick="logout();"><i class="sign-out icon"></i></button>
-            </div>
-        </div>
-        <div class="wrapper">
-            <div class="toolbar">
-                <div id="mainmenu" class="ui secondary vertical menu">
-                    <a class="item active" tag="status">
-                        <i class="simplistic info circle icon"></i>Status
-                    </a>
-                    <a class="item" tag="vdir">
-                        <i class="simplistic folder icon"></i> Virtual Directory
-                    </a>
-                    <a class="item" tag="subd">
-                        <i class="simplistic sitemap icon"></i> Subdomain Proxy
-                    </a>
-                    <a class="item" tag="rules">
-                        <i class="simplistic plus square icon"></i> Create Proxy Rules
-                    </a>
-                    <a class="item" tag="setroot">
-                        <i class="simplistic home icon"></i> Set Proxy Root
-                    </a>
-                    <div class="ui divider menudivider">Access & Connections</div>
-                    <a class="item" tag="cert">
-                        <i class="simplistic lock icon"></i> TLS / SSL certificate
-                    </a>
-                    <a class="item" tag="redirectset">
-                        <i class="simplistic level up alternate icon"></i> Redirection
-                    </a>
-                    <a class="item" tag="access">
-                        <i class="simplistic ban icon"></i> Access Control
-                    </a>
-                    <div class="ui divider menudivider">Bridging</div>
-                    <a class="item" tag="gan">
-                        <i class="simplistic globe icon"></i> Global Area Network
-                    </a>
-                    <a class="item" tag="zgrok">
-                        <i class="simplistic podcast icon"></i> Service Expose Proxy
-                    </a>
-                    <a class="item" tag="tcpprox">
-                        <i class="simplistic exchange icon"></i> TCP Proxy
-                    </a>
-                    <div class="ui divider menudivider">Others</div>
-                    <a class="item" tag="webserv">
-                        <i class="simplistic globe icon"></i> Static Web Server
-                    </a>
-                    <a class="item" tag="utm">
-                        <i class="simplistic time icon"></i> Uptime Monitor
-                    </a>
-                    <a class="item" tag="networktool">
-                        <i class="simplistic terminal icon"></i> Network Tools
-                    </a>
-                    <a class="item" tag="stats">
-                        <i class="simplistic database icon"></i> Statistical Analysis
-                    </a>
-                    <a class="item" tag="utils">
-                        <i class="simplistic paperclip icon"></i> Utilities
-                    </a>
-                    <!-- Add more components here -->
-                </div>
-            </div>
-            <div class="contentWindow">
-                <!-- Status Tab -->
-                <div id="status" class="functiontab" target="status.html" style="display: block ;">
-                    <br><br><div class="ui active centered inline loader"></div>
-                </div>
-
-                <!-- Virtual Directory Tab -->
-                <div id="vdir" class="functiontab" target="vdir.html"></div>
-
-                <!-- Subdomain Proxy -->
-                <div id="subd" class="functiontab" target="subd.html"></div>
-
-                <!-- Create Rules -->
-                <div id="rules" class="functiontab" target="rules.html"></div>
-
-                <!-- Set proxy root -->
-                <div id="setroot" class="functiontab" target="rproot.html"></div>
-
-                <!-- Set TLS cert -->
-                <div id="cert" class="functiontab" target="cert.html"></div>
-
-                <!-- Redirections -->
-                <div id="redirectset" class="functiontab" target="redirection.html"></div>
-
-                <!-- Blacklist -->
-                <div id="access" class="functiontab" target="access.html"></div>
-
-                <!-- Global Area Networking -->
-                <div id="gan" class="functiontab" target="gan.html"></div>
-
-                <!-- Service Expose Proxy -->
-                <div id="zgrok" class="functiontab" target="zgrok.html"></div>
-
-                <!-- TCP Proxy -->
-                <div id="tcpprox" class="functiontab" target="tcpprox.html"></div>
-
-                <!-- Web Server -->
-                <div id="webserv" class="functiontab" target="webserv.html"></div>
-
-                <!-- Up Time Monitor -->
-                <div id="utm" class="functiontab" target="uptime.html"></div>
-
-                <!-- Network Tools -->
-                <div id="networktool" class="functiontab" target="networktools.html"></div>
-
-                <!-- Statistic Tools -->
-                <div id="stats" class="functiontab" target="stats.html"></div>
-
-                <!-- Utilities -->
-                <div id="utils" class="functiontab" target="utils.html"></div>
-            </div>
-            </div>
-        </div>
-        <div class="sideWrapper" style="display:none;">
-            <div class="fadingBackground" onclick="hideSideWrapper();"></div>
-            <div class="content">
-                <div class="sideWrapperMenu"></div>
-                <iframe src="snippet/placeholder.html"></iframe>
-            </div>
-        </div>
-        <br><br>
-        <div class="ui divider"></div>
-        <div class="ui container" style="color: grey; font-size: 90%">
-            <p>CopyRight Zoraxy project and its author, 2022 - <span class="year"></span></p>
-        </div>
-        
-        <div id="messageBox" class="ui green floating big compact message">
-            <p><i class="green check circle icon"></i> There are no message</p>
-        </div>
-        
-     
-        <div id="confirmBox" style="display:none;">
-            <div class="ui top attached progress">
-                <div class="bar" style="width: 100%; min-width: 0px;"></div>
-            </div>
-            <div class="confirmBoxBody">
-                <button class="ui red basic mini circular icon right floated button" style="margin-left: 0.4em;"><i class="ui times icon"></i></button>
-                <button class="ui green basic mini circular icon right floated button"><i class="ui check icon"></i></button>
-                <div class="questionToConfirm">Confirm Exit?</div>
-            </div>
-        </div>
-        <br><br>
-        <script>
-            $(".year").text(new Date().getFullYear());
-            /*
-                Loader function
-
-                Load all the components view from the 
-                components/ directory into their corrisponding divs
-            */
-            let loadingComponents = 0;
-            
-            function initTabs(callback=undefined){
-                $('.functiontab').each(function(){
-                    let loadTarget = $(this).attr("target");
-                    if (loadTarget != undefined){
-                        $(this).load("./components/" + loadTarget, function(){
-                            loadingComponents--;
-                        });
-                        loadingComponents++;
-                    }else{
-                        $(this).html(`<p>Unable to load components for this tab</p>`);
-                    }
-                })
-                if (callback != undefined){
-                    waitInit(callback);
-                }
-            }
-
-            function waitInit(callback = undefined, retryCount = 0){
-                if (loadingComponents > 0 && retryCount < 5){
-                    setTimeout(function(){
-                        waitInit(callback, retryCount++);
-                    }, 300);
-                }else if (loadingComponents == 0){
-                    callback();
-                }else{
-                    alert("Missing component. Please check if your installation is complete.")
-                }
-            }
-
-            initTabs(function(){
-                initRPStaste();
-
-                if (window.location.hash.length > 1){
-                    let tabID = window.location.hash.substr(1);
-                    openTabById(tabID);
-                }else{
-                    openTabById("status");
-                }
-                $(".ui.dropdown").dropdown();
-                $(".ui.checkbox").checkbox();
-
-                //Click on the current tab
-                $("#mainmenu").find(".item").each(function(){
-                    $(this).on("click", function(event){
-                        let tabid = $(this).attr("tag");
-                        openTabById(tabid);
-                    });
-                });
-
-                //Initialize all table that is sortable
-                $('table').tablesort();
-            });
-
-            function logout() {
-                $.get("/api/auth/logout", function(response) {
-                    if (response === "OK") {
-                        setTimeout(function(){
-                            window.location.href = "/";
-                        }, 300);
-                    }
-                });
-            }
-
-            function getTabButtonById(targetTabId){
-                let targetTabBtn = undefined;
-                $("#mainmenu").find(".item").each(function(){
-                    let tabid = $(this).attr("tag");
-                    
-                    if (tabid == targetTabId){
-                        targetTabBtn = $(this);
-                    }
-                });
-
-                return targetTabBtn;
-            }
-
-            //Select and open a tab by its tag id
-            let tabSwitchEventBind = {}; //Bind event to tab switch by tabid
-            function openTabById(tabID){
-                let targetBtn = getTabButtonById(tabID);
-                if (targetBtn == undefined){
-                    alert("Invalid tabid given");
-                    return;
-                }
-                if (window.innerWidth < 750){
-                    //RWD mode, hide toolbar
-                    $(".toolbar").fadeOut('fast');
-                }
-
-                $("#mainmenu").find(".item").removeClass("active");
-                $(targetBtn).addClass("active");
-                $(".functiontab").hide();
-                $("#" + tabID).fadeIn('fast', function(){
-                    if (tabSwitchEventBind[tabID]){
-                        tabSwitchEventBind[tabID]();
-                    }
-                });
-                $('html,body').animate({scrollTop: 0}, 'fast');
-                window.location.hash = tabID;
-            }
-
-            $(window).on("resize", function(){
-                if (window.innerWidth >= 750 && $(".toolbar").is(":visible") == false){
-                    $(".toolbar").show();
-                }
-            });
-
-            function msgbox(message, succ=true, delayDuration=3000){
-                let icon = `<i class="ui info circle icon"></i>`;
-                if (succ){
-                    $("#messageBox").attr("class", "ui green floating compact message")
-                    icon = `<i class="ui green circle check icon"></i>`;
-                }else{
-                    message = message.capitalize();
-                    $("#messageBox").attr("class", "ui red floating compact message")
-                    icon = `<i class="ui red circle times icon"></i>`;
-                }
-                $("#messageBox").html(`${icon} ${message}`);
-                $("#messageBox").stop().finish().fadeIn("fast").delay(delayDuration).fadeOut("fast");
-            }
-
-            function confirmBox(question_to_confirm, callback, delaytime=15) {
-                
-                var progressBar = $("#confirmBox .bar");
-                var questionElement = $("#confirmBox .questionToConfirm");
-                
-                //Just to make sure there are no animation runnings
-                progressBar.stop();
-
-                // Update the question to confirm
-                questionElement.text(question_to_confirm);
-
-                // Start the progress bar animation
-                progressBar.css("width", "100%");
-                progressBar.animate({ width: "0%", easing: "linear" }, delaytime * 1000, function() {
-                    // Animation complete, invoke the callback with undefined
-                    callback(undefined);
-
-                    //Unset the event listener
-                    $("#confirmBox .ui.green.button").off("click");
-
-                    // Hide the confirm box
-                    $("#confirmBox").hide();
-                });
-
-                // Bind click event to "Yes" button
-                $("#confirmBox .ui.green.button").on("click", function() {
-                    // Stop the progress bar animation
-                    progressBar.stop();
-
-                    // Invoke the callback with true
-                    callback(true);
-
-                    // Hide the confirm box
-                    $("#confirmBox").hide();
-
-                    //Unset the event listener
-                    $("#confirmBox .ui.green.button").off("click");
-                });
-
-                // Bind click event to "No" button
-                $("#confirmBox .ui.red.button").on("click", function() {
-                    // Stop the progress bar animation
-                    progressBar.stop();
-
-                    // Invoke the callback with false
-                    callback(false);
-
-                    // Hide the confirm box
-                    $("#confirmBox").hide();
-
-                     //Unset the event listener
-                     $("#confirmBox .ui.red.button").off("click");
-                });
-
-                // Show the confirm box
-                $("#confirmBox").show().transition('jiggle');
-            }
-
-            /*
-                Toggles for side wrapper
-            */
-
-            function showSideWrapper(scriptpath=""){
-                if (scriptpath != ""){
-                    $(".sideWrapper iframe").attr("src", scriptpath);
-                }
-
-                if ($(".sideWrapper .content").transition("is animating") || $(".sideWrapper .content").transition("is visible")){
-                    return
-                }
-                $(".sideWrapper").show();
-                $(".sideWrapper .fadingBackground").fadeIn("fast");
-                $(".sideWrapper .content").transition('slide left in', 300);
-                $("body").css("overflow", "hidden");
-            }
-
-            function hideSideWrapper(discardFrameContent = false){
-                if (discardFrameContent){
-                    $(".sideWrapper iframe").attr("src", "snippet/placeholder.html");
-                }
-                if ($(".sideWrapper .content").transition("is animating") || !$(".sideWrapper .content").transition("is visible")){
-                    return
-                }
-                $(".sideWrapper .content").transition('slide left out', 300, function(){
-                    $(".sideWrapper .fadingBackground").fadeOut("fast", function(){
-                        $(".sideWrapper").hide(); 
-                    });
-                });
-                $("body").css("overflow", "auto");
-            }
-        </script>
-    </body>
-</html>
+<!DOCTYPE html>
+<html>
+    <head>
+        <meta name="apple-mobile-web-app-capable" content="yes" />
+        <meta name="viewport" content="user-scalable=no, width=device-width, initial-scale=1, maximum-scale=1"/>
+        <meta charset="UTF-8">
+        <meta name="theme-color" content="#4b75ff">
+        <link rel="icon" type="image/png" href="./favicon.png" />
+        <title>Control Panel | Zoraxy</title>
+        <link rel="stylesheet" href="script/semantic/semantic.min.css">
+        <script src="script/jquery-3.6.0.min.js"></script>
+        <script src="../script/ao_module.js"></script>
+        <script src="script/semantic/semantic.min.js"></script>
+        <script src="script/tablesort.js"></script>
+        <script src="script/countryCode.js"></script>
+        <script src="script/chart.js"></script>
+        <script src="script/utils.js"></script>
+        <link rel="stylesheet" href="main.css">
+    </head>
+    <body>
+        <div class="menubar">
+            <div class="item">
+                <img class="logo" src="img/logo.svg">
+            </div>
+
+            <div class="ui right floated buttons menutoggle" style="padding-top: 2px;">
+                <button class="ui basic icon button" onclick="$('.toolbar').fadeToggle('fast');"><i class="content icon"></i></button>
+            </div>
+            <div class="ui right floated buttons" style="padding-top: 2px;">
+                <button class="ui basic icon button" onclick="logout();"><i class="sign-out icon"></i></button>
+            </div>
+        </div>
+        <div class="wrapper">
+            <div class="toolbar">
+                <div id="mainmenu" class="ui secondary vertical menu">
+                    <a class="item active" tag="status">
+                        <i class="simplistic info circle icon"></i>Status
+                    </a>
+                    <a class="item" tag="vdir">
+                        <i class="simplistic folder icon"></i> Virtual Directory
+                    </a>
+                    <a class="item" tag="subd">
+                        <i class="simplistic sitemap icon"></i> Subdomain Proxy
+                    </a>
+                    <a class="item" tag="rules">
+                        <i class="simplistic plus square icon"></i> Create Proxy Rules
+                    </a>
+                    <a class="item" tag="setroot">
+                        <i class="simplistic home icon"></i> Set Proxy Root
+                    </a>
+                    <div class="ui divider menudivider">Access & Connections</div>
+                    <a class="item" tag="cert">
+                        <i class="simplistic lock icon"></i> TLS / SSL certificates
+                    </a>
+                    <a class="item" tag="redirectset">
+                        <i class="simplistic level up alternate icon"></i> Redirection
+                    </a>
+                    <a class="item" tag="access">
+                        <i class="simplistic ban icon"></i> Access Control
+                    </a>
+                    <div class="ui divider menudivider">Bridging</div>
+                    <a class="item" tag="gan">
+                        <i class="simplistic globe icon"></i> Global Area Network
+                    </a>
+                    <a class="item" tag="zgrok">
+                        <i class="simplistic podcast icon"></i> Service Expose Proxy
+                    </a>
+                    <a class="item" tag="tcpprox">
+                        <i class="simplistic exchange icon"></i> TCP Proxy
+                    </a>
+                    <div class="ui divider menudivider">Others</div>
+                    <a class="item" tag="webserv">
+                        <i class="simplistic globe icon"></i> Static Web Server
+                    </a>
+                    <a class="item" tag="utm">
+                        <i class="simplistic time icon"></i> Uptime Monitor
+                    </a>
+                    <a class="item" tag="networktool">
+                        <i class="simplistic terminal icon"></i> Network Tools
+                    </a>
+                    <a class="item" tag="stats">
+                        <i class="simplistic database icon"></i> Statistical Analysis
+                    </a>
+                    <a class="item" tag="utils">
+                        <i class="simplistic paperclip icon"></i> Utilities
+                    </a>
+                    <!-- Add more components here -->
+                </div>
+            </div>
+            <div class="contentWindow">
+                <!-- Status Tab -->
+                <div id="status" class="functiontab" target="status.html" style="display: block ;">
+                    <br><br><div class="ui active centered inline loader"></div>
+                </div>
+
+                <!-- Virtual Directory Tab -->
+                <div id="vdir" class="functiontab" target="vdir.html"></div>
+
+                <!-- Subdomain Proxy -->
+                <div id="subd" class="functiontab" target="subd.html"></div>
+
+                <!-- Create Rules -->
+                <div id="rules" class="functiontab" target="rules.html"></div>
+
+                <!-- Set proxy root -->
+                <div id="setroot" class="functiontab" target="rproot.html"></div>
+
+                <!-- Set TLS cert -->
+                <div id="cert" class="functiontab" target="cert.html"></div>
+
+                <!-- Redirections -->
+                <div id="redirectset" class="functiontab" target="redirection.html"></div>
+
+                <!-- Blacklist -->
+                <div id="access" class="functiontab" target="access.html"></div>
+
+                <!-- Global Area Networking -->
+                <div id="gan" class="functiontab" target="gan.html"></div>
+
+                <!-- Service Expose Proxy -->
+                <div id="zgrok" class="functiontab" target="zgrok.html"></div>
+
+                <!-- TCP Proxy -->
+                <div id="tcpprox" class="functiontab" target="tcpprox.html"></div>
+
+                <!-- Web Server -->
+                <div id="webserv" class="functiontab" target="webserv.html"></div>
+
+                <!-- Up Time Monitor -->
+                <div id="utm" class="functiontab" target="uptime.html"></div>
+
+                <!-- Network Tools -->
+                <div id="networktool" class="functiontab" target="networktools.html"></div>
+
+                <!-- Statistic Tools -->
+                <div id="stats" class="functiontab" target="stats.html"></div>
+
+                <!-- Utilities -->
+                <div id="utils" class="functiontab" target="utils.html"></div>
+            </div>
+            </div>
+        </div>
+        <div class="sideWrapper" style="display:none;">
+            <div class="fadingBackground" onclick="hideSideWrapper();"></div>
+            <div class="content">
+                <div class="sideWrapperMenu"></div>
+                <iframe src="snippet/placeholder.html"></iframe>
+            </div>
+        </div>
+        <br><br>
+        <div class="ui divider"></div>
+        <div class="ui container" style="color: grey; font-size: 90%">
+            <p>CopyRight Zoraxy Project and its authors © 2021 - <span class="year"></span></p>
+        </div>
+        
+        <div id="messageBox" class="ui green floating big compact message">
+            <p><i class="green check circle icon"></i> There are no messages</p>
+        </div>
+        
+        <div id="confirmBox" style="display:none;">
+            <div class="ui top attached progress">
+                <div class="bar" style="width: 100%; min-width: 0px;"></div>
+            </div>
+            <div class="confirmBoxBody">
+                <button class="ui red basic mini circular icon right floated button" style="margin-left: 0.4em;"><i class="ui times icon"></i></button>
+                <button class="ui green basic mini circular icon right floated button"><i class="ui check icon"></i></button>
+                <div class="questionToConfirm">Confirm Exit?</div>
+            </div>
+        </div>
+        <br><br>
+        <script>
+            $(".year").text(new Date().getFullYear());
+            /*
+                Loader function
+
+                Load all the components view from the 
+                components/ directory into their corrisponding divs
+            */
+            let loadingComponents = 0;
+            
+            function initTabs(callback=undefined){
+                $('.functiontab').each(function(){
+                    let loadTarget = $(this).attr("target");
+                    if (loadTarget != undefined){
+                        $(this).load("./components/" + loadTarget, function(){
+                            loadingComponents--;
+                        });
+                        loadingComponents++;
+                    }else{
+                        $(this).html(`<p>Unable to load components for this tab</p>`);
+                    }
+                })
+                if (callback != undefined){
+                    waitInit(callback);
+                }
+            }
+
+            function waitInit(callback = undefined, retryCount = 0){
+                if (loadingComponents > 0 && retryCount < 5){
+                    setTimeout(function(){
+                        waitInit(callback, retryCount++);
+                    }, 300);
+                }else if (loadingComponents == 0){
+                    callback();
+                }else{
+                    alert("Missing component. Please check if your installation is complete.")
+                }
+            }
+
+            initTabs(function(){
+                initRPStaste();
+
+                if (window.location.hash.length > 1){
+                    let tabID = window.location.hash.substr(1);
+                    openTabById(tabID);
+                }else{
+                    openTabById("status");
+                }
+                $(".ui.dropdown").dropdown();
+                $(".ui.checkbox").checkbox();
+
+                //Click on the current tab
+                $("#mainmenu").find(".item").each(function(){
+                    $(this).on("click", function(event){
+                        let tabid = $(this).attr("tag");
+                        openTabById(tabid);
+                    });
+                });
+
+                //Initialize all table that is sortable
+                $('table').tablesort();
+            });
+
+            function logout() {
+                $.get("/api/auth/logout", function(response) {
+                    if (response === "OK") {
+                        setTimeout(function(){
+                            window.location.href = "/";
+                        }, 300);
+                    }
+                });
+            }
+
+            function getTabButtonById(targetTabId){
+                let targetTabBtn = undefined;
+                $("#mainmenu").find(".item").each(function(){
+                    let tabid = $(this).attr("tag");
+                    
+                    if (tabid == targetTabId){
+                        targetTabBtn = $(this);
+                    }
+                });
+
+                return targetTabBtn;
+            }
+
+            //Select and open a tab by its tag id
+            let tabSwitchEventBind = {}; //Bind event to tab switch by tabid
+            function openTabById(tabID){
+                let targetBtn = getTabButtonById(tabID);
+                if (targetBtn == undefined){
+                    alert("Invalid tabid given");
+                    return;
+                }
+                if (window.innerWidth < 750){
+                    //RWD mode, hide toolbar
+                    $(".toolbar").fadeOut('fast');
+                }
+
+                $("#mainmenu").find(".item").removeClass("active");
+                $(targetBtn).addClass("active");
+                $(".functiontab").hide();
+                $("#" + tabID).fadeIn('fast', function(){
+                    if (tabSwitchEventBind[tabID]){
+                        tabSwitchEventBind[tabID]();
+                    }
+                });
+                $('html,body').animate({scrollTop: 0}, 'fast');
+                window.location.hash = tabID;
+            }
+
+            $(window).on("resize", function(){
+                if (window.innerWidth >= 750 && $(".toolbar").is(":visible") == false){
+                    $(".toolbar").show();
+                }
+            });
+
+            function msgbox(message, succ=true, delayDuration=3000){
+                let icon = `<i class="ui info circle icon"></i>`;
+                if (succ){
+                    $("#messageBox").attr("class", "ui green floating compact message")
+                    icon = `<i class="ui green circle check icon"></i>`;
+                }else{
+                    message = message.capitalize();
+                    $("#messageBox").attr("class", "ui red floating compact message")
+                    icon = `<i class="ui red circle times icon"></i>`;
+                }
+                $("#messageBox").html(`${icon} ${message}`);
+                $("#messageBox").stop().finish().fadeIn("fast").delay(delayDuration).fadeOut("fast");
+            }
+
+            function confirmBox(question_to_confirm, callback, delaytime=15) {
+                
+                var progressBar = $("#confirmBox .bar");
+                var questionElement = $("#confirmBox .questionToConfirm");
+                
+                //Just to make sure there are no animation runnings
+                progressBar.stop();
+
+                // Update the question to confirm
+                questionElement.text(question_to_confirm);
+
+                // Start the progress bar animation
+                progressBar.css("width", "100%");
+                progressBar.animate({ width: "0%", easing: "linear" }, delaytime * 1000, function() {
+                    // Animation complete, invoke the callback with undefined
+                    callback(undefined);
+
+                    //Unset the event listener
+                    $("#confirmBox .ui.green.button").off("click");
+
+                    // Hide the confirm box
+                    $("#confirmBox").hide();
+                });
+
+                // Bind click event to "Yes" button
+                $("#confirmBox .ui.green.button").on("click", function() {
+                    // Stop the progress bar animation
+                    progressBar.stop();
+
+                    // Invoke the callback with true
+                    callback(true);
+
+                    // Hide the confirm box
+                    $("#confirmBox").hide();
+
+                    //Unset the event listener
+                    $("#confirmBox .ui.green.button").off("click");
+                });
+
+                // Bind click event to "No" button
+                $("#confirmBox .ui.red.button").on("click", function() {
+                    // Stop the progress bar animation
+                    progressBar.stop();
+
+                    // Invoke the callback with false
+                    callback(false);
+
+                    // Hide the confirm box
+                    $("#confirmBox").hide();
+
+                     //Unset the event listener
+                    $("#confirmBox .ui.red.button").off("click");
+                });
+
+                // Show the confirm box
+                $("#confirmBox").show().transition('jiggle');
+            }
+
+            /*
+                Toggles for side wrapper
+            */
+
+            function showSideWrapper(scriptpath=""){
+                if (scriptpath != ""){
+                    $(".sideWrapper iframe").attr("src", scriptpath);
+                }
+
+                if ($(".sideWrapper .content").transition("is animating") || $(".sideWrapper .content").transition("is visible")){
+                    return
+                }
+                $(".sideWrapper").show();
+                $(".sideWrapper .fadingBackground").fadeIn("fast");
+                $(".sideWrapper .content").transition('slide left in', 300);
+                $("body").css("overflow", "hidden");
+            }
+
+            function hideSideWrapper(discardFrameContent = false){
+                if (discardFrameContent){
+                    $(".sideWrapper iframe").attr("src", "snippet/placeholder.html");
+                }
+                if ($(".sideWrapper .content").transition("is animating") || !$(".sideWrapper .content").transition("is visible")){
+                    return
+                }
+                $(".sideWrapper .content").transition('slide left out', 300, function(){
+                    $(".sideWrapper .fadingBackground").fadeOut("fast", function(){
+                        $(".sideWrapper").hide(); 
+                    });
+                });
+                $("body").css("overflow", "auto");
+            }
+        </script>
+    </body>
+</html>

+ 3 - 3
web/rperror.html

@@ -119,7 +119,7 @@
                         <h2 class="diagramHeader">Host</h2>
                         <p style="font-weight: 500; color: #bd2426;">Error</p>
                     </div>
-                  </div>
+                </div>
             </div>
         </div>
         <div>
@@ -140,7 +140,7 @@
                             <div class="item">Visit the Reverse Proxy management interface to correct any setting errors</div>
                         </div>
                     </div>
-                  </div>
+                </div>
             </div>
             <br>
         </div>
@@ -155,4 +155,4 @@
             $("#host").text(location.href);
         </script>
     </body>
-</html>
+</html>