Skip to content
Snippets Groups Projects
Client.hs 1.39 KiB
Newer Older
  • Learn to ignore specific revisions
  • 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)