feat: Adjust node filtering to display internal agents in sandbox mode for both agent route and Vless QR card.

This commit is contained in:
Haitao Pan 2026-02-06 18:51:55 +08:00
parent c9ff466609
commit d2f8158594
3 changed files with 39 additions and 11 deletions

View File

@ -73,16 +73,19 @@ export async function POST(request: NextRequest) {
const response = NextResponse.json({ ok: true, assumed: SANDBOX_EMAIL })
// Backup current root session token as a host-only cookie (do NOT set domain).
response.cookies.set({
name: ROOT_BACKUP_COOKIE,
value: session.token,
httpOnly: true,
secure: secureCookies(),
sameSite: 'lax',
path: '/',
maxAge: deriveMaxAgeFromExpires(payload.expiresAt),
})
// Backup current root session token only if it's NOT already an assumed session.
// Check if the current user is NOT the sandbox user.
if (user.email.toLowerCase() !== SANDBOX_EMAIL) {
response.cookies.set({
name: ROOT_BACKUP_COOKIE,
value: session.token,
httpOnly: true,
secure: secureCookies(),
sameSite: 'lax',
path: '/',
maxAge: deriveMaxAgeFromExpires(payload.expiresAt),
})
}
// Switch main session to sandbox token.
applySessionCookie(response, payload.token, deriveMaxAgeFromExpires(payload.expiresAt))

View File

@ -96,12 +96,25 @@ export function applySessionCookie(response: NextResponse, token: string, maxAge
}
export function clearSessionCookie(response: NextResponse) {
const domain = resolveCookieDomain()
// Always clear the host-only cookie.
response.cookies.set({
name: SESSION_COOKIE_NAME,
value: '',
...secureCookieBase,
maxAge: 0,
})
// Also clear the domain-scoped cookie if we can resolve the domain.
if (domain) {
response.cookies.set({
name: SESSION_COOKIE_NAME,
value: '',
...secureCookieBase,
maxAge: 0,
domain,
})
}
}
export function applyMfaCookie(response: NextResponse, token: string, maxAge?: number) {
@ -115,12 +128,24 @@ export function applyMfaCookie(response: NextResponse, token: string, maxAge?: n
}
export function clearMfaCookie(response: NextResponse) {
// Clear host-only
response.cookies.set({
name: MFA_COOKIE_NAME,
value: '',
...secureCookieBase,
maxAge: 0,
})
// Clear domain-scoped if resolved
const domain = resolveCookieDomain()
if (domain) {
response.cookies.set({
name: MFA_COOKIE_NAME,
value: '',
...secureCookieBase,
maxAge: 0,
domain,
})
}
}
export function deriveMaxAgeFromExpires(expiresAt?: string | number | Date | null, fallback = SESSION_DEFAULT_MAX_AGE) {

View File

@ -146,7 +146,7 @@ function buildGuestUser(): User {
return {
id: identifier,
uuid: identifier,
email: 'Sandbox@svc.plus',
email: 'sandbox@svc.plus',
name: 'Guest user',
username: 'guest',
mfaEnabled: false,