github.com/imgk/caddy-trojan@v0.0.0-20221206043256-2631719e16c8/app/app.go (about) 1 package app 2 3 import ( 4 "encoding/json" 5 6 "github.com/caddyserver/caddy/v2" 7 "go.uber.org/zap" 8 ) 9 10 func init() { 11 caddy.RegisterModule(App{}) 12 } 13 14 // CaddyAppID is ... 15 const CaddyAppID = "trojan" 16 17 // App is ... 18 type App struct { 19 // UpstreamRaw is ... 20 UpstreamRaw json.RawMessage `json:"upstream" caddy:"namespace=trojan.upstreams inline_key=upstream"` 21 // ProxyRaw is ... 22 ProxyRaw json.RawMessage `json:"proxy" caddy:"namespace=trojan.proxies inline_key=proxy"` 23 // Users is ... 24 Users []string `json:"users,omitempty"` 25 26 lg *zap.Logger 27 up Upstream 28 px Proxy 29 } 30 31 // CaddyModule is ... 32 func (App) CaddyModule() caddy.ModuleInfo { 33 return caddy.ModuleInfo{ 34 ID: CaddyAppID, 35 New: func() caddy.Module { return new(App) }, 36 } 37 } 38 39 // Provision is ... 40 func (app *App) Provision(ctx caddy.Context) error { 41 mod, err := ctx.LoadModule(app, "UpstreamRaw") 42 if err != nil { 43 return err 44 } 45 app.up = mod.(Upstream) 46 47 mod, err = ctx.LoadModule(app, "ProxyRaw") 48 if err != nil { 49 return err 50 } 51 app.px = mod.(Proxy) 52 53 for _, v := range app.Users { 54 app.up.Add(v) 55 } 56 57 app.lg = ctx.Logger(app) 58 59 return nil 60 } 61 62 // Start is ... 63 func (app *App) Start() error { 64 return nil 65 } 66 67 // Stop is ... 68 func (app *App) Stop() error { 69 return app.px.Close() 70 } 71 72 // Upstream is ... 73 func (app *App) Upstream() Upstream { 74 return app.up 75 } 76 77 // Proxy is ... 78 func (app *App) Proxy() Proxy { 79 return app.px 80 } 81 82 var ( 83 _ caddy.App = (*App)(nil) 84 _ caddy.Provisioner = (*App)(nil) 85 )