InMemoryCaptchaDB was renamed to InMemoryDB.
This commit is contained in:
parent
fe2c3c8e59
commit
5a16c4d678
@ -8,8 +8,8 @@ import (
|
|||||||
"git.arav.su/Arav/justcaptcha/pkg/captcha"
|
"git.arav.su/Arav/justcaptcha/pkg/captcha"
|
||||||
)
|
)
|
||||||
|
|
||||||
// InMemoryCaptchaDB implementation that lives in a memory (map).
|
// InMemoryDB implementation that lives in a memory (map).
|
||||||
type InMemoryCaptchaDB struct {
|
type InMemoryDB struct {
|
||||||
sync.Mutex
|
sync.Mutex
|
||||||
|
|
||||||
db map[captcha.ID]captcha.Captcha
|
db map[captcha.ID]captcha.Captcha
|
||||||
@ -17,11 +17,11 @@ type InMemoryCaptchaDB struct {
|
|||||||
expiryScanInterval time.Duration
|
expiryScanInterval time.Duration
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewInMemoryCaptchaDB returns an initialised instance of an InMemoryCaptchaDB.
|
// NewInMemoryDB returns an initialised instance of an InMemoryDB.
|
||||||
// An expiry is a scan interval for expired CAPTCHAs (if passed a longer one,
|
// An expiry is a scan interval for expired CAPTCHAs (if passed a longer one,
|
||||||
// resets to a default (captcha.DefaultExpiredScanInterval)).
|
// resets to a default (captcha.DefaultExpiredScanInterval)).
|
||||||
func NewInMemoryCaptchaDB(expiry time.Duration) *InMemoryCaptchaDB {
|
func NewInMemoryDB(expiry time.Duration) *InMemoryDB {
|
||||||
db := &InMemoryCaptchaDB{
|
db := &InMemoryDB{
|
||||||
db: make(map[captcha.ID]captcha.Captcha),
|
db: make(map[captcha.ID]captcha.Captcha),
|
||||||
expiry: expiry}
|
expiry: expiry}
|
||||||
|
|
||||||
@ -39,7 +39,7 @@ func NewInMemoryCaptchaDB(expiry time.Duration) *InMemoryCaptchaDB {
|
|||||||
// New accepts a CAPTCHA instance, generates an ID and store it in a database.
|
// New accepts a CAPTCHA instance, generates an ID and store it in a database.
|
||||||
// A data string is an additional random data used to generate an ID,
|
// A data string is an additional random data used to generate an ID,
|
||||||
// e.g. an IP-address.
|
// e.g. an IP-address.
|
||||||
func (imcdb *InMemoryCaptchaDB) New(data string, cptcha captcha.Captcha) (captcha.Captcha, captcha.ID) {
|
func (imcdb *InMemoryDB) New(data string, cptcha captcha.Captcha) (captcha.Captcha, captcha.ID) {
|
||||||
id := captcha.NewID(data, cptcha.Answer())
|
id := captcha.NewID(data, cptcha.Answer())
|
||||||
|
|
||||||
imcdb.Lock()
|
imcdb.Lock()
|
||||||
@ -50,13 +50,13 @@ func (imcdb *InMemoryCaptchaDB) New(data string, cptcha captcha.Captcha) (captch
|
|||||||
}
|
}
|
||||||
|
|
||||||
// GetExpiry returns an expiry for a CAPTCHA.
|
// GetExpiry returns an expiry for a CAPTCHA.
|
||||||
func (imcdb *InMemoryCaptchaDB) GetExpiry() time.Duration {
|
func (imcdb *InMemoryDB) GetExpiry() time.Duration {
|
||||||
return imcdb.expiry
|
return imcdb.expiry
|
||||||
}
|
}
|
||||||
|
|
||||||
// SetExpiry changes an expiry for a CAPTCHA and a scan interval. Scan interval
|
// SetExpiry changes an expiry for a CAPTCHA and a scan interval. Scan interval
|
||||||
// cannot be longer than a default, so if it is, then resets to a default.
|
// cannot be longer than a default, so if it is, then resets to a default.
|
||||||
func (imcdb *InMemoryCaptchaDB) SetExpiry(expiry time.Duration) {
|
func (imcdb *InMemoryDB) SetExpiry(expiry time.Duration) {
|
||||||
imcdb.expiry = expiry
|
imcdb.expiry = expiry
|
||||||
if expiry < captcha.DefaultExpiredScanInterval {
|
if expiry < captcha.DefaultExpiredScanInterval {
|
||||||
imcdb.expiryScanInterval = expiry
|
imcdb.expiryScanInterval = expiry
|
||||||
@ -67,7 +67,7 @@ func (imcdb *InMemoryCaptchaDB) SetExpiry(expiry time.Duration) {
|
|||||||
|
|
||||||
// Image returns a freshly generated image for a CAPTCHA with style if
|
// Image returns a freshly generated image for a CAPTCHA with style if
|
||||||
// applicable.
|
// applicable.
|
||||||
func (imcdb *InMemoryCaptchaDB) Image(id captcha.ID, style string) *image.Image {
|
func (imcdb *InMemoryDB) Image(id captcha.ID, style string) *image.Image {
|
||||||
imcdb.Lock()
|
imcdb.Lock()
|
||||||
defer imcdb.Unlock()
|
defer imcdb.Unlock()
|
||||||
if c, ok := imcdb.db[id]; ok {
|
if c, ok := imcdb.db[id]; ok {
|
||||||
@ -78,7 +78,7 @@ func (imcdb *InMemoryCaptchaDB) Image(id captcha.ID, style string) *image.Image
|
|||||||
|
|
||||||
// Solve compares given answer with a stored one and if failed
|
// Solve compares given answer with a stored one and if failed
|
||||||
// deletes a CAPTCHA from database.
|
// deletes a CAPTCHA from database.
|
||||||
func (imcdb *InMemoryCaptchaDB) Solve(id captcha.ID, answer captcha.Answer) bool {
|
func (imcdb *InMemoryDB) Solve(id captcha.ID, answer captcha.Answer) bool {
|
||||||
imcdb.Lock()
|
imcdb.Lock()
|
||||||
defer imcdb.Unlock()
|
defer imcdb.Unlock()
|
||||||
if c, ok := imcdb.db[id]; ok {
|
if c, ok := imcdb.db[id]; ok {
|
||||||
@ -93,7 +93,7 @@ func (imcdb *InMemoryCaptchaDB) Solve(id captcha.ID, answer captcha.Answer) bool
|
|||||||
|
|
||||||
// IsSolved checks if CAPTCHA was solved and removes it
|
// IsSolved checks if CAPTCHA was solved and removes it
|
||||||
// from a database.
|
// from a database.
|
||||||
func (imcdb *InMemoryCaptchaDB) IsSolved(id captcha.ID) bool {
|
func (imcdb *InMemoryDB) IsSolved(id captcha.ID) bool {
|
||||||
imcdb.Lock()
|
imcdb.Lock()
|
||||||
defer imcdb.Unlock()
|
defer imcdb.Unlock()
|
||||||
if c, ok := imcdb.db[id]; ok {
|
if c, ok := imcdb.db[id]; ok {
|
||||||
@ -104,14 +104,14 @@ func (imcdb *InMemoryCaptchaDB) IsSolved(id captcha.ID) bool {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Remove a CAPTCHA from a database.
|
// Remove a CAPTCHA from a database.
|
||||||
func (imcdb *InMemoryCaptchaDB) Remove(id captcha.ID) {
|
func (imcdb *InMemoryDB) Remove(id captcha.ID) {
|
||||||
imcdb.Lock()
|
imcdb.Lock()
|
||||||
defer imcdb.Unlock()
|
defer imcdb.Unlock()
|
||||||
delete(imcdb.db, id)
|
delete(imcdb.db, id)
|
||||||
}
|
}
|
||||||
|
|
||||||
// cleanExpired removes expired CAPTCHAs in a loop.
|
// cleanExpired removes expired CAPTCHAs in a loop.
|
||||||
func (imcdb *InMemoryCaptchaDB) cleanExpired() {
|
func (imcdb *InMemoryDB) cleanExpired() {
|
||||||
for {
|
for {
|
||||||
sleepFor := imcdb.expiryScanInterval - (time.Duration(time.Now().Second()) % imcdb.expiryScanInterval)
|
sleepFor := imcdb.expiryScanInterval - (time.Duration(time.Now().Second()) % imcdb.expiryScanInterval)
|
||||||
time.Sleep(sleepFor)
|
time.Sleep(sleepFor)
|
||||||
@ -126,9 +126,9 @@ func (imcdb *InMemoryCaptchaDB) cleanExpired() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// An instance of InMemoryCaptchaDB
|
// An instance of InMemoryDB
|
||||||
|
|
||||||
var imcdb = NewInMemoryCaptchaDB(captcha.DefaultExpiredScanInterval)
|
var imcdb = NewInMemoryDB(captcha.DefaultExpiredScanInterval)
|
||||||
|
|
||||||
func GetExpiry() time.Duration {
|
func GetExpiry() time.Duration {
|
||||||
return imcdb.GetExpiry()
|
return imcdb.GetExpiry()
|
||||||
|
@ -40,7 +40,7 @@ func TestInMemDBDefaultInstance(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestInMemDBNewInstance(t *testing.T) {
|
func TestInMemDBNewInstance(t *testing.T) {
|
||||||
db := inmemdb.NewInMemoryCaptchaDB(expiry)
|
db := inmemdb.NewInMemoryDB(expiry)
|
||||||
|
|
||||||
if db.GetExpiry() != expiry {
|
if db.GetExpiry() != expiry {
|
||||||
t.Errorf("expected expiry %v, but got %v", expiry, db.GetExpiry())
|
t.Errorf("expected expiry %v, but got %v", expiry, db.GetExpiry())
|
||||||
|
Loading…
Reference in New Issue
Block a user