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  )