module Hercules.CLI.Common
( runAuthenticated,
runAuthenticatedOrDummy,
exitMsg,
)
where
import Hercules.CLI.Client
import Hercules.CLI.Credentials (determineDomain, readToken, tryReadEffectToken)
import Hercules.CLI.Exception (exitMsg)
import Protolude
import RIO (RIO, runRIO)
import Servant.Auth.Client (Token (Token))
runAuthenticated :: RIO (HerculesClientToken, HerculesClientEnv) b -> IO b
runAuthenticated :: forall b. RIO (HerculesClientToken, HerculesClientEnv) b -> IO b
runAuthenticated RIO (HerculesClientToken, HerculesClientEnv) b
m = do
HerculesClientEnv
clientEnv <- IO HerculesClientEnv
Hercules.CLI.Client.init
Text
token <- IO Text -> IO Text
readToken IO Text
determineDomain
(HerculesClientToken, HerculesClientEnv)
-> RIO (HerculesClientToken, HerculesClientEnv) b -> IO b
forall (m :: * -> *) env a. MonadIO m => env -> RIO env a -> m a
runRIO (Token -> HerculesClientToken
HerculesClientToken (Token -> HerculesClientToken) -> Token -> HerculesClientToken
forall a b. (a -> b) -> a -> b
$ ByteString -> Token
Token (ByteString -> Token) -> ByteString -> Token
forall a b. (a -> b) -> a -> b
$ Text -> ByteString
encodeUtf8 Text
token, HerculesClientEnv
clientEnv) RIO (HerculesClientToken, HerculesClientEnv) b
m
runAuthenticatedOrDummy ::
Bool ->
RIO (HerculesClientToken, HerculesClientEnv) b ->
IO b
runAuthenticatedOrDummy :: forall b.
Bool -> RIO (HerculesClientToken, HerculesClientEnv) b -> IO b
runAuthenticatedOrDummy Bool
True = RIO (HerculesClientToken, HerculesClientEnv) b -> IO b
forall b. RIO (HerculesClientToken, HerculesClientEnv) b -> IO b
runAuthenticated
runAuthenticatedOrDummy Bool
False = \RIO (HerculesClientToken, HerculesClientEnv) b
m -> do
HerculesClientEnv
clientEnv <- IO HerculesClientEnv
Hercules.CLI.Client.init
Text
token <- Text -> Maybe Text -> Text
forall a. a -> Maybe a -> a
fromMaybe Text
"dummy-token" (Maybe Text -> Text) -> IO (Maybe Text) -> IO Text
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> IO (Maybe Text)
tryReadEffectToken
(HerculesClientToken, HerculesClientEnv)
-> RIO (HerculesClientToken, HerculesClientEnv) b -> IO b
forall (m :: * -> *) env a. MonadIO m => env -> RIO env a -> m a
runRIO (Token -> HerculesClientToken
HerculesClientToken (Token -> HerculesClientToken) -> Token -> HerculesClientToken
forall a b. (a -> b) -> a -> b
$ ByteString -> Token
Token (ByteString -> Token) -> ByteString -> Token
forall a b. (a -> b) -> a -> b
$ Text -> ByteString
encodeUtf8 Text
token, HerculesClientEnv
clientEnv) RIO (HerculesClientToken, HerculesClientEnv) b
m