@@ -17,6 +17,7 @@ import Data.Text (Text)
1717import qualified Data.Text as Text
1818import qualified Data.Text.Encoding as Text
1919import Data.Time.Clock
20+ import qualified Data.Traversable as Traversable
2021import qualified Data.UUID.V4 as UUID
2122import qualified Database.Esqueleto as E
2223import Database.Esqueleto hiding ((^.) , from )
@@ -210,12 +211,32 @@ login Login{ loginUser = userEmail
210211 sendOTP twilioConf userEmail p otp
211212 return ()
212213
214+ getUserByToken :: B64Token -> API (Maybe DB. User )
215+ getUserByToken tokenId = do
216+ -- Delete expired tokens
217+ now <- liftIO $ getCurrentTime
218+ runDB $ P. deleteWhere [DB. TokenExpires P. <=. Just now]
219+
220+ user <- runDB . select . E. from $ \ (user `InnerJoin ` token) -> do
221+ on (user E. ^. DB. UserUuid ==. token E. ^. DB. TokenUser )
222+ where_ (token E. ^. DB. TokenToken ==. val tokenId)
223+ return user
224+ return . fmap entityVal $ listToMaybe user
225+
226+ getUserInfo :: B64Token -> API (Maybe ReturnUserInfo )
227+ getUserInfo token = do
228+ mbUser <- getUserByToken token
229+ Traversable. forM mbUser $ \ user -> do
230+ instances <- getUserInstances (user ^. DB. uuid)
231+ return ReturnUserInfo { returnUserInfoId = user ^. DB. uuid
232+ , returnUserInfoEmail = user ^. email
233+ , returnUserInfoName = user ^. name
234+ , returnUserInfoPhone = user ^. phone
235+ , returnUserInfoInstances = instances
236+ }
213237
214238checkToken :: B64Token -> API (Maybe UserID )
215- checkToken tokenId = do
216- now <- liftIO $ getCurrentTime
217- runDB $ P. deleteWhere [DB. TokenExpires P. <=. Just now]
218- fmap DB. tokenUser <$> (runDB $ P. get (DB. TokenKey tokenId))
239+ checkToken tokenId = fmap DB. userUuid <$> getUserByToken tokenId
219240
220241checkInstance :: InstanceID -> UserID -> API (Maybe DB. UserInstance )
221242checkInstance inst user = runDB $ P. get (DB. UserInstanceKey user inst)
0 commit comments