44 lines
1010 B
TypeScript
44 lines
1010 B
TypeScript
// This SSG page generates the token to prevent generating OG images with random
|
|
// parameters (`id`).
|
|
// Check pages/api/encrypted.tsx for more info.
|
|
|
|
import { createHmac } from 'node:crypto'
|
|
|
|
export async function getStaticProps({ params }) {
|
|
const hmac = createHmac('sha256', 'my_secret')
|
|
hmac.update(JSON.stringify({ id: params.id }))
|
|
const token = hmac.digest('hex')
|
|
|
|
return {
|
|
props: {
|
|
id: params.id,
|
|
token,
|
|
},
|
|
}
|
|
}
|
|
|
|
export function getStaticPaths() {
|
|
return {
|
|
paths: [
|
|
{ params: { id: 'a' } },
|
|
{ params: { id: 'b' } },
|
|
{ params: { id: 'c' } },
|
|
],
|
|
fallback: false,
|
|
}
|
|
}
|
|
|
|
export default function Page({ id, token }) {
|
|
return (
|
|
<div>
|
|
<h1>Encrypted Open Graph Image.</h1>
|
|
<p>Only /a, /b, /c with correct tokens are accessible:</p>
|
|
<a href={`/api/encrypted?id=${id}&token=${token}`} target="_blank" rel="noreferrer">
|
|
<code>
|
|
/api/encrypted?id={id}&token={token}
|
|
</code>
|
|
</a>
|
|
</div>
|
|
)
|
|
}
|