forked from xsteadfastx/jellyfixer
98 lines
2.1 KiB
Go
98 lines
2.1 KiB
Go
// 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())
|
|
}
|