fix(SW-3627): Pass social session user token to payment callback apge * Pass social session user token to payment callback apge Approved-by: Linus Flood
76 lines
1.4 KiB
TypeScript
76 lines
1.4 KiB
TypeScript
import "server-only"
|
|
|
|
import { getIronSession } from "iron-session"
|
|
import { cookies } from "next/headers"
|
|
|
|
import { dt } from "@scandic-hotels/common/dt"
|
|
|
|
import { env } from "@/env/server"
|
|
|
|
type SocialSession = {
|
|
access_token: string
|
|
refresh_token?: string
|
|
expires_at: string
|
|
}
|
|
async function internalGetSession() {
|
|
return await getIronSession<SocialSession>(await cookies(), {
|
|
password: env.IRON_SESSION_SECRET,
|
|
cookieName: "scandic_session",
|
|
})
|
|
}
|
|
|
|
export async function getSocialSession() {
|
|
const session = await internalGetSession()
|
|
|
|
if (!session?.access_token) {
|
|
return null
|
|
}
|
|
|
|
return session
|
|
}
|
|
|
|
export async function createSocialSession({
|
|
access_token,
|
|
refresh_token,
|
|
expires_in,
|
|
}: {
|
|
access_token: string
|
|
expires_in: number
|
|
refresh_token?: string
|
|
}) {
|
|
const session = await internalGetSession()
|
|
|
|
session.access_token = access_token
|
|
session.refresh_token = refresh_token
|
|
session.expires_at = dt()
|
|
.add(expires_in * 1000)
|
|
.toISOString()
|
|
|
|
await session.save()
|
|
}
|
|
|
|
export async function destroySocialSession() {
|
|
const session = await internalGetSession()
|
|
if (!session) return
|
|
|
|
session.destroy()
|
|
}
|
|
|
|
export function isValidSocialSession(
|
|
session: SocialSession | null
|
|
): session is SocialSession {
|
|
if (!session) {
|
|
return false
|
|
}
|
|
|
|
if (!session.access_token) {
|
|
return false
|
|
}
|
|
|
|
if (session.expires_at && dt(session.expires_at).isBefore(dt())) {
|
|
return false
|
|
}
|
|
|
|
return true
|
|
}
|