@@ -1,3 +1,4 @@
1module Random.Token
2module Random.Token
3 , tokenToAscii
4 , tokenToAscii
@@ -21,8 +22,11 @@ import Test.QuickCheck.Arbitrary
21import Web.HttpApiData
22import Web.HttpApiData
23import Crypto.Random as R
24import Crypto.Random as R
24import Database.PostgreSQL.Simple.FromField
27import Database.PostgreSQL.Simple.FromField
25import Database.PostgreSQL.Simple.ToField
28import Database.PostgreSQL.Simple.ToField
27-- | 16 bytes lenght random value parametrized by label.
31-- | 16 bytes lenght random value parametrized by label.
28newtype Token (a :: k) = Token ByteString
32newtype Token (a :: k) = Token ByteString
@@ -39,6 +43,7 @@ instance FromJSON (Token a) where
39instance ToJSON (Token a) where
43instance ToJSON (Token a) where
40 toJSON = toJSON . tokenToText
44 toJSON = toJSON . tokenToText
42instance forall a. (Typeable (Token a), Typeable a) => FromField (Token a) where
47instance forall a. (Typeable (Token a), Typeable a) => FromField (Token a) where
43 fromField fld bs = do
48 fromField fld bs = do
44 t <- fromField fld bs
49 t <- fromField fld bs
@@ -48,6 +53,7 @@ instance forall a. (Typeable (Token a), Typeable a) => FromField (Token a) where
49instance ToField (Token a) where
54instance ToField (Token a) where
50 toField = toField . tokenToText
55 toField = toField . tokenToText
52generateToken :: (MonadRandom m) => m (Token a)
58generateToken :: (MonadRandom m) => m (Token a)
53generateToken = Token <$> R.getRandomBytes 16
59generateToken = Token <$> R.getRandomBytes 16