@@ -58,7 +58,14 @@ export default defineEventHandler(async event => {
5858 // Verify HMAC signature to ensure this URL was generated server-side
5959 const { imageProxySecret } = useRuntimeConfig ( )
6060 if ( ! imageProxySecret || ! verifyImageUrl ( url , sig , imageProxySecret ) ) {
61- return { place : 'sig' , url, sig, reqUrl : event . node . req . url , reqOrigUrl : event . node . req . originalUrl , imageProxySecret}
61+ return {
62+ place : 'sig' ,
63+ url,
64+ sig,
65+ reqUrl : event . node . req . url ,
66+ reqOrigUrl : event . node . req . originalUrl ,
67+ imageProxySecret,
68+ }
6269 // throw createError({
6370 // statusCode: 403,
6471 // message: 'Invalid signature.',
@@ -67,7 +74,13 @@ export default defineEventHandler(async event => {
6774
6875 // Validate URL syntactically
6976 if ( ! isAllowedImageUrl ( url ) ) {
70- return { place : 'isAllowedImageUrl' , url, sig, reqUrl : event . node . req . url , reqOrigUrl : event . node . req . originalUrl }
77+ return {
78+ place : 'isAllowedImageUrl' ,
79+ url,
80+ sig,
81+ reqUrl : event . node . req . url ,
82+ reqOrigUrl : event . node . req . originalUrl ,
83+ }
7184 // throw createError({
7285 // statusCode: 400,
7386 // message: 'Invalid or disallowed image URL.',
@@ -77,7 +90,13 @@ export default defineEventHandler(async event => {
7790 // Resolve hostname via DNS and validate the resolved IP is not private.
7891 // This prevents DNS rebinding attacks where a hostname resolves to a private IP.
7992 if ( ! ( await resolveAndValidateHost ( url ) ) ) {
80- return { place : 'resolveAndValidateHost' , url, sig, reqUrl : event . node . req . url , reqOrigUrl : event . node . req . originalUrl }
93+ return {
94+ place : 'resolveAndValidateHost' ,
95+ url,
96+ sig,
97+ reqUrl : event . node . req . url ,
98+ reqOrigUrl : event . node . req . originalUrl ,
99+ }
81100 // throw createError({
82101 // statusCode: 400,
83102 // message: 'Invalid or disallowed image URL.',
@@ -115,15 +134,27 @@ export default defineEventHandler(async event => {
115134
116135 // Validate the redirect target before following it
117136 if ( ! isAllowedImageUrl ( redirectUrl ) ) {
118- return { place : 'isAllowedImageUrl 2' , url, sig, reqUrl : event . node . req . url , reqOrigUrl : event . node . req . originalUrl }
137+ return {
138+ place : 'isAllowedImageUrl 2' ,
139+ url,
140+ sig,
141+ reqUrl : event . node . req . url ,
142+ reqOrigUrl : event . node . req . originalUrl ,
143+ }
119144 // throw createError({
120145 // statusCode: 400,
121146 // message: 'Redirect to disallowed URL.',
122147 // })
123148 }
124149
125150 if ( ! ( await resolveAndValidateHost ( redirectUrl ) ) ) {
126- return { place : 'resolveAndValidateHost 2' , url, sig, reqUrl : event . node . req . url , reqOrigUrl : event . node . req . originalUrl }
151+ return {
152+ place : 'resolveAndValidateHost 2' ,
153+ url,
154+ sig,
155+ reqUrl : event . node . req . url ,
156+ reqOrigUrl : event . node . req . originalUrl ,
157+ }
127158 // throw createError({
128159 // statusCode: 400,
129160 // message: 'Redirect to disallowed URL.',
@@ -136,7 +167,13 @@ export default defineEventHandler(async event => {
136167 }
137168
138169 if ( ! response ) {
139- return { place : 'response' , url, sig, reqUrl : event . node . req . url , reqOrigUrl : event . node . req . originalUrl }
170+ return {
171+ place : 'response' ,
172+ url,
173+ sig,
174+ reqUrl : event . node . req . url ,
175+ reqOrigUrl : event . node . req . originalUrl ,
176+ }
140177 // throw createError({
141178 // statusCode: 502,
142179 // message: 'Failed to fetch image.',
@@ -146,19 +183,31 @@ export default defineEventHandler(async event => {
146183 // Check if we exhausted the redirect limit
147184 if ( REDIRECT_STATUSES . has ( response . status ) ) {
148185 await response . body ?. cancel ( )
149- return { place : 'response 2' , url, sig, reqUrl : event . node . req . url , reqOrigUrl : event . node . req . originalUrl }
186+ return {
187+ place : 'response 2' ,
188+ url,
189+ sig,
190+ reqUrl : event . node . req . url ,
191+ reqOrigUrl : event . node . req . originalUrl ,
192+ }
150193 // throw createError({
151194 // statusCode: 502,
152- // message: 'Too many redirects.',
195+ // message: 'Too many redirects.',
153196 // })
154197 }
155198
156199 if ( ! response . ok ) {
157200 await response . body ?. cancel ( )
158- return { place : 'response 3' , url, sig, reqUrl : event . node . req . url , reqOrigUrl : event . node . req . originalUrl }
201+ return {
202+ place : 'response 3' ,
203+ url,
204+ sig,
205+ reqUrl : event . node . req . url ,
206+ reqOrigUrl : event . node . req . originalUrl ,
207+ }
159208 // throw createError({
160209 // statusCode: response.status === 404 ? 404 : 502,
161- // message: `Failed to fetch image: ${response.status}`,
210+ // message: `Failed to fetch image: ${response.status}`,
162211 // })
163212 }
164213
@@ -168,10 +217,16 @@ export default defineEventHandler(async event => {
168217 // embedded JavaScript execution (SVGs can contain <script> tags, event handlers, etc.)
169218 if ( ! contentType . startsWith ( 'image/' ) || contentType . includes ( 'svg' ) ) {
170219 await response . body ?. cancel ( )
171- return { place : 'contentType' , url, sig, reqUrl : event . node . req . url , reqOrigUrl : event . node . req . originalUrl }
220+ return {
221+ place : 'contentType' ,
222+ url,
223+ sig,
224+ reqUrl : event . node . req . url ,
225+ reqOrigUrl : event . node . req . originalUrl ,
226+ }
172227 // throw createError({
173228 // statusCode: 400,
174- // message: 'URL does not point to an allowed image type.',
229+ // message: 'URL does not point to an allowed image type.',
175230 // })
176231 }
177232
@@ -234,11 +289,25 @@ export default defineEventHandler(async event => {
234289 } catch ( error : unknown ) {
235290 // Re-throw H3 errors
236291 if ( error && typeof error === 'object' && 'statusCode' in error ) {
237- return { place : 'error' , url, sig, reqUrl : event . node . req . url , reqOrigUrl : event . node . req . originalUrl , error}
292+ return {
293+ place : 'error' ,
294+ url,
295+ sig,
296+ reqUrl : event . node . req . url ,
297+ reqOrigUrl : event . node . req . originalUrl ,
298+ error,
299+ }
238300 // throw error
239301 }
240302
241- return { place : 'error 2' , url, sig, reqUrl : event . node . req . url , reqOrigUrl : event . node . req . originalUrl , error}
303+ return {
304+ place : 'error 2' ,
305+ url,
306+ sig,
307+ reqUrl : event . node . req . url ,
308+ reqOrigUrl : event . node . req . originalUrl ,
309+ error,
310+ }
242311 // throw createError({
243312 // statusCode: 502,
244313 // message: 'Failed to proxy image.',
0 commit comments