package admin import ( "net/http" "time" "oneblog/internal/ratelimit" ) // loginLimiter 限制每个来源 IP 的登录失败次数(滑动窗口), // 防止默认/弱口令被在线暴力破解。成功登录后计数清零。 // 实现挪到了 internal/ratelimit(读者登录/评论写入共用),这里保留 // 原有调用面与常量。 type loginLimiter = ratelimit.Window const ( maxLoginFails = 10 loginWindow = 10 * time.Minute ) func newLoginLimiter() *loginLimiter { return ratelimit.New(maxLoginFails, loginWindow) } func sourceKey(r *http.Request) string { return ratelimit.SourceKey(r) } // isTLS 判断最终用户看到的是不是 HTTPS(含反代 X-Forwarded-Proto)。 func isTLS(r *http.Request) bool { if r.TLS != nil { return true } return r.Header.Get("X-Forwarded-Proto") == "https" }