|
|
- package site
-
- import (
- "errors"
- "log"
- "net/http"
- "strings"
- )
-
- func GetSiteInfo(master, host string) (map[string]string, error) {
- if master == "" || host == "" {
- errors.New("params error")
- }
-
- host = strings.Replace(host, "https://", "", 1)
- host = strings.Replace(host, "http://", "", 1)
-
- //去掉端口
- if strings.Contains(host, ":") {
- index := strings.Index(host, ":")
- host = host[:index]
- }
- host = strings.Split(host, ":")[0]
-
- site, err := GetSiteFromRedis(host) //从redis获取
- if err != nil {
- log.Println("从redis获取分站失败", err)
- }
- if err == nil && len(site) > 0 {
- return site, nil
- }
-
- log.Println("从总站", master, "获取分站信息", host)
- site, err = GetSiteFromMaster(master, host) //从总站获取
- if err != nil {
- log.Println("从总站获取分站信息失败", err)
- return site, err
- }
-
- if len(site) > 0 {
- if _, ok := site["database"]; !ok { //检查是否有database
- log.Println("站点数据没有database", site)
- return site, errors.New("站点数据错误,缺少必要参数")
- }
- if _, ok := site["site_id"]; !ok { //检查是否有site_id
- log.Println("站点数据没有site_id", site)
- return site, errors.New("站点数据错误,缺少必要参数")
- }
- SetToRedis(host, site) //存入redis
-
- return site, nil
- } else {
- return site, errors.New("数据错误")
- }
- }
-
- /**
- * 取完整数据库名
- * 2020/06/15
- * gz
- */
- func GetDbName(master, host string) (string, error) {
-
- siteInfo, err := GetSiteInfo(master, host)
- if err != nil {
- return "", err
- }
- return siteInfo["database"], nil
- }
-
- /**
- * 取站点ID
- * 2020/06/15
- * gz
- */
- func GetSiteId(master, domain string) (string, error) {
-
- siteInfo, err := GetSiteInfo(master, domain)
- if err != nil {
- return "", err
- }
- if _, ok := siteInfo["site_id"]; !ok {
- return "", errors.New("没有找到站点ID")
- }
- return siteInfo["site_id"], nil
- }
-
- func GetSiteInfoFromReq(master string, req *http.Request) (map[string]string, error) {
-
- log.Println("header:", req.Header, ";", "body:", req.Body)
-
- host := GetHost(req)
- siteInfo, err := GetSiteInfo(master, host)
- if err != nil {
- return siteInfo, err
- }
- if len(siteInfo) > 0 {
- siteInfo["host"] = host
- }
- return siteInfo, nil
- }
-
- /**
- * 取访问主机名
- */
- func GetHost(req *http.Request) string {
-
- var hostlist []string = req.Header.Values("X-Forwarded-Host")
- var host string
- if len(hostlist) > 1 {
- host = hostlist[len(hostlist)-1] //取最后一次转发的
- } else if len(hostlist) == 1 {
- host = hostlist[0]
- } else {
- host = ""
- }
- if host != "" {
- hosts := strings.Split(host, ",")
- host = strings.Trim(hosts[len(hosts)-1], " ")
- }
-
- if host == "" {
- host = req.Host
- }
- return host
- }
|