github.com/imgk/caddy-trojan@v0.0.0-20221206043256-2631719e16c8/app/caddyfile.go (about) 1 package app 2 3 import ( 4 "github.com/caddyserver/caddy/v2/caddyconfig" 5 "github.com/caddyserver/caddy/v2/caddyconfig/caddyfile" 6 "github.com/caddyserver/caddy/v2/caddyconfig/httpcaddyfile" 7 ) 8 9 func init() { 10 httpcaddyfile.RegisterGlobalOption("trojan", parseCaddyfile) 11 } 12 13 /* 14 trojan { 15 caddy 16 no_proxy | env_proxy 17 users pass1234 word5678 18 } 19 */ 20 func parseCaddyfile(d *caddyfile.Dispenser, _ interface{}) (interface{}, error) { 21 app := &App{ 22 UpstreamRaw: nil, 23 ProxyRaw: nil, 24 Users: []string{}, 25 } 26 27 for d.Next() { 28 for d.NextBlock(0) { 29 switch d.Val() { 30 case "caddy": 31 if app.UpstreamRaw != nil { 32 return nil, d.Err("only one upstream is allowed") 33 } 34 app.UpstreamRaw = caddyconfig.JSONModuleObject(new(CaddyUpstream), "upstream", "caddy", nil) 35 case "memory": 36 if app.UpstreamRaw != nil { 37 return nil, d.Err("only one upstream is allowed") 38 } 39 app.UpstreamRaw = caddyconfig.JSONModuleObject(new(MemoryUpstream), "upstream", "memory", nil) 40 case "env_proxy": 41 if app.ProxyRaw != nil { 42 return nil, d.Err("only one proxy is allowed") 43 } 44 app.ProxyRaw = caddyconfig.JSONModuleObject(new(EnvProxy), "proxy", "env_proxy", nil) 45 case "no_proxy": 46 if app.ProxyRaw != nil { 47 return nil, d.Err("only one proxy is allowed") 48 } 49 app.ProxyRaw = caddyconfig.JSONModuleObject(new(NoProxy), "proxy", "no_proxy", nil) 50 case "users": 51 args := d.RemainingArgs() 52 if len(args) < 1 { 53 return nil, d.ArgErr() 54 } 55 for _, v := range args { 56 if len(v) == 0 { 57 return nil, d.Err("empty user is not allowed") 58 } 59 app.Users = append(app.Users, v) 60 } 61 } 62 63 } 64 } 65 66 return httpcaddyfile.App{ 67 Name: "trojan", 68 Value: caddyconfig.JSON(app, nil), 69 }, nil 70 }