hackage-server-0.4: Distribution/Server/Users/Types.hs
{-# LANGUAGE DeriveDataTypeable, GeneralizedNewtypeDeriving, TemplateHaskell #-}
module Distribution.Server.Users.Types (
module Distribution.Server.Users.Types,
module Distribution.Server.Framework.AuthTypes
) where
import Distribution.Server.Framework.AuthTypes
import Distribution.Server.Framework.MemSize
import Distribution.Text
( Text(..) )
import qualified Distribution.Server.Util.Parse as Parse
import qualified Distribution.Compat.ReadP as Parse
import qualified Text.PrettyPrint as Disp
import qualified Data.Char as Char
import Data.Serialize (Serialize)
import Control.Applicative ((<$>))
import Data.SafeCopy (base, deriveSafeCopy)
import Data.Typeable (Typeable)
newtype UserId = UserId Int
deriving (Eq, Ord, Show, Serialize, Typeable, MemSize)
newtype UserName = UserName String
deriving (Eq, Ord, Show, Serialize, Typeable, MemSize)
data UserInfo = UserInfo {
userName :: !UserName,
userStatus :: !UserStatus
} deriving (Eq, Show, Typeable)
data UserStatus = AccountEnabled UserAuth
| AccountDisabled (Maybe UserAuth)
| AccountDeleted
deriving (Eq, Show, Typeable)
newtype UserAuth = UserAuth PasswdHash
deriving (Show, Eq, Typeable)
isActiveAccount :: UserStatus -> Bool
isActiveAccount (AccountEnabled _) = True
isActiveAccount (AccountDisabled _) = True
isActiveAccount AccountDeleted = False
instance MemSize UserInfo where
memSize (UserInfo a b) = memSize2 a b
instance MemSize UserStatus where
memSize (AccountEnabled a) = memSize1 a
memSize (AccountDisabled a) = memSize1 a
memSize (AccountDeleted) = memSize0
instance MemSize UserAuth where
memSize (UserAuth a) = memSize1 a
instance Text UserId where
disp (UserId uid) = Disp.int uid
parse = UserId <$> Parse.int
instance Text UserName where
disp (UserName name) = Disp.text name
parse = UserName <$> Parse.munch1 Char.isAlphaNum
$(deriveSafeCopy 0 'base ''UserId)
$(deriveSafeCopy 0 'base ''UserName)
$(deriveSafeCopy 1 'base ''UserAuth)
$(deriveSafeCopy 0 'base ''UserStatus)
$(deriveSafeCopy 0 'base ''UserInfo)