{-# LANGUAGE GeneralizedNewtypeDeriving #-}
module Data.Password.Types (
Password
, mkPassword
, PasswordHash (..)
, unsafeShowPassword
, Salt (..)
) where
import Data.ByteArray (constEq)
import Data.ByteString (ByteString)
import Data.Function (on)
import Data.String (IsString(..))
import Data.Text (Text)
import Data.Text.Encoding (encodeUtf8)
newtype Password = Password Text
deriving (String -> Password
(String -> Password) -> IsString Password
forall a. (String -> a) -> IsString a
fromString :: String -> Password
$cfromString :: String -> Password
IsString)
instance Show Password where
show :: Password -> String
show Password
_ = String
"**PASSWORD**"
mkPassword :: Text -> Password
mkPassword :: Text -> Password
mkPassword = Text -> Password
Password
{-# INLINE mkPassword #-}
unsafeShowPassword :: Password -> Text
unsafeShowPassword :: Password -> Text
unsafeShowPassword (Password Text
pass) = Text
pass
{-# INLINE unsafeShowPassword #-}
newtype PasswordHash a = PasswordHash
{ PasswordHash a -> Text
unPasswordHash :: Text
} deriving (Eq (PasswordHash a)
Eq (PasswordHash a)
-> (PasswordHash a -> PasswordHash a -> Ordering)
-> (PasswordHash a -> PasswordHash a -> Bool)
-> (PasswordHash a -> PasswordHash a -> Bool)
-> (PasswordHash a -> PasswordHash a -> Bool)
-> (PasswordHash a -> PasswordHash a -> Bool)
-> (PasswordHash a -> PasswordHash a -> PasswordHash a)
-> (PasswordHash a -> PasswordHash a -> PasswordHash a)
-> Ord (PasswordHash a)
PasswordHash a -> PasswordHash a -> Bool
PasswordHash a -> PasswordHash a -> Ordering
PasswordHash a -> PasswordHash a -> PasswordHash a
forall a. Eq (PasswordHash a)
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
forall a. PasswordHash a -> PasswordHash a -> Bool
forall a. PasswordHash a -> PasswordHash a -> Ordering
forall a. PasswordHash a -> PasswordHash a -> PasswordHash a
min :: PasswordHash a -> PasswordHash a -> PasswordHash a
$cmin :: forall a. PasswordHash a -> PasswordHash a -> PasswordHash a
max :: PasswordHash a -> PasswordHash a -> PasswordHash a
$cmax :: forall a. PasswordHash a -> PasswordHash a -> PasswordHash a
>= :: PasswordHash a -> PasswordHash a -> Bool
$c>= :: forall a. PasswordHash a -> PasswordHash a -> Bool
> :: PasswordHash a -> PasswordHash a -> Bool
$c> :: forall a. PasswordHash a -> PasswordHash a -> Bool
<= :: PasswordHash a -> PasswordHash a -> Bool
$c<= :: forall a. PasswordHash a -> PasswordHash a -> Bool
< :: PasswordHash a -> PasswordHash a -> Bool
$c< :: forall a. PasswordHash a -> PasswordHash a -> Bool
compare :: PasswordHash a -> PasswordHash a -> Ordering
$ccompare :: forall a. PasswordHash a -> PasswordHash a -> Ordering
$cp1Ord :: forall a. Eq (PasswordHash a)
Ord, ReadPrec [PasswordHash a]
ReadPrec (PasswordHash a)
Int -> ReadS (PasswordHash a)
ReadS [PasswordHash a]
(Int -> ReadS (PasswordHash a))
-> ReadS [PasswordHash a]
-> ReadPrec (PasswordHash a)
-> ReadPrec [PasswordHash a]
-> Read (PasswordHash a)
forall a. ReadPrec [PasswordHash a]
forall a. ReadPrec (PasswordHash a)
forall a. Int -> ReadS (PasswordHash a)
forall a. ReadS [PasswordHash a]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [PasswordHash a]
$creadListPrec :: forall a. ReadPrec [PasswordHash a]
readPrec :: ReadPrec (PasswordHash a)
$creadPrec :: forall a. ReadPrec (PasswordHash a)
readList :: ReadS [PasswordHash a]
$creadList :: forall a. ReadS [PasswordHash a]
readsPrec :: Int -> ReadS (PasswordHash a)
$creadsPrec :: forall a. Int -> ReadS (PasswordHash a)
Read, Int -> PasswordHash a -> ShowS
[PasswordHash a] -> ShowS
PasswordHash a -> String
(Int -> PasswordHash a -> ShowS)
-> (PasswordHash a -> String)
-> ([PasswordHash a] -> ShowS)
-> Show (PasswordHash a)
forall a. Int -> PasswordHash a -> ShowS
forall a. [PasswordHash a] -> ShowS
forall a. PasswordHash a -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [PasswordHash a] -> ShowS
$cshowList :: forall a. [PasswordHash a] -> ShowS
show :: PasswordHash a -> String
$cshow :: forall a. PasswordHash a -> String
showsPrec :: Int -> PasswordHash a -> ShowS
$cshowsPrec :: forall a. Int -> PasswordHash a -> ShowS
Show)
instance Eq (PasswordHash a) where
== :: PasswordHash a -> PasswordHash a -> Bool
(==) = ByteString -> ByteString -> Bool
forall bs1 bs2.
(ByteArrayAccess bs1, ByteArrayAccess bs2) =>
bs1 -> bs2 -> Bool
constEq (ByteString -> ByteString -> Bool)
-> (PasswordHash a -> ByteString)
-> PasswordHash a
-> PasswordHash a
-> Bool
forall b c a. (b -> b -> c) -> (a -> b) -> a -> a -> c
`on` Text -> ByteString
encodeUtf8 (Text -> ByteString)
-> (PasswordHash a -> Text) -> PasswordHash a -> ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. PasswordHash a -> Text
forall a. PasswordHash a -> Text
unPasswordHash
newtype Salt a = Salt
{ Salt a -> ByteString
getSalt :: ByteString
} deriving (Salt a -> Salt a -> Bool
(Salt a -> Salt a -> Bool)
-> (Salt a -> Salt a -> Bool) -> Eq (Salt a)
forall a. Salt a -> Salt a -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Salt a -> Salt a -> Bool
$c/= :: forall a. Salt a -> Salt a -> Bool
== :: Salt a -> Salt a -> Bool
$c== :: forall a. Salt a -> Salt a -> Bool
Eq, Int -> Salt a -> ShowS
[Salt a] -> ShowS
Salt a -> String
(Int -> Salt a -> ShowS)
-> (Salt a -> String) -> ([Salt a] -> ShowS) -> Show (Salt a)
forall a. Int -> Salt a -> ShowS
forall a. [Salt a] -> ShowS
forall a. Salt a -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Salt a] -> ShowS
$cshowList :: forall a. [Salt a] -> ShowS
show :: Salt a -> String
$cshow :: forall a. Salt a -> String
showsPrec :: Int -> Salt a -> ShowS
$cshowsPrec :: forall a. Int -> Salt a -> ShowS
Show)