79 lines
1.7 KiB
Go
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
|
|
}
|