Merge branch 'master' into uni2work
This commit is contained in:
commit
fda3a000f9
@ -10,12 +10,12 @@ dist: trusty
|
|||||||
language: c
|
language: c
|
||||||
|
|
||||||
services:
|
services:
|
||||||
- redis-server
|
- redis-server
|
||||||
|
|
||||||
addons:
|
addons:
|
||||||
apt:
|
apt:
|
||||||
packages:
|
packages:
|
||||||
- libgmp-dev
|
- libgmp-dev
|
||||||
postgresql: "9.3"
|
postgresql: "9.3"
|
||||||
|
|
||||||
cache:
|
cache:
|
||||||
@ -25,8 +25,7 @@ cache:
|
|||||||
|
|
||||||
matrix:
|
matrix:
|
||||||
include:
|
include:
|
||||||
- env: STACKARGS="--resolver=lts-11"
|
- env: STACKARGS="--resolver=lts-15"
|
||||||
- env: STACKARGS="--resolver=lts-12"
|
|
||||||
- env: STACKARGS="--resolver=nightly"
|
- env: STACKARGS="--resolver=nightly"
|
||||||
allow_failures:
|
allow_failures:
|
||||||
- env: STACKARGS="--resolver=nightly"
|
- env: STACKARGS="--resolver=nightly"
|
||||||
|
|||||||
@ -1,3 +1,6 @@
|
|||||||
|
{-# LANGUAGE DerivingStrategies #-}
|
||||||
|
{-# LANGUAGE StandaloneDeriving #-}
|
||||||
|
{-# LANGUAGE UndecidableInstances #-}
|
||||||
module Model where
|
module Model where
|
||||||
|
|
||||||
import ClassyPrelude.Yesod
|
import ClassyPrelude.Yesod
|
||||||
|
|||||||
44
flake.lock
Normal file
44
flake.lock
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
{
|
||||||
|
"nodes": {
|
||||||
|
"flake-utils": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1619345332,
|
||||||
|
"narHash": "sha256-qHnQkEp1uklKTpx3MvKtY6xzgcqXDsz5nLilbbuL+3A=",
|
||||||
|
"owner": "numtide",
|
||||||
|
"repo": "flake-utils",
|
||||||
|
"rev": "2ebf2558e5bf978c7fb8ea927dfaed8fefab2e28",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "numtide",
|
||||||
|
"ref": "master",
|
||||||
|
"repo": "flake-utils",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nixpkgs": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1620323686,
|
||||||
|
"narHash": "sha256-+gfcE3YTGl+Osc8HzOUXSFO8/0PAK4J8ZxCXZ4hjXHI=",
|
||||||
|
"owner": "NixOS",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"rev": "dfacb8329b2236688b9a1e705116203a213b283a",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "NixOS",
|
||||||
|
"ref": "master",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"root": {
|
||||||
|
"inputs": {
|
||||||
|
"flake-utils": "flake-utils",
|
||||||
|
"nixpkgs": "nixpkgs"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"root": "root",
|
||||||
|
"version": 7
|
||||||
|
}
|
||||||
30
flake.nix
Normal file
30
flake.nix
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
{
|
||||||
|
inputs = {
|
||||||
|
nixpkgs = {
|
||||||
|
type = "github";
|
||||||
|
owner = "NixOS";
|
||||||
|
repo = "nixpkgs";
|
||||||
|
ref = "master";
|
||||||
|
};
|
||||||
|
flake-utils = {
|
||||||
|
type = "github";
|
||||||
|
owner = "numtide";
|
||||||
|
repo = "flake-utils";
|
||||||
|
ref = "master";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
outputs = { self, nixpkgs, flake-utils, ... }: flake-utils.lib.eachDefaultSystem
|
||||||
|
(system:
|
||||||
|
let pkgs = import nixpkgs {
|
||||||
|
inherit system;
|
||||||
|
config.allowUnfree = true;
|
||||||
|
};
|
||||||
|
in {
|
||||||
|
devShell = pkgs.mkShell {
|
||||||
|
name = "uni2work-serversession";
|
||||||
|
nativeBuildInputs = with pkgs.haskellPackages; [ stack ];
|
||||||
|
};
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
8
nixpkgs.nix
Normal file
8
nixpkgs.nix
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
import (
|
||||||
|
let
|
||||||
|
lock = builtins.fromJSON (builtins.readFile ./flake.lock);
|
||||||
|
in fetchTarball {
|
||||||
|
url = "https://api.github.com/repos/NixOS/nixpkgs/tarball/${lock.nodes.nixpkgs.locked.rev}";
|
||||||
|
sha256 = lock.nodes.nixpkgs.locked.narHash;
|
||||||
|
}
|
||||||
|
)
|
||||||
@ -0,0 +1,3 @@
|
|||||||
|
# 1.0.4
|
||||||
|
|
||||||
|
* bump acid-state to 0.16
|
||||||
@ -1,5 +1,6 @@
|
|||||||
|
cabal-version: >= 1.10
|
||||||
name: serversession-backend-acid-state
|
name: serversession-backend-acid-state
|
||||||
version: 1.0.3
|
version: 1.0.4
|
||||||
license: MIT
|
license: MIT
|
||||||
license-file: LICENSE
|
license-file: LICENSE
|
||||||
author: Felipe Lessa <felipe.lessa@gmail.com>
|
author: Felipe Lessa <felipe.lessa@gmail.com>
|
||||||
@ -7,7 +8,6 @@ maintainer: Michael Xavier <michael@michaelxavier.net>
|
|||||||
synopsis: Storage backend for serversession using acid-state.
|
synopsis: Storage backend for serversession using acid-state.
|
||||||
category: Web
|
category: Web
|
||||||
stability: Stable
|
stability: Stable
|
||||||
cabal-version: >= 1.8
|
|
||||||
build-type: Simple
|
build-type: Simple
|
||||||
homepage: https://github.com/yesodweb/serversession
|
homepage: https://github.com/yesodweb/serversession
|
||||||
description: API docs and the README are available at <http://www.stackage.org/package/serversession-backend-acid-state>
|
description: API docs and the README are available at <http://www.stackage.org/package/serversession-backend-acid-state>
|
||||||
@ -19,10 +19,11 @@ flag lib-Werror
|
|||||||
manual: True
|
manual: True
|
||||||
|
|
||||||
library
|
library
|
||||||
|
default-language: Haskell2010
|
||||||
hs-source-dirs: src
|
hs-source-dirs: src
|
||||||
build-depends:
|
build-depends:
|
||||||
base == 4.*
|
base == 4.*
|
||||||
, acid-state == 0.16.*
|
, acid-state >= 0.16
|
||||||
, containers
|
, containers
|
||||||
, mtl
|
, mtl
|
||||||
, safecopy >= 0.8 && <0.11
|
, safecopy >= 0.8 && <0.11
|
||||||
@ -32,7 +33,7 @@ library
|
|||||||
exposed-modules:
|
exposed-modules:
|
||||||
Web.ServerSession.Backend.Acid
|
Web.ServerSession.Backend.Acid
|
||||||
Web.ServerSession.Backend.Acid.Internal
|
Web.ServerSession.Backend.Acid.Internal
|
||||||
extensions:
|
default-extensions:
|
||||||
ConstraintKinds
|
ConstraintKinds
|
||||||
DeriveDataTypeable
|
DeriveDataTypeable
|
||||||
FlexibleContexts
|
FlexibleContexts
|
||||||
@ -47,6 +48,7 @@ library
|
|||||||
|
|
||||||
|
|
||||||
test-suite tests
|
test-suite tests
|
||||||
|
default-language: Haskell2010
|
||||||
type: exitcode-stdio-1.0
|
type: exitcode-stdio-1.0
|
||||||
hs-source-dirs: tests
|
hs-source-dirs: tests
|
||||||
build-depends:
|
build-depends:
|
||||||
@ -57,7 +59,7 @@ test-suite tests
|
|||||||
, serversession
|
, serversession
|
||||||
, serversession-backend-acid-state
|
, serversession-backend-acid-state
|
||||||
main-is: Main.hs
|
main-is: Main.hs
|
||||||
extensions:
|
default-extensions:
|
||||||
CPP
|
CPP
|
||||||
ghc-options: -Wall -threaded "-with-rtsopts=-N -s -M1G -c" -rtsopts
|
ghc-options: -Wall -threaded "-with-rtsopts=-N -s -M1G -c" -rtsopts
|
||||||
if flag(lib-Werror)
|
if flag(lib-Werror)
|
||||||
|
|||||||
@ -109,7 +109,7 @@ instance SafeCopy SS.SessionMap where
|
|||||||
|
|
||||||
-- | We can't @deriveSafeCopy 0 'base ''SS.SessionId@ as
|
-- | We can't @deriveSafeCopy 0 'base ''SS.SessionId@ as
|
||||||
-- otherwise we'd require an unneeded @SafeCopy sess@.
|
-- otherwise we'd require an unneeded @SafeCopy sess@.
|
||||||
instance SafeCopy (SS.SessionId sess) where
|
instance Typeable sess => SafeCopy (SS.SessionId sess) where
|
||||||
putCopy = contain . safePut . SSI.unS
|
putCopy = contain . safePut . SSI.unS
|
||||||
getCopy = contain $ SSI.S <$> safeGet
|
getCopy = contain $ SSI.S <$> safeGet
|
||||||
|
|
||||||
@ -118,7 +118,7 @@ instance SafeCopy (SS.SessionId sess) where
|
|||||||
|
|
||||||
-- | We can't @deriveSafeCopy 0 'base ''SS.Session@ due to the
|
-- | We can't @deriveSafeCopy 0 'base ''SS.Session@ due to the
|
||||||
-- required context.
|
-- required context.
|
||||||
instance SafeCopy (SS.Decomposed sess) => SafeCopy (SS.Session sess) where
|
instance (Typeable sess, SafeCopy (SS.Decomposed sess)) => SafeCopy (SS.Session sess) where
|
||||||
putCopy (SS.Session key authId data_ createdAt accessedAt) = contain $ do
|
putCopy (SS.Session key authId data_ createdAt accessedAt) = contain $ do
|
||||||
put_t <- getSafePut
|
put_t <- getSafePut
|
||||||
safePut key
|
safePut key
|
||||||
@ -140,7 +140,7 @@ instance SafeCopy (SS.Decomposed sess) => SafeCopy (SS.Session sess) where
|
|||||||
|
|
||||||
-- | We can't @deriveSafeCopy 0 'base ''ServerSessionAcidState@ due
|
-- | We can't @deriveSafeCopy 0 'base ''ServerSessionAcidState@ due
|
||||||
-- to the required context.
|
-- to the required context.
|
||||||
instance SafeCopy (SS.Decomposed sess) => SafeCopy (ServerSessionAcidState sess) where
|
instance (Typeable sess, SafeCopy (SS.Decomposed sess)) => SafeCopy (ServerSessionAcidState sess) where
|
||||||
putCopy (ServerSessionAcidState sits aits) = contain $ do
|
putCopy (ServerSessionAcidState sits aits) = contain $ do
|
||||||
safePut (HM.toList sits)
|
safePut (HM.toList sits)
|
||||||
safePut (HM.toList aits)
|
safePut (HM.toList aits)
|
||||||
@ -279,31 +279,27 @@ data DeleteAllSessionsOfAuthId sess = DeleteAllSessionsOfAuthId SS.AuthId derivi
|
|||||||
data InsertSession sess = InsertSession (SS.Session sess) deriving (Typeable)
|
data InsertSession sess = InsertSession (SS.Session sess) deriving (Typeable)
|
||||||
data ReplaceSession sess = ReplaceSession (SS.Session sess) deriving (Typeable)
|
data ReplaceSession sess = ReplaceSession (SS.Session sess) deriving (Typeable)
|
||||||
|
|
||||||
instance SafeCopy (GetSession sess) where
|
instance Typeable sess => SafeCopy (GetSession sess) where
|
||||||
putCopy (GetSession v) = contain $ safePut v
|
putCopy (GetSession v) = contain $ safePut v
|
||||||
getCopy = contain $ GetSession <$> safeGet
|
getCopy = contain $ GetSession <$> safeGet
|
||||||
|
|
||||||
errorTypeName _ = "GetSession"
|
instance Typeable sess => SafeCopy (DeleteSession sess) where
|
||||||
|
|
||||||
instance SafeCopy (DeleteSession sess) where
|
|
||||||
putCopy (DeleteSession v) = contain $ safePut v
|
putCopy (DeleteSession v) = contain $ safePut v
|
||||||
getCopy = contain $ DeleteSession <$> safeGet
|
getCopy = contain $ DeleteSession <$> safeGet
|
||||||
|
|
||||||
errorTypeName _ = "DeleteSession"
|
errorTypeName _ = "DeleteSession"
|
||||||
|
|
||||||
instance SafeCopy (DeleteAllSessionsOfAuthId sess) where
|
instance Typeable sess => SafeCopy (DeleteAllSessionsOfAuthId sess) where
|
||||||
putCopy (DeleteAllSessionsOfAuthId v) = contain $ safePut v
|
putCopy (DeleteAllSessionsOfAuthId v) = contain $ safePut v
|
||||||
getCopy = contain $ DeleteAllSessionsOfAuthId <$> safeGet
|
getCopy = contain $ DeleteAllSessionsOfAuthId <$> safeGet
|
||||||
|
|
||||||
errorTypeName _ = "DeleteAllSessionsOfAuthId"
|
errorTypeName _ = "DeleteAllSessionsOfAuthId"
|
||||||
|
|
||||||
instance SafeCopy (SS.Decomposed sess) => SafeCopy (InsertSession sess) where
|
instance (Typeable sess, SafeCopy (SS.Decomposed sess)) => SafeCopy (InsertSession sess) where
|
||||||
putCopy (InsertSession v) = contain $ safePut v
|
putCopy (InsertSession v) = contain $ safePut v
|
||||||
getCopy = contain $ InsertSession <$> safeGet
|
getCopy = contain $ InsertSession <$> safeGet
|
||||||
|
|
||||||
errorTypeName _ = "InsertSession"
|
instance (Typeable sess, SafeCopy (SS.Decomposed sess)) => SafeCopy (ReplaceSession sess) where
|
||||||
|
|
||||||
instance SafeCopy (SS.Decomposed sess) => SafeCopy (ReplaceSession sess) where
|
|
||||||
putCopy (ReplaceSession v) = contain $ safePut v
|
putCopy (ReplaceSession v) = contain $ safePut v
|
||||||
getCopy = contain $ ReplaceSession <$> safeGet
|
getCopy = contain $ ReplaceSession <$> safeGet
|
||||||
|
|
||||||
|
|||||||
@ -1,3 +1,5 @@
|
|||||||
|
1.0.5
|
||||||
|
* bump persistent to 2.10
|
||||||
1.0.4
|
1.0.4
|
||||||
* Default auth id to NULL to fix a MySQL bug.
|
* Default auth id to NULL to fix a MySQL bug.
|
||||||
1.0.3
|
1.0.3
|
||||||
|
|||||||
@ -1,5 +1,6 @@
|
|||||||
|
cabal-version: >= 1.10
|
||||||
name: serversession-backend-persistent
|
name: serversession-backend-persistent
|
||||||
version: 1.0.4
|
version: 1.0.5
|
||||||
license: MIT
|
license: MIT
|
||||||
license-file: LICENSE
|
license-file: LICENSE
|
||||||
author: Felipe Lessa <felipe.lessa@gmail.com>
|
author: Felipe Lessa <felipe.lessa@gmail.com>
|
||||||
@ -7,7 +8,6 @@ maintainer: Michael Xavier <michael@michaelxavier.net>
|
|||||||
synopsis: Storage backend for serversession using persistent and an RDBMS.
|
synopsis: Storage backend for serversession using persistent and an RDBMS.
|
||||||
category: Web
|
category: Web
|
||||||
stability: Stable
|
stability: Stable
|
||||||
cabal-version: >= 1.8
|
|
||||||
build-type: Simple
|
build-type: Simple
|
||||||
homepage: https://github.com/yesodweb/serversession
|
homepage: https://github.com/yesodweb/serversession
|
||||||
description: API docs and the README are available at <http://www.stackage.org/package/serversession-backend-persistent>
|
description: API docs and the README are available at <http://www.stackage.org/package/serversession-backend-persistent>
|
||||||
@ -19,6 +19,7 @@ flag lib-Werror
|
|||||||
manual: True
|
manual: True
|
||||||
|
|
||||||
library
|
library
|
||||||
|
default-language: Haskell2010
|
||||||
hs-source-dirs: src
|
hs-source-dirs: src
|
||||||
build-depends:
|
build-depends:
|
||||||
base == 4.*
|
base == 4.*
|
||||||
@ -27,7 +28,7 @@ library
|
|||||||
, bytestring
|
, bytestring
|
||||||
, cereal >= 0.4
|
, cereal >= 0.4
|
||||||
, path-pieces
|
, path-pieces
|
||||||
, persistent >= 2.1
|
, persistent >= 2.10
|
||||||
, tagged >= 0.7
|
, tagged >= 0.7
|
||||||
, text
|
, text
|
||||||
, time
|
, time
|
||||||
@ -39,7 +40,7 @@ library
|
|||||||
Web.ServerSession.Backend.Persistent
|
Web.ServerSession.Backend.Persistent
|
||||||
Web.ServerSession.Backend.Persistent.Internal.Impl
|
Web.ServerSession.Backend.Persistent.Internal.Impl
|
||||||
Web.ServerSession.Backend.Persistent.Internal.Types
|
Web.ServerSession.Backend.Persistent.Internal.Types
|
||||||
extensions:
|
default-extensions:
|
||||||
DeriveDataTypeable
|
DeriveDataTypeable
|
||||||
EmptyDataDecls
|
EmptyDataDecls
|
||||||
FlexibleContexts
|
FlexibleContexts
|
||||||
@ -62,6 +63,7 @@ library
|
|||||||
|
|
||||||
|
|
||||||
test-suite tests
|
test-suite tests
|
||||||
|
default-language: Haskell2010
|
||||||
type: exitcode-stdio-1.0
|
type: exitcode-stdio-1.0
|
||||||
hs-source-dirs: tests
|
hs-source-dirs: tests
|
||||||
build-depends:
|
build-depends:
|
||||||
@ -79,7 +81,7 @@ test-suite tests
|
|||||||
|
|
||||||
, serversession
|
, serversession
|
||||||
, serversession-backend-persistent
|
, serversession-backend-persistent
|
||||||
extensions:
|
default-extensions:
|
||||||
OverloadedStrings
|
OverloadedStrings
|
||||||
TemplateHaskell
|
TemplateHaskell
|
||||||
main-is: Main.hs
|
main-is: Main.hs
|
||||||
|
|||||||
@ -96,6 +96,7 @@ instance forall sess. P.PersistFieldSql (Decomposed sess) => P.PersistEntity (Pe
|
|||||||
["Eq", "Ord", "Show", "Typeable"]
|
["Eq", "Ord", "Show", "Typeable"]
|
||||||
M.mempty
|
M.mempty
|
||||||
False
|
False
|
||||||
|
Nothing
|
||||||
where
|
where
|
||||||
pfd :: P.EntityField (PersistentSession sess) typ -> P.FieldDef
|
pfd :: P.EntityField (PersistentSession sess) typ -> P.FieldDef
|
||||||
pfd = P.persistFieldDef
|
pfd = P.persistFieldDef
|
||||||
@ -142,8 +143,10 @@ instance forall sess. P.PersistFieldSql (Decomposed sess) => P.PersistEntity (Pe
|
|||||||
(P.SqlOther "SqlType unset for key")
|
(P.SqlOther "SqlType unset for key")
|
||||||
[]
|
[]
|
||||||
True
|
True
|
||||||
P.NoReference]
|
P.NoReference
|
||||||
|
Nothing]
|
||||||
[]))
|
[]))
|
||||||
|
Nothing
|
||||||
persistFieldDef PersistentSessionKey
|
persistFieldDef PersistentSessionKey
|
||||||
= P.FieldDef
|
= P.FieldDef
|
||||||
(P.HaskellName "key")
|
(P.HaskellName "key")
|
||||||
@ -153,6 +156,7 @@ instance forall sess. P.PersistFieldSql (Decomposed sess) => P.PersistEntity (Pe
|
|||||||
["maxlen=30"]
|
["maxlen=30"]
|
||||||
True
|
True
|
||||||
P.NoReference
|
P.NoReference
|
||||||
|
Nothing
|
||||||
persistFieldDef PersistentSessionAuthId
|
persistFieldDef PersistentSessionAuthId
|
||||||
= P.FieldDef
|
= P.FieldDef
|
||||||
(P.HaskellName "authId")
|
(P.HaskellName "authId")
|
||||||
@ -162,6 +166,7 @@ instance forall sess. P.PersistFieldSql (Decomposed sess) => P.PersistEntity (Pe
|
|||||||
["Maybe", "default=NULL"]
|
["Maybe", "default=NULL"]
|
||||||
True
|
True
|
||||||
P.NoReference
|
P.NoReference
|
||||||
|
Nothing
|
||||||
persistFieldDef PersistentSessionSession
|
persistFieldDef PersistentSessionSession
|
||||||
= P.FieldDef
|
= P.FieldDef
|
||||||
(P.HaskellName "session")
|
(P.HaskellName "session")
|
||||||
@ -171,6 +176,7 @@ instance forall sess. P.PersistFieldSql (Decomposed sess) => P.PersistEntity (Pe
|
|||||||
[]
|
[]
|
||||||
True
|
True
|
||||||
P.NoReference
|
P.NoReference
|
||||||
|
Nothing
|
||||||
persistFieldDef PersistentSessionCreatedAt
|
persistFieldDef PersistentSessionCreatedAt
|
||||||
= P.FieldDef
|
= P.FieldDef
|
||||||
(P.HaskellName "createdAt")
|
(P.HaskellName "createdAt")
|
||||||
@ -180,6 +186,7 @@ instance forall sess. P.PersistFieldSql (Decomposed sess) => P.PersistEntity (Pe
|
|||||||
[]
|
[]
|
||||||
True
|
True
|
||||||
P.NoReference
|
P.NoReference
|
||||||
|
Nothing
|
||||||
persistFieldDef PersistentSessionAccessedAt
|
persistFieldDef PersistentSessionAccessedAt
|
||||||
= P.FieldDef
|
= P.FieldDef
|
||||||
(P.HaskellName "accessedAt")
|
(P.HaskellName "accessedAt")
|
||||||
@ -189,6 +196,7 @@ instance forall sess. P.PersistFieldSql (Decomposed sess) => P.PersistEntity (Pe
|
|||||||
[]
|
[]
|
||||||
True
|
True
|
||||||
P.NoReference
|
P.NoReference
|
||||||
|
Nothing
|
||||||
|
|
||||||
persistIdField = PersistentSessionId
|
persistIdField = PersistentSessionId
|
||||||
|
|
||||||
|
|||||||
@ -1,3 +1,5 @@
|
|||||||
|
1.0.4
|
||||||
|
* bump hedis to 0.13
|
||||||
1.0.3
|
1.0.3
|
||||||
* Allow hedis-0.10
|
* Allow hedis-0.10
|
||||||
1.0.2
|
1.0.2
|
||||||
|
|||||||
@ -1,5 +1,6 @@
|
|||||||
|
cabal-version: >= 1.10
|
||||||
name: serversession-backend-redis
|
name: serversession-backend-redis
|
||||||
version: 1.0.3
|
version: 1.0.4
|
||||||
license: MIT
|
license: MIT
|
||||||
license-file: LICENSE
|
license-file: LICENSE
|
||||||
author: Felipe Lessa <felipe.lessa@gmail.com>
|
author: Felipe Lessa <felipe.lessa@gmail.com>
|
||||||
@ -7,7 +8,6 @@ maintainer: Michael Xavier <michael@michaelxavier.net>
|
|||||||
synopsis: Storage backend for serversession using Redis.
|
synopsis: Storage backend for serversession using Redis.
|
||||||
category: Web
|
category: Web
|
||||||
stability: Stable
|
stability: Stable
|
||||||
cabal-version: >= 1.8
|
|
||||||
build-type: Simple
|
build-type: Simple
|
||||||
homepage: https://github.com/yesodweb/serversession
|
homepage: https://github.com/yesodweb/serversession
|
||||||
description: API docs and the README are available at <http://www.stackage.org/package/serversession-backend-redis>
|
description: API docs and the README are available at <http://www.stackage.org/package/serversession-backend-redis>
|
||||||
@ -23,11 +23,12 @@ flag lib-Werror
|
|||||||
manual: True
|
manual: True
|
||||||
|
|
||||||
library
|
library
|
||||||
|
default-language: Haskell2010
|
||||||
hs-source-dirs: src
|
hs-source-dirs: src
|
||||||
build-depends:
|
build-depends:
|
||||||
base == 4.*
|
base == 4.*
|
||||||
, bytestring
|
, bytestring
|
||||||
, hedis < 0.11
|
, hedis < 0.13
|
||||||
, path-pieces
|
, path-pieces
|
||||||
, tagged >= 0.7
|
, tagged >= 0.7
|
||||||
, text
|
, text
|
||||||
@ -43,7 +44,7 @@ library
|
|||||||
exposed-modules:
|
exposed-modules:
|
||||||
Web.ServerSession.Backend.Redis
|
Web.ServerSession.Backend.Redis
|
||||||
Web.ServerSession.Backend.Redis.Internal
|
Web.ServerSession.Backend.Redis.Internal
|
||||||
extensions:
|
default-extensions:
|
||||||
CPP
|
CPP
|
||||||
DeriveDataTypeable
|
DeriveDataTypeable
|
||||||
FlexibleContexts
|
FlexibleContexts
|
||||||
@ -60,6 +61,7 @@ library
|
|||||||
|
|
||||||
|
|
||||||
test-suite tests
|
test-suite tests
|
||||||
|
default-language: Haskell2010
|
||||||
type: exitcode-stdio-1.0
|
type: exitcode-stdio-1.0
|
||||||
hs-source-dirs: tests
|
hs-source-dirs: tests
|
||||||
build-depends:
|
build-depends:
|
||||||
|
|||||||
@ -1,3 +1,4 @@
|
|||||||
|
cabal-version: >= 1.10
|
||||||
name: serversession-frontend-snap
|
name: serversession-frontend-snap
|
||||||
version: 1.0.1
|
version: 1.0.1
|
||||||
license: MIT
|
license: MIT
|
||||||
@ -7,7 +8,6 @@ maintainer: Michael Xavier <michael@michaelxavier.net>
|
|||||||
synopsis: Snap bindings for serversession.
|
synopsis: Snap bindings for serversession.
|
||||||
category: Web
|
category: Web
|
||||||
stability: Stable
|
stability: Stable
|
||||||
cabal-version: >= 1.8
|
|
||||||
build-type: Simple
|
build-type: Simple
|
||||||
homepage: https://github.com/yesodweb/serversession
|
homepage: https://github.com/yesodweb/serversession
|
||||||
description: API docs and the README are available at <http://www.stackage.org/package/serversession-frontend-snap>
|
description: API docs and the README are available at <http://www.stackage.org/package/serversession-frontend-snap>
|
||||||
@ -20,6 +20,7 @@ flag lib-Werror
|
|||||||
|
|
||||||
|
|
||||||
library
|
library
|
||||||
|
default-language: Haskell2010
|
||||||
hs-source-dirs: src
|
hs-source-dirs: src
|
||||||
build-depends:
|
build-depends:
|
||||||
base == 4.*
|
base == 4.*
|
||||||
@ -37,7 +38,7 @@ library
|
|||||||
exposed-modules:
|
exposed-modules:
|
||||||
Web.ServerSession.Frontend.Snap
|
Web.ServerSession.Frontend.Snap
|
||||||
Web.ServerSession.Frontend.Snap.Internal
|
Web.ServerSession.Frontend.Snap.Internal
|
||||||
extensions:
|
default-extensions:
|
||||||
DeriveDataTypeable
|
DeriveDataTypeable
|
||||||
FlexibleContexts
|
FlexibleContexts
|
||||||
OverloadedStrings
|
OverloadedStrings
|
||||||
|
|||||||
@ -1,3 +1,4 @@
|
|||||||
|
cabal-version: >= 1.10
|
||||||
name: serversession-frontend-wai
|
name: serversession-frontend-wai
|
||||||
version: 1.0
|
version: 1.0
|
||||||
license: MIT
|
license: MIT
|
||||||
@ -7,7 +8,6 @@ maintainer: Michael Xavier <michael@michaelxavier.net>
|
|||||||
synopsis: wai-session bindings for serversession.
|
synopsis: wai-session bindings for serversession.
|
||||||
category: Web
|
category: Web
|
||||||
stability: Stable
|
stability: Stable
|
||||||
cabal-version: >= 1.8
|
|
||||||
build-type: Simple
|
build-type: Simple
|
||||||
homepage: https://github.com/yesodweb/serversession
|
homepage: https://github.com/yesodweb/serversession
|
||||||
description: API docs and the README are available at <http://www.stackage.org/package/serversession-frontend-wai>
|
description: API docs and the README are available at <http://www.stackage.org/package/serversession-frontend-wai>
|
||||||
@ -19,6 +19,7 @@ flag lib-Werror
|
|||||||
manual: True
|
manual: True
|
||||||
|
|
||||||
library
|
library
|
||||||
|
default-language: Haskell2010
|
||||||
hs-source-dirs: src
|
hs-source-dirs: src
|
||||||
build-depends:
|
build-depends:
|
||||||
base >= 4.6 && < 5
|
base >= 4.6 && < 5
|
||||||
@ -38,7 +39,7 @@ library
|
|||||||
exposed-modules:
|
exposed-modules:
|
||||||
Web.ServerSession.Frontend.Wai
|
Web.ServerSession.Frontend.Wai
|
||||||
Web.ServerSession.Frontend.Wai.Internal
|
Web.ServerSession.Frontend.Wai.Internal
|
||||||
extensions:
|
default-extensions:
|
||||||
FlexibleContexts
|
FlexibleContexts
|
||||||
OverloadedStrings
|
OverloadedStrings
|
||||||
TypeFamilies
|
TypeFamilies
|
||||||
|
|||||||
@ -1,3 +1,4 @@
|
|||||||
|
cabal-version: >= 1.10
|
||||||
name: serversession-frontend-yesod
|
name: serversession-frontend-yesod
|
||||||
version: 1.0
|
version: 1.0
|
||||||
license: MIT
|
license: MIT
|
||||||
@ -7,7 +8,6 @@ maintainer: Michael Xavier <michael@michaelxavier.net>
|
|||||||
synopsis: Yesod bindings for serversession.
|
synopsis: Yesod bindings for serversession.
|
||||||
category: Web
|
category: Web
|
||||||
stability: Stable
|
stability: Stable
|
||||||
cabal-version: >= 1.8
|
|
||||||
build-type: Simple
|
build-type: Simple
|
||||||
homepage: https://github.com/yesodweb/serversession
|
homepage: https://github.com/yesodweb/serversession
|
||||||
description: API docs and the README are available at <http://www.stackage.org/package/serversession-frontend-yesod>
|
description: API docs and the README are available at <http://www.stackage.org/package/serversession-frontend-yesod>
|
||||||
@ -19,6 +19,7 @@ flag lib-Werror
|
|||||||
manual: True
|
manual: True
|
||||||
|
|
||||||
library
|
library
|
||||||
|
default-language: Haskell2010
|
||||||
hs-source-dirs: src
|
hs-source-dirs: src
|
||||||
build-depends:
|
build-depends:
|
||||||
base == 4.*
|
base == 4.*
|
||||||
@ -38,7 +39,7 @@ library
|
|||||||
exposed-modules:
|
exposed-modules:
|
||||||
Web.ServerSession.Frontend.Yesod
|
Web.ServerSession.Frontend.Yesod
|
||||||
Web.ServerSession.Frontend.Yesod.Internal
|
Web.ServerSession.Frontend.Yesod.Internal
|
||||||
extensions:
|
default-extensions:
|
||||||
FlexibleContexts
|
FlexibleContexts
|
||||||
OverloadedStrings
|
OverloadedStrings
|
||||||
TypeFamilies
|
TypeFamilies
|
||||||
|
|||||||
@ -0,0 +1,2 @@
|
|||||||
|
# 1.0.2
|
||||||
|
* add persistent-test to deps
|
||||||
@ -1,5 +1,6 @@
|
|||||||
|
cabal-version: >= 1.10
|
||||||
name: serversession
|
name: serversession
|
||||||
version: 1.0.1
|
version: 1.0.2
|
||||||
license: MIT
|
license: MIT
|
||||||
license-file: LICENSE
|
license-file: LICENSE
|
||||||
author: Felipe Lessa <felipe.lessa@gmail.com>
|
author: Felipe Lessa <felipe.lessa@gmail.com>
|
||||||
@ -7,7 +8,6 @@ maintainer: Michael Xavier <michael@michaelxavier.net>
|
|||||||
synopsis: Secure, modular server-side sessions.
|
synopsis: Secure, modular server-side sessions.
|
||||||
category: Web
|
category: Web
|
||||||
stability: Stable
|
stability: Stable
|
||||||
cabal-version: >= 1.8
|
|
||||||
build-type: Simple
|
build-type: Simple
|
||||||
homepage: https://github.com/yesodweb/serversession
|
homepage: https://github.com/yesodweb/serversession
|
||||||
description: API docs and the README are available at <http://www.stackage.org/package/serversession>
|
description: API docs and the README are available at <http://www.stackage.org/package/serversession>
|
||||||
@ -19,16 +19,18 @@ flag lib-Werror
|
|||||||
manual: True
|
manual: True
|
||||||
|
|
||||||
library
|
library
|
||||||
|
default-language: Haskell2010
|
||||||
hs-source-dirs: src
|
hs-source-dirs: src
|
||||||
build-depends:
|
build-depends:
|
||||||
base == 4.*
|
base == 4.*
|
||||||
, aeson
|
, aeson
|
||||||
, base64-bytestring == 1.0.*
|
, base64-bytestring >= 1.0 && < 1.3
|
||||||
, bytestring
|
, bytestring
|
||||||
, data-default
|
, data-default
|
||||||
, hashable
|
, hashable
|
||||||
, nonce == 1.0.*
|
, nonce == 1.0.*
|
||||||
, path-pieces
|
, path-pieces
|
||||||
|
, persistent-test
|
||||||
, text
|
, text
|
||||||
, time
|
, time
|
||||||
, transformers
|
, transformers
|
||||||
@ -37,7 +39,7 @@ library
|
|||||||
Web.ServerSession.Core
|
Web.ServerSession.Core
|
||||||
Web.ServerSession.Core.Internal
|
Web.ServerSession.Core.Internal
|
||||||
Web.ServerSession.Core.StorageTests
|
Web.ServerSession.Core.StorageTests
|
||||||
extensions:
|
default-extensions:
|
||||||
DeriveDataTypeable
|
DeriveDataTypeable
|
||||||
FlexibleContexts
|
FlexibleContexts
|
||||||
OverloadedStrings
|
OverloadedStrings
|
||||||
@ -53,6 +55,7 @@ library
|
|||||||
|
|
||||||
|
|
||||||
test-suite tests
|
test-suite tests
|
||||||
|
default-language: Haskell2010
|
||||||
type: exitcode-stdio-1.0
|
type: exitcode-stdio-1.0
|
||||||
hs-source-dirs: tests
|
hs-source-dirs: tests
|
||||||
build-depends:
|
build-depends:
|
||||||
@ -64,7 +67,7 @@ test-suite tests
|
|||||||
, hspec >= 2.1 && < 3
|
, hspec >= 2.1 && < 3
|
||||||
, QuickCheck
|
, QuickCheck
|
||||||
, serversession
|
, serversession
|
||||||
extensions:
|
default-extensions:
|
||||||
DeriveDataTypeable
|
DeriveDataTypeable
|
||||||
FlexibleContexts
|
FlexibleContexts
|
||||||
OverloadedStrings
|
OverloadedStrings
|
||||||
|
|||||||
@ -10,6 +10,7 @@ module Web.ServerSession.Core.StorageTests
|
|||||||
import Control.Applicative as A
|
import Control.Applicative as A
|
||||||
import Control.Exception (Exception)
|
import Control.Exception (Exception)
|
||||||
import Control.Monad
|
import Control.Monad
|
||||||
|
import DataTypeTest (roundUTCTime)
|
||||||
import Web.ServerSession.Core.Internal
|
import Web.ServerSession.Core.Internal
|
||||||
|
|
||||||
import qualified Crypto.Nonce as N
|
import qualified Crypto.Nonce as N
|
||||||
@ -173,8 +174,8 @@ allStorageTests storage it runIO parallel _shouldBe shouldReturn shouldThrow = d
|
|||||||
{ sessionKey = sid
|
{ sessionKey = sid
|
||||||
, sessionAuthId = Nothing
|
, sessionAuthId = Nothing
|
||||||
, sessionData = SessionMap $ HM.fromList vals
|
, sessionData = SessionMap $ HM.fromList vals
|
||||||
, sessionCreatedAt = now
|
, sessionCreatedAt = roundUTCTime now
|
||||||
, sessionAccessedAt = now
|
, sessionAccessedAt = roundUTCTime now
|
||||||
}
|
}
|
||||||
ver2 = session { sessionData = SessionMap HM.empty }
|
ver2 = session { sessionData = SessionMap HM.empty }
|
||||||
run (getSession storage sid) `shouldReturn` Nothing
|
run (getSession storage sid) `shouldReturn` Nothing
|
||||||
@ -223,8 +224,8 @@ generateSession gen hasAuthId = do
|
|||||||
{ sessionKey = sid
|
{ sessionKey = sid
|
||||||
, sessionAuthId = authId
|
, sessionAuthId = authId
|
||||||
, sessionData = SessionMap data_
|
, sessionData = SessionMap data_
|
||||||
, sessionCreatedAt = TI.addUTCTime (-1000) now
|
, sessionCreatedAt = roundUTCTime $ TI.addUTCTime (-1000) now
|
||||||
, sessionAccessedAt = now
|
, sessionAccessedAt = roundUTCTime $ now
|
||||||
}
|
}
|
||||||
|
|
||||||
data HasAuthId = HasAuthId | NoAuthId
|
data HasAuthId = HasAuthId | NoAuthId
|
||||||
|
|||||||
16
stack.nix
Normal file
16
stack.nix
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
{ ghc, nixpkgs ? import ./nixpkgs.nix }:
|
||||||
|
|
||||||
|
let
|
||||||
|
# haskellPackages = import ./stackage.nix { inherit nixpkgs; };
|
||||||
|
haskellPackages = pkgs.haskellPackages;
|
||||||
|
inherit (nixpkgs {}) pkgs;
|
||||||
|
in pkgs.haskell.lib.buildStackProject {
|
||||||
|
inherit ghc;
|
||||||
|
inherit (haskellPackages) stack;
|
||||||
|
name = "stackenv";
|
||||||
|
buildInputs = (with pkgs;
|
||||||
|
[ postgresql zlib libsodium gmp llvm_9
|
||||||
|
]) ++ (with haskellPackages;
|
||||||
|
[ yesod-bin happy alex
|
||||||
|
]);
|
||||||
|
}
|
||||||
49
stack.yaml
49
stack.yaml
@ -1,4 +1,18 @@
|
|||||||
resolver: lts-15.0
|
flags:
|
||||||
|
serversession-backend-acid-state:
|
||||||
|
lib-Werror: true
|
||||||
|
serversession-frontend-wai:
|
||||||
|
lib-Werror: true
|
||||||
|
serversession-backend-persistent:
|
||||||
|
lib-Werror: true
|
||||||
|
serversession:
|
||||||
|
lib-Werror: true
|
||||||
|
serversession-backend-redis:
|
||||||
|
lib-Werror: true
|
||||||
|
serversession-frontend-yesod:
|
||||||
|
lib-Werror: true
|
||||||
|
serversession-frontend-snap:
|
||||||
|
lib-Werror: true
|
||||||
packages:
|
packages:
|
||||||
- serversession
|
- serversession
|
||||||
- serversession-backend-acid-state
|
- serversession-backend-acid-state
|
||||||
@ -8,25 +22,16 @@ packages:
|
|||||||
- serversession-frontend-wai
|
- serversession-frontend-wai
|
||||||
- serversession-frontend-yesod
|
- serversession-frontend-yesod
|
||||||
- examples/serversession-example-yesod-persistent
|
- examples/serversession-example-yesod-persistent
|
||||||
flags:
|
|
||||||
serversession:
|
|
||||||
lib-Werror: true
|
|
||||||
serversession-backend-acid-state:
|
|
||||||
lib-Werror: true
|
|
||||||
serversession-backend-persistent:
|
|
||||||
lib-Werror: true
|
|
||||||
serversession-backend-redis:
|
|
||||||
lib-Werror: true
|
|
||||||
serversession-frontend-snap:
|
|
||||||
lib-Werror: true
|
|
||||||
serversession-frontend-wai:
|
|
||||||
lib-Werror: true
|
|
||||||
serversession-frontend-yesod:
|
|
||||||
lib-Werror: true
|
|
||||||
extra-deps:
|
extra-deps:
|
||||||
- acid-state-0.16.0
|
- snap-1.1.3.0@sha256:0c0814d2ab1c3d5f22cef4615b2913ded18e87710ea6febdbe6e3ab8d9838735,8872
|
||||||
- snap-1.1.1.0
|
- acid-state-0.16.0@sha256:a5640fd8d99bdb5f152476a2ae56cc8eb81864b280c8ec7d1387e81296ed844d,6190
|
||||||
- heist-1.1
|
- heist-1.1.0.1@sha256:7355cf8c1a7ef84c0c800c0539f7b99e7e540cace697238009a2dea1f05231f1,9311
|
||||||
- map-syntax-0.3
|
- map-syntax-0.3@sha256:ca8b449615fa57419c16a5e98844624a6ac758692b87b3cfae8c74c87c56f1b2,2420
|
||||||
- pwstore-fast-2.4.4
|
- pwstore-fast-2.4.4@sha256:9b6a37510d8b9f37f409a8ab3babac9181afcaaa3fce8ba1c131a7ed3de30698,1351
|
||||||
- xmlhtml-0.2.5.2
|
- xmlhtml-0.2.5.2@sha256:3f0990f725551985d777e8edb5563fe99aee998f1fde6a7633f720f76df54701,46997
|
||||||
|
resolver: lts-16.31
|
||||||
|
nix:
|
||||||
|
packages: []
|
||||||
|
pure: false
|
||||||
|
shell-file: ./stack.nix
|
||||||
|
add-gc-roots: true
|
||||||
|
|||||||
@ -4,51 +4,51 @@
|
|||||||
# https://docs.haskellstack.org/en/stable/lock_files
|
# https://docs.haskellstack.org/en/stable/lock_files
|
||||||
|
|
||||||
packages:
|
packages:
|
||||||
|
- completed:
|
||||||
|
hackage: snap-1.1.3.0@sha256:0c0814d2ab1c3d5f22cef4615b2913ded18e87710ea6febdbe6e3ab8d9838735,8872
|
||||||
|
pantry-tree:
|
||||||
|
size: 5743
|
||||||
|
sha256: 804f55a8cab81e720547308e799243e81f43e089b860c0d3160a938cad86ed0d
|
||||||
|
original:
|
||||||
|
hackage: snap-1.1.3.0@sha256:0c0814d2ab1c3d5f22cef4615b2913ded18e87710ea6febdbe6e3ab8d9838735,8872
|
||||||
- completed:
|
- completed:
|
||||||
hackage: acid-state-0.16.0@sha256:a5640fd8d99bdb5f152476a2ae56cc8eb81864b280c8ec7d1387e81296ed844d,6190
|
hackage: acid-state-0.16.0@sha256:a5640fd8d99bdb5f152476a2ae56cc8eb81864b280c8ec7d1387e81296ed844d,6190
|
||||||
pantry-tree:
|
pantry-tree:
|
||||||
size: 13678
|
size: 13678
|
||||||
sha256: c6e4b7f00d2a500e6286beafe3a2da7ba898a9ea31f5744df57cdce8a8f5890f
|
sha256: c6e4b7f00d2a500e6286beafe3a2da7ba898a9ea31f5744df57cdce8a8f5890f
|
||||||
original:
|
original:
|
||||||
hackage: acid-state-0.16.0
|
hackage: acid-state-0.16.0@sha256:a5640fd8d99bdb5f152476a2ae56cc8eb81864b280c8ec7d1387e81296ed844d,6190
|
||||||
- completed:
|
- completed:
|
||||||
hackage: snap-1.1.1.0@sha256:3b6301b66f244074d1d7a87173cc70871df1df84b3a86bba5e996422d5e73f45,9093
|
hackage: heist-1.1.0.1@sha256:7355cf8c1a7ef84c0c800c0539f7b99e7e540cace697238009a2dea1f05231f1,9311
|
||||||
pantry-tree:
|
|
||||||
size: 5743
|
|
||||||
sha256: 23a8899b96ab2dd080328b35f047c057c06ff1dc31a73b724a7a69ba3f5db374
|
|
||||||
original:
|
|
||||||
hackage: snap-1.1.1.0
|
|
||||||
- completed:
|
|
||||||
hackage: heist-1.1@sha256:20187de15ef630f8f6debc1cc22cacefb55ddf8864749294bfe2b79a831cad8d,8722
|
|
||||||
pantry-tree:
|
pantry-tree:
|
||||||
size: 7354
|
size: 7354
|
||||||
sha256: 977c0818628cc92775afbf063032e308e55e29e85eaf6289e955dcdcd80b563f
|
sha256: a2635ed49de6debaf8b98189989f83ab58dcc125c6ae8e57f6fe0903bc7fa8ff
|
||||||
original:
|
original:
|
||||||
hackage: heist-1.1
|
hackage: heist-1.1.0.1@sha256:7355cf8c1a7ef84c0c800c0539f7b99e7e540cace697238009a2dea1f05231f1,9311
|
||||||
- completed:
|
- completed:
|
||||||
hackage: map-syntax-0.3@sha256:ca8b449615fa57419c16a5e98844624a6ac758692b87b3cfae8c74c87c56f1b2,2420
|
hackage: map-syntax-0.3@sha256:ca8b449615fa57419c16a5e98844624a6ac758692b87b3cfae8c74c87c56f1b2,2420
|
||||||
pantry-tree:
|
pantry-tree:
|
||||||
size: 558
|
size: 558
|
||||||
sha256: c196bee0433f9540e4251ebd1be06d802ff7cc4931e6f0aedc38babd28683a3c
|
sha256: c196bee0433f9540e4251ebd1be06d802ff7cc4931e6f0aedc38babd28683a3c
|
||||||
original:
|
original:
|
||||||
hackage: map-syntax-0.3
|
hackage: map-syntax-0.3@sha256:ca8b449615fa57419c16a5e98844624a6ac758692b87b3cfae8c74c87c56f1b2,2420
|
||||||
- completed:
|
- completed:
|
||||||
hackage: pwstore-fast-2.4.4@sha256:9b6a37510d8b9f37f409a8ab3babac9181afcaaa3fce8ba1c131a7ed3de30698,1351
|
hackage: pwstore-fast-2.4.4@sha256:9b6a37510d8b9f37f409a8ab3babac9181afcaaa3fce8ba1c131a7ed3de30698,1351
|
||||||
pantry-tree:
|
pantry-tree:
|
||||||
size: 270
|
size: 270
|
||||||
sha256: ff4a44ede62515efe5cd366a5803f7183c811c4a0cf56eea88da94181c4844c0
|
sha256: ff4a44ede62515efe5cd366a5803f7183c811c4a0cf56eea88da94181c4844c0
|
||||||
original:
|
original:
|
||||||
hackage: pwstore-fast-2.4.4
|
hackage: pwstore-fast-2.4.4@sha256:9b6a37510d8b9f37f409a8ab3babac9181afcaaa3fce8ba1c131a7ed3de30698,1351
|
||||||
- completed:
|
- completed:
|
||||||
hackage: xmlhtml-0.2.5.2@sha256:3f0990f725551985d777e8edb5563fe99aee998f1fde6a7633f720f76df54701,46997
|
hackage: xmlhtml-0.2.5.2@sha256:3f0990f725551985d777e8edb5563fe99aee998f1fde6a7633f720f76df54701,46997
|
||||||
pantry-tree:
|
pantry-tree:
|
||||||
size: 61835
|
size: 61835
|
||||||
sha256: bb1bd95db3738e18d112bbc9724510ee64a51b7eda61494507f4957c5e2281f6
|
sha256: bb1bd95db3738e18d112bbc9724510ee64a51b7eda61494507f4957c5e2281f6
|
||||||
original:
|
original:
|
||||||
hackage: xmlhtml-0.2.5.2
|
hackage: xmlhtml-0.2.5.2@sha256:3f0990f725551985d777e8edb5563fe99aee998f1fde6a7633f720f76df54701,46997
|
||||||
snapshots:
|
snapshots:
|
||||||
- completed:
|
- completed:
|
||||||
size: 488576
|
size: 534126
|
||||||
url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/lts/15/0.yaml
|
url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/lts/16/31.yaml
|
||||||
sha256: e4b6a87b47ec1cf63a7f1a0884a3b276fce2b0d174a10e8753c4f618e7983568
|
sha256: 637fb77049b25560622a224845b7acfe81a09fdb6a96a3c75997a10b651667f6
|
||||||
original: lts-15.0
|
original: lts-16.31
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user