1- {-# LANGUAGE DeriveDataTypeable #-}
21{-# LANGUAGE FlexibleContexts #-}
32{-# LANGUAGE FlexibleInstances #-}
43{-# LANGUAGE OverloadedStrings #-}
@@ -15,12 +14,12 @@ module Stack.Upload
1514 ) where
1615
1716import Control.Applicative
18- import Control.Exception.Safe (bracket , handleIO )
17+ import Control.Exception.Safe (bracket , handleIO , tryIO )
1918import qualified Control.Exception as E
20- import Control.Monad (void , when )
19+ import Control.Monad (void , when , unless )
2120import Data.Aeson (FromJSON (.. ),
2221 ToJSON (.. ),
23- eitherDecode ' , encode ,
22+ decode ' , encode ,
2423 object , withObject ,
2524 (.:) , (.=) )
2625import qualified Data.ByteString.Char8 as S
@@ -31,7 +30,6 @@ import Data.Text (Text)
3130import qualified Data.Text as T
3231import Data.Text.Encoding (encodeUtf8 )
3332import qualified Data.Text.IO as TIO
34- import Data.Typeable (Typeable )
3533import Network.HTTP.Client (Response ,
3634 RequestBody (RequestBodyLBS ),
3735 Request )
@@ -86,18 +84,16 @@ instance FromJSON (FilePath -> HackageCreds) where
8684loadCreds :: Config -> IO HackageCreds
8785loadCreds config = do
8886 fp <- credsFile config
89- fromFile fp `E.catches`
90- [ E. Handler $ \ (_ :: E. IOException ) -> fromPrompt fp
91- , E. Handler $ \ (_ :: HackageCredsExceptions ) -> fromPrompt fp
92- ]
87+ elbs <- tryIO $ L. readFile fp
88+ case either (const Nothing ) Just elbs >>= decode' of
89+ Nothing -> fromPrompt fp
90+ Just mkCreds -> do
91+ unless (configSaveHackageCreds config) $ do
92+ putStrLn " WARNING: You've set save-hackage-creds to false"
93+ putStrLn " However, credentials were found at:"
94+ putStrLn $ " " ++ fp
95+ return $ mkCreds fp
9396 where
94- fromFile fp = do
95- lbs <- L. readFile fp
96- either
97- (E. throwIO . Couldn'tParseJSON fp)
98- (return . ($ fp))
99- (eitherDecode' lbs)
100-
10197 fromPrompt fp = do
10298 when (configSaveHackageCreds config) $ do
10399 putStrLn " NOTE: Username and password will be saved in a local file"
@@ -120,10 +116,6 @@ credsFile config = do
120116 createDirectoryIfMissing True dir
121117 return $ dir </> " credentials.json"
122118
123- data HackageCredsExceptions = Couldn'tParseJSON FilePath String
124- deriving (Show , Typeable )
125- instance E. Exception HackageCredsExceptions
126-
127119-- | Lifted from cabal-install, Distribution.Client.Upload
128120promptPassword :: IO Text
129121promptPassword = do
0 commit comments