packages feed

servant-auth-token-leveldb 0.5.3.0 → 0.6.0.0

raw patch · 4 files changed

+46/−35 lines, 4 filesdep +cerealdep +safecopydep +unliftio-coredep −monad-controldep −safecopy-storedep −storedep ~exceptionsdep ~lensdep ~resourcetPVP ok

version bump matches the API change (PVP)

Dependencies added: cereal, safecopy, unliftio-core

Dependencies removed: monad-control, safecopy-store, store, transformers-base

Dependency ranges changed: exceptions, lens, resourcet, servant-server

API changes (from Hackage documentation)

- Servant.Server.Auth.Token.LevelDB: instance (Control.Monad.Base.MonadBase GHC.Types.IO m, Control.Monad.Catch.MonadThrow m, Control.Monad.IO.Class.MonadIO m) => Control.Monad.Trans.Resource.Internal.MonadResource (Servant.Server.Auth.Token.LevelDB.LevelDBBackendT m)
- Servant.Server.Auth.Token.LevelDB: instance (Control.Monad.Base.MonadBase GHC.Types.IO m, Control.Monad.IO.Class.MonadIO m, Control.Monad.Catch.MonadThrow m, Control.Monad.Catch.MonadMask m) => Servant.Server.Auth.Token.Model.HasStorage (Servant.Server.Auth.Token.LevelDB.LevelDBBackendT m)
- Servant.Server.Auth.Token.LevelDB: instance Control.Monad.Base.MonadBase GHC.Types.IO m => Control.Monad.Base.MonadBase GHC.Types.IO (Servant.Server.Auth.Token.LevelDB.LevelDBBackendT m)
- Servant.Server.Auth.Token.LevelDB: instance Control.Monad.Trans.Control.MonadBaseControl GHC.Types.IO m => Control.Monad.Trans.Control.MonadBaseControl GHC.Types.IO (Servant.Server.Auth.Token.LevelDB.LevelDBBackendT m)
- Servant.Server.Auth.Token.LevelDB: instance GHC.Base.Monad m => Control.Monad.Error.Class.MonadError Servant.Server.Internal.ServantErr.ServantErr (Servant.Server.Auth.Token.LevelDB.LevelDBBackendT m)
- Servant.Server.Auth.Token.LevelDB: instance GHC.Base.Monad m => GHC.Base.Applicative (Servant.Server.Auth.Token.LevelDB.LevelDBBackendT m)
- Servant.Server.Auth.Token.LevelDB.Schema: instance (Data.SafeCopy.Store.SafeCopy.SafeCopy k, Data.SafeCopy.Store.SafeCopy.SafeCopy v) => Data.SafeCopy.Store.SafeCopy.SafeCopy (Data.Aeson.WithField.WithField i k v)
- Servant.Server.Auth.Token.LevelDB.Schema: instance Data.SafeCopy.Store.SafeCopy.SafeCopy Servant.Server.Auth.Token.LevelDB.Schema.Model
- Servant.Server.Auth.Token.LevelDB.Schema: instance Data.SafeCopy.Store.SafeCopy.SafeCopy Servant.Server.Auth.Token.LevelDB.Schema.ModelId
- Servant.Server.Auth.Token.LevelDB.Schema: instance Data.SafeCopy.Store.SafeCopy.SafeCopy Servant.Server.Auth.Token.Model.AuthToken
- Servant.Server.Auth.Token.LevelDB.Schema: instance Data.SafeCopy.Store.SafeCopy.SafeCopy Servant.Server.Auth.Token.Model.AuthTokenId
- Servant.Server.Auth.Token.LevelDB.Schema: instance Data.SafeCopy.Store.SafeCopy.SafeCopy Servant.Server.Auth.Token.Model.AuthUserGroup
- Servant.Server.Auth.Token.LevelDB.Schema: instance Data.SafeCopy.Store.SafeCopy.SafeCopy Servant.Server.Auth.Token.Model.AuthUserGroupId
- Servant.Server.Auth.Token.LevelDB.Schema: instance Data.SafeCopy.Store.SafeCopy.SafeCopy Servant.Server.Auth.Token.Model.AuthUserGroupPerms
- Servant.Server.Auth.Token.LevelDB.Schema: instance Data.SafeCopy.Store.SafeCopy.SafeCopy Servant.Server.Auth.Token.Model.AuthUserGroupPermsId
- Servant.Server.Auth.Token.LevelDB.Schema: instance Data.SafeCopy.Store.SafeCopy.SafeCopy Servant.Server.Auth.Token.Model.AuthUserGroupUsers
- Servant.Server.Auth.Token.LevelDB.Schema: instance Data.SafeCopy.Store.SafeCopy.SafeCopy Servant.Server.Auth.Token.Model.AuthUserGroupUsersId
- Servant.Server.Auth.Token.LevelDB.Schema: instance Data.SafeCopy.Store.SafeCopy.SafeCopy Servant.Server.Auth.Token.Model.UserImpl
- Servant.Server.Auth.Token.LevelDB.Schema: instance Data.SafeCopy.Store.SafeCopy.SafeCopy Servant.Server.Auth.Token.Model.UserImplId
- Servant.Server.Auth.Token.LevelDB.Schema: instance Data.SafeCopy.Store.SafeCopy.SafeCopy Servant.Server.Auth.Token.Model.UserPerm
- Servant.Server.Auth.Token.LevelDB.Schema: instance Data.SafeCopy.Store.SafeCopy.SafeCopy Servant.Server.Auth.Token.Model.UserPermId
- Servant.Server.Auth.Token.LevelDB.Schema: instance Data.SafeCopy.Store.SafeCopy.SafeCopy Servant.Server.Auth.Token.Model.UserRestore
- Servant.Server.Auth.Token.LevelDB.Schema: instance Data.SafeCopy.Store.SafeCopy.SafeCopy Servant.Server.Auth.Token.Model.UserRestoreId
- Servant.Server.Auth.Token.LevelDB.Schema: instance Data.SafeCopy.Store.SafeCopy.SafeCopy Servant.Server.Auth.Token.Model.UserSingleUseCode
- Servant.Server.Auth.Token.LevelDB.Schema: instance Data.SafeCopy.Store.SafeCopy.SafeCopy Servant.Server.Auth.Token.Model.UserSingleUseCodeId
+ Servant.Server.Auth.Token.LevelDB: instance (Control.Monad.Catch.MonadThrow m, Control.Monad.IO.Class.MonadIO m) => Control.Monad.Trans.Resource.Internal.MonadResource (Servant.Server.Auth.Token.LevelDB.LevelDBBackendT m)
+ Servant.Server.Auth.Token.LevelDB: instance (Control.Monad.IO.Class.MonadIO m, Control.Monad.Catch.MonadThrow m, Control.Monad.Catch.MonadMask m) => Servant.Server.Auth.Token.Model.HasStorage (Servant.Server.Auth.Token.LevelDB.LevelDBBackendT m)
+ Servant.Server.Auth.Token.LevelDB: instance Control.Monad.Catch.MonadCatch m => Control.Monad.Error.Class.MonadError Servant.Server.Internal.ServantErr.ServantErr (Servant.Server.Auth.Token.LevelDB.LevelDBBackendT m)
+ Servant.Server.Auth.Token.LevelDB: instance Control.Monad.IO.Unlift.MonadUnliftIO m => Control.Monad.IO.Unlift.MonadUnliftIO (Servant.Server.Auth.Token.LevelDB.LevelDBBackendT m)
+ Servant.Server.Auth.Token.LevelDB: instance GHC.Base.Applicative m => GHC.Base.Applicative (Servant.Server.Auth.Token.LevelDB.LevelDBBackendT m)
+ Servant.Server.Auth.Token.LevelDB.Schema: instance (Data.SafeCopy.SafeCopy.SafeCopy k, Data.SafeCopy.SafeCopy.SafeCopy v) => Data.SafeCopy.SafeCopy.SafeCopy (Data.Aeson.WithField.WithField i k v)
+ Servant.Server.Auth.Token.LevelDB.Schema: instance Data.SafeCopy.SafeCopy.SafeCopy Servant.Server.Auth.Token.LevelDB.Schema.Model
+ Servant.Server.Auth.Token.LevelDB.Schema: instance Data.SafeCopy.SafeCopy.SafeCopy Servant.Server.Auth.Token.LevelDB.Schema.ModelId
+ Servant.Server.Auth.Token.LevelDB.Schema: instance Data.SafeCopy.SafeCopy.SafeCopy Servant.Server.Auth.Token.Model.AuthToken
+ Servant.Server.Auth.Token.LevelDB.Schema: instance Data.SafeCopy.SafeCopy.SafeCopy Servant.Server.Auth.Token.Model.AuthTokenId
+ Servant.Server.Auth.Token.LevelDB.Schema: instance Data.SafeCopy.SafeCopy.SafeCopy Servant.Server.Auth.Token.Model.AuthUserGroup
+ Servant.Server.Auth.Token.LevelDB.Schema: instance Data.SafeCopy.SafeCopy.SafeCopy Servant.Server.Auth.Token.Model.AuthUserGroupId
+ Servant.Server.Auth.Token.LevelDB.Schema: instance Data.SafeCopy.SafeCopy.SafeCopy Servant.Server.Auth.Token.Model.AuthUserGroupPerms
+ Servant.Server.Auth.Token.LevelDB.Schema: instance Data.SafeCopy.SafeCopy.SafeCopy Servant.Server.Auth.Token.Model.AuthUserGroupPermsId
+ Servant.Server.Auth.Token.LevelDB.Schema: instance Data.SafeCopy.SafeCopy.SafeCopy Servant.Server.Auth.Token.Model.AuthUserGroupUsers
+ Servant.Server.Auth.Token.LevelDB.Schema: instance Data.SafeCopy.SafeCopy.SafeCopy Servant.Server.Auth.Token.Model.AuthUserGroupUsersId
+ Servant.Server.Auth.Token.LevelDB.Schema: instance Data.SafeCopy.SafeCopy.SafeCopy Servant.Server.Auth.Token.Model.UserImpl
+ Servant.Server.Auth.Token.LevelDB.Schema: instance Data.SafeCopy.SafeCopy.SafeCopy Servant.Server.Auth.Token.Model.UserImplId
+ Servant.Server.Auth.Token.LevelDB.Schema: instance Data.SafeCopy.SafeCopy.SafeCopy Servant.Server.Auth.Token.Model.UserPerm
+ Servant.Server.Auth.Token.LevelDB.Schema: instance Data.SafeCopy.SafeCopy.SafeCopy Servant.Server.Auth.Token.Model.UserPermId
+ Servant.Server.Auth.Token.LevelDB.Schema: instance Data.SafeCopy.SafeCopy.SafeCopy Servant.Server.Auth.Token.Model.UserRestore
+ Servant.Server.Auth.Token.LevelDB.Schema: instance Data.SafeCopy.SafeCopy.SafeCopy Servant.Server.Auth.Token.Model.UserRestoreId
+ Servant.Server.Auth.Token.LevelDB.Schema: instance Data.SafeCopy.SafeCopy.SafeCopy Servant.Server.Auth.Token.Model.UserSingleUseCode
+ Servant.Server.Auth.Token.LevelDB.Schema: instance Data.SafeCopy.SafeCopy.SafeCopy Servant.Server.Auth.Token.Model.UserSingleUseCodeId
- Servant.Server.Auth.Token.LevelDB: runLevelDBBackendT :: MonadBaseControl IO m => AuthConfig -> LevelDBEnv -> LevelDBBackendT m a -> m (Either ServantErr a)
+ Servant.Server.Auth.Token.LevelDB: runLevelDBBackendT :: (MonadUnliftIO m, MonadCatch m) => AuthConfig -> LevelDBEnv -> LevelDBBackendT m a -> m (Either ServantErr a)

Files

CHANGELOG.md view
@@ -1,3 +1,9 @@+0.6.0.0+=======++* Return to original `safecopy` instead of `safecopy-store`.+* Use `unliftio` insteal of `monad-control`.+ 0.5.3.0 ======= 
servant-auth-token-leveldb.cabal view
@@ -1,5 +1,5 @@ name:                servant-auth-token-leveldb-version:             0.5.3.0+version:             0.6.0.0 synopsis:            Leveldb backend for servant-auth-token server description:         Please see README.md homepage:            https://github.com/ncrashed/servant-auth-token#readme@@ -24,24 +24,23 @@       base                    >= 4.7    && < 5     , aeson-injector          >= 1.1    && < 1.2     , bytestring              >= 0.10   && < 0.11+    , cereal                  >= 0.5    && < 0.6     , concurrent-extra        >= 0.7    && < 0.8     , containers              >= 0.5    && < 0.6-    , exceptions              >= 0.8    && < 0.9-    , lens                    >= 4.15   && < 4.16+    , exceptions              >= 0.8    && < 0.11+    , lens                    >= 4.15   && < 4.17     , leveldb-haskell         >= 0.6    && < 0.7-    , monad-control           >= 1.0    && < 1.1     , mtl                     >= 2.2    && < 2.3-    , resourcet               >= 1.1    && < 1.2+    , resourcet               >= 1.1    && < 1.3     , safe                    >= 0.3    && < 0.4-    , safecopy-store          >= 0.9    && < 0.10+    , safecopy                >= 0.9    && < 0.10     , servant-auth-token      >= 0.5    && < 0.6     , servant-auth-token-api  >= 0.5    && < 0.6-    , servant-server          >= 0.9    && < 0.14-    , store                   >= 0.3    && < 0.5+    , servant-server          >= 0.9    && < 0.15     , text                    >= 1.2    && < 1.3     , time                    >= 1.5    && < 1.9     , transformers            >= 0.4    && < 0.6-    , transformers-base       >= 0.4    && < 0.5+    , unliftio-core           >= 0.1    && < 0.3     , uuid                    >= 1.3    && < 1.4     , vector                  >= 0.11   && < 0.13   default-language:    Haskell2010
src/Servant/Server/Auth/Token/LevelDB.hs view
@@ -5,11 +5,10 @@   , newLevelDBEnv   ) where -import Control.Monad.Base import Control.Monad.Catch import Control.Monad.Except+import Control.Monad.IO.Unlift import Control.Monad.Reader-import Control.Monad.Trans.Control import Control.Monad.Trans.Resource import Servant.Server import Servant.Server.Auth.Token.Config@@ -19,25 +18,33 @@ import qualified Servant.Server.Auth.Token.LevelDB.Schema as S  -- | Monad transformer that implements storage backend-newtype LevelDBBackendT m a = LevelDBBackendT { unLevelDBBackendT :: ReaderT (AuthConfig, LevelDBEnv) (ExceptT ServantErr (ResourceT m)) a }-  deriving (Functor, Applicative, Monad, MonadIO, MonadError ServantErr, MonadReader (AuthConfig, LevelDBEnv), MonadThrow, MonadCatch)+newtype LevelDBBackendT m a = LevelDBBackendT { unLevelDBBackendT :: ReaderT (AuthConfig, LevelDBEnv) (ResourceT m) a }+  deriving (Functor, Applicative, Monad, MonadIO, MonadReader (AuthConfig, LevelDBEnv), MonadThrow, MonadCatch) -deriving instance MonadBase IO m => MonadBase IO (LevelDBBackendT m)-deriving instance (MonadBase IO m, MonadThrow m, MonadIO m) => MonadResource (LevelDBBackendT m)+deriving instance (MonadThrow m, MonadIO m) => MonadResource (LevelDBBackendT m) +instance MonadCatch m => MonadError ServantErr (LevelDBBackendT m) where+  throwError = throwM+  catchError = catch+ instance Monad m => HasAuthConfig (LevelDBBackendT m) where   getAuthConfig = fst <$> LevelDBBackendT ask -newtype StMLevelDBBackendT m a = StMLevelDBBackendT { unStMLevelDBBackendT :: StM (ReaderT (AuthConfig, LevelDBEnv) (ExceptT ServantErr m)) a }+instance MonadUnliftIO m => MonadUnliftIO (LevelDBBackendT m) where+  askUnliftIO = LevelDBBackendT $ withUnliftIO $ \u -> pure (UnliftIO (unliftIO u . unLevelDBBackendT)) -instance MonadBaseControl IO m => MonadBaseControl IO (LevelDBBackendT m) where-    type StM (LevelDBBackendT m) a = StMLevelDBBackendT m a-    liftBaseWith f = LevelDBBackendT $ liftBaseWith $ \q -> f (fmap StMLevelDBBackendT . q . unLevelDBBackendT)-    restoreM = LevelDBBackendT . restoreM . unStMLevelDBBackendT+-- newtype StMLevelDBBackendT m a = StMLevelDBBackendT { unStMLevelDBBackendT :: StM (ReaderT (AuthConfig, LevelDBEnv) (ExceptT ServantErr m)) a }+--+-- instance MonadBaseControl IO m => MonadBaseControl IO (LevelDBBackendT m) where+--     type StM (LevelDBBackendT m) a = StMLevelDBBackendT m a+--     liftBaseWith f = LevelDBBackendT $ liftBaseWith $ \q -> f (fmap StMLevelDBBackendT . q . unLevelDBBackendT)+--     restoreM = LevelDBBackendT . restoreM . unStMLevelDBBackendT  -- | Execute backend action with given connection pool.-runLevelDBBackendT :: MonadBaseControl IO m => AuthConfig -> LevelDBEnv -> LevelDBBackendT m a -> m (Either ServantErr a)-runLevelDBBackendT cfg db ma = runResourceT . runExceptT $ runReaderT (unLevelDBBackendT ma) (cfg, db)+runLevelDBBackendT :: (MonadUnliftIO m, MonadCatch m) => AuthConfig -> LevelDBEnv -> LevelDBBackendT m a -> m (Either ServantErr a)+runLevelDBBackendT cfg db ma = do+  let ma' = runResourceT $ runReaderT (unLevelDBBackendT ma) (cfg, db)+  catch (Right <$> ma') $ \e -> pure $ Left e  -- | Helper to extract LevelDB reference getEnv :: Monad m => LevelDBBackendT m LevelDBEnv@@ -45,11 +52,9 @@  -- | Helper to lift low-level LevelDB queries to backend monad liftEnv :: Monad m => (LevelDBEnv -> ResourceT m a) -> LevelDBBackendT m a-liftEnv f = do-  e <- getEnv-  LevelDBBackendT . lift . lift $ f e+liftEnv f = LevelDBBackendT . ReaderT $ f . snd -instance (MonadBase IO m, MonadIO m, MonadThrow m, MonadMask m) => HasStorage (LevelDBBackendT m) where+instance (MonadIO m, MonadThrow m, MonadMask m) => HasStorage (LevelDBBackendT m) where   getUserImpl = liftEnv . flip S.load   getUserImplByLogin = liftEnv . S.getUserImplByLogin   listUsersPaged page size = liftEnv $ S.listUsersPaged page size
src/Servant/Server/Auth/Token/LevelDB/Schema.hs view
@@ -13,10 +13,11 @@ import Data.Map.Strict (Map) import Data.Maybe import Data.Ord-import Data.SafeCopy.Store-import Data.SafeCopy.Store.Internal+import Data.SafeCopy+import Data.SafeCopy.Internal+import Data.Serialize.Get+import Data.Serialize.Put import Data.Set (Set)-import Data.Store import Data.Text (Text) import Data.Time import Data.Typeable hiding (Proxy)@@ -124,8 +125,8 @@   encodeKey :: i -> ByteString    default encodeKey :: (SafeCopy i, Typeable i) => i -> ByteString-  encodeKey i = runEncode $ do-    _ <- pokeE tname+  encodeKey i = runPut $ do+    safePut tname     safePut i     where       tname = show $ typeRep (Proxy :: Proxy i)@@ -153,11 +154,11 @@ load :: (MonadResource m, Key i a, SafeCopy a) => LevelDBEnv -> i -> m (Maybe a) load (LevelDBEnv db ropts _ _) i = do   mbs <- get db ropts (encodeKey i)-  return $ decodeExWith safeGet <$> mbs+  return $ join $ either (const Nothing) Just . runGet safeGet <$> mbs  -- | Store object by id in leveldb store :: (MonadResource m, Key i a, SafeCopy a) => LevelDBEnv -> i -> a -> m ()-store (LevelDBEnv db _ wopts _) i a = put db wopts (encodeKey i) (runEncode $ safePut a)+store (LevelDBEnv db _ wopts _) i a = put db wopts (encodeKey i) (runPut $ safePut a)  -- | Remove object by given id in leveldb remove :: (MonadResource m, Key i a) => LevelDBEnv -> i -> m ()@@ -510,10 +511,10 @@ deriveSafeCopy 0 'base ''Model  instance (SafeCopy k, SafeCopy v) => SafeCopy (WithField i k v) where-  putCopy a@(WithField k v) = contain $ do+  putCopy (WithField k v) = contain $ do     _ <- safePut k     _ <- safePut v-    return a+    return ()   getCopy = contain $ WithField     <$> safeGet     <*> safeGet