module Tahoe.Download.Internal.Client where -- | Make an HTTPS URL. https :: String -> Int -> BaseUrl https host port = BaseUrl { baseUrlScheme = Https , baseUrlHost = host , baseUrlPort = port , baseUrlPath = "" } {- | Make an HTTPS manager for the given SPKI hash and swissnum. The SPKI hash is _not_ used to authenticate the server! See https://whetstone.private.storage/privatestorage/tahoe-great-black-swamp/-/issues/27 -} managerSettingsForService :: T.Text -> T.Text -> ManagerSettings managerSettingsForService _ swissnum = (mkManagerSettings tlsSettings sockSettings){managerModifyRequest = pure . authorize} where tlsSettings = TLSSettingsSimple True True True sockSettings = Nothing swissnumBytes = encodeUtf8 swissnum swissnumBase64 = Base64.encode swissnumBytes headerCompleteBytes = B.concat ["Tahoe-LAFS ", swissnumBase64] authorize req = req { requestHeaders = ( "Authorization" , headerCompleteBytes ) : requestHeaders req } -- | Make a manager suitable for use with a Great Black Swamp server. newGBSManager :: MonadIO m => [Char] -> String -> m Manager newGBSManager tubid swissnum = newTlsManagerWith $ managerSettingsForService (T.pack . init $ tubid) (T.pack swissnum)