Fix account service API URL joining (#624)

This commit is contained in:
shenlan 2025-11-01 21:53:15 +08:00 committed by GitHub
parent 9daf5a3378
commit cde2ccdf80
14 changed files with 41 additions and 36 deletions

View File

@ -2,11 +2,11 @@ export const dynamic = 'force-dynamic'
import { NextRequest, NextResponse } from 'next/server'
import { getAccountServiceBaseUrl } from '@lib/serviceConfig'
import { getAccountServiceApiBaseUrl } from '@lib/serviceConfig'
import { getAccountSession, userHasRole } from '@server/account/session'
import type { AccountUserRole } from '@server/account/session'
const ACCOUNT_API_BASE = `${getAccountServiceBaseUrl()}/api/auth`
const ACCOUNT_API_BASE = getAccountServiceApiBaseUrl()
const READ_ROLES: AccountUserRole[] = ['admin', 'operator']
const WRITE_ROLES: AccountUserRole[] = ['admin']

View File

@ -2,11 +2,11 @@ export const dynamic = 'force-dynamic'
import { NextRequest, NextResponse } from 'next/server'
import { getAccountServiceBaseUrl } from '@lib/serviceConfig'
import { getAccountServiceApiBaseUrl } from '@lib/serviceConfig'
import { getAccountSession, userHasRole } from '@server/account/session'
import type { AccountUserRole } from '@server/account/session'
const ACCOUNT_API_BASE = `${getAccountServiceBaseUrl()}/api/auth`
const ACCOUNT_API_BASE = getAccountServiceApiBaseUrl()
const REQUIRED_ROLES: AccountUserRole[] = ['admin']
type ErrorPayload = {

View File

@ -2,11 +2,11 @@ export const dynamic = 'force-dynamic'
import { NextRequest, NextResponse } from 'next/server'
import { getAccountServiceBaseUrl } from '@lib/serviceConfig'
import { getAccountServiceApiBaseUrl } from '@lib/serviceConfig'
import { getAccountSession, userHasRole } from '@server/account/session'
import type { AccountUserRole } from '@server/account/session'
const ACCOUNT_API_BASE = `${getAccountServiceBaseUrl()}/api/auth`
const ACCOUNT_API_BASE = getAccountServiceApiBaseUrl()
const ALLOWED_ROLES: AccountUserRole[] = ['admin', 'operator']

View File

@ -2,10 +2,9 @@ import { cookies } from 'next/headers'
import { NextRequest, NextResponse } from 'next/server'
import { applyMfaCookie, applySessionCookie, clearMfaCookie, clearSessionCookie, deriveMaxAgeFromExpires, MFA_COOKIE_NAME } from '@lib/authGateway'
import { getAccountServiceBaseUrl } from '@lib/serviceConfig'
import { getAccountServiceApiBaseUrl } from '@lib/serviceConfig'
const ACCOUNT_SERVICE_URL = getAccountServiceBaseUrl()
const ACCOUNT_API_BASE = `${ACCOUNT_SERVICE_URL}/api/auth`
const ACCOUNT_API_BASE = getAccountServiceApiBaseUrl()
type LoginPayload = {
email?: string

View File

@ -2,10 +2,9 @@ import { cookies } from 'next/headers'
import { NextRequest, NextResponse } from 'next/server'
import { SESSION_COOKIE_NAME, clearSessionCookie } from '@lib/authGateway'
import { getAccountServiceBaseUrl } from '@lib/serviceConfig'
import { getAccountServiceApiBaseUrl } from '@lib/serviceConfig'
const ACCOUNT_SERVICE_URL = getAccountServiceBaseUrl()
const ACCOUNT_API_BASE = `${ACCOUNT_SERVICE_URL}/api/auth`
const ACCOUNT_API_BASE = getAccountServiceApiBaseUrl()
export async function POST(request: NextRequest) {
void request

View File

@ -2,10 +2,9 @@ import { cookies } from 'next/headers'
import { NextRequest, NextResponse } from 'next/server'
import { applyMfaCookie, MFA_COOKIE_NAME, SESSION_COOKIE_NAME } from '@lib/authGateway'
import { getAccountServiceBaseUrl } from '@lib/serviceConfig'
import { getAccountServiceApiBaseUrl } from '@lib/serviceConfig'
const ACCOUNT_SERVICE_URL = getAccountServiceBaseUrl()
const ACCOUNT_API_BASE = `${ACCOUNT_SERVICE_URL}/api/auth`
const ACCOUNT_API_BASE = getAccountServiceApiBaseUrl()
// This Next.js route proxies MFA provisioning requests to the account service.
// The UI calls /api/auth/mfa/setup, which in turn forwards to the Go backend

View File

@ -2,10 +2,9 @@ import { cookies } from 'next/headers'
import { NextRequest, NextResponse } from 'next/server'
import { MFA_COOKIE_NAME, SESSION_COOKIE_NAME } from '@lib/authGateway'
import { getAccountServiceBaseUrl } from '@lib/serviceConfig'
import { getAccountServiceApiBaseUrl } from '@lib/serviceConfig'
const ACCOUNT_SERVICE_URL = getAccountServiceBaseUrl()
const ACCOUNT_API_BASE = `${ACCOUNT_SERVICE_URL}/api/auth`
const ACCOUNT_API_BASE = getAccountServiceApiBaseUrl()
export async function GET(request: NextRequest) {
const cookieStore = cookies()

View File

@ -9,10 +9,9 @@ import {
deriveMaxAgeFromExpires,
MFA_COOKIE_NAME,
} from '@lib/authGateway'
import { getAccountServiceBaseUrl } from '@lib/serviceConfig'
import { getAccountServiceApiBaseUrl } from '@lib/serviceConfig'
const ACCOUNT_SERVICE_URL = getAccountServiceBaseUrl()
const ACCOUNT_API_BASE = `${ACCOUNT_SERVICE_URL}/api/auth`
const ACCOUNT_API_BASE = getAccountServiceApiBaseUrl()
type VerifyPayload = {
token?: string

View File

@ -1,9 +1,8 @@
import { NextRequest, NextResponse } from 'next/server'
import { getAccountServiceBaseUrl } from '@lib/serviceConfig'
import { getAccountServiceApiBaseUrl } from '@lib/serviceConfig'
const ACCOUNT_SERVICE_URL = getAccountServiceBaseUrl()
const ACCOUNT_API_BASE = `${ACCOUNT_SERVICE_URL}/api/auth`
const ACCOUNT_API_BASE = getAccountServiceApiBaseUrl()
type RegistrationPayload = {
name?: string

View File

@ -2,10 +2,9 @@ import { cookies } from 'next/headers'
import { NextRequest, NextResponse } from 'next/server'
import { SESSION_COOKIE_NAME, clearSessionCookie } from '@lib/authGateway'
import { getAccountServiceBaseUrl } from '@lib/serviceConfig'
import { getAccountServiceApiBaseUrl } from '@lib/serviceConfig'
const ACCOUNT_SERVICE_URL = getAccountServiceBaseUrl()
const ACCOUNT_API_BASE = `${ACCOUNT_SERVICE_URL}/api/auth`
const ACCOUNT_API_BASE = getAccountServiceApiBaseUrl()
type AccountUser = {
id?: string

View File

@ -1,9 +1,8 @@
import { NextRequest, NextResponse } from 'next/server'
import { getAccountServiceBaseUrl } from '@lib/serviceConfig'
import { getAccountServiceApiBaseUrl } from '@lib/serviceConfig'
const ACCOUNT_SERVICE_URL = getAccountServiceBaseUrl()
const ACCOUNT_API_BASE = `${ACCOUNT_SERVICE_URL}/api/auth`
const ACCOUNT_API_BASE = getAccountServiceApiBaseUrl()
type VerifyPayload = {
email?: string

View File

@ -1,9 +1,8 @@
import { NextRequest, NextResponse } from 'next/server'
import { getAccountServiceBaseUrl } from '@lib/serviceConfig'
import { getAccountServiceApiBaseUrl } from '@lib/serviceConfig'
const ACCOUNT_SERVICE_URL = getAccountServiceBaseUrl()
const ACCOUNT_API_BASE = `${ACCOUNT_SERVICE_URL}/api/auth`
const ACCOUNT_API_BASE = getAccountServiceApiBaseUrl()
type SendPayload = {
email?: string

View File

@ -210,6 +210,21 @@ export function getAccountServiceBaseUrl(): string {
return normalizeBrowserBaseUrl(resolved)
}
export function getAccountServiceApiBaseUrl(): string {
const accountBaseUrl = getAccountServiceBaseUrl()
const apiPath = '/api/auth/'
try {
const url = new URL(apiPath, accountBaseUrl)
return normalizeBaseUrl(url.toString())
} catch (error) {
if (process.env.NODE_ENV !== 'production') {
console.warn('Failed to resolve account service API base URL, falling back to concatenation', error)
}
const normalizedBase = normalizeBaseUrl(accountBaseUrl)
return normalizeBaseUrl(`${normalizedBase}${apiPath}`)
}
}
export function getServerServiceBaseUrl(): string {
const configured = readEnvValue(
'SERVER_SERVICE_URL',

View File

@ -4,10 +4,9 @@ import { cookies } from 'next/headers'
import type { NextRequest } from 'next/server'
import { SESSION_COOKIE_NAME } from '@lib/authGateway'
import { getAccountServiceBaseUrl } from '@lib/serviceConfig'
import { getAccountServiceApiBaseUrl } from '@lib/serviceConfig'
const ACCOUNT_SERVICE_BASE = getAccountServiceBaseUrl()
const ACCOUNT_API_BASE = `${ACCOUNT_SERVICE_BASE}/api/auth`
const ACCOUNT_API_BASE = getAccountServiceApiBaseUrl()
export type AccountUserRole = 'guest' | 'user' | 'operator' | 'admin'