Skip to content

Commit

Permalink
refactor(签名): 签名功能单独例到一个文件
Browse files Browse the repository at this point in the history
  • Loading branch information
storezhang committed Mar 31, 2023
1 parent 80c929d commit bf03d3c
Show file tree
Hide file tree
Showing 2 changed files with 52 additions and 48 deletions.
48 changes: 0 additions & 48 deletions cdn.go
Original file line number Diff line number Diff line change
@@ -1,12 +1,7 @@
package cdn

import (
"net/url"
"path"

"github.com/goexl/exc"
"github.com/goexl/gox"
"github.com/goexl/gox/field"
)

// CDN 客户端
Expand All @@ -21,46 +16,3 @@ func newCDN(params *params) *CDN {
params: params,
}
}

func (c *CDN) Sign(from string) (encoded *url.URL, err error) {
if parsed, pe := url.Parse(from); nil != pe {
err = pe
} else if sign, ee := c.lookupSigner(parsed.Host); nil != ee {
err = ee
} else {
err = sign.sign(parsed)
}

return
}

func (c *CDN) lookupSigner(host string) (signer signer, err error) {
if cached, ok := c.signers[host]; ok {
signer = cached
} else {
signer, err = c.matchSigner(host)
}

return
}

func (c *CDN) matchSigner(host string) (signer signer, err error) {
for domain, value := range c.params.signers {
if matched, me := path.Match(domain, host); nil == me && matched {
signer = value
}
if nil != signer {
break
}
}
if nil == signer {
signer = c.params.signers[defaults]
}
if nil != signer {
c.signers[host] = signer
} else {
err = exc.NewField("没有匹配到域名", field.New("domains", c.params.signers))
}

return
}
52 changes: 52 additions & 0 deletions cdn_sign.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
package cdn

import (
"net/url"
"path"

"github.com/goexl/exc"
"github.com/goexl/gox/field"
)

func (c *CDN) Sign(from string) (encoded *url.URL, err error) {
if parsed, pe := url.Parse(from); nil != pe {
err = pe
} else if sign, ee := c.lookupSigner(parsed.Host); nil != ee {
err = ee
} else {
err = sign.sign(parsed)
}

return
}

func (c *CDN) lookupSigner(host string) (signer signer, err error) {
if cached, ok := c.signers[host]; ok {
signer = cached
} else {
signer, err = c.matchSigner(host)
}

return
}

func (c *CDN) matchSigner(host string) (signer signer, err error) {
for domain, value := range c.params.signers {
if matched, me := path.Match(domain, host); nil == me && matched {
signer = value
}
if nil != signer {
break
}
}
if nil == signer {
signer = c.params.signers[defaults]
}
if nil != signer {
c.signers[host] = signer
} else {
err = exc.NewField("没有匹配到域名", field.New("domains", c.params.signers))
}

return
}

0 comments on commit bf03d3c

Please sign in to comment.