Forráskód Böngészése

auto update script executed

Toby Chui 1 éve
szülő
commit
2dbffb0bb4
3 módosított fájl, 109 hozzáadás és 24 törlés
  1. 6 21
      mod/geodb/netutils.go
  2. 4 3
      web/components/cert.html
  3. 99 0
      web/snippet/intermediateCertConv.html

+ 6 - 21
mod/geodb/netutils.go

@@ -1,7 +1,6 @@
 package geodb
 
 import (
-	"log"
 	"net"
 	"net/http"
 	"strings"
@@ -34,26 +33,12 @@ func GetRequesterIP(r *http.Request) string {
 	}
 
 	//Trim away the port number
-	if strings.Contains(requesterRawIp, "]:") {
-		//e.g. [15c4:cbb4:cc98:4291:ffc1:3a46:06a1:51a7]:61002
-		requesterRawIp = strings.Split(requesterRawIp, "]:")[0]
-		requesterRawIp = strings.TrimSpace(requesterRawIp[1:])
-		//The remaining part should be a ipv6 string
-		//e.g. 15c4:cbb4:cc98:4291:ffc1:3a46:06a1:51a7
-		if !IsIPv6(requesterRawIp) {
-			//WTF is this?
-			log.Println("Unknown request IPv6 extracted: " + requesterRawIp)
-			return ""
-		}
-	} else if strings.Contains(requesterRawIp, ":") && strings.Contains(requesterRawIp, ".") {
-		//e.g. 127.0.0.1:61001
-		requesterRawIp = strings.Split(requesterRawIp, ":")[0]
-		requesterRawIp = strings.TrimSpace(requesterRawIp)
-		if !IsIPv4(requesterRawIp) {
-			log.Println("Unknown request IPv4 extracted: " + requesterRawIp)
-			return ""
-		}
-	} else if strings.HasPrefix(requesterRawIp, "[") && strings.HasSuffix(requesterRawIp, "]") {
+	reqHost, _, err := net.SplitHostPort(requesterRawIp)
+	if err == nil {
+		requesterRawIp = reqHost
+	}
+
+	if strings.HasPrefix(requesterRawIp, "[") && strings.HasSuffix(requesterRawIp, "]") {
 		//e.g. [15c4:cbb4:cc98:4291:ffc1:3a46:06a1:51a7]
 		requesterRawIp = requesterRawIp[1 : len(requesterRawIp)-1]
 	}

+ 4 - 3
web/components/cert.html

@@ -39,15 +39,16 @@
             <input type="text" id="certdomain" placeholder="example.com / blog.example.com">
             </div>
             <div class="field">
-                <label>Public Key</label>
+                <label>Public Key (.pem)</label>
                 <input type="file" id="pubkeySelector" onchange="handleFileSelect(event, 'pub')">
             </div>
             <div class="field">
-                <label>Private Key</label>
+                <label>Private Key (.key)</label>
                 <input type="file" id="prikeySelector" onchange="handleFileSelect(event, 'pri')">
             </div>
         </div>
-        <button class="ui basic button" onclick="handleDomainUploadByKeypress();"><i class="ui teal upload icon"></i> Upload</button>
+        <button class="ui basic button" onclick="handleDomainUploadByKeypress();"><i class="ui teal upload icon"></i> Upload</button><br>
+        <small>You have intermediate certificate? <a style="cursor:pointer;" onclick="showSideWrapper('snippet/intermediateCertConv.html');">Open Conversion Tool</a></small>
     </div>
     <div id="certUploadSuccMsg" class="ui green message" style="display:none;">
         <i class="ui checkmark icon"></i> Certificate for domain <span id="certUploadingDomain"></span> uploaded.

+ 99 - 0
web/snippet/intermediateCertConv.html

@@ -0,0 +1,99 @@
+<!DOCTYPE html>
+<html>
+    <head>
+        <!-- Notes: This should be open in its original path-->
+        <link rel="stylesheet" href="../script/semantic/semantic.min.css">
+        <script src="../script/jquery-3.6.0.min.js"></script>
+        <script src="../script/semantic/semantic.min.js"></script>
+    </head>
+    <body>
+        <br>
+        <div class="ui container">
+            <div class="ui header">
+                <div class="content">
+                    Intermediate Certificate Converter
+                    <div class="sub header">Convert .cer files to .pem</div>
+                </div>
+            </div>
+            <div class="ui message">
+                <div class="header">
+                    Why I need this?
+                </div>
+                <p>If you have 3 certificate files (2 x .cer + 1 x .key) provided by your ISP, you will need to merge the root and intermediate certificates in order to upload it to Zoraxy. This tool will automate the process for you.</p>
+            </div>
+
+            <div class="ui form">
+                <div class="field">
+                    <label>Select Root Certificate</label>
+                    <input type="file" id="rootCertificateInput">
+                </div>
+                <div class="field">
+                    <label>Select Intermediate Certificate</label>
+                    <input type="file" id="intermediateCertificateInput">
+                </div>
+                <div class="field">
+                    <label>Export File Name (Optional)</label>
+                    <input type="text" id="exportFilename" value="domain.pem">
+                </div>
+                <button class="ui basic button" onclick="convertCertificates()"> <i class="ui blue exchange icon"></i> Convert</button>
+            </div>
+              
+            <br>
+            <button class="ui basic button"  style="float: right;" onclick="parent.hideSideWrapper();"><i class="remove icon"></i> Cancel</button>
+        </div>
+        <script>
+
+            function mergeAndDownload(certificatesArray=["",""]){
+                if (certificatesArray[0] == "" || certificatesArray[1] == ""){
+                    //Data not ready
+                    return;
+                }
+                var filename = $("#exportFilename").val().trim();
+                //Basically just concat both together. See https://github.com/tobychui/zoraxy/wiki/Import-your-own-certificate
+                generateAndDownload(certificatesArray[0] + '\n' + certificatesArray[1], filename);   
+            }
+
+            
+
+            function convertCertificates() {
+                var rootCertificateFile = document.getElementById('rootCertificateInput').files[0];
+                var intermediateCertificateFile = document.getElementById('intermediateCertificateInput').files[0];
+                var readerr = new FileReader();
+                var readeri = new FileReader();
+                let certificates = ["",""];
+                readerr.onload = function(event) {
+                    var rootCertificateContent = event.target.result;
+
+                    certificates[0] = rootCertificateContent;
+                    mergeAndDownload(certificates);
+                    console.log('Root Certificate Content:', rootCertificateContent);
+                };
+
+                readeri.onload = function(event) {
+                    var intermediateCertificateContent = event.target.result;
+
+                    certificates[1] = intermediateCertificateContent;
+                    mergeAndDownload(certificates);
+                    console.log('Intermediate Certificate Content:', intermediateCertificateContent);
+                };
+
+                readerr.readAsText(rootCertificateFile);
+                readeri.readAsText(intermediateCertificateFile);
+            }
+            
+            function generateAndDownload(content, filename) {
+                var element = document.createElement('a');
+                element.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(content));
+                element.setAttribute('download', filename);
+
+                element.style.display = 'none';
+                document.body.appendChild(element);
+
+                element.click();
+
+                document.body.removeChild(element);
+            }
+
+        </script>
+    </body>
+</html>