;; Every time they're a failed login, push a new pair of [email timestamp] to the front of the list. The list is thus automatically ordered
;; by date, and we can drop the portion of the list with failed logins that are over an hour old as needed.
;;
;; Once a User has some number of failed login attempts over the past hour (e.g. 4), calculate some delay before they're allowed to try to login again
;; (e.g., 15 seconds). This number will increase exponentially as the number of recent failures increases (e.g., 40 seconds for 5 failed attempts, 80 for
;; 6 failed attempts, etc).
;;
;; Calucate the time since the last failed attempt, and throw an exception telling the user the number of seconds they must wait before trying again if