Hash passwords when creating accounts
TL;DR:
- introduce the Cryptonite library
- Remove the redundant language extensions, imports, deps from Persistent
- Prefer NoContent return type for POST /accounts
- Define custom {To,From}JSON instances for Role
This commit is contained in:
parent
bb36dd1f9e
commit
b170be9375
4 changed files with 76 additions and 52 deletions
18
src/App.hs
18
src/App.hs
|
|
@ -33,14 +33,16 @@ server dbFile = createAccountH
|
|||
listTripsH = liftIO $ listTrips
|
||||
|
||||
-- TODO(wpcarro): Handle failed CONSTRAINTs instead of sending 500s
|
||||
createAccount :: T.Account -> IO (Maybe T.Session)
|
||||
createAccount account = withConnection dbFile $ \conn -> do
|
||||
execute conn "INSERT INTO Accounts (username,password,email,role,profilePicture) VALUES (?,?,?,?,?)"
|
||||
(account & T.accountFields)
|
||||
T.Session{ T.username = T.accountUsername account
|
||||
, T.password = T.accountPassword account
|
||||
, T.role = T.accountRole account
|
||||
} & Just & pure
|
||||
createAccount :: T.CreateAccountRequest -> IO NoContent
|
||||
createAccount request = withConnection dbFile $ \conn -> do
|
||||
hashed <- T.hashPassword (T.createAccountRequestPassword request)
|
||||
execute conn "INSERT INTO Accounts (username,password,email,role) VALUES (?,?,?,?)"
|
||||
( T.createAccountRequestUsername request
|
||||
, hashed
|
||||
, T.createAccountRequestEmail request
|
||||
, T.createAccountRequestRole request
|
||||
)
|
||||
pure NoContent
|
||||
|
||||
deleteAccount :: Text -> IO NoContent
|
||||
deleteAccount username = withConnection dbFile $ \conn -> do
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue