@@ -4,9 +4,7 @@ module Random.Token
4 , tokenToText
4 , tokenToText
5 , asciiToToken
5 , asciiToToken
6 , textToToken
6 , textToToken
8 , generateToken
7 , generateToken
12import Control.DeepSeq
10import Control.DeepSeq
@@ -21,11 +19,9 @@ import Data.Typeable
21import Test.QuickCheck.Arbitrary
19import Test.QuickCheck.Arbitrary
22import Web.HttpApiData
20import Web.HttpApiData
25import Crypto.Random as R
22import Crypto.Random as R
26import Database.PostgreSQL.Simple.FromField
23import Database.PostgreSQL.Simple.FromField
27import Database.PostgreSQL.Simple.ToField
24import Database.PostgreSQL.Simple.ToField
30-- | 16 bytes lenght random value parametrized by label.
26-- | 16 bytes lenght random value parametrized by label.
31newtype Token (a :: k) = Token ByteString
27newtype Token (a :: k) = Token ByteString
@@ -44,7 +40,6 @@ instance FromJSON (Token a) where
44instance ToJSON (Token a) where
40instance ToJSON (Token a) where
45 toJSON = toJSON . tokenToText
41 toJSON = toJSON . tokenToText
48instance forall a. (Typeable (Token a), Typeable a) => FromField (Token a) where
43instance forall a. (Typeable (Token a), Typeable a) => FromField (Token a) where
49 fromField fld bs = do
44 fromField fld bs = do
50 t <- fromField fld bs
45 t <- fromField fld bs
@@ -57,7 +52,6 @@ instance ToField (Token a) where
58generateToken :: (MonadRandom m) => m (Token a)
53generateToken :: (MonadRandom m) => m (Token a)
59generateToken = Token <$> R.getRandomBytes 16
54generateToken = Token <$> R.getRandomBytes 16
62instance FromHttpApiData (Token a) where
56instance FromHttpApiData (Token a) where
63 parseQueryParam = first T.pack . textToToken
57 parseQueryParam = first T.pack . textToToken