From 92f356e09f90a9009c512cfb638e21cfe8cc50f6 Mon Sep 17 00:00:00 2001 From: Solene Rapenne Date: Fri, 19 Aug 2022 15:04:41 +0200 Subject: [PATCH] improve gemini protocol cases --- src/Gemini.hs | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/src/Gemini.hs b/src/Gemini.hs index 51ffcf0..0b261fc 100644 --- a/src/Gemini.hs +++ b/src/Gemini.hs @@ -8,13 +8,16 @@ import System.Directory (doesDirectoryExist, doesFileExist) import Text.Regex import Text.Regex.PCRE - getFile :: FilePath -> IO (Maybe String) getFile s = do - result <- try (readFile s) :: IO (Either SomeException String) - case result of - Left ex -> return Nothing - Right ex -> return (pure ex) + exists <- doesFileExist s + case exists of + True -> do + result <- try (readFile s) :: IO (Either SomeException String) + case result of + Left ex -> return Nothing + Right ex -> return (Just ex) + False -> return Nothing -- return components of the url -- gemini:// | hostname | uri | ? | query @@ -66,9 +69,14 @@ parse_to_gemini tab = query = tab !! 0 !! 5 } -create_answer :: Gemini -> String -> String -> IO Answer -create_answer (MkGemini domain file query) language basedir = do - content <- getFile $ basedir ++ file +create_answer :: Gemini -> String -> String -> Bool -> IO Answer +create_answer (MkGemini domain file query) language baseDir vhost = do + let baseDir' = + if vhost + then domain ++ "/" ++ baseDir + else baseDir + + content <- getFile $ baseDir' ++ file case content of Just x -> return