redirecter for ao3 that adds opengraph metadata

fix image gen

Changed files
+7 -7
src
app
api
works
[workId]
chapters
[chapterId]
works
[workId]
chapters
[chapterId]
preview
preview
lib
+1 -1
src/app/api/works/[workId]/chapters/[chapterId]/route.js
···
const params = await req.nextUrl.searchParams
const domain = await req.nextUrl.hostname
const subdomain = domain.split(".").length > 1 ? domain.split(".")[0] : null
-
const archive = params.get('archive')
+
const archive = params ? params.get('archive') : null
if (subdomain) setArchiveBaseUrl('https://'+siteMap[subdomain])
if (archive) setArchiveBaseUrl(archive)
const work = await getWork({workId: workId, chapterId: chapterId})
+2 -2
src/app/works/[workId]/chapters/[chapterId]/preview/route.js
···
export async function GET(req, ctx) {
const { workId, chapterId } = await ctx.params
const props = await req.nextUrl.searchParams
-
const addr = `${props.has('archive') ? props.get('archive').replace("https://", "")+"/" : 'archiveofourown.org/'}works/${workId}/chapters/${chapterId}`
-
const domainParam = props.has('archive') ? `?archive=${props.get('archive')}` : ''
+
const addr = `${props && props.has('archive') ? props.get('archive').replace("https://", "")+"/" : 'archiveofourown.org/'}works/${workId}/chapters/${chapterId}`
+
const domainParam = props && props.has('archive') ? `?archive=${props.get('archive')}` : ''
const work = await fetch(`http://${process.env.DOMAIN}/api/works/${workId}${domainParam}`)
const data = await work.json()
const imageParams = await sanitizeData({type: 'work', data: data, props: props})
+2 -2
src/app/works/[workId]/preview/route.js
···
export async function GET(req, ctx) {
const { workId } = await ctx.params
const props = await req.nextUrl.searchParams
-
const addr = `${props.has('archive') ? props.get('archive').replace("https://", "")+"/" : 'archiveofourown.org/'}works/${workId}`
-
const domainParam = props.has('archive') ? `?archive=${props.get('archive')}` : ''
+
const addr = `${props && props.has('archive') ? props.get('archive').replace("https://", "")+"/" : 'archiveofourown.org/'}works/${workId}`
+
const domainParam = props && props.has('archive') ? `?archive=${props.get('archive')}` : ''
const work = await fetch(`http://${process.env.DOMAIN}/api/works/${workId}${domainParam}`)
const data = await work.json()
const imageParams = await sanitizeData({type: 'work', data: data, props: props})
+2 -2
src/lib/sanitizeData.js
···
}
export default async function sanitizeData ({ type, data, props}) {
-
const propsParsed = sanitizeProps(querystring.parse(props.toString()))
-
const archive = props.has('archive') ? props.get('archive') : 'https://archiveofourown.org'
+
const propsParsed = sanitizeProps(querystring.parse(props ? props.toString() : ''))
+
const archive = props && props.has('archive') ? props.get('archive') : 'https://archiveofourown.org'
const baseFont = propsParsed.baseFont ? propsParsed.baseFont : process.env.DEFAULT_BASE_FONT
const baseFontData = baseFonts[baseFont]
const titleFont = propsParsed.titleFont ? propsParsed.titleFont : process.env.DEFAULT_TITLE_FONT