From 797e363beaa382754e57bf28cdc48b16a1b56993 Mon Sep 17 00:00:00 2001 From: nisstyre56 Date: Sat, 27 Jun 2015 17:53:19 -0400 Subject: [PATCH] Made it automagically refresh the token so that the user does not have to authenticate the application via OAuth more than once! --- Main.hs | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/Main.hs b/Main.hs index d8881b8..1752926 100644 --- a/Main.hs +++ b/Main.hs @@ -6,11 +6,12 @@ import System.Directory (doesFileExist) import Network.Google.OAuth2 (formUrl, exchangeCode, refreshTokens, OAuth2Client(..), OAuth2Tokens(..)) import Network.Google (makeRequest, doRequest) -import Network.HTTP.Conduit (simpleHttp) +import Network.HTTP.Conduit (simpleHttp, HttpException) import Data.Aeson import qualified Data.ByteString.Lazy.Char8 as BL import qualified Data.Text as T import qualified Data.Map as M +import Control.Exception data URL = URL { jurl :: T.Text } deriving (Show, Eq) @@ -108,15 +109,22 @@ main = do authcode <- getLine tokens <- exchangeCode client authcode putStrLn $ "Received access token: " ++ show (accessToken tokens) - tokens2 <- refreshTokens client tokens - putStrLn $ "As a test, refreshed token: " ++ show (accessToken tokens2) - writeFile file (show tokens2) + writeFile file (show tokens) accessTok <- fmap (accessToken . read) (readFile file) - findTracks accessTok "Foo+Fighters" - -findTracks accessTok term = do - response <- simpleHttp $ searchRequest term accessTok - return $ getItems response + tracks <- findTracks client accessTok "Foo+Fighters" + print tracks + +getNewTokens :: OAuth2Client -> IO () +getNewTokens client = do + tokens <- read <$> readFile file + newTokens <- refreshTokens client tokens + writeFile file (show newTokens) + +findTracks client accessTok term = do + response <- (try $ simpleHttp $ searchRequest term accessTok) :: IO (Either HttpException BL.ByteString) + case response of + (Left _) -> getNewTokens client >> findTracks client accessTok term + (Right resp) -> return $ getItems resp search :: String -> [T.Text] search term = undefined