{-# LANGUAGE DuplicateRecordFields #-} {-# LANGUAGE LambdaCase #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE QuasiQuotes #-} {-# LANGUAGE RecordWildCards #-} {-# LANGUAGE ScopedTypeVariables #-} module Security.AccessTokenProvider.Internal.Providers.SimpleFixed ( probeProviderSimpleFixed ) where import Control.Exception.Safe import Control.Monad.IO.Class import Data.Format import Security.AccessTokenProvider.Internal.Types import qualified Security.AccessTokenProvider.Internal.Types.Severity as Severity -- | Access Token Provider prober for access token retrieval from the -- @TOKEN@ environment retrieval. probeProviderSimpleFixed :: (MonadIO m, MonadCatch m) => AtpProbe m probeProviderSimpleFixed = AtpProbe probeProvider probeProvider :: (MonadIO m, MonadThrow m) => Backend m -> AccessTokenName -> m (Maybe (AccessTokenProvider m t)) probeProvider backend tokenName = do let BackendLog { .. } = backendLog backend let BackendEnv { .. } = backendEnv backend logAddNamespace "probe-simple-fixed" $ do fmap AccessToken <$> envLookup "TOKEN" >>= \ case Just accessToken -> do logMsg Severity.Info [fmt|Trying access token provider 'simple-fixed'|] tryCreateProvider backend tokenName accessToken Nothing -> pure Nothing tryCreateProvider :: Monad m => Backend m -> AccessTokenName -> AccessToken t -> m (Maybe (AccessTokenProvider m t)) tryCreateProvider backend _accessTokenName accessToken = do let BackendLog { .. } = backendLog backend logMsg Severity.Info [fmt|AccessTokenProvider started|] pure . Just $ AccessTokenProvider { retrieveAccessToken = pure accessToken , releaseProvider = pure () }