Restrict users from multiple failed login attempts
I'm not resetting the failed LoginAttempt count, which is a low priority for now, but necessary eventually.
This commit is contained in:
parent
f051b0be0b
commit
cf6c8799ab
4 changed files with 70 additions and 8 deletions
29
src/LoginAttempts.hs
Normal file
29
src/LoginAttempts.hs
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
{-# LANGUAGE OverloadedStrings #-}
|
||||
{-# LANGUAGE RecordWildCards #-}
|
||||
--------------------------------------------------------------------------------
|
||||
module LoginAttempts where
|
||||
--------------------------------------------------------------------------------
|
||||
import Database.SQLite.Simple
|
||||
|
||||
import qualified Types as T
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
reset :: FilePath -> T.Username -> IO ()
|
||||
reset dbFile username = withConnection dbFile $ \conn ->
|
||||
execute conn "UPDATE LoginAttempts SET numAttempts = 0 WHERE username = ?"
|
||||
(Only username)
|
||||
|
||||
-- | Attempt to return the number of failed login attempts for
|
||||
-- `username`. Returns a Maybe in case `username` doesn't exist.
|
||||
forUsername :: FilePath -> T.Username -> IO (Maybe Integer)
|
||||
forUsername dbFile username = withConnection dbFile $ \conn -> do
|
||||
res <- query conn "SELECT (numAttempts) FROM LoginAttempts WHERE username = ?"
|
||||
(Only username)
|
||||
case res of
|
||||
[T.LoginAttempt{..}] -> pure (Just loginAttemptNumAttempts)
|
||||
_ -> pure Nothing
|
||||
|
||||
increment :: FilePath -> T.Username -> IO ()
|
||||
increment dbFile username = withConnection dbFile $ \conn ->
|
||||
execute conn "UPDATE LoginAttempts SET numAttempts = numAttempts + 1 WHERE username = ?"
|
||||
(Only username)
|
||||
Loading…
Add table
Add a link
Reference in a new issue