({ request }: LoaderFunctionArgs)
| 4 | import { getUser } from "~/services/session.server"; |
| 5 | |
| 6 | export async function loader({ request }: LoaderFunctionArgs) { |
| 7 | const user = await getUser(request); |
| 8 | |
| 9 | const url = new URL(request.url); |
| 10 | const token = url.searchParams.get("token"); |
| 11 | |
| 12 | if (!token) { |
| 13 | return redirectWithErrorMessage( |
| 14 | "/", |
| 15 | request, |
| 16 | "Invalid invite URL. Please ask the person who invited you to send another invite.", |
| 17 | { ephemeral: false } |
| 18 | ); |
| 19 | } |
| 20 | |
| 21 | const invite = await getInviteFromToken({ token }); |
| 22 | if (!invite) { |
| 23 | return redirectWithErrorMessage( |
| 24 | "/", |
| 25 | request, |
| 26 | "Invite not found. Please ask the person who invited you to send another invite.", |
| 27 | { ephemeral: false } |
| 28 | ); |
| 29 | } |
| 30 | |
| 31 | if (!user) { |
| 32 | return redirectWithSuccessMessage("/", request, "Please log in to accept the invite.", { |
| 33 | ephemeral: false, |
| 34 | }); |
| 35 | } |
| 36 | |
| 37 | if (invite.email !== user.email) { |
| 38 | return redirectWithErrorMessage( |
| 39 | "/", |
| 40 | request, |
| 41 | `This invite is for ${invite.email}, but you are logged in as ${user.email}.`, |
| 42 | { ephemeral: false } |
| 43 | ); |
| 44 | } |
| 45 | |
| 46 | return redirectWithSuccessMessage("/", request, "Invite retrieved"); |
| 47 | } |
nothing calls this directly
no test coverage detected
searching dependent graphs…