{-# 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
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 ()
}