biscuit-haskell-0.1.0.0: src/Auth/Biscuit/Example.hs
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE QuasiQuotes #-}
module Auth.Biscuit.Example where
import Data.ByteString (ByteString)
import Data.Functor (($>))
import Data.Time (getCurrentTime)
import Auth.Biscuit
privateKey' :: PrivateKey
privateKey' = maybe (error "Error parsing private key") id $ parsePrivateKeyHex "todo"
publicKey' :: PublicKey
publicKey' = maybe (error "Error parsing public key") id $ parsePublicKeyHex "todo"
creation :: IO ByteString
creation = do
let authority = [block|
// toto
resource(#authority,"file1");
|]
keypair <- fromPrivateKey privateKey'
biscuit <- mkBiscuit keypair authority
let block1 = [block|check if current_time(#ambient, $time), $time < 2021-05-08T00:00:00Z;|]
newBiscuit <- addBlock block1 biscuit
pure $ serializeB64 newBiscuit
verification :: ByteString -> IO Bool
verification serialized = do
now <- getCurrentTime
biscuit <- either (fail . show) pure $ parseB64 serialized
let verifier' = [verifier|current_time(#ambient, ${now});|]
result <- verifyBiscuit biscuit verifier' publicKey'
case result of
Left e -> print e $> False
Right _ -> pure True