support for http(s):// urls

This commit is contained in:
blek 2023-11-05 13:50:53 +10:00 committed by blek! Git
parent 90d4e8c93f
commit ee450d237a
1 changed files with 25 additions and 0 deletions

View File

@ -2,6 +2,9 @@ package main
import ( import (
"log" "log"
"fmt"
"regexp"
"strings"
"io/ioutil" "io/ioutil"
) )
@ -28,6 +31,19 @@ type Config struct {
Resource map[string]Resource `toml:"resource"` Resource map[string]Resource `toml:"resource"`
} }
func (self Config) Validate() int {
re, err := regexp.Compile(`^(file|http(s|))://`)
if err != nil { panic(err) }
for key, res := range self.Resource {
if ! re.MatchString(res.Url) {
panic(fmt.Sprintf("Resource %s has invalid URL: %s\nOnly file://, http:// and https:// URLs are allowed", key, res.Url))
}
}
return 0
}
func main() { func main() {
var conf Config var conf Config
@ -37,6 +53,8 @@ func main() {
a, err := toml.Decode(string(data), &conf) a, err := toml.Decode(string(data), &conf)
if err != nil { panic(err) } if err != nil { panic(err) }
_ = a _ = a
conf.Validate()
app := fiber.New(fiber.Config { app := fiber.New(fiber.Config {
Prefork: true, Prefork: true,
@ -60,6 +78,12 @@ func main() {
return c.Status(fiber.StatusNotFound).SendString("Resource not found") return c.Status(fiber.StatusNotFound).SendString("Resource not found")
} }
if ! strings.HasPrefix(res.Url, "file://") {
c.Location(res.Url)
c.Status(302)
return nil
}
data, err := res.Get() data, err := res.Get()
if err != nil { if err != nil {
panic(err) panic(err)
@ -67,6 +91,7 @@ func main() {
c.Response().Header.SetContentType(res.Mime) c.Response().Header.SetContentType(res.Mime)
c.Response().Header.SetContentLength(len(data)) c.Response().Header.SetContentLength(len(data))
return c.Send(data) return c.Send(data)
}) })