support for http(s):// urls

This commit is contained in:
blek 2023-11-05 13:50:53 +10:00
parent 264d3595b6
commit a9df435ebe
Signed by: blek
GPG Key ID: 14546221E3595D0C
1 changed files with 25 additions and 0 deletions

View File

@ -2,6 +2,9 @@ package main
import (
"log"
"fmt"
"regexp"
"strings"
"io/ioutil"
)
@ -28,6 +31,19 @@ type Config struct {
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() {
var conf Config
@ -38,6 +54,8 @@ func main() {
if err != nil { panic(err) }
_ = a
conf.Validate()
app := fiber.New(fiber.Config {
Prefork: true,
CaseSensitive: false,
@ -60,6 +78,12 @@ func main() {
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()
if err != nil {
panic(err)
@ -67,6 +91,7 @@ func main() {
c.Response().Header.SetContentType(res.Mime)
c.Response().Header.SetContentLength(len(data))
return c.Send(data)
})