diff --git a/src/PaymentServer/Main.hs b/src/PaymentServer/Main.hs index 8c52604b95aa793cf9f539e9884b19e09c43ad36..336cd6f6ad37240ad5dd747fbde2dd34c8d09322 100644 --- a/src/PaymentServer/Main.hs +++ b/src/PaymentServer/Main.hs @@ -25,6 +25,7 @@ import Network.Wai.Middleware.RequestLogger ) import PaymentServer.Persistence ( memory + , Database(Memory, SQLite3) ) import PaymentServer.Issuer ( trivialIssue @@ -63,11 +64,6 @@ data Issuer = | Ristretto deriving (Show, Eq, Ord, Read) -data Database = - Memory - | SQLite3 - deriving (Show, Eq, Ord, Read) - data ServerConfig = ServerConfig { issuer :: Issuer , signingKey :: Maybe Text @@ -91,7 +87,7 @@ sample = ServerConfig ( long "database" <> help "Which database to use: sqlite3 or memory" <> showDefault - <> value Memory ) + <> value SQLite3 ) <*> optional ( option str ( long "database-path" <> help "Path to on-disk database (sqlite3 only)" diff --git a/src/PaymentServer/Persistence.hs b/src/PaymentServer/Persistence.hs index 3ad0226862a9e74da386f40825240e4668b72136..81cb74da101e9096923090fd959ff4789e62e8bb 100644 --- a/src/PaymentServer/Persistence.hs +++ b/src/PaymentServer/Persistence.hs @@ -4,6 +4,7 @@ module PaymentServer.Persistence ( Voucher , Fingerprint , RedeemError(NotPaid, AlreadyRedeemed) + , Database(Memory, SQLite3) , VoucherDatabase(payForVoucher, redeemVoucher) , MemoryVoucherDatabase , memory @@ -49,6 +50,11 @@ data RedeemError = | AlreadyRedeemed deriving (Show, Eq) +data Database = + Memory + | SQLite3 + deriving (Show, Eq, Ord, Read) + -- | A fingerprint cryptographically identifies a redemption of a voucher. -- When a voucher is redeemed, a number of random tokens are received -- alongside it. These tokens are signed to create ZKAPs to return to the @@ -82,7 +88,7 @@ class VoucherDatabase d where -- even the MemoryVoucherDatabase value). This is primarily useful for -- testing. data MemoryVoucherDatabase = - Memory { + MemoryDB { -- | A set of vouchers which have been paid for. paid :: IORef (Set.Set Voucher) -- | A mapping from redeemed vouchers to fingerprints associated with the @@ -91,11 +97,11 @@ data MemoryVoucherDatabase = } instance VoucherDatabase MemoryVoucherDatabase where - payForVoucher Memory{ paid = paid, redeemed = redeemed } voucher = do + payForVoucher MemoryDB{ paid = paid, redeemed = redeemed } voucher = do modifyIORef paid (Set.insert voucher) return () - redeemVoucher Memory{ paid = paid, redeemed = redeemed } voucher fingerprint = do + redeemVoucher MemoryDB{ paid = paid, redeemed = redeemed } voucher fingerprint = do unpaid <- Set.notMember voucher <$> readIORef paid existingFingerprint <- Map.lookup voucher <$> readIORef redeemed case (unpaid, existingFingerprint) of @@ -115,7 +121,7 @@ memory :: IO MemoryVoucherDatabase memory = do paid <- newIORef mempty redeemed <- newIORef mempty - return $ Memory paid redeemed + return $ MemoryDB paid redeemed instance VoucherDatabase Sqlite.Connection where -- payForVoucher :: Sqlite.Connection -> Voucher -> IO ()