You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

86 lines
2.1 KiB

import {
NextRequest,
NextResponse,
userAgent,
userAgentFromString,
} from 'next/server'
import prismaClient from '@/lib/prismaClient'
import { sendMail } from '@/lib/mail'
import { getServerSession, User } from 'next-auth'
import { authOptions } from '@/lib/auth'
export async function POST(req: NextRequest) {
const ip = req.ip || req.headers.get('x-forwarded-for')
const { browser, device, os, isBot, ua } = userAgent(req)
// const userAgentString = userAgentFromString(ua)
const body = await req.json()
const session = await getServerSession(authOptions as any)
if (!session) {
return NextResponse.json(
{
message: 'You must be logged in to request account deletion',
},
{ status: 401 }
)
}
// @ts-ignore
const currentUser = session?.user as User
if (!currentUser) {
return NextResponse.json(
{
message: 'You must be logged in to request account deletion',
},
{ status: 401 }
)
}
const category = 'account-deletion'
const message = body.message ?? 'No message provided'
try {
const result = await prismaClient.supportMessage.create({
data: {
user: currentUser.id,
category,
message,
ip,
userAgent: ua,
},
})
// send email to user
await sendMail({
to: currentUser.email,
cc: process.env.ADMIN_EMAIL,
subject: `Account deletion request submitted: ${category}-${result.id}`,
html: `<pre>
<h1>Account deletion request submitted</h1>
<p>Thank you for contacting us. We will get back to you soon.</p>
<p>Here is a copy of your message:</p>
<hr/>
<h2>Category</h2><br/>${category}
<h2>Message</h2><br/>${message}
<h2>Contact Information</h2>
<p>Name: ${currentUser.name}</p>
<p>Email: ${currentUser.email}</p>
</pre>`,
})
return NextResponse.json({
message: 'Support request submitted',
})
} catch (error) {
console.error(error)
return NextResponse.json(
{
message: `Support request failed to submit : ${error.message}`,
},
{ status: 400 }
)
}
}