Browse Source

Made it automagically refresh the token so that the user does not have

to authenticate the application via OAuth more than once!
master
nisstyre56 9 years ago
parent
commit
797e363bea
  1. 26
      Main.hs

26
Main.hs

@ -6,11 +6,12 @@ import System.Directory (doesFileExist)
import Network.Google.OAuth2 (formUrl, exchangeCode, refreshTokens, import Network.Google.OAuth2 (formUrl, exchangeCode, refreshTokens,
OAuth2Client(..), OAuth2Tokens(..)) OAuth2Client(..), OAuth2Tokens(..))
import Network.Google (makeRequest, doRequest) import Network.Google (makeRequest, doRequest)
import Network.HTTP.Conduit (simpleHttp) import Network.HTTP.Conduit (simpleHttp, HttpException)
import Data.Aeson import Data.Aeson
import qualified Data.ByteString.Lazy.Char8 as BL import qualified Data.ByteString.Lazy.Char8 as BL
import qualified Data.Text as T import qualified Data.Text as T
import qualified Data.Map as M import qualified Data.Map as M
import Control.Exception
data URL = URL { jurl :: T.Text } data URL = URL { jurl :: T.Text }
deriving (Show, Eq) deriving (Show, Eq)
@ -108,15 +109,22 @@ main = do
authcode <- getLine authcode <- getLine
tokens <- exchangeCode client authcode tokens <- exchangeCode client authcode
putStrLn $ "Received access token: " ++ show (accessToken tokens) putStrLn $ "Received access token: " ++ show (accessToken tokens)
tokens2 <- refreshTokens client tokens writeFile file (show tokens)
putStrLn $ "As a test, refreshed token: " ++ show (accessToken tokens2)
writeFile file (show tokens2)
accessTok <- fmap (accessToken . read) (readFile file) accessTok <- fmap (accessToken . read) (readFile file)
findTracks accessTok "Foo+Fighters" tracks <- findTracks client accessTok "Foo+Fighters"
print tracks
findTracks accessTok term = do
response <- simpleHttp $ searchRequest term accessTok getNewTokens :: OAuth2Client -> IO ()
return $ getItems response 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 :: String -> [T.Text]
search term = undefined search term = undefined