@@ -1,15 +1,11 @@
2module Random.Token
1module Random.Token
4 , tokenToAscii
3 , tokenToAscii
5 , tokenToText
4 , tokenToText
6 , asciiToToken
5 , asciiToToken
7 , textToToken
6 , textToToken
11 , generateToken
7 , generateToken
12−#endif
8+ , unsafeCoerceToken
15import Control.DeepSeq
11import Control.DeepSeq
@@ -24,12 +20,9 @@ import Data.Typeable
24import Test.QuickCheck.Arbitrary
20import Test.QuickCheck.Arbitrary
25import Web.HttpApiData
21import Web.HttpApiData
29import Crypto.Random as R
23import Crypto.Random as R
30import Database.PostgreSQL.Simple.FromField
24import Database.PostgreSQL.Simple.FromField
31import Database.PostgreSQL.Simple.ToField
25import Database.PostgreSQL.Simple.ToField
34-- | 16 bytes lenght random value parametrized by label.
27-- | 16 bytes lenght random value parametrized by label.
35newtype Token (a :: k) = Token ByteString
28newtype Token (a :: k) = Token ByteString
@@ -46,7 +39,6 @@ instance FromJSON (Token a) where
46instance ToJSON (Token a) where
39instance ToJSON (Token a) where
47 toJSON = toJSON . tokenToText
40 toJSON = toJSON . tokenToText
50instance forall a. (Typeable (Token a), Typeable a) => FromField (Token a) where
42instance forall a. (Typeable (Token a), Typeable a) => FromField (Token a) where
51 fromField fld bs = do
43 fromField fld bs = do
52 t <- fromField fld bs
44 t <- fromField fld bs
@@ -60,8 +52,6 @@ instance ToField (Token a) where
60generateToken :: (MonadRandom m) => m (Token a)
52generateToken :: (MonadRandom m) => m (Token a)
61generateToken = Token <$> R.getRandomBytes 16
53generateToken = Token <$> R.getRandomBytes 16
65instance FromHttpApiData (Token a) where
55instance FromHttpApiData (Token a) where
66 parseQueryParam = first T.pack . textToToken
56 parseQueryParam = first T.pack . textToToken
@@ -80,8 +70,5 @@ asciiToToken bs = Token <$> B64.decode bs
80textToToken :: Text -> Either String (Token a)
70textToToken :: Text -> Either String (Token a)
81textToToken = asciiToToken . T.encodeUtf8
71textToToken = asciiToToken . T.encodeUtf8
83−tokenWithContents :: Text -> Token a
84−tokenWithContents = Token . T.encodeUtf8
86unsafeCoerceToken :: Token a -> Token b
73unsafeCoerceToken :: Token a -> Token b
87unsafeCoerceToken (Token a) = Token a
74unsafeCoerceToken (Token a) = Token a