package cron import ( "fmt" "html/template" "io/ioutil" "os" "path/filepath" "time" "chaitin.cn/patronus/safeline-2/management/tcontrollerd/utils" ) const ( specCheckChallengePage = "0/5 * * * * ?" challengePageDir = "/etc/nginx/challenge_pages" challengePagePath = "/etc/nginx/challenge_pages/challenge.html" ) // challengePageData holds template data for the challenge page. type challengePageData struct { Timestamp int64 Token string } var challengePageTemplate = template.Must(template.New("challenge").Parse(` 安全验证

安全验证

正在验证您的浏览器安全环境...

验证中...
验证失败,请刷新重试
`)) func checkAndUpdateChallengePage() { // Ensure directory exists if err := os.MkdirAll(challengePageDir, 0755); err != nil { logger.Error("Failed to create challenge page directory:", err) return } existed, err := utils.FileExist(challengePagePath) if err != nil { logger.Error(err) return } // Always regenerate with fresh timestamp data := challengePageData{ Timestamp: time.Now().Unix(), Token: fmt.Sprintf("%d", time.Now().UnixNano()), } var buf []byte templateWriter := &templateBuffer{buf: buf} if err := challengePageTemplate.Execute(templateWriter, data); err != nil { logger.Error("Failed to execute challenge template:", err) return } if err := ioutil.WriteFile(challengePagePath, templateWriter.buf, 0644); err != nil { logger.Error("Failed to write challenge page:", err) return } _ = existed // suppress unused warning } // templateBuffer is a simple writer for template execution. type templateBuffer struct { buf []byte } func (w *templateBuffer) Write(p []byte) (n int, err error) { w.buf = append(w.buf, p...) return len(p), nil } func init() { // Ensure challenge page directory exists on startup _ = os.MkdirAll(challengePageDir, 0755) _ = filepath.Clean(challengePagePath) }