git.iko.soy/typeable/random-token
on 13b772e help sign in
random-token.cabal+98−106
since splitsnapshots
unifiedsplit
@@ -1,111 +1,103 @@
1−cabal-version: 2.4
1+cabal-version: 2.4
2−name: random-token
2+name: random-token
3−version: 0.1.0.0
3+version: 0.1.0.0
4−synopsis: Implementation of random token generation and parsing
4+synopsis: Implementation of random token generation and parsing
5−author: typeable.io
5+author: typeable.io
6−maintainer: s9gf4ult@gmail.com
6+maintainer: s9gf4ult@gmail.com
7−license-file: LICENSE
7+license-file: LICENSE
8−category: Web
8+category: Web
9−build-type: Simple
9+build-type: Simple
10
10
11library
11library
12− hs-source-dirs: src
12+ hs-source-dirs: src
13− ghc-options: -Wall
13+ ghc-options: -Wall
14− exposed-modules: Random.Token
14+ exposed-modules: Random.Token
15− build-depends:
15+ build-depends: base >= 4.7 && < 5
16− , aeson
16+ , QuickCheck
17− , base >=4.9 && <5
17+ , aeson
18− , base64-bytestring
18+ , base64-bytestring
19− , bytestring >=0.10
19+ , bytestring
20− , deepseq
20+ , deepseq
21− , http-api-data
21+ , http-api-data
22− , QuickCheck
23− , text
22+ , text
24−
25− if !(impl(ghcjs) || arch(javascript) || arch(wasm32))
26− build-depends:
27− , cryptonite
23+ , cryptonite
28− , postgresql-simple
24+ , postgresql-simple
29−
30− default-language: Haskell2010
25+ default-language: Haskell2010
31− default-extensions:
26+ default-extensions: CPP
32− CPP
33− ConstraintKinds
27+ , ConstraintKinds
34− DataKinds
28+ , DataKinds
35− DeriveFoldable
29+ , DeriveFoldable
36− DeriveFunctor
30+ , DeriveFunctor
37− DeriveGeneric
31+ , DeriveGeneric
38− DeriveTraversable
32+ , DeriveTraversable
39− DuplicateRecordFields
33+ , DuplicateRecordFields
40− FlexibleContexts
34+ , FlexibleContexts
41− FlexibleInstances
35+ , FlexibleInstances
42− FunctionalDependencies
36+ , FunctionalDependencies
43− GADTs
37+ , GADTs
44− GeneralizedNewtypeDeriving
38+ , GeneralizedNewtypeDeriving
45− LambdaCase
39+ , LambdaCase
46− MultiParamTypeClasses
40+ , MultiParamTypeClasses
47− MultiWayIf
41+ , MultiWayIf
48− NumDecimals
42+ , NumDecimals
49− OverloadedStrings
43+ , OverloadedStrings
50− PolyKinds
44+ , PolyKinds
51− QuasiQuotes
45+ , QuasiQuotes
52− RankNTypes
46+ , RankNTypes
53− RecordWildCards
47+ , RecordWildCards
54− RoleAnnotations
48+ , RoleAnnotations
55− ScopedTypeVariables
49+ , ScopedTypeVariables
56− StandaloneDeriving
50+ , StandaloneDeriving
57− TemplateHaskell
51+ , TemplateHaskell
58− TupleSections
52+ , TupleSections
59− TypeApplications
53+ , TypeApplications
60− TypeFamilies
54+ , TypeFamilies
61− TypeOperators
55+ , TypeOperators
62− UndecidableInstances
56+ , UndecidableInstances
63− ViewPatterns
57+ , ViewPatterns
64
58
65test-suite spec
59test-suite spec
66− type: exitcode-stdio-1.0
60+ type: exitcode-stdio-1.0
67− hs-source-dirs: spec
61+ hs-source-dirs: spec
68− main-is: Test.hs
62+ main-is: Test.hs
69− other-modules: TokenSpec
63+ other-modules: TokenSpec
70− default-language: Haskell2010
64+ default-language: Haskell2010
71− build-depends:
65+ build-depends: base >= 4.10 && <4.13
72− , base >=4.10 && <5
73− , hspec
66+ , hspec
74− , random-token
67+ , random-token
75−
76 build-tool-depends: hspec-discover:hspec-discover
68 build-tool-depends: hspec-discover:hspec-discover
77− ghc-options:
69+ ghc-options: -Wall
70+ -threaded
71+ -rtsopts
78− -Wall -threaded -rtsopts "-with-rtsopts=-N -A64m -qb0 -n4m -T -I1"
72+ "-with-rtsopts=-N -A64m -qb0 -n4m -T -I1"
79−
80− ghc-prof-options: -fprof-auto
73+ ghc-prof-options: -fprof-auto
81− default-extensions:
74+ default-extensions: ConstraintKinds
82− ConstraintKinds
83− DataKinds
75+ , DataKinds
84− DeriveFoldable
76+ , DeriveFoldable
85− DeriveFunctor
77+ , DeriveFunctor
86− DeriveGeneric
78+ , DeriveGeneric
87− DeriveTraversable
79+ , DeriveTraversable
88− DuplicateRecordFields
80+ , DuplicateRecordFields
89− FlexibleContexts
81+ , FlexibleContexts
90− FlexibleInstances
82+ , FlexibleInstances
91− FunctionalDependencies
83+ , FunctionalDependencies
92− GADTs
84+ , GADTs
93− GeneralizedNewtypeDeriving
85+ , GeneralizedNewtypeDeriving
94− LambdaCase
86+ , LambdaCase
95− MultiParamTypeClasses
87+ , MultiParamTypeClasses
96− MultiWayIf
88+ , MultiWayIf
97− NumDecimals
89+ , NumDecimals
98− OverloadedStrings
90+ , OverloadedStrings
99− PolyKinds
91+ , PolyKinds
100− QuasiQuotes
92+ , QuasiQuotes
101− RankNTypes
93+ , RankNTypes
102− RecordWildCards
94+ , RecordWildCards
103− ScopedTypeVariables
95+ , ScopedTypeVariables
104− StandaloneDeriving
96+ , StandaloneDeriving
105− TemplateHaskell
97+ , TemplateHaskell
106− TupleSections
98+ , TupleSections
107− TypeApplications
99+ , TypeApplications
108− TypeFamilies
100+ , TypeFamilies
109− TypeOperators
101+ , TypeOperators
110− UndecidableInstances
102+ , UndecidableInstances
111− ViewPatterns
103+ , ViewPatterns
src/Random/Token.hs+1−14
@@ -1,15 +1,11 @@
1−{-# LANGUAGE CPP #-}
2module Random.Token
1module Random.Token
3 ( Token
2 ( Token
4 , tokenToAscii
3 , tokenToAscii
5 , tokenToText
4 , tokenToText
6 , asciiToToken
5 , asciiToToken
7 , textToToken
6 , textToToken
8− , unsafeCoerceToken
9− , tokenWithContents
10−#ifndef ghcjs_HOST_OS
11 , generateToken
7 , generateToken
12−#endif
8+ , unsafeCoerceToken
13 ) where
9 ) where
14
10
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
26
22
27−
28−#ifndef ghcjs_HOST_OS
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
32−#endif
33
26
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
48
41
49−#ifndef ghcjs_HOST_OS
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
62
54
63−#endif
64−
65instance FromHttpApiData (Token a) where
55instance FromHttpApiData (Token a) where
66 parseQueryParam = first T.pack . textToToken
56 parseQueryParam = first T.pack . textToToken
67
57
@@ -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
82
72
83−tokenWithContents :: Text -> Token a
84−tokenWithContents = Token . T.encodeUtf8
85−
86unsafeCoerceToken :: Token a -> Token b
73unsafeCoerceToken :: Token a -> Token b
87unsafeCoerceToken (Token a) = Token a
74unsafeCoerceToken (Token a) = Token a