74 lines
1.4 KiB
Go
74 lines
1.4 KiB
Go
package main
|
|
|
|
import (
|
|
"log"
|
|
"io/ioutil"
|
|
)
|
|
|
|
import (
|
|
"github.com/BurntSushi/toml"
|
|
"github.com/gofiber/fiber/v2"
|
|
)
|
|
|
|
type Resource struct {
|
|
Url string `toml:"url"`
|
|
Mime string `toml:"mime"`
|
|
}
|
|
func (self Resource) Get() ([]byte, error) {
|
|
return ioutil.ReadFile(self.Url[7:])
|
|
}
|
|
|
|
type ResourceDConfig struct {
|
|
Enabled bool `toml:"enabled"`
|
|
ListenURL string `toml:"listen_url"`
|
|
}
|
|
|
|
type Config struct {
|
|
ResourceD ResourceDConfig `toml:"resourceD"`
|
|
Resource map[string]Resource `toml:"resource"`
|
|
}
|
|
|
|
func main() {
|
|
var conf Config
|
|
|
|
data, err := ioutil.ReadFile("resourced.toml")
|
|
if err != nil { panic(err) }
|
|
|
|
a, err := toml.Decode(string(data), &conf)
|
|
if err != nil { panic(err) }
|
|
_ = a
|
|
|
|
app := fiber.New(fiber.Config {
|
|
Prefork: true,
|
|
CaseSensitive: false,
|
|
StrictRouting: true,
|
|
ServerHeader: "",
|
|
AppName: "blek! File resourceD",
|
|
})
|
|
|
|
app.Use(func (c *fiber.Ctx) error {
|
|
if ! conf.ResourceD.Enabled {
|
|
return c.Status(fiber.StatusNotFound).SendString("ResourceD is disabled")
|
|
}
|
|
return c.Next()
|
|
})
|
|
|
|
app.Get("/:id", func (c *fiber.Ctx) error {
|
|
|
|
res, exists := conf.Resource[c.Params("id")]
|
|
if ! exists {
|
|
return c.Status(fiber.StatusNotFound).SendString("Resource not found")
|
|
}
|
|
|
|
data, err := res.Get()
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
c.Response().Header.SetContentType(res.Mime)
|
|
c.Response().Header.SetContentLength(len(data))
|
|
return c.Send(data)
|
|
})
|
|
|
|
log.Fatal(app.Listen(conf.ResourceD.ListenURL))
|
|
} |