wuyuncheng-26's picture
upload files from Harry-zklcdc/go-proxy-bingai
d669ddb verified
package v1
import (
"adams549659584/go-proxy-bingai/common"
"encoding/json"
"io"
"net/http"
"strings"
"time"
binglib "github.com/Harry-zklcdc/bing-lib"
)
var (
globalImage *binglib.Image
DALL_E_3 = "dall-e-3"
)
func ImageHandler(w http.ResponseWriter, r *http.Request) {
w.Header().Add("Access-Control-Allow-Origin", "*")
w.Header().Add("Access-Control-Allow-Methods", "*")
w.Header().Add("Access-Control-Allow-Headers", "*")
if r.Method == "OPTIONS" {
w.Header().Add("Allow", "POST")
w.Header().Add("Access-Control-Allow-Method", "POST")
w.Header().Add("Access-Control-Allow-Header", "Content-Type, Authorization")
return
}
if r.Method != "POST" {
w.WriteHeader(http.StatusMethodNotAllowed)
w.Write([]byte("Method Not Allowed"))
return
}
if apikey != "" && r.Header.Get("Authorization") != "Bearer "+apikey {
w.WriteHeader(http.StatusUnauthorized)
w.Write([]byte("Unauthorized"))
return
}
image := globalImage.Clone()
image.SetXFF(common.GetRandomIP())
cookie := r.Header.Get("Cookie")
if cookie == "" || !strings.Contains(cookie, "_U=") {
cookie = image.GetCookies()
}
image.SetCookies(cookie)
resqB, err := io.ReadAll(r.Body)
if err != nil {
w.WriteHeader(http.StatusInternalServerError)
w.Write([]byte(err.Error()))
common.Logger.Error("ReadAll Error: %v", err)
return
}
var resq imageRequest
json.Unmarshal(resqB, &resq)
resp := imageResponse{
Created: time.Now().Unix(),
}
if resq.Prompt == "" {
resData, err := json.Marshal(resp)
if err != nil {
w.WriteHeader(http.StatusInternalServerError)
w.Write([]byte(err.Error()))
common.Logger.Error("Marshal Error: %v", err)
return
}
w.Write(resData)
return
}
imgs, _, err := image.Image(resq.Prompt)
if err != nil {
w.WriteHeader(http.StatusInternalServerError)
w.Write([]byte(err.Error()))
common.Logger.Error("Image Error: %v", err)
return
}
for _, img := range imgs {
resp.Data = append(resp.Data, imageData{
Url: strings.Replace(img, "http://localhost:"+common.PORT+"/th", common.BING_SOURCE_URL.String(), 1),
})
}
resData, err := json.Marshal(resp)
if err != nil {
w.WriteHeader(http.StatusInternalServerError)
w.Write([]byte(err.Error()))
common.Logger.Error("Marshal Error: %v", err)
return
}
w.Header().Set("Content-Type", "application/json")
w.Write(resData)
}