// nolint:gomnd,exhaustivestruct package main import ( "context" "encoding/json" "fmt" "io/ioutil" "net/http" "os" "time" "git.xsfx.dev/xsteadfastx/logginghandler" "github.com/rs/zerolog" "github.com/rs/zerolog/log" ) type Logic struct { BaseURL string } func (l Logic) ServeHTTP(w http.ResponseWriter, r *http.Request) { logger := logginghandler.Logger(r) ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) // nolint:gomnd defer cancel() req, err := http.NewRequestWithContext(ctx, http.MethodGet, fmt.Sprintf("%s/System/Info/Public", l.BaseURL), nil) if err != nil { logger.Error().Msg(err.Error()) http.Error(w, "could not create request jellyfin", http.StatusInternalServerError) return } resp, err := http.DefaultClient.Do(req) if err != nil { logger.Error().Msg(err.Error()) http.Error(w, "could not access jellyfin", http.StatusInternalServerError) return } defer resp.Body.Close() body, err := ioutil.ReadAll(resp.Body) if err != nil { logger.Error().Msg(err.Error()) http.Error(w, "could not read body", http.StatusInternalServerError) return } jd := map[string]string{} if err := json.Unmarshal(body, &jd); err != nil { logger.Error().Msg(err.Error()) http.Error(w, "could not unmarshal body", http.StatusInternalServerError) return } // Delete LocalAddress from map. _, ok := jd["LocalAddress"] if ok { delete(jd, "LocalAddress") } else { logger.Debug().Msg("nothing to do") return } nd, err := json.Marshal(jd) if err != nil { logger.Error().Msg(err.Error()) http.Error(w, "could not marshal body", http.StatusInternalServerError) return } if _, err := w.Write(nd); err != nil { logger.Error().Msg(err.Error()) } } func main() { log.Logger = log.Output(zerolog.ConsoleWriter{Out: os.Stderr}) log.Logger = log.Logger.With().Caller().Logger() if len(os.Args) != 2 { log.Fatal().Msg("could not get base url as argument") } l := Logic{BaseURL: os.Args[1]} handler := logginghandler.Handler(l) http.Handle("/", handler) log.Info().Msg("starting server...") log.Fatal().Msg(http.ListenAndServe("0.0.0.0:8088", nil).Error()) }