16 lines
1.3 KiB
TypeScript

import {getServerSession} from 'next-auth'
import {redirect} from 'next/navigation'
import {authOptions} from '@/lib/auth'
import {desktopAuthorization} from '@/lib/desktop-client/contract.mjs'
import {desktopUser} from '@/lib/desktop-client/service'
import AuthorizeClient from './ui'
export const dynamic='force-dynamic'
export const metadata={title:'授权详情页工作台',referrer:'no-referrer'}
export default async function AuthorizePage({searchParams}:{searchParams:Record<string,string|string[]|undefined>}){
const values=Object.fromEntries(Object.entries(searchParams).filter(([,value])=>typeof value==='string')) as Record<string,string>
const session=await getServerSession(authOptions)
if(!session?.user)redirect('/login?redirect='+encodeURIComponent('/client/authorize?'+new URLSearchParams(values)))
try{desktopAuthorization(values);const account=await desktopUser((session.user as {id:string}).id);return <AuthorizeClient account={account} request={values}/>}
catch(error){return <main style={{maxWidth:460,margin:'15vh auto',padding:24}}><h1 style={{fontSize:24}}>无法授权客户端</h1><p style={{marginTop:16}}>{error instanceof Error?error.message:'请从客户端重新发起登录'}</p><a href="/assets/material-library">返回素材库</a></main>}
}