60 lines
1.1 KiB
TypeScript
60 lines
1.1 KiB
TypeScript
import cookie from "cookie"
|
|
import type { GetServerSideProps } from "next"
|
|
import { Post } from "@lib/types"
|
|
import PostPage from "@components/post-page"
|
|
|
|
export type PostProps = {
|
|
post: Post
|
|
}
|
|
|
|
const Post = ({ post }: PostProps) => {
|
|
return <PostPage post={post} />
|
|
}
|
|
|
|
export const getServerSideProps: GetServerSideProps = async (context) => {
|
|
const headers = context.req.headers
|
|
const host = headers.host
|
|
const driftToken = cookie.parse(headers.cookie || "")[`drift-token`]
|
|
|
|
if (context.query.id) {
|
|
const post = await fetch(
|
|
"http://" + host + `/server-api/posts/${context.query.id}`,
|
|
{
|
|
method: "GET",
|
|
headers: {
|
|
"Content-Type": "application/json",
|
|
Authorization: `Bearer ${driftToken}`,
|
|
"x-secret-key": process.env.SECRET_KEY || ""
|
|
}
|
|
}
|
|
)
|
|
|
|
if (!post.ok || post.status !== 200) {
|
|
return {
|
|
redirect: {
|
|
destination: "/",
|
|
permanent: false
|
|
}
|
|
}
|
|
}
|
|
try {
|
|
const json = await post.json()
|
|
|
|
return {
|
|
props: {
|
|
post: json
|
|
}
|
|
}
|
|
} catch (e) {
|
|
console.log(e)
|
|
}
|
|
}
|
|
|
|
return {
|
|
props: {
|
|
post: null
|
|
}
|
|
}
|
|
}
|
|
|
|
export default Post
|