Initial import
This commit is contained in:
85
cmd/styx/main.go
Normal file
85
cmd/styx/main.go
Normal file
@@ -0,0 +1,85 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"flag"
|
||||
"os"
|
||||
"os/signal"
|
||||
"syscall"
|
||||
|
||||
"github.com/hashicorp/hcl/v2/hclsimple"
|
||||
|
||||
"git.maze.io/maze/styx/internal/log"
|
||||
"git.maze.io/maze/styx/proxy"
|
||||
"git.maze.io/maze/styx/proxy/cache"
|
||||
"git.maze.io/maze/styx/proxy/match"
|
||||
"git.maze.io/maze/styx/proxy/mitm"
|
||||
"git.maze.io/maze/styx/proxy/resolver"
|
||||
)
|
||||
|
||||
func main() {
|
||||
configFlag := flag.String("config", "styx.hcl", "Configuration file")
|
||||
traceFlag := flag.Bool("T", false, "Enable trace level logging")
|
||||
debugFlag := flag.Bool("D", false, "Enable debug level logging")
|
||||
flag.Parse()
|
||||
|
||||
if *traceFlag {
|
||||
log.SetLevel(log.TraceLevel)
|
||||
} else if *debugFlag {
|
||||
log.SetLevel(log.DebugLevel)
|
||||
}
|
||||
|
||||
config, err := load(*configFlag)
|
||||
if err != nil {
|
||||
log.Fatal().Err(err).Msg("")
|
||||
}
|
||||
|
||||
matchers, err := config.Match.Matchers()
|
||||
if err != nil {
|
||||
log.Fatal().Err(err).Msg("")
|
||||
} else if err = config.Proxy.Policy.Configure(matchers); err != nil {
|
||||
log.Fatal().Err(err).Msg("")
|
||||
}
|
||||
|
||||
var ca mitm.Authority
|
||||
if config.MITM != nil {
|
||||
if ca, err = mitm.New(config.MITM); err != nil {
|
||||
log.Fatal().Err(err).Msg("error configuring mitm")
|
||||
}
|
||||
}
|
||||
|
||||
server, err := proxy.New(&config.Proxy, ca)
|
||||
if err != nil {
|
||||
log.Fatal().Err(err).Msg("")
|
||||
}
|
||||
|
||||
if err = server.Start(); err != nil {
|
||||
log.Fatal().Err(err).Msg("")
|
||||
}
|
||||
|
||||
signalChannel := make(chan os.Signal, 1)
|
||||
signal.Notify(signalChannel, syscall.SIGINT, syscall.SIGTERM)
|
||||
<-signalChannel
|
||||
|
||||
server.Close()
|
||||
}
|
||||
|
||||
type Config struct {
|
||||
DNS *resolver.Config `hcl:"dns,block"`
|
||||
Proxy proxy.Config `hcl:"proxy,block"`
|
||||
MITM *mitm.Config `hcl:"mitm,block"`
|
||||
Cache *cache.Config `hcl:"cache,block"`
|
||||
Match *match.Config `hcl:"match,block"`
|
||||
}
|
||||
|
||||
func load(name string) (*Config, error) {
|
||||
config := new(Config)
|
||||
if err := hclsimple.DecodeFile(name, nil, config); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if config.DNS != nil {
|
||||
config.Proxy.Resolver = resolver.New(*config.DNS)
|
||||
}
|
||||
|
||||
return config, nil
|
||||
}
|
Reference in New Issue
Block a user