<feed xmlns='http://www.w3.org/2005/Atom'>
<title>tokyo-livehouse-events/app/routes/api.image.ts, branch master</title>
<subtitle>Unnamed repository; edit this file 'description' to name the repository.
</subtitle>
<link rel='alternate' type='text/html' href='http://git.yyamashita.com/tokyo-livehouse-events/'/>
<entry>
<title>Fix image proxy 400 for application/octet-stream responses</title>
<updated>2026-06-17T13:41:55+00:00</updated>
<author>
<name>yyamashita</name>
<email>yyamashita@hetzner.yyamashita.com</email>
</author>
<published>2026-06-17T13:41:55+00:00</published>
<link rel='alternate' type='text/html' href='http://git.yyamashita.com/tokyo-livehouse-events/commit/?id=243d222c35f4607ac13a400e827333f44a0f44c7'/>
<id>243d222c35f4607ac13a400e827333f44a0f44c7</id>
<content type='text'>
GCS-backed Active Storage (omatsuri.tech, used by rinky.info venues)
returns application/octet-stream instead of image/*. Detect actual image
type from magic bytes (JPEG/PNG/GIF/WebP) and serve with correct
Content-Type. Also add X-Content-Type-Options: nosniff.

Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
GCS-backed Active Storage (omatsuri.tech, used by rinky.info venues)
returns application/octet-stream instead of image/*. Detect actual image
type from magic bytes (JPEG/PNG/GIF/WebP) and serve with correct
Content-Type. Also add X-Content-Type-Options: nosniff.

Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>Add image proxy endpoint to avoid mixed content issues</title>
<updated>2026-06-17T13:27:47+00:00</updated>
<author>
<name>yyamashita</name>
<email>yyamashita@hetzner.yyamashita.com</email>
</author>
<published>2026-06-17T13:27:47+00:00</published>
<link rel='alternate' type='text/html' href='http://git.yyamashita.com/tokyo-livehouse-events/commit/?id=5f653a4c9f7c76d461ee4377fb4e025771cff872'/>
<id>5f653a4c9f7c76d461ee4377fb4e025771cff872</id>
<content type='text'>
Serve external event images through /api/image?url=&lt;encoded&gt; so HTTP
image URLs from venue sites are fetched server-side and delivered over
HTTPS. Validates Content-Type is image/*, blocks private IPs (SSRF),
and caches responses in memory (24h TTL, 200-entry LRU).

Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Serve external event images through /api/image?url=&lt;encoded&gt; so HTTP
image URLs from venue sites are fetched server-side and delivered over
HTTPS. Validates Content-Type is image/*, blocks private IPs (SSRF),
and caches responses in memory (24h TTL, 200-entry LRU).

Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;
</pre>
</div>
</content>
</entry>
</feed>
