package modelapp import ( "bytes" "code.gitea.io/gitea/models" "crypto/tls" "image" "image/png" "net/http" "strconv" "code.gitea.io/gitea/modules/setting" "code.gitea.io/gitea/modules/base" "code.gitea.io/gitea/modules/context" "github.com/go-resty/resty/v2" ) var restyClient *resty.Client var tplExploreUpload base.TplName = "model/tuomin/upload" var uploadUrl = "/extension/tuomin/upload" var allowedContentType = []string{"image/jpeg", "image/jpg", "image/png"} func ProcessImageUI(ctx *context.Context) { ctx.HTML(200, tplExploreUpload) } func ProcessImage(ctx *context.Context) { file, header, err := ctx.GetFile("file") if err != nil { ctx.JSON(http.StatusBadRequest,models.BaseErrorMessage(ctx.Tr("model_app.get_file_fail"))) return } defer file.Close() contentType := header.Header.Get("Content-Type") if !isInAllowedContentType(contentType) { ctx.JSON(http.StatusBadRequest,models.BaseErrorMessage(ctx.Tr("model_app.content_type_unsupported"))) return } client := getRestyClient() res, err := client.R().SetMultipartField( "file", header.Filename, contentType, file).Post(setting.ModelApp.DesensitizationUrl + "?mode=" + strconv.Itoa(ctx.QueryInt("mode"))) if err != nil { ctx.JSON(http.StatusBadRequest,models.BaseErrorMessage(ctx.Tr("model_app.process_image_fail"))) return } image, _, err := image.Decode(bytes.NewReader(res.Body())) if err != nil { ctx.JSON(http.StatusBadRequest,models.BaseErrorMessage(ctx.Tr("model_app.process_image_fail"))) return } png.Encode(ctx.Resp, image) return } func isInAllowedContentType(contentType string) bool { for _, allowType := range allowedContentType { if allowType == contentType { return true } } return false } func getRestyClient() *resty.Client { if restyClient == nil { restyClient = resty.New() restyClient.SetTLSClientConfig(&tls.Config{InsecureSkipVerify: true}) } return restyClient }