diff --git a/Gemini.hs b/Gemini.hs index c9489c5..9f455b5 100644 --- a/Gemini.hs +++ b/Gemini.hs @@ -62,6 +62,8 @@ parse_to_gemini tab = , mime = get_mime (tab!!0!!3) } -get_reply :: String -> Int -> String -get_reply mime 20 = - "20 " ++ mime ++ "; \r\n" +get_reply :: String -> Int -> String -> String +get_reply mime return lang + | lang /= "" = "20 " ++ mime ++ "; lang=" ++ lang ++ " \r\n" + | lang == "" = "20 " ++ mime ++ "; \r\n" + | otherwise = "50\r\n" diff --git a/Vger.hs b/Vger.hs index c16b193..efce4f2 100644 --- a/Vger.hs +++ b/Vger.hs @@ -1,9 +1,33 @@ import Gemini +import Options.Applicative + +data Sample = Sample + { baseDir :: String + , language :: String + } + +sample :: Parser Sample +sample = Sample + <$> strOption + ( long "baseDir" + <> short 'd' + <> help "base directory to serve files from" + <> value "/var/gemini/") + <*> strOption + ( long "language" + <> short 'l' + <> help "language to use in the response for gemini files" + <> value "") + +opts :: ParserInfo Sample +opts = info (sample <**> helper) + ( fullDesc) main :: IO () main = do + options <- execParser opts url <- get_request let request = parse_to_gemini (parse_url url) - content <- read_file (file request) - putStr (get_reply (mime request) 20) + content <- read_file pathname + putStr (get_reply (mime request) 20 (language options)) putStr content diff --git a/shell.nix b/shell.nix index 3608a63..fd98f71 100644 --- a/shell.nix +++ b/shell.nix @@ -16,6 +16,7 @@ mkShell { haskellPackages.mime-types haskellPackages.HUnit haskellPackages.utf8-string + haskellPackages.optparse-applicative ] )) ];