summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/Main.hs29
1 files changed, 26 insertions, 3 deletions
diff --git a/src/Main.hs b/src/Main.hs
index 6b06811..4a6d3cd 100644
--- a/src/Main.hs
+++ b/src/Main.hs
@@ -6,6 +6,8 @@ import Control.Monad.Reader
import Control.Monad.State
import Control.Monad.Trans.Maybe
+import qualified Data.ByteString.Char8 as BC
+import qualified Data.ByteString.Lazy as BL
import Data.Char
import Data.List
import Data.Maybe
@@ -72,10 +74,31 @@ updateErebosHead st f = do
return x
main :: IO ()
-main = runInputT defaultSettings $ do
- bhost <- liftIO getArgs >>= \case [bhost] -> return bhost
- _ -> error "Expecting broadcast address"
+main = do
st <- liftIO $ openStorage "test"
+ getArgs >>= \case
+ ["cat-file", sref] -> do
+ readRef st (BC.pack sref) >>= \case
+ Nothing -> error "ref does not exist"
+ Just ref -> BL.putStr $ lazyLoadBytes ref
+
+ ["cat-file", objtype, sref] -> do
+ readRef st (BC.pack sref) >>= \case
+ Nothing -> error "ref does not exist"
+ Just ref -> case objtype of
+ "signed" -> do
+ let signed = load ref :: Signed Object
+ BL.putStr $ lazyLoadBytes $ storedRef $ signedData signed
+ forM_ (signedSignature signed) $ \sig -> do
+ putStr $ "SIG "
+ BC.putStrLn $ showRef $ storedRef $ sigKey $ fromStored sig
+ _ -> error $ "unknown object type '" ++ objtype ++ "'"
+
+ [bhost] -> interactiveLoop st bhost
+ _ -> error "Expecting broadcast address"
+
+interactiveLoop :: Storage -> String -> IO ()
+interactiveLoop st bhost = runInputT defaultSettings $ do
erebosHead <- liftIO $ loadErebosHead st
let serebos = wrappedLoad (headRef erebosHead) :: Stored Erebos
self = erbIdentity $ fromStored serebos