packages feed

servant-benchmark-0.1.0.0: src/Servant/Benchmark/BasicAuth.hs

{-# LANGUAGE OverloadedStrings #-}

module Servant.Benchmark.BasicAuth where

import Data.ByteString.Base64 (encode)
import Data.ByteString.Char8 as BS8
import Network.HTTP.Types (Header, hAuthorization)
import Servant.API (BasicAuthData (..))
import Test.QuickCheck (Gen)
import Test.QuickCheck.Gen (generate)

{- | Given a function (a -> BasicAuthData), produce an authorization header from a
 random value of `a`
-}
encodeBasicAuth :: (a -> BasicAuthData) -> Gen a -> IO Header
encodeBasicAuth f gen = do
    basicAuthData <- f <$> generate gen
    let bs64 = BS8.pack "Basic " <> encode (basicAuthUsername basicAuthData <> BS8.singleton ':' <> basicAuthPassword basicAuthData)
    pure (hAuthorization, bs64)