mirror of
https://github.com/openziti/zrok.git
synced 2025-08-16 10:57:55 +02:00
early progress on embedded Caddy for --backend-mode web (#392)
This commit is contained in:
69
endpoints/proxy/caddyWebBackend.go
Normal file
69
endpoints/proxy/caddyWebBackend.go
Normal file
@ -0,0 +1,69 @@
|
||||
package proxy
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"github.com/caddyserver/caddy/v2"
|
||||
"github.com/caddyserver/caddy/v2/caddyconfig"
|
||||
"github.com/caddyserver/caddy/v2/modules/caddyhttp"
|
||||
"github.com/caddyserver/caddy/v2/modules/caddyhttp/fileserver"
|
||||
"github.com/openziti/zrok/endpoints"
|
||||
"time"
|
||||
)
|
||||
|
||||
type CaddyWebBackendConfig struct {
|
||||
IdentityPath string
|
||||
WebRoot string
|
||||
ShrToken string
|
||||
Requests chan *endpoints.Request
|
||||
}
|
||||
|
||||
type CaddyWebBackend struct {
|
||||
cfg *CaddyWebBackendConfig
|
||||
caddyCfg *caddy.Config
|
||||
}
|
||||
|
||||
func NewCaddyWebBackend(cfg *CaddyWebBackendConfig) (*CaddyWebBackend, error) {
|
||||
handler := fileserver.FileServer{Root: cfg.WebRoot}
|
||||
handler.Browse = new(fileserver.Browse)
|
||||
|
||||
var handlers []json.RawMessage
|
||||
handlers = append(handlers, caddyconfig.JSONModuleObject(handler, "handler", "file_server", nil))
|
||||
|
||||
route := caddyhttp.Route{HandlersRaw: handlers}
|
||||
|
||||
server := &caddyhttp.Server{
|
||||
ReadHeaderTimeout: caddy.Duration(10 * time.Second),
|
||||
IdleTimeout: caddy.Duration(30 * time.Second),
|
||||
MaxHeaderBytes: 1024 * 10,
|
||||
Routes: caddyhttp.RouteList{route},
|
||||
}
|
||||
server.Listen = []string{fmt.Sprintf("zrok/%s", cfg.ShrToken)}
|
||||
|
||||
httpApp := caddyhttp.App{
|
||||
Servers: map[string]*caddyhttp.Server{"static": server},
|
||||
}
|
||||
|
||||
var false bool
|
||||
caddyCfg := &caddy.Config{
|
||||
Admin: &caddy.AdminConfig{
|
||||
Disabled: true,
|
||||
Config: &caddy.ConfigSettings{
|
||||
Persist: &false,
|
||||
},
|
||||
},
|
||||
AppsRaw: caddy.ModuleMap{
|
||||
"http": caddyconfig.JSON(httpApp, nil),
|
||||
},
|
||||
}
|
||||
|
||||
return &CaddyWebBackend{cfg: cfg, caddyCfg: caddyCfg}, nil
|
||||
}
|
||||
|
||||
func (c *CaddyWebBackend) Run() error {
|
||||
return caddy.Run(c.caddyCfg)
|
||||
}
|
||||
|
||||
func (c *CaddyWebBackend) Requests() func() int32 {
|
||||
return func() int32 { return 0 }
|
||||
}
|
Reference in New Issue
Block a user