1 {-# LANGUAGE TypeFamilies, OverloadedStrings #-} 2 module Model.Token.Types 3 ( Token(..) 4 , AccountToken(..) 5 , LoginToken(..) 6 , Session(..) 7 , Upload(..) 8 , makeUpload 9 ) where 10 11 import qualified Data.ByteString as BS 12 import Data.Int (Int64) 13 14 import Has (Has(..)) 15 import Model.Kind 16 import Model.Time 17 import Model.Id.Types 18 import Model.Party.Types 19 import Model.Permission.Types 20 21 type instance IdType Token = BS.ByteString 22 23 data Token = Token 24 { tokenId :: Id Token 25 , tokenExpires :: Timestamp 26 } 27 28 instance Has (Id Token) Token where 29 view = tokenId 30 31 data AccountToken = AccountToken 32 { accountToken :: !Token 33 , tokenAccount :: SiteAuth 34 } 35 36 instance Has (Id Token) AccountToken where 37 view = view . accountToken 38 instance Has SiteAuth AccountToken where 39 view = tokenAccount 40 instance Has Access AccountToken where 41 view = view . tokenAccount 42 instance Has (Id Party) AccountToken where 43 view = view . tokenAccount 44 instance Has Account AccountToken where 45 view = view . tokenAccount 46 47 data LoginToken = LoginToken 48 { loginAccountToken :: !AccountToken 49 , loginPasswordToken :: Bool 50 } 51 52 -- these are signed version of Id Token 53 type instance IdType LoginToken = BS.ByteString 54 55 instance Kinded LoginToken where 56 kindOf _ = "token" 57 58 instance Has (Id Token) LoginToken where 59 view = view . loginAccountToken 60 instance Has SiteAuth LoginToken where 61 view = view . loginAccountToken 62 63 data Session = Session 64 { sessionAccountToken :: !AccountToken 65 , sessionVerf :: !BS.ByteString 66 , sessionSuperuser :: Bool 67 } 68 69 instance Has (Id Token) Session where 70 view = view . sessionAccountToken 71 instance Has Access Session where 72 view = view . sessionAccountToken 73 instance Has (Id Party) Session where 74 view = view . sessionAccountToken 75 instance Has Account Session where 76 view = view . sessionAccountToken 77 78 data Upload = Upload 79 { uploadAccountToken :: AccountToken 80 , uploadFilename :: BS.ByteString 81 , uploadSize :: Int64 82 } 83 84 instance Has (Id Token) Upload where 85 view = view . uploadAccountToken 86 87 makeUpload :: Token -> BS.ByteString -> Int64 -> SiteAuth -> Upload 88 makeUpload t n z u = Upload (AccountToken t u) n z