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
  forall (m :: * -> *) env a. MonadIO m => env -> RIO env a -> m a
runRIO (Token -> HerculesClientToken
HerculesClientToken forall a b. (a -> b) -> a -> b
$ ByteString -> Token
Token forall a b. (a -> b) -> a -> b
$ Text -> ByteString
encodeUtf8 Text
token, HerculesClientEnv
clientEnv) RIO (HerculesClientToken, HerculesClientEnv) b
m

runAuthenticatedOrDummy ::
  -- | Use fake credential if 'False'.
  Bool ->
  RIO (HerculesClientToken, HerculesClientEnv) b ->
  IO b
runAuthenticatedOrDummy :: forall b.
Bool -> RIO (HerculesClientToken, HerculesClientEnv) b -> IO b
runAuthenticatedOrDummy Bool
True = 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 <- forall a. a -> Maybe a -> a
fromMaybe Text
"dummy-token" forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> IO (Maybe Text)
tryReadEffectToken
  forall (m :: * -> *) env a. MonadIO m => env -> RIO env a -> m a
runRIO (Token -> HerculesClientToken
HerculesClientToken forall a b. (a -> b) -> a -> b
$ ByteString -> Token
Token forall a b. (a -> b) -> a -> b
$ Text -> ByteString
encodeUtf8 Text
token, HerculesClientEnv
clientEnv) RIO (HerculesClientToken, HerculesClientEnv) b
m