resetcode.go 764 B

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. package httpd
  2. import (
  3. "sync"
  4. "time"
  5. "github.com/drakkan/sftpgo/v2/util"
  6. )
  7. var (
  8. resetCodeLifespan = 10 * time.Minute
  9. resetCodes sync.Map
  10. )
  11. type resetCode struct {
  12. Code string
  13. Username string
  14. IsAdmin bool
  15. ExpiresAt time.Time
  16. }
  17. func (c *resetCode) isExpired() bool {
  18. return c.ExpiresAt.Before(time.Now().UTC())
  19. }
  20. func newResetCode(username string, isAdmin bool) *resetCode {
  21. return &resetCode{
  22. Code: util.GenerateUniqueID(),
  23. Username: username,
  24. IsAdmin: isAdmin,
  25. ExpiresAt: time.Now().Add(resetCodeLifespan).UTC(),
  26. }
  27. }
  28. func cleanupExpiredResetCodes() {
  29. resetCodes.Range(func(key, value interface{}) bool {
  30. c, ok := value.(*resetCode)
  31. if !ok || c.isExpired() {
  32. resetCodes.Delete(key)
  33. }
  34. return true
  35. })
  36. }