limiter

package
v0.0.0-...-a78f517 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 18, 2024 License: MIT Imports: 3 Imported by: 0

Documentation

Index

Constants

View Source
const (
	ActionTimeCachePrefix         = "action-time:"
	ActionCountCachePrefix        = "action-count:"
	AlwaysModeVerifiedCachePrefix = "captcha-am-verified:"
)

Variables

This section is empty.

Functions

This section is empty.

Types

type Limiter

type Limiter struct {
	// contains filtered or unexported fields
}

操作次数限制器(根据 IP)

关键函数:

  1. IsPass(ip) 请求启用了 Limiter 的页面时, 判断操作次数是否过限,若超过限制则响应 need_captcha

  2. MarkVerifyPassed 若验证码正确,则放行操作一次(最大操作数 -1)

  3. MarkVerifyFailed 若验证码错误,则操作次数 +1,记录最后操作时间

  4. Log(ip) 当用户发表评论后,调用 Log 操作次数 +1,记录最后操作时间

func NewLimiter

func NewLimiter(conf *LimiterConf) *Limiter

func (*Limiter) IsPass

func (l *Limiter) IsPass(ip string) bool

请求是否需要验证码

Notice: call IsPass will trigger a write operation.

func (*Limiter) Log

func (l *Limiter) Log(ip string)

记录操作 (请勿在 IsNeedVerify 函数被调用之前执行 Log)

func (*Limiter) MarkVerifyFailed

func (l *Limiter) MarkVerifyFailed(ip string)

验证失败操作

func (*Limiter) MarkVerifyPassed

func (l *Limiter) MarkVerifyPassed(ip string)

验证成功操作

func (*Limiter) ResetLog

func (l *Limiter) ResetLog(ip string)

重置操作记录

type LimiterConf

type LimiterConf struct {
	AlwaysMode          bool // 总是需要验证码模式 (允许零次操作时开启)
	MaxActionDuringTime int  // 时间范围内允许多少次操作 (激活验证码所需调用 Log 函数次数)
	ResetTimeout        int  // 重置超时,单位 s (当你想当评论 n 次后一直需要验证码,可以将时间设置得足够大,或是 -1)
}

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL