media_proxy_test.go 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555
  1. // SPDX-FileCopyrightText: Copyright The Miniflux Authors. All rights reserved.
  2. // SPDX-License-Identifier: Apache-2.0
  3. package mediaproxy // import "miniflux.app/v2/internal/mediaproxy"
  4. import (
  5. "net/http"
  6. "os"
  7. "testing"
  8. "github.com/gorilla/mux"
  9. "miniflux.app/v2/internal/config"
  10. )
  11. func TestProxyFilterWithHttpDefault(t *testing.T) {
  12. os.Clearenv()
  13. os.Setenv("PROXY_OPTION", "http-only")
  14. os.Setenv("PROXY_MEDIA_TYPES", "image")
  15. os.Setenv("PROXY_PRIVATE_KEY", "test")
  16. var err error
  17. parser := config.NewParser()
  18. config.Opts, err = parser.ParseEnvironmentVariables()
  19. if err != nil {
  20. t.Fatalf(`Parsing failure: %v`, err)
  21. }
  22. r := mux.NewRouter()
  23. r.HandleFunc("/proxy/{encodedDigest}/{encodedURL}", func(w http.ResponseWriter, r *http.Request) {}).Name("proxy")
  24. input := `<p><img src="http://website/folder/image.png" alt="Test"/></p>`
  25. output := RewriteDocumentWithRelativeProxyURL(r, input)
  26. expected := `<p><img src="/proxy/okK5PsdNY8F082UMQEAbLPeUFfbe2WnNfInNmR9T4WA=/aHR0cDovL3dlYnNpdGUvZm9sZGVyL2ltYWdlLnBuZw==" alt="Test"/></p>`
  27. if expected != output {
  28. t.Errorf(`Not expected output: got %q instead of %q`, output, expected)
  29. }
  30. }
  31. func TestProxyFilterWithHttpsDefault(t *testing.T) {
  32. os.Clearenv()
  33. os.Setenv("PROXY_OPTION", "http-only")
  34. os.Setenv("PROXY_MEDIA_TYPES", "image")
  35. var err error
  36. parser := config.NewParser()
  37. config.Opts, err = parser.ParseEnvironmentVariables()
  38. if err != nil {
  39. t.Fatalf(`Parsing failure: %v`, err)
  40. }
  41. r := mux.NewRouter()
  42. r.HandleFunc("/proxy/{encodedDigest}/{encodedURL}", func(w http.ResponseWriter, r *http.Request) {}).Name("proxy")
  43. input := `<p><img src="https://website/folder/image.png" alt="Test"/></p>`
  44. output := RewriteDocumentWithRelativeProxyURL(r, input)
  45. expected := `<p><img src="https://website/folder/image.png" alt="Test"/></p>`
  46. if expected != output {
  47. t.Errorf(`Not expected output: got %q instead of %q`, output, expected)
  48. }
  49. }
  50. func TestProxyFilterWithHttpNever(t *testing.T) {
  51. os.Clearenv()
  52. os.Setenv("PROXY_OPTION", "none")
  53. var err error
  54. parser := config.NewParser()
  55. config.Opts, err = parser.ParseEnvironmentVariables()
  56. if err != nil {
  57. t.Fatalf(`Parsing failure: %v`, err)
  58. }
  59. r := mux.NewRouter()
  60. r.HandleFunc("/proxy/{encodedDigest}/{encodedURL}", func(w http.ResponseWriter, r *http.Request) {}).Name("proxy")
  61. input := `<p><img src="http://website/folder/image.png" alt="Test"/></p>`
  62. output := RewriteDocumentWithRelativeProxyURL(r, input)
  63. expected := input
  64. if expected != output {
  65. t.Errorf(`Not expected output: got %q instead of %q`, output, expected)
  66. }
  67. }
  68. func TestProxyFilterWithHttpsNever(t *testing.T) {
  69. os.Clearenv()
  70. os.Setenv("PROXY_OPTION", "none")
  71. var err error
  72. parser := config.NewParser()
  73. config.Opts, err = parser.ParseEnvironmentVariables()
  74. if err != nil {
  75. t.Fatalf(`Parsing failure: %v`, err)
  76. }
  77. r := mux.NewRouter()
  78. r.HandleFunc("/proxy/{encodedDigest}/{encodedURL}", func(w http.ResponseWriter, r *http.Request) {}).Name("proxy")
  79. input := `<p><img src="https://website/folder/image.png" alt="Test"/></p>`
  80. output := RewriteDocumentWithRelativeProxyURL(r, input)
  81. expected := input
  82. if expected != output {
  83. t.Errorf(`Not expected output: got %q instead of %q`, output, expected)
  84. }
  85. }
  86. func TestProxyFilterWithHttpAlways(t *testing.T) {
  87. os.Clearenv()
  88. os.Setenv("PROXY_OPTION", "all")
  89. os.Setenv("PROXY_MEDIA_TYPES", "image")
  90. os.Setenv("PROXY_PRIVATE_KEY", "test")
  91. var err error
  92. parser := config.NewParser()
  93. config.Opts, err = parser.ParseEnvironmentVariables()
  94. if err != nil {
  95. t.Fatalf(`Parsing failure: %v`, err)
  96. }
  97. r := mux.NewRouter()
  98. r.HandleFunc("/proxy/{encodedDigest}/{encodedURL}", func(w http.ResponseWriter, r *http.Request) {}).Name("proxy")
  99. input := `<p><img src="http://website/folder/image.png" alt="Test"/></p>`
  100. output := RewriteDocumentWithRelativeProxyURL(r, input)
  101. expected := `<p><img src="/proxy/okK5PsdNY8F082UMQEAbLPeUFfbe2WnNfInNmR9T4WA=/aHR0cDovL3dlYnNpdGUvZm9sZGVyL2ltYWdlLnBuZw==" alt="Test"/></p>`
  102. if expected != output {
  103. t.Errorf(`Not expected output: got %q instead of %q`, output, expected)
  104. }
  105. }
  106. func TestProxyFilterWithHttpsAlways(t *testing.T) {
  107. os.Clearenv()
  108. os.Setenv("PROXY_OPTION", "all")
  109. os.Setenv("PROXY_MEDIA_TYPES", "image")
  110. os.Setenv("PROXY_PRIVATE_KEY", "test")
  111. var err error
  112. parser := config.NewParser()
  113. config.Opts, err = parser.ParseEnvironmentVariables()
  114. if err != nil {
  115. t.Fatalf(`Parsing failure: %v`, err)
  116. }
  117. r := mux.NewRouter()
  118. r.HandleFunc("/proxy/{encodedDigest}/{encodedURL}", func(w http.ResponseWriter, r *http.Request) {}).Name("proxy")
  119. input := `<p><img src="https://website/folder/image.png" alt="Test"/></p>`
  120. output := RewriteDocumentWithRelativeProxyURL(r, input)
  121. expected := `<p><img src="/proxy/LdPNR1GBDigeeNp2ArUQRyZsVqT_PWLfHGjYFrrWWIY=/aHR0cHM6Ly93ZWJzaXRlL2ZvbGRlci9pbWFnZS5wbmc=" alt="Test"/></p>`
  122. if expected != output {
  123. t.Errorf(`Not expected output: got %q instead of %q`, output, expected)
  124. }
  125. }
  126. func TestAbsoluteProxyFilterWithHttpsAlways(t *testing.T) {
  127. os.Clearenv()
  128. os.Setenv("PROXY_OPTION", "all")
  129. os.Setenv("PROXY_MEDIA_TYPES", "image")
  130. os.Setenv("PROXY_PRIVATE_KEY", "test")
  131. var err error
  132. parser := config.NewParser()
  133. config.Opts, err = parser.ParseEnvironmentVariables()
  134. if err != nil {
  135. t.Fatalf(`Parsing failure: %v`, err)
  136. }
  137. r := mux.NewRouter()
  138. r.HandleFunc("/proxy/{encodedDigest}/{encodedURL}", func(w http.ResponseWriter, r *http.Request) {}).Name("proxy")
  139. input := `<p><img src="https://website/folder/image.png" alt="Test"/></p>`
  140. output := RewriteDocumentWithAbsoluteProxyURL(r, "localhost", input)
  141. expected := `<p><img src="http://localhost/proxy/LdPNR1GBDigeeNp2ArUQRyZsVqT_PWLfHGjYFrrWWIY=/aHR0cHM6Ly93ZWJzaXRlL2ZvbGRlci9pbWFnZS5wbmc=" alt="Test"/></p>`
  142. if expected != output {
  143. t.Errorf(`Not expected output: got %q instead of %q`, output, expected)
  144. }
  145. }
  146. func TestAbsoluteProxyFilterWithHttpsScheme(t *testing.T) {
  147. os.Clearenv()
  148. os.Setenv("PROXY_OPTION", "all")
  149. os.Setenv("PROXY_MEDIA_TYPES", "image")
  150. os.Setenv("PROXY_PRIVATE_KEY", "test")
  151. os.Setenv("HTTPS", "1")
  152. var err error
  153. parser := config.NewParser()
  154. config.Opts, err = parser.ParseEnvironmentVariables()
  155. if err != nil {
  156. t.Fatalf(`Parsing failure: %v`, err)
  157. }
  158. r := mux.NewRouter()
  159. r.HandleFunc("/proxy/{encodedDigest}/{encodedURL}", func(w http.ResponseWriter, r *http.Request) {}).Name("proxy")
  160. input := `<p><img src="https://website/folder/image.png" alt="Test"/></p>`
  161. output := RewriteDocumentWithAbsoluteProxyURL(r, "localhost", input)
  162. expected := `<p><img src="https://localhost/proxy/LdPNR1GBDigeeNp2ArUQRyZsVqT_PWLfHGjYFrrWWIY=/aHR0cHM6Ly93ZWJzaXRlL2ZvbGRlci9pbWFnZS5wbmc=" alt="Test"/></p>`
  163. if expected != output {
  164. t.Errorf(`Not expected output: got %q instead of %q`, output, expected)
  165. }
  166. }
  167. func TestAbsoluteProxyFilterWithHttpsAlwaysAndAudioTag(t *testing.T) {
  168. os.Clearenv()
  169. os.Setenv("PROXY_OPTION", "all")
  170. os.Setenv("PROXY_MEDIA_TYPES", "audio")
  171. os.Setenv("PROXY_PRIVATE_KEY", "test")
  172. var err error
  173. parser := config.NewParser()
  174. config.Opts, err = parser.ParseEnvironmentVariables()
  175. if err != nil {
  176. t.Fatalf(`Parsing failure: %v`, err)
  177. }
  178. r := mux.NewRouter()
  179. r.HandleFunc("/proxy/{encodedDigest}/{encodedURL}", func(w http.ResponseWriter, r *http.Request) {}).Name("proxy")
  180. input := `<audio src="https://website/folder/audio.mp3"></audio>`
  181. output := RewriteDocumentWithAbsoluteProxyURL(r, "localhost", input)
  182. expected := `<audio src="http://localhost/proxy/EmBTvmU5B17wGuONkeknkptYopW_Tl6Y6_W8oYbN_Xs=/aHR0cHM6Ly93ZWJzaXRlL2ZvbGRlci9hdWRpby5tcDM="></audio>`
  183. if expected != output {
  184. t.Errorf(`Not expected output: got %q instead of %q`, output, expected)
  185. }
  186. }
  187. func TestProxyFilterWithHttpsAlwaysAndCustomProxyServer(t *testing.T) {
  188. os.Clearenv()
  189. os.Setenv("PROXY_OPTION", "all")
  190. os.Setenv("PROXY_MEDIA_TYPES", "image")
  191. os.Setenv("PROXY_URL", "https://proxy-example/proxy")
  192. var err error
  193. parser := config.NewParser()
  194. config.Opts, err = parser.ParseEnvironmentVariables()
  195. if err != nil {
  196. t.Fatalf(`Parsing failure: %v`, err)
  197. }
  198. r := mux.NewRouter()
  199. r.HandleFunc("/proxy/{encodedDigest}/{encodedURL}", func(w http.ResponseWriter, r *http.Request) {}).Name("proxy")
  200. input := `<p><img src="https://website/folder/image.png" alt="Test"/></p>`
  201. output := RewriteDocumentWithRelativeProxyURL(r, input)
  202. expected := `<p><img src="https://proxy-example/proxy/aHR0cHM6Ly93ZWJzaXRlL2ZvbGRlci9pbWFnZS5wbmc=" alt="Test"/></p>`
  203. if expected != output {
  204. t.Errorf(`Not expected output: got %q instead of %q`, output, expected)
  205. }
  206. }
  207. func TestProxyFilterWithHttpsAlwaysAndIncorrectCustomProxyServer(t *testing.T) {
  208. os.Clearenv()
  209. os.Setenv("PROXY_OPTION", "all")
  210. os.Setenv("PROXY_MEDIA_TYPES", "image")
  211. os.Setenv("PROXY_URL", "http://:8080example.com")
  212. var err error
  213. parser := config.NewParser()
  214. config.Opts, err = parser.ParseEnvironmentVariables()
  215. if err != nil {
  216. t.Fatalf(`Parsing failure: %v`, err)
  217. }
  218. r := mux.NewRouter()
  219. r.HandleFunc("/proxy/{encodedDigest}/{encodedURL}", func(w http.ResponseWriter, r *http.Request) {}).Name("proxy")
  220. input := `<p><img src="https://website/folder/image.png" alt="Test"/></p>`
  221. output := RewriteDocumentWithRelativeProxyURL(r, input)
  222. expected := `<p><img src="https://website/folder/image.png" alt="Test"/></p>`
  223. if expected != output {
  224. t.Errorf(`Not expected output: got %q instead of %q`, output, expected)
  225. }
  226. }
  227. func TestAbsoluteProxyFilterWithHttpsAlwaysAndCustomProxyServer(t *testing.T) {
  228. os.Clearenv()
  229. os.Setenv("MEDIA_PROXY_MODE", "all")
  230. os.Setenv("MEDIA_PROXY_RESOURCE_TYPES", "image")
  231. os.Setenv("MEDIA_PROXY_CUSTOM_URL", "https://proxy-example/proxy")
  232. var err error
  233. parser := config.NewParser()
  234. config.Opts, err = parser.ParseEnvironmentVariables()
  235. if err != nil {
  236. t.Fatalf(`Parsing failure: %v`, err)
  237. }
  238. r := mux.NewRouter()
  239. r.HandleFunc("/proxy/{encodedDigest}/{encodedURL}", func(w http.ResponseWriter, r *http.Request) {}).Name("proxy")
  240. input := `<p><img src="https://website/folder/image.png" alt="Test"/></p>`
  241. output := RewriteDocumentWithAbsoluteProxyURL(r, "localhost", input)
  242. expected := `<p><img src="https://proxy-example/proxy/aHR0cHM6Ly93ZWJzaXRlL2ZvbGRlci9pbWFnZS5wbmc=" alt="Test"/></p>`
  243. if expected != output {
  244. t.Errorf(`Not expected output: got %q instead of %q`, output, expected)
  245. }
  246. }
  247. func TestProxyFilterWithHttpInvalid(t *testing.T) {
  248. os.Clearenv()
  249. os.Setenv("PROXY_OPTION", "invalid")
  250. os.Setenv("PROXY_PRIVATE_KEY", "test")
  251. var err error
  252. parser := config.NewParser()
  253. config.Opts, err = parser.ParseEnvironmentVariables()
  254. if err != nil {
  255. t.Fatalf(`Parsing failure: %v`, err)
  256. }
  257. r := mux.NewRouter()
  258. r.HandleFunc("/proxy/{encodedDigest}/{encodedURL}", func(w http.ResponseWriter, r *http.Request) {}).Name("proxy")
  259. input := `<p><img src="http://website/folder/image.png" alt="Test"/></p>`
  260. output := RewriteDocumentWithRelativeProxyURL(r, input)
  261. expected := `<p><img src="/proxy/okK5PsdNY8F082UMQEAbLPeUFfbe2WnNfInNmR9T4WA=/aHR0cDovL3dlYnNpdGUvZm9sZGVyL2ltYWdlLnBuZw==" alt="Test"/></p>`
  262. if expected != output {
  263. t.Errorf(`Not expected output: got %q instead of %q`, output, expected)
  264. }
  265. }
  266. func TestProxyFilterWithHttpsInvalid(t *testing.T) {
  267. os.Clearenv()
  268. os.Setenv("PROXY_OPTION", "invalid")
  269. os.Setenv("PROXY_PRIVATE_KEY", "test")
  270. var err error
  271. parser := config.NewParser()
  272. config.Opts, err = parser.ParseEnvironmentVariables()
  273. if err != nil {
  274. t.Fatalf(`Parsing failure: %v`, err)
  275. }
  276. r := mux.NewRouter()
  277. r.HandleFunc("/proxy/{encodedDigest}/{encodedURL}", func(w http.ResponseWriter, r *http.Request) {}).Name("proxy")
  278. input := `<p><img src="https://website/folder/image.png" alt="Test"/></p>`
  279. output := RewriteDocumentWithRelativeProxyURL(r, input)
  280. expected := `<p><img src="https://website/folder/image.png" alt="Test"/></p>`
  281. if expected != output {
  282. t.Errorf(`Not expected output: got %q instead of %q`, output, expected)
  283. }
  284. }
  285. func TestProxyFilterWithSrcset(t *testing.T) {
  286. os.Clearenv()
  287. os.Setenv("PROXY_OPTION", "all")
  288. os.Setenv("PROXY_MEDIA_TYPES", "image")
  289. os.Setenv("PROXY_PRIVATE_KEY", "test")
  290. var err error
  291. parser := config.NewParser()
  292. config.Opts, err = parser.ParseEnvironmentVariables()
  293. if err != nil {
  294. t.Fatalf(`Parsing failure: %v`, err)
  295. }
  296. r := mux.NewRouter()
  297. r.HandleFunc("/proxy/{encodedDigest}/{encodedURL}", func(w http.ResponseWriter, r *http.Request) {}).Name("proxy")
  298. input := `<p><img src="http://website/folder/image.png" srcset="http://website/folder/image2.png 656w, http://website/folder/image3.png 360w" alt="test"></p>`
  299. expected := `<p><img src="/proxy/okK5PsdNY8F082UMQEAbLPeUFfbe2WnNfInNmR9T4WA=/aHR0cDovL3dlYnNpdGUvZm9sZGVyL2ltYWdlLnBuZw==" srcset="/proxy/aY5Hb4urDnUCly2vTJ7ExQeeaVS-52O7kjUr2v9VrAs=/aHR0cDovL3dlYnNpdGUvZm9sZGVyL2ltYWdlMi5wbmc= 656w, /proxy/QgAmrJWiAud_nNAsz3F8OTxaIofwAiO36EDzH_YfMzo=/aHR0cDovL3dlYnNpdGUvZm9sZGVyL2ltYWdlMy5wbmc= 360w" alt="test"/></p>`
  300. output := RewriteDocumentWithRelativeProxyURL(r, input)
  301. if expected != output {
  302. t.Errorf(`Not expected output: got %s`, output)
  303. }
  304. }
  305. func TestProxyFilterWithEmptySrcset(t *testing.T) {
  306. os.Clearenv()
  307. os.Setenv("PROXY_OPTION", "all")
  308. os.Setenv("PROXY_MEDIA_TYPES", "image")
  309. os.Setenv("PROXY_PRIVATE_KEY", "test")
  310. var err error
  311. parser := config.NewParser()
  312. config.Opts, err = parser.ParseEnvironmentVariables()
  313. if err != nil {
  314. t.Fatalf(`Parsing failure: %v`, err)
  315. }
  316. r := mux.NewRouter()
  317. r.HandleFunc("/proxy/{encodedDigest}/{encodedURL}", func(w http.ResponseWriter, r *http.Request) {}).Name("proxy")
  318. input := `<p><img src="http://website/folder/image.png" srcset="" alt="test"></p>`
  319. expected := `<p><img src="/proxy/okK5PsdNY8F082UMQEAbLPeUFfbe2WnNfInNmR9T4WA=/aHR0cDovL3dlYnNpdGUvZm9sZGVyL2ltYWdlLnBuZw==" srcset="" alt="test"/></p>`
  320. output := RewriteDocumentWithRelativeProxyURL(r, input)
  321. if expected != output {
  322. t.Errorf(`Not expected output: got %s`, output)
  323. }
  324. }
  325. func TestProxyFilterWithPictureSource(t *testing.T) {
  326. os.Clearenv()
  327. os.Setenv("PROXY_OPTION", "all")
  328. os.Setenv("PROXY_MEDIA_TYPES", "image")
  329. os.Setenv("PROXY_PRIVATE_KEY", "test")
  330. var err error
  331. parser := config.NewParser()
  332. config.Opts, err = parser.ParseEnvironmentVariables()
  333. if err != nil {
  334. t.Fatalf(`Parsing failure: %v`, err)
  335. }
  336. r := mux.NewRouter()
  337. r.HandleFunc("/proxy/{encodedDigest}/{encodedURL}", func(w http.ResponseWriter, r *http.Request) {}).Name("proxy")
  338. input := `<picture><source srcset="http://website/folder/image2.png 656w, http://website/folder/image3.png 360w, https://website/some,image.png 2x"></picture>`
  339. expected := `<picture><source srcset="/proxy/aY5Hb4urDnUCly2vTJ7ExQeeaVS-52O7kjUr2v9VrAs=/aHR0cDovL3dlYnNpdGUvZm9sZGVyL2ltYWdlMi5wbmc= 656w, /proxy/QgAmrJWiAud_nNAsz3F8OTxaIofwAiO36EDzH_YfMzo=/aHR0cDovL3dlYnNpdGUvZm9sZGVyL2ltYWdlMy5wbmc= 360w, /proxy/ZIw0hv8WhSTls5aSqhnFaCXlUrKIqTnBRaY0-NaLnds=/aHR0cHM6Ly93ZWJzaXRlL3NvbWUsaW1hZ2UucG5n 2x"/></picture>`
  340. output := RewriteDocumentWithRelativeProxyURL(r, input)
  341. if expected != output {
  342. t.Errorf(`Not expected output: got %s`, output)
  343. }
  344. }
  345. func TestProxyFilterOnlyNonHTTPWithPictureSource(t *testing.T) {
  346. os.Clearenv()
  347. os.Setenv("PROXY_OPTION", "https")
  348. os.Setenv("PROXY_MEDIA_TYPES", "image")
  349. os.Setenv("PROXY_PRIVATE_KEY", "test")
  350. var err error
  351. parser := config.NewParser()
  352. config.Opts, err = parser.ParseEnvironmentVariables()
  353. if err != nil {
  354. t.Fatalf(`Parsing failure: %v`, err)
  355. }
  356. r := mux.NewRouter()
  357. r.HandleFunc("/proxy/{encodedDigest}/{encodedURL}", func(w http.ResponseWriter, r *http.Request) {}).Name("proxy")
  358. input := `<picture><source srcset="http://website/folder/image2.png 656w, https://website/some,image.png 2x"></picture>`
  359. expected := `<picture><source srcset="/proxy/aY5Hb4urDnUCly2vTJ7ExQeeaVS-52O7kjUr2v9VrAs=/aHR0cDovL3dlYnNpdGUvZm9sZGVyL2ltYWdlMi5wbmc= 656w, https://website/some,image.png 2x"/></picture>`
  360. output := RewriteDocumentWithRelativeProxyURL(r, input)
  361. if expected != output {
  362. t.Errorf(`Not expected output: got %s`, output)
  363. }
  364. }
  365. func TestProxyWithImageDataURL(t *testing.T) {
  366. os.Clearenv()
  367. os.Setenv("PROXY_OPTION", "all")
  368. os.Setenv("PROXY_MEDIA_TYPES", "image")
  369. var err error
  370. parser := config.NewParser()
  371. config.Opts, err = parser.ParseEnvironmentVariables()
  372. if err != nil {
  373. t.Fatalf(`Parsing failure: %v`, err)
  374. }
  375. r := mux.NewRouter()
  376. r.HandleFunc("/proxy/{encodedDigest}/{encodedURL}", func(w http.ResponseWriter, r *http.Request) {}).Name("proxy")
  377. input := `<img src="data:image/gif;base64,test">`
  378. expected := `<img src="data:image/gif;base64,test"/>`
  379. output := RewriteDocumentWithRelativeProxyURL(r, input)
  380. if expected != output {
  381. t.Errorf(`Not expected output: got %s`, output)
  382. }
  383. }
  384. func TestProxyWithImageSourceDataURL(t *testing.T) {
  385. os.Clearenv()
  386. os.Setenv("PROXY_OPTION", "all")
  387. os.Setenv("PROXY_MEDIA_TYPES", "image")
  388. var err error
  389. parser := config.NewParser()
  390. config.Opts, err = parser.ParseEnvironmentVariables()
  391. if err != nil {
  392. t.Fatalf(`Parsing failure: %v`, err)
  393. }
  394. r := mux.NewRouter()
  395. r.HandleFunc("/proxy/{encodedDigest}/{encodedURL}", func(w http.ResponseWriter, r *http.Request) {}).Name("proxy")
  396. input := `<picture><source srcset="data:image/gif;base64,test"/></picture>`
  397. expected := `<picture><source srcset="data:image/gif;base64,test"/></picture>`
  398. output := RewriteDocumentWithRelativeProxyURL(r, input)
  399. if expected != output {
  400. t.Errorf(`Not expected output: got %s`, output)
  401. }
  402. }
  403. func TestProxyFilterWithVideo(t *testing.T) {
  404. os.Clearenv()
  405. os.Setenv("PROXY_OPTION", "all")
  406. os.Setenv("PROXY_MEDIA_TYPES", "video")
  407. os.Setenv("PROXY_PRIVATE_KEY", "test")
  408. var err error
  409. parser := config.NewParser()
  410. config.Opts, err = parser.ParseEnvironmentVariables()
  411. if err != nil {
  412. t.Fatalf(`Parsing failure: %v`, err)
  413. }
  414. r := mux.NewRouter()
  415. r.HandleFunc("/proxy/{encodedDigest}/{encodedURL}", func(w http.ResponseWriter, r *http.Request) {}).Name("proxy")
  416. input := `<video poster="https://example.com/img.png" src="https://example.com/video.mp4"></video>`
  417. expected := `<video poster="/proxy/aDFfroYL57q5XsojIzATT6OYUCkuVSPXYJQAVrotnLw=/aHR0cHM6Ly9leGFtcGxlLmNvbS9pbWcucG5n" src="/proxy/0y3LR8zlx8S8qJkj1qWFOO6x3a-5yf2gLWjGIJV5yyc=/aHR0cHM6Ly9leGFtcGxlLmNvbS92aWRlby5tcDQ="></video>`
  418. output := RewriteDocumentWithRelativeProxyURL(r, input)
  419. if expected != output {
  420. t.Errorf(`Not expected output: got %s`, output)
  421. }
  422. }
  423. func TestProxyFilterVideoPoster(t *testing.T) {
  424. os.Clearenv()
  425. os.Setenv("PROXY_OPTION", "all")
  426. os.Setenv("PROXY_MEDIA_TYPES", "image")
  427. os.Setenv("PROXY_PRIVATE_KEY", "test")
  428. var err error
  429. parser := config.NewParser()
  430. config.Opts, err = parser.ParseEnvironmentVariables()
  431. if err != nil {
  432. t.Fatalf(`Parsing failure: %v`, err)
  433. }
  434. r := mux.NewRouter()
  435. r.HandleFunc("/proxy/{encodedDigest}/{encodedURL}", func(w http.ResponseWriter, r *http.Request) {}).Name("proxy")
  436. input := `<video poster="https://example.com/img.png" src="https://example.com/video.mp4"></video>`
  437. expected := `<video poster="/proxy/aDFfroYL57q5XsojIzATT6OYUCkuVSPXYJQAVrotnLw=/aHR0cHM6Ly9leGFtcGxlLmNvbS9pbWcucG5n" src="https://example.com/video.mp4"></video>`
  438. output := RewriteDocumentWithRelativeProxyURL(r, input)
  439. if expected != output {
  440. t.Errorf(`Not expected output: got %s`, output)
  441. }
  442. }