{- This file is part of Vervis. - - Written in 2019 by fr33domlover . - - ♡ Copying is an act of love. Please copy, reuse and share. - - The author(s) have dedicated all copyright and related and neighboring - rights to this software to the public domain worldwide. This software is - distributed without any warranty. - - You should have received a copy of the CC0 Public Domain Dedication along - with this software. If not, see - . -} module Data.KeyFile ( KeyFile (..) , loadKeyFile ) where import Prelude import Data.ByteString (ByteString) import System.Directory (doesFileExist) import qualified Data.ByteString as B (readFile, writeFile) class KeyFile a where generateKey :: IO a parseKey :: ByteString -> IO a renderKey :: a -> ByteString loadKeyFile :: KeyFile a => Bool -> FilePath -> IO a loadKeyFile setup path = do e <- doesFileExist path if e then if setup then fail $ "loadKeyFile: Initial setup but file already exists: " ++ path else parseKey =<< B.readFile path else if setup then do k <- generateKey B.writeFile path $ renderKey k return k else fail $ "loadKeyFile: File not found: " ++ path