feat(WEB-132): add seamless login flow
This commit is contained in:
@@ -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 {
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user