hackage-security-0.2.0.0: Hackage security library

Safe HaskellNone
LanguageHaskell2010

Hackage.Security.Client.Repository.HttpLib

Contents

Description

Abstracting over HTTP libraries

Synopsis

Documentation

data HttpLib Source

Abstraction over HTTP clients

This avoids insisting on a particular implementation (such as the HTTP package) and allows for other implementations (such as a conduit based one).

NOTE: Library-specific exceptions MUST be wrapped in SomeRemoteError.

Constructors

HttpLib 

Fields

httpGet :: forall a. Throws SomeRemoteError => [HttpRequestHeader] -> URI -> ([HttpResponseHeader] -> BodyReader -> IO a) -> IO a

Download a file

httpGetRange :: forall a. Throws SomeRemoteError => [HttpRequestHeader] -> URI -> (Int, Int) -> ([HttpResponseHeader] -> BodyReader -> IO a) -> IO a

Download a byte range

Range is starting and (exclusive) end offset in bytes.

data HttpRequestHeader Source

Additional request headers

Since different libraries represent headers differently, here we just abstract over the few request headers that we might want to set

Constructors

HttpRequestMaxAge0

Set Cache-Control: max-age=0

HttpRequestNoTransform

Set Cache-Control: no-transform

HttpRequestContentCompression

Request transport compression (Accept-Encoding: gzip)

It is the responsibility of the HttpLib to do compression (and report whether the original server reply was compressed or not).

NOTE: Clients should NOT allow for compression unless explicitly requested (since decompression happens before signature verification, it is a potential security concern).

data HttpResponseHeader Source

Response headers

Since different libraries represent headers differently, here we just abstract over the few response headers that we might want to know about.

Constructors

HttpResponseAcceptRangesBytes

Server accepts byte-range requests (Accept-Ranges: bytes)

HttpResponseContentCompression

Original server response was compressed (the HttpLib however must do decompression)

data ProxyConfig a Source

Proxy configuration

Although actually setting the proxy is the purview of the initialization function for individual HttpLib implementations and therefore outside the scope of this module, we offer this ProxyConfiguration type here as a way to uniformly configure proxies across all HttpLibs.

Constructors

ProxyConfigNone

Don't use a proxy

ProxyConfigUse a

Use this specific proxy

Individual HTTP backends use their own types for specifying proxies.

ProxyConfigAuto

Use automatic proxy settings

What precisely automatic means is HttpLib specific, though typically it will involve looking at the HTTP_PROXY environment variable or the (Windows) registry.

Body reader

type BodyReader = IO ByteString Source

An IO action that represents an incoming response body coming from the server.

The action gets a single chunk of data from the response body, or an empty bytestring if no more data is available.

This definition is copied from the http-client package.

bodyReaderFromBS :: ByteString -> IO BodyReader Source

Construct a Body reader from a lazy bytestring

This is appropriate if the lazy bytestring is constructed, say, by calling hGetContents on a network socket, and the chunks of the bytestring correspond to the chunks as they are returned from the OS network layer.

If the lazy bytestring needs to be re-chunked this function is NOT suitable.