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