packages feed

hercules-ci-cli-0.3.1: src/Hercules/CLI/Common.hs

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 m = do
  clientEnv <- Hercules.CLI.Client.init
  token <- readToken determineDomain
  runRIO (HerculesClientToken $ Token $ encodeUtf8 token, clientEnv) m

runAuthenticatedOrDummy ::
  -- | Use fake credential if 'False'.
  Bool ->
  RIO (HerculesClientToken, HerculesClientEnv) b ->
  IO b
runAuthenticatedOrDummy True = runAuthenticated
runAuthenticatedOrDummy False = \m -> do
  clientEnv <- Hercules.CLI.Client.init
  token <- fromMaybe "dummy-token" <$> tryReadEffectToken
  runRIO (HerculesClientToken $ Token $ encodeUtf8 token, clientEnv) m