support code 31 for directories

This commit is contained in:
Solene Rapenne 2022-08-17 12:48:25 +02:00
parent 74803a76ca
commit 32bee65a20
1 changed files with 34 additions and 24 deletions

View File

@ -70,32 +70,42 @@ parse_to_gemini tab =
create_answer :: Gemini -> String -> String -> IO Answer
create_answer (MkGemini domain file query) language basedir = do
content <- getFile $ basedir ++ file
case content of
Just x -> return (MkAnswer
{ code = 20
, lang = language
, mime = get_mime file
, content = x
})
Nothing -> do
content' <- getFile $ basedir ++ file ++ "/index.gmi"
case content' of
Just y -> return (MkAnswer
{ code = 20
, lang = language
, mime = get_mime $ file ++ "/index.gmi"
, content = y
})
Nothing -> return (MkAnswer
{ code = 50
, lang = language
, mime = ""
, content = "error ici " ++ basedir ++ file ++ "/index.gmi"
})
content <- getFile $ basedir ++ file
case content of
Just x -> return (MkAnswer
{ code = 20
, lang = language
, mime = get_mime file
, content = x
})
Nothing -> do
content' <- getFile $ basedir ++ file ++ "index.gmi"
case content' of
Just y -> return (MkAnswer
{ code = 20
, lang = language
, mime = get_mime $ file ++ "index.gmi"
, content = y
})
Nothing -> do
isdir <- doesDirectoryExist $ basedir ++ file
if isdir
then return (MkAnswer
{ code = 31
, lang = ""
, mime = "/" ++ file ++ "/"
, content = ""
})
else return (MkAnswer
{ code = 50
, lang = language
, mime = ""
, content = "error ici " ++ basedir ++ file ++ "/index.gmi"
})
make_reply :: Answer -> String
make_reply (MkAnswer code lang content mime)
| lang /= "" = (show code) ++ " " ++ mime ++ "; lang=" ++ lang ++ " \r\n"
| lang == "" = (show code) ++ " " ++ mime ++ "; \r\n"
| code == 20 && lang == "" = (show code) ++ " " ++ mime ++ "; \r\n"
| code == 31 = "31 " ++ mime ++ "\r\n"
| otherwise = "50\r\n"