package cieca import ( "strconv" "time" "github.com/thehowl/cieca" "github.com/osuYozora/hanayo/services" "zxq.co/x/rs" ) // NewCSRF creates a new CSRF service as described in the services.CSRF // interface. func NewCSRF() services.CSRF { return &ciecaCSRF{ DataStore: new(cieca.DataStore), } } type ciecaCSRF struct { *cieca.DataStore } func (c *ciecaCSRF) Generate(u int) (string, error) { var s string for { s = rs.String(10) _, e := c.GetWithExist(s) if !e { break } } c.SetWithExpiration(strconv.Itoa(u)+s, nil, time.Minute*15) return s, nil } func (c *ciecaCSRF) Validate(u int, token string) (bool, error) { _, e := c.GetWithExist(strconv.Itoa(u) + token) return e, nil }