79 lines
1.7 KiB
Go

package main
import (
"encoding/json"
"fmt"
"io"
"net/http"
"strings"
"time"
"github.com/confusedpolarbear/intro_skipper_verifier/structs"
)
// Gets the contents of the provided URL or panics.
func SendRequest(method, url, apiKey string) []byte {
http.DefaultClient.Timeout = 10 * time.Second
// Construct the request
req, err := http.NewRequest(method, url, nil)
if err != nil {
panic(err)
}
// Include the authorization token
req.Header.Set("Authorization", fmt.Sprintf(`MediaBrowser Token="%s"`, apiKey))
// Send the request
res, err := http.DefaultClient.Do(req)
if !strings.Contains(url, "hideUrl") {
fmt.Printf("[+] %s %s: %d\n", method, url, res.StatusCode)
}
// Panic if any error occurred
if err != nil {
panic(err)
}
// Check for API key validity
if res.StatusCode == http.StatusUnauthorized {
panic("Server returned 401 (Unauthorized). Check API key validity and try again.")
}
// Read and return the entire body
defer res.Body.Close()
body, err := io.ReadAll(res.Body)
if err != nil {
panic(err)
}
return body
}
func GetServerInfo(hostAddress, apiKey string) structs.PublicInfo {
var info structs.PublicInfo
fmt.Println("[+] Getting server information")
rawInfo := SendRequest("GET", hostAddress+"/System/Info/Public", apiKey)
if err := json.Unmarshal(rawInfo, &info); err != nil {
panic(err)
}
return info
}
func GetPluginConfiguration(hostAddress, apiKey string) structs.PluginConfiguration {
var config structs.PluginConfiguration
fmt.Println("[+] Getting plugin configuration")
rawConfig := SendRequest("GET", hostAddress+"/Plugins/c83d86bb-a1e0-4c35-a113-e2101cf4ee6b/Configuration", apiKey)
if err := json.Unmarshal(rawConfig, &config); err != nil {
panic(err)
}
return config
}