From a41898b012ea0f6ab2800c653fb9408b66d5f5e4 Mon Sep 17 00:00:00 2001 From: Solderpunk Date: Sun, 29 Jan 2023 12:07:52 +0100 Subject: [PATCH] Add DefaultEncoding option to config/.molly files. Closes #19. --- README.md | 3 +++ config.go | 5 +++++ handler.go | 6 +++++- 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 75cd32e..3f29f79 100644 --- a/README.md +++ b/README.md @@ -229,6 +229,8 @@ examples of the appropriate syntax. will be used instead of one inferred from the filename extension. * `DefaultLang`: If this option is set, it will be served as the `lang` parameter of the MIME type for all `text/gemini` content. +* `DefaultEncoding`: If this option is set, it will be served as the + `charset` parameter of the MIME type for all `text/gemini` content. ### Directory listings @@ -369,6 +371,7 @@ other settings in `.molly` files will be ignored: * `CertificateZones` * `DefaultLang` +* `DefaultEncoding` * `DirectorySort` * `DirectoryReverse` * `DirectoryTitles` diff --git a/config.go b/config.go index 48b2aee..cdc7a17 100644 --- a/config.go +++ b/config.go @@ -18,6 +18,7 @@ type Config struct { HomeDocBase string GeminiExt string DefaultLang string + DefaultEncoding string AccessLog string ErrorLog string ReadMollyFiles bool @@ -39,6 +40,7 @@ type MollyFile struct { MimeOverrides map[string]string CertificateZones map[string][]string DefaultLang string + DefaultEncoding string DirectorySort string DirectoryReverse bool DirectoryTitles bool @@ -57,6 +59,7 @@ func getConfig(filename string) (Config, error) { config.HomeDocBase = "users" config.GeminiExt = "gmi" config.DefaultLang = "" + config.DefaultEncoding = "" config.AccessLog = "access.log" config.ErrorLog = "error.log" config.TempRedirects = make(map[string]string) @@ -139,6 +142,7 @@ func parseMollyFiles(path string, config *Config, errorLog *log.Logger) { var mollyFile MollyFile mollyFile.GeminiExt = config.GeminiExt mollyFile.DefaultLang = config.DefaultLang + mollyFile.DefaultEncoding = config.DefaultEncoding mollyFile.DirectorySort = config.DirectorySort mollyFile.DirectoryReverse = config.DirectoryReverse mollyFile.DirectoryTitles = config.DirectoryTitles @@ -176,6 +180,7 @@ func parseMollyFiles(path string, config *Config, errorLog *log.Logger) { // Overwrite main Config using MollyFile config.GeminiExt = mollyFile.GeminiExt config.DefaultLang = mollyFile.DefaultLang + config.DefaultEncoding = mollyFile.DefaultEncoding config.DirectorySort = mollyFile.DirectorySort config.DirectoryReverse = mollyFile.DirectoryReverse config.DirectoryTitles = mollyFile.DirectoryTitles diff --git a/handler.go b/handler.go index defea21..40e1c65 100644 --- a/handler.go +++ b/handler.go @@ -254,8 +254,12 @@ func serveFile(path string, log *LogEntry, conn net.Conn, config Config, errorLo if mimeType == "" { mimeType = "application/octet-stream" } + // Add charset parameter + if strings.HasPrefix(mimeType,"text/gemini") && config.DefaultEncoding != "" { + mimeType += "; charset=" + config.DefaultEncoding + } // Add lang parameter - if mimeType == "text/gemini" && config.DefaultLang != "" { + if strings.HasPrefix(mimeType,"text/gemini") && config.DefaultLang != "" { mimeType += "; lang=" + config.DefaultLang }