feat(WEB-132): add seamless login flow

This commit is contained in:
Michael Zetterberg
2024-04-10 12:48:44 +02:00
parent 7093a0b2dd
commit 7be4766c00
5 changed files with 71 additions and 10 deletions

View File

@@ -2,18 +2,59 @@ import { NextRequest, NextResponse } from "next/server"
import { AuthError } from "next-auth"
import { signIn } from "@/auth"
import { badRequest } from "@/server/errors/next"
import type { Lang } from "@/constants/languages"
import { Lang } from "@/constants/languages"
import { env } from "@/env/server"
import { badRequest, internalServerError } from "@/server/errors/next"
export async function GET(
request: NextRequest,
context: { params: { lang: Lang } }
) {
const redirectTo =
const returnUrl = request.headers.get("x-returnurl")
// If all else fails, always redirect to startpage
const finalDestination =
returnUrl ||
request.headers.get("x-redirect-to") ||
request.nextUrl.searchParams.get("redirectTo") ||
undefined
request.headers.get("Referer") ||
"/"
let redirectTo = finalDestination
if (!returnUrl) {
// This is a regular login request, not a seamless login request
// We should initiate the seamless login flow
try {
let redirectUrlValue
switch (context.params.lang) {
case Lang.da:
redirectUrlValue = env.SEAMLESS_LOGIN_DA
break
case Lang.de:
redirectUrlValue = env.SEAMLESS_LOGIN_DE
break
case Lang.en:
redirectUrlValue = env.SEAMLESS_LOGIN_EN
break
case Lang.fi:
redirectUrlValue = env.SEAMLESS_LOGIN_FI
break
case Lang.no:
redirectUrlValue = env.SEAMLESS_LOGIN_NO
break
case Lang.sv:
redirectUrlValue = env.SEAMLESS_LOGIN_SV
break
}
const redirectUrl = new URL(redirectUrlValue)
redirectUrl.searchParams.set("returnurl", finalDestination)
redirectTo = redirectUrl.toString()
} catch (e) {
console.error("Unable to create URL for seamless login")
console.error(e)
return internalServerError()
}
}
try {
/**