import Control.Concurrent ( forkIO, newEmptyMVar, putMVar, readMVar )
import Control.Exception ( evaluate )
import Control.Monad ( liftM )
-import Data.List ( intercalate )
import Data.Time ( formatTime, getZonedTime )
import System.Console.CmdArgs.Default ( Default(..) )
import System.Exit ( ExitCode(..) )
formatted_headers =
if null (headers m)
then ""
- else (intercalate "\n" (headers m)) ++ "\n"
+ else unlines (headers m)
import qualified Data.ByteString.Lazy as B ( ByteString )
import qualified Data.ByteString.Char8 as BC ( pack )
+import Network.Connection ( TLSSettings(..) )
import Network.HTTP.Client (
+ ManagerSettings,
httpLbs,
newManager,
parseUrl,
responseBody )
-import Network.HTTP.Client.TLS ( tlsManagerSettings )
+import Network.HTTP.Client.TLS ( mkManagerSettings )
import Web.Authenticate.OAuth (
OAuth(..),
Credential,
http_get cfg uri
+-- | The default 'tlsManagerSettings' attempts to verify the
+-- certificate that we get from the server, but it's quite pointless
+-- for our purposes.
+--
+-- The default 'tlsManagerSettings' is constructed is like,
+--
+-- tlsManagerSettings = mkManagerSettings def Nothing
+--
+-- and the 'def' passes in a 'TLSSettings' from
+-- \"Network.Connection\". By constructing our own 'TLSSettings', we
+-- can disable the certificate validation.
+--
+novalidate_tls_manager_settings :: ManagerSettings
+novalidate_tls_manager_settings =
+ mkManagerSettings mytls Nothing
+ where
+ -- The first field is "disable validation"
+ mytls = TLSSettingsSimple True False False
+
+
-- | Retrieve a URL, or crash. The request is signed using all of the
-- OAuth junk contained in the configuration.
--
http_get :: Cfg -> String -> IO B.ByteString
http_get cfg url = do
- manager <- newManager tlsManagerSettings
+ manager <- newManager novalidate_tls_manager_settings
request <- parseUrl url
signed_request <- signOAuth oauth credential request
response <- httpLbs signed_request manager