]> gitweb.michael.orlitzky.com - dead/halcyon.git/blobdiff - src/Twitter/Http.hs
Disable TLS certificate verification to make it more worky.
[dead/halcyon.git] / src / Twitter / Http.hs
index e3bb9fcc96ea3b90c2077b977a06d6cadb904063..6862ffc0f8f23b3d7485c2f82ea86da4ff21bf81 100644 (file)
@@ -6,12 +6,14 @@ where
 
 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,
@@ -21,6 +23,7 @@ import Web.Authenticate.OAuth (
 
 import Configuration ( Cfg(..) )
 
+
 -- | The API URL of username's timeline.
 --
 -- See,
@@ -41,7 +44,13 @@ user_timeline_url username =
 
 -- | Given username's last status id, constructs the API URL for
 --   username's new statuses. Essentially, 'user_timeline_url' with a
---   "since_id" parameter tacked on.
+--   \"since_id\" parameter tacked on.
+--
+--   Examples:
+--
+--   >>> user_new_statuses_url "someuser" 8675309
+--   "https://api.twitter.com/1.1/statuses/user_timeline.json?screen_name=someuser&include_rts=true&count=10&since_id=8675309"
+--
 user_new_statuses_url :: String -> Integer -> String
 user_new_statuses_url username last_status_id =
   url ++ "&since_id=" ++ since_id
@@ -51,6 +60,7 @@ user_new_statuses_url username last_status_id =
 
 
 -- | Return's username's timeline.
+--
 get_user_timeline :: Cfg -> String -> IO B.ByteString
 get_user_timeline cfg username = do
   let uri = user_timeline_url username
@@ -58,17 +68,40 @@ get_user_timeline cfg username = do
 
 
 -- | Returns the JSON representing all of username's statuses that are
---   newer than last_status_id.
+--   newer than @last_status_id@.
+--
 get_user_new_statuses :: Cfg -> String -> Integer -> IO B.ByteString
 get_user_new_statuses cfg username last_status_id = do
   let uri = user_new_statuses_url username last_status_id
   http_get cfg uri
 
 
--- | Retrieve a URL, or crash.
+-- | 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
@@ -83,8 +116,7 @@ http_get cfg url = do
     oauth :: OAuth
     oauth = newOAuth {
               oauthConsumerKey = consumer_key',
-              oauthConsumerSecret = consumer_secret'
-            }
+              oauthConsumerSecret = consumer_secret' }
 
     credential :: Credential
     credential = newCredential access_token' access_secret'