Skip to content
Snippets Groups Projects
Commit c277a595 authored by Jean-Paul Calderone's avatar Jean-Paul Calderone
Browse files

Successfully recover the contents of CHK

parent 542bc052
Branches
No related tags found
1 merge request!2Incorporate tahoe-great-black-swamp to do share downloads using GBS
module Main where module Main where
import qualified Data.ByteString as B import qualified Data.ByteString as B
import qualified Data.ByteString.Char8 as C8
import qualified Data.ByteString.Lazy as BL
import qualified Data.Map.Strict as Map import qualified Data.Map.Strict as Map
import Data.Text import qualified Data.Text as T
import Data.Yaml (FromJSON (parseJSON), Value (Object), decodeEither', (.:)) import Data.Yaml (FromJSON (parseJSON), Value (Object), decodeEither', (.:))
import System.Environment (getArgs) import System.Environment (getArgs)
import Tahoe.Announcement (StorageServerAnnouncement, StorageServerID) import Tahoe.Announcement (StorageServerAnnouncement, StorageServerID)
...@@ -16,18 +18,18 @@ main = do ...@@ -16,18 +18,18 @@ main = do
-- Load server announcements -- Load server announcements
announcementsBytes <- B.readFile announcementPath announcementsBytes <- B.readFile announcementPath
let Right (Announcements announcements) = decodeEither' announcementsBytes let Right (Announcements announcements) = decodeEither' announcementsBytes
print ("Your announcements:" :: Data.Text.Text) -- print ("Your announcements:" :: Data.Text.Text)
print announcements -- print announcements
-- Accept & parse read capability -- Accept & parse read capability
let Right (CHKReader cap) = parse pCapability "<argv>" (Data.Text.pack readCap) let Right (CHKReader cap) = parse pCapability "<argv>" (T.pack readCap)
-- Download & decode the shares -- Download & decode the shares
result <- download announcements cap announcementToStorageServer result <- download announcements cap announcementToStorageServer
-- Show the result -- Show the result
print ("Your result:" :: Data.Text.Text) putStrLn "Your result:"
print result either print (C8.putStrLn . BL.toStrict) result
newtype Announcements = Announcements (Map.Map StorageServerID StorageServerAnnouncement) newtype Announcements = Announcements (Map.Map StorageServerID StorageServerAnnouncement)
......
...@@ -90,6 +90,7 @@ library ...@@ -90,6 +90,7 @@ library
, aeson , aeson
, base ^>=4.14.3.0 , base ^>=4.14.3.0
, base32 , base32
, base64
, binary , binary
, bytestring , bytestring
, connection , connection
......
...@@ -18,14 +18,16 @@ import Control.Exception (throwIO) ...@@ -18,14 +18,16 @@ import Control.Exception (throwIO)
import Control.Monad.IO.Class (MonadIO (liftIO)) import Control.Monad.IO.Class (MonadIO (liftIO))
import Data.Binary (decodeOrFail) import Data.Binary (decodeOrFail)
import Data.ByteString.Base32 (encodeBase32Unpadded) import Data.ByteString.Base32 (encodeBase32Unpadded)
import Data.ByteString.Base64 (encodeBase64)
import qualified Data.ByteString.Lazy as LB import qualified Data.ByteString.Lazy as LB
import Data.Either (isRight, partitionEithers) import Data.Either (isRight, partitionEithers)
import Data.List (foldl') import Data.List (foldl')
import qualified Data.Map.Strict as Map import qualified Data.Map.Strict as Map
import qualified Data.Set as Set import qualified Data.Set as Set
import qualified Data.Text as T import qualified Data.Text as T
import Data.Text.Encoding (encodeUtf8)
import Network.Connection (TLSSettings (TLSSettingsSimple)) import Network.Connection (TLSSettings (TLSSettingsSimple))
import Network.HTTP.Client (Manager, ManagerSettings) import Network.HTTP.Client (Manager, ManagerSettings (managerModifyRequest), Request (requestHeaders))
import Network.HTTP.Client.TLS (mkManagerSettings, newTlsManagerWith) import Network.HTTP.Client.TLS (mkManagerSettings, newTlsManagerWith)
import Network.URI (URI (..), URIAuth (..)) import Network.URI (URI (..), URIAuth (..))
import Servant.Client (Scheme (Https), mkClientEnv, runClientM) import Servant.Client (Scheme (Https), mkClientEnv, runClientM)
...@@ -246,11 +248,19 @@ https host port = ...@@ -246,11 +248,19 @@ https host port =
} }
managerSettingsForService :: T.Text -> T.Text -> ManagerSettings managerSettingsForService :: T.Text -> T.Text -> ManagerSettings
managerSettingsForService _ _ = managerSettingsForService _ swissnum =
mkManagerSettings tlsSettings sockSettings (mkManagerSettings tlsSettings sockSettings){managerModifyRequest = pure . authorize}
where where
tlsSettings = TLSSettingsSimple True True True tlsSettings = TLSSettingsSimple True True True
sockSettings = Nothing sockSettings = Nothing
authorize req =
req
{ requestHeaders =
( "Authorization"
, encodeUtf8 $ T.concat ["Tahoe-LAFS ", encodeBase64 . encodeUtf8 $ swissnum]
) :
requestHeaders req
}
newGBSManager :: newGBSManager ::
MonadIO m => MonadIO m =>
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment