2022-04-14 20:18:47 -04:00
|
|
|
import type { GetServerSideProps } from "next"
|
2022-03-07 23:42:44 -05:00
|
|
|
|
2022-04-09 20:48:19 -04:00
|
|
|
import type { Post } from "@lib/types"
|
|
|
|
import PostPage from "@components/post-page"
|
2022-11-09 22:02:06 -05:00
|
|
|
import { USER_COOKIE_NAME } from "@lib/constants"
|
2022-03-06 19:46:59 -05:00
|
|
|
|
2022-03-22 23:06:15 -04:00
|
|
|
export type PostProps = {
|
2022-04-09 20:48:19 -04:00
|
|
|
post: Post
|
2022-04-12 19:48:12 -04:00
|
|
|
isProtected?: boolean
|
2022-03-21 17:20:20 -04:00
|
|
|
}
|
2022-03-07 01:16:08 -05:00
|
|
|
|
2022-04-12 19:48:12 -04:00
|
|
|
const PostView = ({ post, isProtected }: PostProps) => {
|
|
|
|
return <PostPage isProtected={isProtected} post={post} />
|
2022-03-06 19:46:59 -05:00
|
|
|
}
|
|
|
|
|
2022-04-09 20:48:19 -04:00
|
|
|
export const getServerSideProps: GetServerSideProps = async ({
|
|
|
|
params,
|
2022-04-12 19:48:12 -04:00
|
|
|
req,
|
2022-04-09 20:48:19 -04:00
|
|
|
res
|
|
|
|
}) => {
|
|
|
|
const post = await fetch(process.env.API_URL + `/posts/${params?.id}`, {
|
|
|
|
method: "GET",
|
|
|
|
headers: {
|
|
|
|
"Content-Type": "application/json",
|
2022-04-12 19:48:12 -04:00
|
|
|
"x-secret-key": process.env.SECRET_KEY || "",
|
|
|
|
Authorization: `Bearer ${req.cookies["drift-token"]}`
|
2022-04-09 20:48:19 -04:00
|
|
|
}
|
|
|
|
})
|
|
|
|
|
2022-04-12 19:48:12 -04:00
|
|
|
if (post.status === 401 || post.status === 403) {
|
|
|
|
return {
|
|
|
|
// can't access the post if it's private
|
|
|
|
redirect: {
|
|
|
|
destination: "/",
|
|
|
|
permanent: false
|
|
|
|
},
|
|
|
|
props: {}
|
|
|
|
}
|
|
|
|
} else if (post.status === 404 || !post.ok) {
|
2022-04-09 20:48:19 -04:00
|
|
|
return {
|
|
|
|
redirect: {
|
|
|
|
destination: "/404",
|
|
|
|
permanent: false
|
|
|
|
},
|
|
|
|
props: {}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2022-04-13 00:14:10 -04:00
|
|
|
const json = (await post.json()) as Post
|
|
|
|
const isAuthor = json.users?.find(
|
2022-11-09 22:02:06 -05:00
|
|
|
(user) => user.id === req.cookies[USER_COOKIE_NAME]
|
2022-04-13 00:14:10 -04:00
|
|
|
)
|
2022-04-12 19:48:12 -04:00
|
|
|
|
|
|
|
if (json.visibility === "public" || json.visibility === "unlisted") {
|
|
|
|
const sMaxAge = 60 * 60 * 12 // half a day
|
|
|
|
res.setHeader(
|
|
|
|
"Cache-Control",
|
|
|
|
`public, s-maxage=${sMaxAge}, max-age=${sMaxAge}`
|
|
|
|
)
|
|
|
|
} else if (json.visibility === "protected" && !isAuthor) {
|
|
|
|
return {
|
|
|
|
props: {
|
|
|
|
post: {
|
|
|
|
id: json.id,
|
|
|
|
visibility: json.visibility,
|
2022-04-13 00:14:10 -04:00
|
|
|
expiresAt: json.expiresAt
|
2022-04-12 19:48:12 -04:00
|
|
|
},
|
|
|
|
isProtected: true
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2022-04-09 20:48:19 -04:00
|
|
|
|
|
|
|
return {
|
|
|
|
props: {
|
2022-04-14 20:18:47 -04:00
|
|
|
post: json,
|
|
|
|
key: params?.id
|
2022-04-09 20:48:19 -04:00
|
|
|
}
|
|
|
|
}
|
2022-03-06 19:46:59 -05:00
|
|
|
}
|
|
|
|
|
2022-03-21 23:30:45 -04:00
|
|
|
export default PostView
|