{-# LANGUAGE TypeApplications #-}

module Yesod.Auth.OAuth2.Random
  ( randomText
  ) where

import Crypto.Random (MonadRandom, getRandomBytes)
import Data.ByteArray.Encoding (Base (Base64), convertToBase)
import Data.ByteString (ByteString)
import Data.Text (Text)
import Data.Text.Encoding (decodeUtf8)

randomText
  :: MonadRandom m
  => Int
  -- ^ Size in Bytes (not necessarily characters)
  -> m Text
randomText :: forall (m :: * -> *). MonadRandom m => Int -> m Text
randomText Int
size =
  ByteString -> Text
decodeUtf8 forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall bin bout.
(ByteArrayAccess bin, ByteArray bout) =>
Base -> bin -> bout
convertToBase @ByteString Base
Base64 forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> forall (m :: * -> *) byteArray.
(MonadRandom m, ByteArray byteArray) =>
Int -> m byteArray
getRandomBytes Int
size