package main import ( "embed" "errors" "fmt" "net/http" "os" "path/filepath" "time" "go.wit.com/lib/env" "go.wit.com/lib/protobuf/argvpb" "go.wit.com/lib/protobuf/forgepb" "go.wit.com/lib/protobuf/gitpb" "go.wit.com/log" ) //go:embed resources/* var resources embed.FS var HOSTNAME string = "forge.wit.com" func saveMissing() error { err := me.missing.SaveValidate(filepath.Join(env.Get("ReposDir"), "missing.pb")) if err != nil { log.Info("failed to save missing.pb", err) } return err } func main() { me = new(mainType) argvpb.Init(&argv, APPNAME, BUILDTIME, VERSION) // adds shell auto-complete var err error me.forge, err = forgepb.InitByFullpath("/etc/forged/forge.text") if err != nil { panic("forge.InitByFullPath() failed") } env.PrintTable() if err := me.forge.InitPatchsets(); err != nil { log.Info("patches failed to open", err) badExit(err) } if argv.Patch != nil { if err := doPatches(); err != nil { badExit(err) } okExit("") } me.missing = gitpb.NewRepos() err = me.missing.ConfigLoad(filepath.Join(env.Get("ReposDir"), "missing.pb")) if errors.Is(err, os.ErrNotExist) { saveMissing() } else if err != nil { log.Info("loading missing.pb failed", err) badExit(err) } if argv.Missing != nil { log.Info("loading missing.pb worked len =", me.missing.Len()) me.missing.PrintMissingTable() okExit("") } if argv.Repos != nil { if err := doRepos(); err != nil { badExit(err) } okExit("") } if argv.Daemon == true { if argv.Gui != nil { me.myGui.Start() // loads the GUI toolkit doGui() // start making our forge GUI debug() // sits here forever } mux := http.NewServeMux() okHandlerFunc := http.HandlerFunc(okHandler) // Set a limit of 50 kilobytes for requests to this handler. // Adjust this value to your needs. const maxUploadSize = 1025 * 1024 // 1 MB mux.Handle("/", http.MaxBytesHandler(okHandlerFunc, maxUploadSize)) p := fmt.Sprintf(":%d", argv.Port) log.Printf("Server starting on port %s...\n", p) log.Printf("Test with: curl -d 'hello world' http://localhost:%s/\n", p) server := &http.Server{ Addr: p, Handler: mux, ReadTimeout: 5 * time.Minute, WriteTimeout: 10 * time.Second, IdleTimeout: 120 * time.Second, } log.Printf("Server starting on port %s with a 1 MB request body limit...\n", p) if err := server.ListenAndServe(); err != nil { log.Fatal("Could not start server: %s\n", err) } okExit("") } log.Info("--daemon was not set. Just list the patches.") // doList() }