diff --git a/app/rest/proxy/image.go b/app/rest/proxy/image.go
index ea10ea3b..e668420b 100644
--- a/app/rest/proxy/image.go
+++ b/app/rest/proxy/image.go
@@ -59,6 +59,11 @@ func (p Image) Routes() chi.Router {
}
}()
+ if resp.StatusCode != http.StatusOK {
+ w.WriteHeader(resp.StatusCode)
+ return
+ }
+
for k, v := range resp.Header {
if strings.EqualFold(k, "Content-Type") {
w.Header().Set(k, v[0])
diff --git a/app/rest/proxy/image_test.go b/app/rest/proxy/image_test.go
index bc8cedde..31d48498 100644
--- a/app/rest/proxy/image_test.go
+++ b/app/rest/proxy/image_test.go
@@ -1,9 +1,14 @@
package proxy
import (
+ "encoding/base64"
+ "fmt"
+ "net/http"
+ "net/http/httptest"
"testing"
"github.com/stretchr/testify/assert"
+ "github.com/stretchr/testify/require"
)
func TestPicture_Extract(t *testing.T) {
@@ -52,3 +57,49 @@ func TestPicture_Replace(t *testing.T) {
[]string{"http://radio-t.com/img3.png", "http://images.pexels.com/67636/img4.jpeg"})
assert.Equal(t, `
xyz
`, r)
}
+
+func TestImage_Routes(t *testing.T) {
+ img := Image{Enabled: true, RemarkURL: "https://demo.remark42.com", RoutePath: "/api/v1/proxy"}
+ router := img.Routes()
+
+ httpSrv := imgHttpServer(t)
+ defer httpSrv.Close()
+ ts := httptest.NewServer(router)
+ defer ts.Close()
+
+ encodedImgURL := base64.URLEncoding.EncodeToString([]byte(httpSrv.URL + "/image/img1.png"))
+
+ resp, err := http.Get(ts.URL + "/?src=" + encodedImgURL)
+ require.Nil(t, err)
+ assert.Equal(t, 200, resp.StatusCode)
+ t.Logf("%+v", resp.Header)
+ assert.Equal(t, "123", resp.Header["Content-Length"][0])
+ assert.Equal(t, "image/png", resp.Header["Content-Type"][0])
+
+ encodedImgURL = base64.URLEncoding.EncodeToString([]byte(httpSrv.URL + "/image/no-such-image.png"))
+ resp, err = http.Get(ts.URL + "/?src=" + encodedImgURL)
+ require.Nil(t, err)
+ assert.Equal(t, 404, resp.StatusCode)
+}
+
+func TestPicture_Convert(t *testing.T) {
+ img := Image{Enabled: true, RoutePath: "/img"}
+ r := img.Convert(`
xyz
`)
+ assert.Equal(t, `
xyz
`, r)
+}
+
+func imgHttpServer(t *testing.T) *httptest.Server {
+ ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
+ if r.URL.Path == "/image/img1.png" {
+ t.Log("http img request", r.URL)
+ w.Header().Add("Content-Length", "123")
+ w.Header().Add("Content-Type", "image/png")
+ w.Write([]byte(fmt.Sprintf("%123s", "X")))
+ return
+ }
+ t.Log("http img request - not found", r.URL)
+ w.WriteHeader(404)
+ }))
+
+ return ts
+}