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