@@ -51,7 +51,6 @@ import qualified Data.ByteString.Base64 as BS
5151import Data.Maybe
5252import Server.Auth.Token
5353import Server.Auth.Mail
54−import Data.Int
5554import Web.UAParser
5655import qualified Data.Text.Lazy as TL
5756
@@ -63,7 +62,7 @@ instance ToSample AuthenticationCredits where
6362instance ToSample UserLoginResponse where
6463 toSamples _ = samples $ map UserLoginResponse [UserIsRegistered, UserCanRegister, InvalidUser]
6564
66−instance ToSample Int32 where
65+instance ToSample Int where
6766 toSamples _ = samples [382934, 103845, 294905]
6867
6968instance ToSample UserCreation where
@@ -90,7 +89,7 @@ type AuthenticationHandler =
9089 :> Header "cookie" String
9190 :> PostNoContent '[JSON, PlainText, FormUrlEncoded] (Headers '[Header "Set-Cookie" String] NoContent) :<|>
9291 "verify" :> VerifyDescription :>
93− Header "cookie" String :> ReqBody '[JSON] Int32 :> PostNoContent '[JSON, PlainText, FormUrlEncoded] NoContent :<|>
92+ Header "cookie" String :> ReqBody '[JSON] Int :> PostNoContent '[JSON, PlainText, FormUrlEncoded] NoContent :<|>
9493 "register" :> RegisterDescription :>
9594 ReqBody '[JSON] UserCreation :>
9695 Header "User-Agent" String :>
@@ -141,21 +140,16 @@ logIn (AuthenticationCredits email') ua' = do
141140 Nothing -> return . noHeader $ UserLoginResponse UserCanRegister
142141 Just User{..} -> do
143142 let ua = getUserAgent ua'
144− token <- generateToken userId ua
143+ GeneratedToken token value code activation deactivation <- generateToken userId ua
145144 runQerror . createToken $ token
146− let cookie = generateCookie token
147− case tokenVerificationCode token of
148− Just code -> do
149− sendTokenVerificationEmail code (TL.fromStrict ua) email
150− return . addHeader cookie $ UserLoginResponse UserIsRegistered
151− Nothing -> throwError err500
152−
153−generateCookie :: Token -> String
154−generateCookie token = L.unpack . toLazyByteString . renderSetCookie $ defaultSetCookie {
145+ let cookie = generateCookie token value
146+ sendTokenVerificationEmail code (TL.fromStrict ua) email
147+ return . addHeader cookie $ UserLoginResponse UserIsRegistered
148+
149+generateCookie :: Token -> BS.ByteString -> String
150+generateCookie token value = L.unpack . toLazyByteString . renderSetCookie $ defaultSetCookie {
155151 setCookieName = cookieTokenKey,
156− setCookieValue = L.toStrict . encode $ AuthenticationCookieData
157− (tokenUserId token)
158− (tokenValue token),
152+ setCookieValue = L.toStrict . encode $ AuthenticationCookieData (tokenUserId token) value,
159153 setCookieExpires = Just (tokenExpiryDate token),
160154 setCookiePath = Just "/",
161155 setCookieHttpOnly = True,
@@ -171,7 +165,7 @@ checkCookie cookie = do
171165 Nothing -> throwError err401
172166 Just _ -> return NoContent
173167
174−verifyToken :: Maybe String -> Int32 -> App NoContent
168+verifyToken :: Maybe String -> Int -> App NoContent
175169verifyToken Nothing _ = throwError err400
176170verifyToken (Just cookie) code = do
177171 let mbToken = getCookie cookie
@@ -208,17 +202,14 @@ register creation' ua' = do
208202 unless (validateUser creation) $ throwError err400
209203 genToken <- generateTokenM
210204 let ua = getUserAgent ua'
211− token <- runQ err409 . commitedTransactionallyUpdate $ do
205+ GeneratedToken token value code activation deactivation <- runQ err409 . commitedTransactionallyUpdate $ do
212206 uId <- createUser creation
213− let token = genToken uId ua
214− createToken token
215− return token
216− case tokenVerificationCode token of
217− Just code -> do
218− sendTokenVerificationEmail code (TL.fromStrict ua) (userCreationUserEmail creation)
219− let cookie = generateCookie token
220− return $ addHeader cookie NoContent
221− Nothing -> throwError err500
207+ let gToken = genToken uId ua
208+ createToken . generatedToken $ gToken
209+ return gToken
210+ sendTokenVerificationEmail code (TL.fromStrict ua) (userCreationUserEmail creation)
211+ let cookie = generateCookie token value
212+ return $ addHeader cookie NoContent
222213
223214getUserAgent :: Maybe String -> T.Text
224215getUserAgent uaData' = fromMaybe "Unknown" $ do