go-common/app/interface/main/account/dao/realname/antispam.go

106 lines
2.5 KiB
Go
Raw Normal View History

2019-04-22 10:49:16 +00:00
package realname
import (
"context"
"fmt"
"go-common/app/interface/main/account/conf"
"go-common/library/cache/memcache"
"github.com/pkg/errors"
)
func alipayAntispamKey(mid int64) string {
return fmt.Sprintf("raa_%d", mid)
}
//AlipayAntispamValue 最低位为pass flag ,高位为计数
//计数:判断用户的申请次数
//flag:是否通过本次防刷验证(极验是否通过)
type AlipayAntispamValue int
// IncreaseCount add antispam count
func (a *AlipayAntispamValue) IncreaseCount() {
*a = AlipayAntispamValue((a.Count()+1)<<1 + a.Flag())
}
// SetPass set is antispam verified (such as when geetest passed)
func (a *AlipayAntispamValue) SetPass(pass bool) {
var flag int
if pass {
flag = 1
}
*a = AlipayAntispamValue(a.Count()<<1 + flag)
}
// Count return antispam hit count
func (a *AlipayAntispamValue) Count() int {
return int(*a) >> 1
}
// Flag return antispam pass flag
func (a *AlipayAntispamValue) Flag() int {
return int(*a) & 0x1
}
// Pass return is antispam passed (such as when geetest passed)
func (a *AlipayAntispamValue) Pass() bool {
return a.Flag() > 0
}
// AlipayAntispam get alipay antispam count by mid
func (d *Dao) AlipayAntispam(c context.Context, mid int64) (value *AlipayAntispamValue, err error) {
var (
key = alipayAntispamKey(mid)
conn = d.mc.Get(c)
item *memcache.Item
)
defer conn.Close()
if item, err = conn.Get(key); err != nil {
if err == memcache.ErrNotFound {
err = nil
return
}
err = errors.Wrapf(err, "conn.Get(%s)", key)
return
}
value = new(AlipayAntispamValue)
if err = conn.Scan(item, &value); err != nil {
err = errors.Wrapf(err, "conn.Scan(%+v)", item)
return
}
return
}
// SetAlipayAntispam set alipay antispam count by mid
func (d *Dao) SetAlipayAntispam(c context.Context, mid int64, value *AlipayAntispamValue) (err error) {
var (
key = alipayAntispamKey(mid)
conn = d.mc.Get(c)
)
defer conn.Close()
if err = conn.Set(&memcache.Item{Key: key, Object: value, Flags: memcache.FlagJSON, Expiration: conf.Conf.Realname.AlipayAntispamTTL}); err != nil {
err = errors.Wrapf(err, "conn.Set(%s,%+v)", key, value)
return
}
return
}
// DeleteAlipayAntispam delete alipay antispam count by mid
func (d *Dao) DeleteAlipayAntispam(c context.Context, mid int64) (err error) {
var (
key = alipayAntispamKey(mid)
conn = d.mc.Get(c)
)
defer conn.Close()
if err = conn.Delete(key); err != nil {
if err == memcache.ErrNotFound {
err = nil
return
}
err = errors.Wrapf(err, "conn.Delete(%s)", key)
return
}
return
}