packages feed

landlock-0.2.1.0: test/ReadmeUtils.hs

module ReadmeUtils
  ( withFakeRoot,
    -- Control.Exception.Base
    handleJust,
    -- Control.Monad
    unless,
    -- System.Directory
    removeFile,
    -- System.FilePath
    (</>),
    -- System.IO
    IOMode (..),
    hPutStrLn,
    withFile,
    writeFile,
    -- System.IO.Error
    isPermissionError,
    -- System.Process
    readProcess,
  )
where

import Control.Exception.Base (handleJust)
import Control.Monad (unless)
import System.Directory (createDirectory, removeFile)
import System.FilePath ((</>))
import System.IO (IOMode (..), hPutStrLn, withFile)
import System.IO.Error (isPermissionError)
import System.IO.Temp (withSystemTempDirectory)
import System.Process (readProcess)

withFakeRoot :: (FilePath -> IO a) -> IO a
withFakeRoot fn = withSystemTempDirectory "landlock-readme" $ \tmp -> do
  let homeDir = tmp </> "home"
      userDir = homeDir </> "user"
      sshDir = userDir </> ".ssh"
      tmpDir = tmp </> "tmp"

  mapM_
    createDirectory
    [ homeDir,
      userDir,
      sshDir,
      tmpDir
    ]

  let privateKey = sshDir </> "id_ed25519"
      publicKey = sshDir </> "id_ed25519.pub"

  writeFile privateKey "private"
  writeFile publicKey "public"

  fn tmp