package main import ( "net/http" "os" "github.com/go-chi/chi/v5" "github.com/spf13/viper" "github.com/kardianos/service" "log" ) var srv service.Service func main() { viper.SetConfigName("config") viper.AddConfigPath(".") if err := viper.ReadInConfig(); err != nil { log.Fatalf("Error reading config file, %s", err) } initLogger() repo := NewRepository() router := chi.NewRouter() router.Post("/{arch}", repo.UploadHandler) svcConfig := &service.Config{ Name: "urpm-repo", DisplayName: "URPM Repository Service", Description: "Service for managing URPM packages", } s, err := service.New(&serviceProgram{repo, router}, svcConfig) if err != nil { logger.Fatal(err) } if len(os.Args) > 1 { if os.Args[1] == "install" { if err := s.Install(); err != nil { logger.Fatal(err) } return } else if os.Args[1] == "uninstall" { if err := s.Uninstall(); err != nil { logger.Fatal(err) } return } } if err := s.Run(); err != nil { logger.Fatal(err) } } type serviceProgram struct { repo *Repository router *chi.Mux } func (p *serviceProgram) Start(s service.Service) error { logger.Info("Starting URPM Repository Service...") go func() { if err := http.ListenAndServe(viper.GetString("server.address"), p.router); err != nil { logger.Error(err) } }() return nil } func (p *serviceProgram) Stop(s service.Service) error { logger.Info("Stopping URPM Repository Service...") return nil }