Add resource service #19
|
@ -0,0 +1,4 @@
|
||||||
|
resourced.toml
|
||||||
|
resourced
|
||||||
|
.DS_Store
|
||||||
|
.env
|
|
@ -0,0 +1,15 @@
|
||||||
|
# resourceD
|
||||||
|
A simple microservice for serving resources
|
||||||
|
|
||||||
|
## Building
|
||||||
|
```sh
|
||||||
|
go build .
|
||||||
|
```
|
||||||
|
|
||||||
|
## Running
|
||||||
|
Either run it the normal way via the provided docker compose file, or `go run .`.
|
||||||
|
|
||||||
|
Also dont forget to create `resourced.toml`
|
||||||
|
|
||||||
|
## Configuration
|
||||||
|
The file `resourced.toml.example` serves as a both an example and reference, since it has a lot of comments.
|
|
@ -0,0 +1,19 @@
|
||||||
|
module blek/resourced
|
||||||
|
|
||||||
|
go 1.21.3
|
||||||
|
|
||||||
|
require (
|
||||||
|
github.com/BurntSushi/toml v1.3.2 // indirect
|
||||||
|
github.com/andybalholm/brotli v1.0.5 // indirect
|
||||||
|
github.com/gofiber/fiber/v2 v2.50.0 // indirect
|
||||||
|
github.com/google/uuid v1.3.1 // indirect
|
||||||
|
github.com/klauspost/compress v1.16.7 // indirect
|
||||||
|
github.com/mattn/go-colorable v0.1.13 // indirect
|
||||||
|
github.com/mattn/go-isatty v0.0.19 // indirect
|
||||||
|
github.com/mattn/go-runewidth v0.0.15 // indirect
|
||||||
|
github.com/rivo/uniseg v0.2.0 // indirect
|
||||||
|
github.com/valyala/bytebufferpool v1.0.0 // indirect
|
||||||
|
github.com/valyala/fasthttp v1.50.0 // indirect
|
||||||
|
github.com/valyala/tcplisten v1.0.0 // indirect
|
||||||
|
golang.org/x/sys v0.13.0 // indirect
|
||||||
|
)
|
|
@ -0,0 +1,29 @@
|
||||||
|
github.com/BurntSushi/toml v1.3.2 h1:o7IhLm0Msx3BaB+n3Ag7L8EVlByGnpq14C4YWiu/gL8=
|
||||||
|
github.com/BurntSushi/toml v1.3.2/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ=
|
||||||
|
github.com/andybalholm/brotli v1.0.5 h1:8uQZIdzKmjc/iuPu7O2ioW48L81FgatrcpfFmiq/cCs=
|
||||||
|
github.com/andybalholm/brotli v1.0.5/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig=
|
||||||
|
github.com/gofiber/fiber/v2 v2.50.0 h1:ia0JaB+uw3GpNSCR5nvC5dsaxXjRU5OEu36aytx+zGw=
|
||||||
|
github.com/gofiber/fiber/v2 v2.50.0/go.mod h1:21eytvay9Is7S6z+OgPi7c7n4++tnClWmhpimVHMimw=
|
||||||
|
github.com/google/uuid v1.3.1 h1:KjJaJ9iWZ3jOFZIf1Lqf4laDRCasjl0BCmnEGxkdLb4=
|
||||||
|
github.com/google/uuid v1.3.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
||||||
|
github.com/klauspost/compress v1.16.7 h1:2mk3MPGNzKyxErAw8YaohYh69+pa4sIQSC0fPGCFR9I=
|
||||||
|
github.com/klauspost/compress v1.16.7/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE=
|
||||||
|
github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA=
|
||||||
|
github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg=
|
||||||
|
github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
|
||||||
|
github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA=
|
||||||
|
github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
|
||||||
|
github.com/mattn/go-runewidth v0.0.15 h1:UNAjwbU9l54TA3KzvqLGxwWjHmMgBUVhBiTjelZgg3U=
|
||||||
|
github.com/mattn/go-runewidth v0.0.15/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w=
|
||||||
|
github.com/rivo/uniseg v0.2.0 h1:S1pD9weZBuJdFmowNwbpi7BJ8TNftyUImj/0WQi72jY=
|
||||||
|
github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
|
||||||
|
github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw=
|
||||||
|
github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc=
|
||||||
|
github.com/valyala/fasthttp v1.50.0 h1:H7fweIlBm0rXLs2q0XbalvJ6r0CUPFWK3/bB4N13e9M=
|
||||||
|
github.com/valyala/fasthttp v1.50.0/go.mod h1:k2zXd82h/7UZc3VOdJ2WaUqt1uZ/XpXAfE9i+HBC3lA=
|
||||||
|
github.com/valyala/tcplisten v1.0.0 h1:rBHj/Xf+E1tRGZyWIWwJDiRY0zc1Js+CV5DqwacVSA8=
|
||||||
|
github.com/valyala/tcplisten v1.0.0/go.mod h1:T0xQ8SeCZGxckz9qRXTfG43PvQ/mcWh7FwZEA7Ioqkc=
|
||||||
|
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
|
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
|
golang.org/x/sys v0.13.0 h1:Af8nKPmuFypiUBjVoU9V20FiaFXOcuZI21p0ycVYYGE=
|
||||||
|
golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
|
@ -0,0 +1,56 @@
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"log"
|
||||||
|
"io/ioutil"
|
||||||
|
)
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/BurntSushi/toml"
|
||||||
|
"github.com/gofiber/fiber/v2"
|
||||||
|
)
|
||||||
|
|
||||||
|
type Resource struct {
|
||||||
|
Url string `toml:"url"`
|
||||||
|
Mime string `toml:"mime"`
|
||||||
|
}
|
||||||
|
|
||||||
|
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()
|
||||||
|
|
||||||
|
app.Get("/:id", func (c *fiber.Ctx) error {
|
||||||
|
|
||||||
|
if ! conf.ResourceD.Enabled {
|
||||||
|
return c.Status(fiber.StatusNotFound).SendString("Resource not found")
|
||||||
|
}
|
||||||
|
|
||||||
|
res, exists := conf.Resource[c.Params("id")]
|
||||||
|
if ! exists {
|
||||||
|
return c.Status(fiber.StatusNotFound).SendString("Resource not found")
|
||||||
|
}
|
||||||
|
|
||||||
|
return c.SendString(fmt.Sprintf("Id: %s\nUrl: %s\nType: %s", c.Params("id"), res.Url, res.Mime))
|
||||||
|
})
|
||||||
|
|
||||||
|
log.Fatal(app.Listen(conf.ResourceD.ListenURL))
|
||||||
|
}
|
|
@ -0,0 +1,31 @@
|
||||||
|
|
||||||
|
# The resourceD config
|
||||||
|
[ResourceD]
|
||||||
|
|
||||||
|
# Whether to enable the resourceD.
|
||||||
|
# If this is false, resourceD will start but respond to
|
||||||
|
# all requests with 404
|
||||||
|
# It is false by default because resourceD is not required in a default installation.
|
||||||
|
Enabled=true
|
||||||
|
|
||||||
|
# URL to listen on
|
||||||
|
ListenUrl="0.0.0.0:80"
|
||||||
|
|
||||||
|
# Resource ID must be like a java package name
|
||||||
|
# At least one X.X. is required
|
||||||
|
#
|
||||||
|
# Examples:
|
||||||
|
# org.university.logo
|
||||||
|
# dev.indie_guy.logo
|
||||||
|
# com.pany.logo
|
||||||
|
# Test your names here: https://regex101.com/r/wQdOup/2
|
||||||
|
#
|
||||||
|
[Resource."com.example.logo"]
|
||||||
|
# Can also be an external link
|
||||||
|
# If an external link is specified,
|
||||||
|
# the resource will be returned as a 302 redirect to the link
|
||||||
|
Url="file:///some/where"
|
||||||
|
|
||||||
|
# File type, as according to this:
|
||||||
|
# https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Common_types
|
||||||
|
mime="image/jpg"
|
Loading…
Reference in New Issue