package wordpress import ( "bytes" "encoding/json" "federated.computer/wp-sync-slowtwitch/utilities" "io" "net/http" "strings" ) type CreateImage struct { Url string } type CreateImageResponse struct { Id int `json:"id"` Link string `json:"link"` } func (parameters *CreateImage) Execute(baseUrl, user, pass string) CreateImageResponse { resp, err := http.Get(parameters.Url) utilities.CheckError(err) defer utilities.CloseBodyAndCheckError(resp.Body) body, err := io.ReadAll(resp.Body) utilities.CheckError(err) request, err := http.NewRequest("POST", baseUrl+"wp-json/wp/v2/media", bytes.NewReader(body)) utilities.CheckError(err) filename := GetFileName(parameters.Url) request.Header.Set("Content-Disposition", `attachment;filename="`+filename+`"`) request.SetBasicAuth(user, pass) rsp, err := http.DefaultClient.Do(request) utilities.CheckError(err) result, err := io.ReadAll(rsp.Body) utilities.CheckError(err) var data CreateImageResponse err = json.Unmarshal(result, &data) utilities.CheckError(err) return data } func GetFileName(url string) string { urlSlices := strings.Split(url, "/") length := len(urlSlices) var output string for i, s := range urlSlices { if i == length-1 { output = s } } return output }