From 02db0233ec73add6e981127dd5cfac3a01322400 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonas=20B=C3=A4ck?= Date: Wed, 6 Sep 2023 18:12:58 +0300 Subject: [PATCH 1/4] Simplify NextAuth callback, increase timeout --- pages/api/auth/[...nextauth].ts | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/pages/api/auth/[...nextauth].ts b/pages/api/auth/[...nextauth].ts index b654e20..5877c55 100644 --- a/pages/api/auth/[...nextauth].ts +++ b/pages/api/auth/[...nextauth].ts @@ -9,6 +9,9 @@ const options: NextAuthOptions = { clientId: process.env.KEYCLOAK_CLIENT_ID || 'strapi', clientSecret: process.env.KEYCLOAK_CLIENT_SECRET || 'strapi', issuer: process.env.KEYCLOAK_ISSUER, + httpOptions: { + timeout: 10000, + }, }), ], session: { @@ -17,16 +20,17 @@ const options: NextAuthOptions = { callbacks: { async session({ session, token }) { session.user.token = token.jwt - return { ...session, jwt: token.jwt, id: token.id } + return session }, async jwt({ token, user, account }) { if (user) { const response = await fetch( `${process.env.NEXT_PUBLIC_BASE_URL}/api/auth/keycloak/callback?access_token=${account?.access_token}` ) - const data = await response.json() - token.jwt = data.jwt - token.id = data.user.id + if (response.ok) { + const data = await response.json() + token.jwt = data.jwt + } } return token }, From 6a9bacb2d7ca764ed205828dd3ed0d759581dea3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonas=20B=C3=A4ck?= Date: Wed, 6 Sep 2023 18:26:39 +0300 Subject: [PATCH 2/4] Update marked version --- components/Page.tsx | 4 ++-- components/TableOfContents.tsx | 28 ++++++++++++---------------- lib/api/privatepage.ts | 4 ++-- package.json | 2 +- pages/nyheter/[slug].tsx | 4 ++-- yarn.lock | 8 ++++---- 6 files changed, 23 insertions(+), 27 deletions(-) diff --git a/components/Page.tsx b/components/Page.tsx index de548a5..133f7cf 100644 --- a/components/Page.tsx +++ b/components/Page.tsx @@ -1,6 +1,6 @@ import { NextPage } from 'next' import { PageType } from '@models/page' -import { marked } from 'marked' +import { marked, RendererObject } from 'marked' import { NavbarLink } from '@lib/api/navbar' import Header from '@components/header' import { NationLogo } from '@components/footer/Logos' @@ -9,7 +9,7 @@ import TableOfContents from '@components/TableOfContents' import PageSection from '@components/PageSection' import Unauthorized from '@components/Unauthorized' -const renderer: marked.RendererObject = { +const renderer: RendererObject = { image(href: string | null): string { return `bild` }, diff --git a/components/TableOfContents.tsx b/components/TableOfContents.tsx index 9000b36..f6843dd 100644 --- a/components/TableOfContents.tsx +++ b/components/TableOfContents.tsx @@ -6,22 +6,18 @@ const TableOfContents = ({ sections }: { sections: Section[] }) => { return ( <>

Innehållsförteckning

- - - {sections.map((section, i) => ( - - {section.attributes.title && ( - - {section.attributes.title} - - )} - - ))} - -
+ {sections.map( + (section, i) => + section.attributes.title && ( + + {section.attributes.title} + + ) + )} ) } diff --git a/lib/api/privatepage.ts b/lib/api/privatepage.ts index c566794..bffe8a1 100644 --- a/lib/api/privatepage.ts +++ b/lib/api/privatepage.ts @@ -3,10 +3,10 @@ import { PageType } from '@models/page' import strapi from '@lib/api/strapi' export async function fetchPrivatePage( - sessionToken: string, + sessionToken?: string, slug?: string ): Promise { - if (slug === undefined) return null + if (slug === undefined || sessionToken === undefined) return null const query = qs.stringify({ populate: { sections: { diff --git a/package.json b/package.json index 5b1051b..6fe11e2 100644 --- a/package.json +++ b/package.json @@ -20,7 +20,7 @@ "classnames": "^2.3.1", "framer-motion": "^10.13.0", "googleapis": "105", - "marked": "^5.1.0", + "marked": "^8.0.0", "next": "^13.4.6", "next-auth": "^4.23.1", "qs": "^6.11.0", diff --git a/pages/nyheter/[slug].tsx b/pages/nyheter/[slug].tsx index da222bd..b0c47fc 100644 --- a/pages/nyheter/[slug].tsx +++ b/pages/nyheter/[slug].tsx @@ -1,6 +1,6 @@ import { GetStaticPaths, GetStaticProps, NextPage } from 'next' import { PostType } from '@models/post' -import { marked } from 'marked' +import { marked, RendererObject } from 'marked' import { fetchPost, fetchPosts } from '@lib/api/post' import { getLayoutProps } from '@utils/helpers' import { NationLogo } from '@components/footer/Logos' @@ -14,7 +14,7 @@ type Props = { navbarLinks: NavbarLink[] } -const renderer: marked.RendererObject = { +const renderer: RendererObject = { image(href: string | null): string { return `bild` }, diff --git a/yarn.lock b/yarn.lock index 2027af4..55a695f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2076,10 +2076,10 @@ lru-cache@^6.0.0: dependencies: yallist "^4.0.0" -marked@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/marked/-/marked-5.1.0.tgz#cf51f03ba04dfb3469774029fd0106d258658767" - integrity sha512-z3/nBe7aTI8JDszlYLk7dDVNpngjw0o1ZJtrA9kIfkkHcIF+xH7mO23aISl4WxP83elU+MFROgahqdpd05lMEQ== +marked@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/marked/-/marked-8.0.0.tgz#e808c02daf9d72485477d3ff9a4e193fec94a4db" + integrity sha512-RI/D5csFVreNrFchdKFSdV38GDHJdD7OdmbNWYzGvApPb0A9pyypgfHC/FBH4ugmRE8cr7yg/TH7tu8585eMhA== merge-stream@^2.0.0: version "2.0.0" From 93f1012f07839cb6b1b015bff0bf4ccb376be7f5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonas=20B=C3=A4ck?= Date: Wed, 6 Sep 2023 18:26:49 +0300 Subject: [PATCH 3/4] Disable NextJs telemetry --- .env | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.env b/.env index c5e368a..5050146 100644 --- a/.env +++ b/.env @@ -1,2 +1,3 @@ NEXT_PUBLIC_BASE_URL=https://cms.tf.fi -NEXT_PUBLIC_GOOGLE_CALENDAR_ID=a2fmh06fcott173jeqasmfnfec@group.calendar.google.com \ No newline at end of file +NEXT_PUBLIC_GOOGLE_CALENDAR_ID=a2fmh06fcott173jeqasmfnfec@group.calendar.google.com +NEXT_TELEMETRY_DISABLED=1 \ No newline at end of file From 3b6bee272d4320efaf15b244a5adc88b8da2dfef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonas=20B=C3=A4ck?= Date: Wed, 6 Sep 2023 18:30:57 +0300 Subject: [PATCH 4/4] Reset session if fetching private page fails --- pages/medlem/[privatePage].tsx | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/pages/medlem/[privatePage].tsx b/pages/medlem/[privatePage].tsx index a6bda28..c0cf5c9 100644 --- a/pages/medlem/[privatePage].tsx +++ b/pages/medlem/[privatePage].tsx @@ -19,7 +19,7 @@ const PrivatePage: NextPage = ({ session, ...props }: PrivatePageProps) => ( - + ) export const getServerSideProps: GetServerSideProps<{ @@ -27,10 +27,12 @@ export const getServerSideProps: GetServerSideProps<{ }> = async (context) => { const query = context.query.privatePage const slug = query instanceof Array ? query[0] : query - const session = await getSession(context) - const page = session?.user?.token - ? await fetchPrivatePage(session?.user.token, slug) - : null + let session = await getSession(context) + const page = await fetchPrivatePage(session?.user.token, slug) + // Reset the session if page fetch failed as it's most likely caused by an invalid session token + if (page === null) { + session = null + } const { logos, navbarLinks } = await getLayoutProps() return { props: {