2022-02-11 17:24:33 +00:00
|
|
|
import crypto from 'crypto'
|
2023-08-10 10:41:10 +00:00
|
|
|
import { encode } from 'urlsafe-base64'
|
2022-02-11 17:24:33 +00:00
|
|
|
import { env } from '../env'
|
|
|
|
|
|
|
|
|
|
function signImageProxyUrl(url: string): string {
|
|
|
|
|
return encode(
|
|
|
|
|
crypto.createHmac('sha256', env.imageProxy.secretKey).update(url).digest()
|
|
|
|
|
)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export function createImageProxyUrl(
|
|
|
|
|
url: string,
|
|
|
|
|
width = 0,
|
|
|
|
|
height = 0
|
|
|
|
|
): string {
|
|
|
|
|
if (!env.imageProxy.url || !env.imageProxy.secretKey) {
|
|
|
|
|
return url
|
|
|
|
|
}
|
|
|
|
|
|
2023-08-10 10:41:10 +00:00
|
|
|
// url is already signed
|
|
|
|
|
if (url.startsWith(env.imageProxy.url)) {
|
|
|
|
|
return url
|
|
|
|
|
}
|
|
|
|
|
|
2022-02-11 17:24:33 +00:00
|
|
|
const urlWithOptions = `${url}#${width}x${height}`
|
|
|
|
|
const signature = signImageProxyUrl(urlWithOptions)
|
|
|
|
|
|
|
|
|
|
return `${env.imageProxy.url}/${width}x${height},s${signature}/${url}`
|
|
|
|
|
}
|
2023-11-20 09:28:34 +00:00
|
|
|
|
2024-05-15 09:49:31 +00:00
|
|
|
export const createThumbnailProxyUrl = (url: string): string =>
|
2023-11-20 09:28:34 +00:00
|
|
|
createImageProxyUrl(url, 320, 320)
|