修复自定义域名的问题
This commit is contained in:
@@ -21,7 +21,7 @@ func NewDomainAlias(config utils.Config) *DomainAlias {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (a *DomainAlias) Query(domain string) (*Alias, error) {
|
func (a *DomainAlias) Query(domain string) (*Alias, error) {
|
||||||
get, err := a.config.Get("alias/" + domain)
|
get, err := a.config.Get("domain/alias/" + domain)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@@ -42,9 +42,9 @@ func (a *DomainAlias) Bind(domain, owner, repo, branch string) error {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return a.config.Put("domain/"+domain, string(saveB), utils.TtlKeep)
|
return a.config.Put("domain/alias/"+domain, string(saveB), utils.TtlKeep)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *DomainAlias) Unbind(domain string) error {
|
func (a *DomainAlias) Unbind(domain string) error {
|
||||||
return a.config.Delete("domain/" + domain)
|
return a.config.Delete("domain/alias/" + domain)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -66,7 +66,7 @@ func (p *PageDomain) ParseDomainMeta(domain, path, branch string) (*PageDomainCo
|
|||||||
if !strings.HasSuffix(domain, "."+p.baseDomain) {
|
if !strings.HasSuffix(domain, "."+p.baseDomain) {
|
||||||
alias, err := p.alias.Query(domain)
|
alias, err := p.alias.Query(domain)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
zap.L().Warn("未知域名", zap.String("base", p.baseDomain), zap.String("domain", domain))
|
zap.L().Warn("未知域名", zap.String("base", p.baseDomain), zap.String("domain", domain), zap.Error(err))
|
||||||
return nil, os.ErrNotExist
|
return nil, os.ErrNotExist
|
||||||
}
|
}
|
||||||
zap.L().Debug("命中别名", zap.String("domain", domain), zap.Any("alias", alias))
|
zap.L().Debug("命中别名", zap.String("domain", domain), zap.Any("alias", alias))
|
||||||
@@ -91,7 +91,7 @@ func (p *PageDomain) ParseDomainMeta(domain, path, branch string) (*PageDomainCo
|
|||||||
|
|
||||||
func (p *PageDomain) ReturnMeta(owner string, repo string, branch string, path []string) (*PageDomainContent, error) {
|
func (p *PageDomain) ReturnMeta(owner string, repo string, branch string, path []string) (*PageDomainContent, error) {
|
||||||
rel := &PageDomainContent{}
|
rel := &PageDomainContent{}
|
||||||
if meta, err := p.GetMeta(owner, repo, branch); err == nil {
|
if meta, err := p.GetMeta(p.baseDomain, owner, repo, branch); err == nil {
|
||||||
rel.PageMetaContent = meta
|
rel.PageMetaContent = meta
|
||||||
rel.Owner = owner
|
rel.Owner = owner
|
||||||
rel.Repo = repo
|
rel.Repo = repo
|
||||||
|
|||||||
@@ -71,7 +71,7 @@ func NewServerMeta(client *http.Client, backend Backend, config utils.Config, tt
|
|||||||
return &ServerMeta{backend, client, config, ttl, utils.NewLocker()}
|
return &ServerMeta{backend, client, config, ttl, utils.NewLocker()}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *ServerMeta) GetMeta(owner, repo, branch string) (*PageMetaContent, error) {
|
func (s *ServerMeta) GetMeta(baseDomain, owner, repo, branch string) (*PageMetaContent, error) {
|
||||||
rel := &PageMetaContent{
|
rel := &PageMetaContent{
|
||||||
IsPage: false,
|
IsPage: false,
|
||||||
Renders: make(map[string]string),
|
Renders: make(map[string]string),
|
||||||
@@ -136,7 +136,7 @@ func (s *ServerMeta) GetMeta(owner, repo, branch string) (*PageMetaContent, erro
|
|||||||
}
|
}
|
||||||
if cname, err := s.ReadString(owner, repo, rel.CommitID, "CNAME"); err == nil {
|
if cname, err := s.ReadString(owner, repo, rel.CommitID, "CNAME"); err == nil {
|
||||||
cname = strings.TrimSpace(cname)
|
cname = strings.TrimSpace(cname)
|
||||||
if regexpHostname.MatchString(cname) {
|
if regexpHostname.MatchString(cname) && !strings.HasSuffix(strings.ToLower(cname), strings.ToLower(baseDomain)) {
|
||||||
rel.Domain = cname
|
rel.Domain = cname
|
||||||
} else {
|
} else {
|
||||||
zap.L().Debug("指定的 CNAME 不合法", zap.String("cname", cname))
|
zap.L().Debug("指定的 CNAME 不合法", zap.String("cname", cname))
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package pkg
|
package pkg
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"mime"
|
"mime"
|
||||||
"net/http"
|
"net/http"
|
||||||
@@ -98,6 +99,11 @@ func (s *Server) Serve(writer http.ResponseWriter, request *http.Request) error
|
|||||||
}
|
}
|
||||||
zap.L().Debug("获取请求", zap.Any("request", meta.Path))
|
zap.L().Debug("获取请求", zap.Any("request", meta.Path))
|
||||||
// todo(feat) : 支持 http range
|
// todo(feat) : 支持 http range
|
||||||
|
if meta.Domain != "" && meta.Domain != request.Host {
|
||||||
|
zap.L().Debug("重定向地址", zap.Any("src", request.Host), zap.Any("dst", meta.Domain))
|
||||||
|
http.Redirect(writer, request, fmt.Sprintf("https://%s/%s", meta.Domain, meta.Path), http.StatusFound)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
result, err := s.reader.Open(meta.Owner, meta.Repo, meta.CommitID, meta.Path)
|
result, err := s.reader.Open(meta.Owner, meta.Repo, meta.CommitID, meta.Path)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if meta.HistoryRouteMode && errors.Is(err, os.ErrNotExist) {
|
if meta.HistoryRouteMode && errors.Is(err, os.ErrNotExist) {
|
||||||
|
|||||||
Reference in New Issue
Block a user