Initial import

This commit is contained in:
2025-09-26 08:49:53 +02:00
commit a76650da35
35 changed files with 4660 additions and 0 deletions

85
cmd/styx/main.go Normal file
View 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
}