From 0184dcb22f456daec5cbc2b4efb7e69f802316fc Mon Sep 17 00:00:00 2001 From: Unrud Date: Tue, 6 Feb 2024 11:26:34 +0100 Subject: [PATCH] Set MIME types explicitly Fixes #61 Fixes #70 --- webdata.go | 33 +++++++++++++++++++++++++++++++++ webdata_test.go | 42 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 75 insertions(+) create mode 100644 webdata_test.go diff --git a/webdata.go b/webdata.go index 4d07131..1b816b6 100644 --- a/webdata.go +++ b/webdata.go @@ -1,19 +1,52 @@ +/* + * Copyright (c) 2024 Unrud + * + * This file is part of Remote-Touchpad. + * + * Remote-Touchpad is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Remote-Touchpad is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Remote-Touchpad. If not, see . + */ + package main import ( "embed" "io/fs" "log" + "mime" ) //go:embed webdata/* var webdataFSWithPrefix embed.FS var webdataFS fs.FS +var webdataTypes = map[string]string{ + ".css": "text/css; charset=utf-8", + ".html": "text/html; charset=utf-8", + ".mjs": "text/javascript; charset=utf-8", + ".png": "image/png", + ".woff": "font/woff", +} + func init() { var err error webdataFS, err = fs.Sub(webdataFSWithPrefix, "webdata") if err != nil { log.Fatal(err) } + for ext, typ := range webdataTypes { + if err := mime.AddExtensionType(ext, typ); err != nil { + log.Fatal(err) + } + } } diff --git a/webdata_test.go b/webdata_test.go new file mode 100644 index 0000000..7ce8e8b --- /dev/null +++ b/webdata_test.go @@ -0,0 +1,42 @@ +/* + * Copyright (c) 2024 Unrud + * + * This file is part of Remote-Touchpad. + * + * Remote-Touchpad is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Remote-Touchpad is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Remote-Touchpad. If not, see . + */ + +package main + +import ( + "fmt" + "io/fs" + "path/filepath" + "testing" +) + +func TestWebdataTypesCompleteness(t *testing.T) { + if err := fs.WalkDir(webdataFS, ".", func(_ string, d fs.DirEntry, err error) error { + if err != nil || d.IsDir() { + return err + } + ext := filepath.Ext(d.Name()) + if _, haveType := webdataTypes[ext]; !haveType { + return fmt.Errorf("missing mime type for extension %#v", ext) + } + return nil + }); err != nil { + t.Fatal(err) + } +}