60 lines
1.5 KiB
Go
60 lines
1.5 KiB
Go
package seoser
|
|
|
|
import (
|
|
"path"
|
|
"strings"
|
|
"videoweb/app/appg"
|
|
)
|
|
|
|
// DefaultIndexNowKey 与 hgdj_server / 其它站共用的 IndexNow 密钥。
|
|
// 对应站点根路径 /{key}.txt,内容必须等于 key 本身。
|
|
const DefaultIndexNowKey = "6d41643810d540ce924edb982c3d3171"
|
|
|
|
// VerifyCodes 站长平台所有权验证(meta + 根路径文件)。
|
|
type VerifyCodes struct {
|
|
Baidu string
|
|
BaiduHTML string
|
|
IndexNowKey string
|
|
}
|
|
|
|
// VerifyFromConfig 读取 yaml 中的验证码与验证文件名。
|
|
func VerifyFromConfig() VerifyCodes {
|
|
seo := appg.Conf.SEO
|
|
key := sanitizeIndexNowKey(seo.IndexNowKey)
|
|
if key == "" {
|
|
key = DefaultIndexNowKey
|
|
}
|
|
return VerifyCodes{
|
|
Baidu: strings.TrimSpace(seo.BaiduSiteVerification),
|
|
BaiduHTML: sanitizeVerifyFile(seo.BaiduHTMLFile),
|
|
IndexNowKey: key,
|
|
}
|
|
}
|
|
|
|
func sanitizeVerifyFile(raw string) string {
|
|
raw = strings.TrimSpace(strings.ReplaceAll(raw, "\\", "/"))
|
|
raw = path.Base(raw)
|
|
if raw == "" || raw == "." || raw == "/" || strings.Contains(raw, "..") {
|
|
return ""
|
|
}
|
|
lower := strings.ToLower(raw)
|
|
if strings.HasSuffix(lower, ".html") || strings.HasSuffix(lower, ".htm") || strings.HasSuffix(lower, ".xml") {
|
|
return raw
|
|
}
|
|
return ""
|
|
}
|
|
|
|
func sanitizeIndexNowKey(raw string) string {
|
|
raw = strings.TrimSpace(raw)
|
|
if raw == "" {
|
|
return ""
|
|
}
|
|
for _, r := range raw {
|
|
if (r >= 'a' && r <= 'z') || (r >= 'A' && r <= 'Z') || (r >= '0' && r <= '9') || r == '-' || r == '_' {
|
|
continue
|
|
}
|
|
return ""
|
|
}
|
|
return raw
|
|
}
|