41 lines
713 B
Go
41 lines
713 B
Go
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
|
|
}
|