Prechádzať zdrojové kódy

兼容高级域名配置

huangrf 6 rokov pred
rodič
commit
d87d82d582
3 zmenil súbory, kde vykonal 60 pridanie a 14 odobranie
  1. 18 11
      custom_routers/frontend_router.go
  2. 15 3
      utils/paths.go
  3. 27 0
      utils/utils.go

+ 18 - 11
custom_routers/frontend_router.go

@@ -4,8 +4,8 @@ import (
 	"fmt"
 	"git.qianqiusoft.com/qianqiusoft/light-apiengine/engine"
 	sysmodel "git.qianqiusoft.com/qianqiusoft/light-apiengine/models"
+	sysutils "git.qianqiusoft.com/qianqiusoft/light-apiengine/utils"
 	"github.com/gin-gonic/gin"
-	"strings"
 	"time"
 )
 
@@ -39,22 +39,29 @@ func NewFrontendController(e *engine.ApiEngine) *FrontendController {
 func (c *FrontendController) GetDomainsJs(ctx *gin.Context) {
 
 	go RefreshDomainString(c.apiengine)
-	req_domain := ctx.Request.Host
-	n := strings.Index(req_domain, ":")
-	if n > 0 {
-		req_domain = req_domain[0:n]
+	hostnames := sysutils.GetHostnames(ctx)
+
+	for i := range hostnames {
+		hostname := hostnames[i]
+		if v, ok := Domain_String_Cache[hostname]; ok {
+			ctx.Data(200, "application/javascript", []byte(v))
+			return
+		}
 	}
-	ctx.Data(200, "application/javascript", []byte(Domain_String_Cache[req_domain]))
+	ctx.Data(200, "application/javascript", []byte(`window.Domains = {}`))
 }
 
 func (c *FrontendController) GetDomainLogo(ctx *gin.Context) {
 	go RefreshDomainString(c.apiengine)
-	req_domain := ctx.Request.Host
-	n := strings.Index(req_domain, ":")
-	if n > 0 {
-		req_domain = req_domain[0:n]
+	hostnames := sysutils.GetHostnames(ctx)
+	for i := range hostnames{
+		logoFile := "web/static/domain/" + hostnames[i] + "/images/sidebar_logo.png"
+		if sysutils.Exists(logoFile){
+			ctx.File(logoFile)
+			return
+		}
 	}
-	ctx.File("static/domain/" + req_domain + "images/sidebar_logo.png")
+	ctx.File("web/static/domain/default/images/sidebar_logo.png")
 }
 
 func RefreshDomainString(e *engine.ApiEngine) {

+ 15 - 3
utils/paths.go

@@ -1,13 +1,14 @@
 package utils
 
 import (
-	"os/exec"
+	"errors"
 	"os"
+	"os/exec"
 	"path/filepath"
-	"strings"
-	"errors"
 	"runtime"
+	"strings"
 )
+
 func GetCurrentPath() (string, error) {
 	file, err := exec.LookPath(os.Args[0])
 	if err != nil {
@@ -29,3 +30,14 @@ func GetCurrentPath() (string, error) {
 	//fmt.Println("path333:", path)
 	return string(path[0 : i+1]), nil
 }
+
+func Exists(path string) bool {
+	_, err := os.Stat(path)
+	if err == nil {
+		return true
+	}
+	if os.IsNotExist(err) {
+		return false
+	}
+	return false
+}

+ 27 - 0
utils/utils.go

@@ -8,6 +8,7 @@ import (
 	"git.qianqiusoft.com/qianqiusoft/light-apiengine/logs"
 	"github.com/gin-gonic/gin"
 	"net/url"
+	"regexp"
 	"strings"
 )
 
@@ -60,4 +61,30 @@ func GetHostname(ctx *gin.Context)string{
 	}
 
 	return host
+}
+
+/**
+* @brief: 把域名分成列表,最小包括部分顶级域名,例如:www.baidu.com 返回[www.baidu.com, baidu.com]
+× @param1 hostname: 请求名称
+*/
+func GetHostnames(ctx *gin.Context)[]string{
+	hostname := GetHostname(ctx)
+	patternstr := `(2(5[0-5]{1}|[0-4]\d{1})|[0-1]?\d{1,2})(\.(2(5[0-5]{1}|[0-4]\d{1})|[0-1]?\d{1,2})){3}`
+	reg := regexp.MustCompile(patternstr)
+	if res := reg.FindAllString(hostname, -1); res == nil {
+		arr := []string{}
+		parts := strings.Split(hostname, ".")
+		if len(parts) <= 2{
+			arr = append(arr, hostname)
+		}else{
+			arr = append(arr, hostname)
+			for i := 0; i < len(parts) - 2; i++ {
+				arr = append(arr, strings.Join(parts[i+1:], "."))
+			}
+		}
+		return  arr
+	} else {
+		// 直接返回ip
+		return []string{hostname}
+	}
 }