fix: replace next/link with anchor tags in sidebar to stop 404 RSC prefetch; set secure cookie by request protocol

This commit is contained in:
NW
2026-08-07 14:51:45 +01:00
parent 632dc30248
commit 44a1d89924
3 changed files with 18 additions and 13 deletions

4
.env
View File

@@ -1 +1,3 @@
DATABASE_URL=file:/home/z/my-project/db/custom.db
DATABASE_URL=file:/opt/Projects/telegram-shop/db/shop.db
ADMIN_SECRET=shop_admin_2024_secure_token
SUPER_ADMIN_SECRET=shop_superadmin_2024_secure_token

View File

@@ -40,12 +40,16 @@ export async function POST(request: NextRequest) {
loginAttempts.delete(ip);
const response = NextResponse.json({ ok: true });
// Secure cookie only when the request arrived over HTTPS.
// The admin panel is served over plain HTTP (LAN / Tor), where
// Secure cookies are silently dropped by browsers.
const proto = request.headers.get('x-forwarded-proto') || 'http';
response.cookies.set('admin_token', authToken, {
httpOnly: true,
sameSite: 'lax',
maxAge: 86400,
path: '/',
secure: process.env.NODE_ENV === 'production',
secure: proto === 'https',
});
return response;
} catch {

View File

@@ -1,6 +1,5 @@
"use client";
import Link from "next/link";
import { useState, useEffect } from "react";
import {
LayoutDashboard,
@@ -164,7 +163,7 @@ export function AdminSidebar() {
tooltip={item.title}
className="[&[data-active='true']]:border-l-2 [&[data-active='true']]:border-l-sidebar-primary relative"
>
<Link href={item.href}>
<a href={item.href}>
<item.icon className="size-4 text-muted-foreground transition-colors group-hover/sidebar-menu-button:text-primary" />
<span>{item.title}</span>
{item.shortcut && (
@@ -172,7 +171,7 @@ export function AdminSidebar() {
{item.shortcut}
</kbd>
)}
</Link>
</a>
</SidebarMenuButton>
{item.badge && pendingCount > 0 && (
<SidebarMenuBadge className="bg-destructive text-destructive-foreground">
@@ -204,7 +203,7 @@ export function AdminSidebar() {
tooltip={item.title}
className="[&[data-active='true']]:border-l-2 [&[data-active='true']]:border-l-sidebar-primary relative"
>
<Link href={item.href}>
<a href={item.href}>
<item.icon className="size-4 text-muted-foreground transition-colors group-hover/sidebar-menu-button:text-primary" />
<span>{item.title}</span>
{item.shortcut && (
@@ -212,7 +211,7 @@ export function AdminSidebar() {
{item.shortcut}
</kbd>
)}
</Link>
</a>
</SidebarMenuButton>
</SidebarMenuItem>
))}
@@ -232,10 +231,10 @@ export function AdminSidebar() {
tooltip={item.title}
className="[&[data-active='true']]:border-l-2 [&[data-active='true']]:border-l-sidebar-primary relative"
>
<Link href={item.href}>
<a href={item.href}>
<item.icon className="size-4 text-muted-foreground transition-colors group-hover/sidebar-menu-button:text-primary" />
<span>{item.title}</span>
</Link>
</a>
</SidebarMenuButton>
</SidebarMenuItem>
))}
@@ -255,7 +254,7 @@ export function AdminSidebar() {
tooltip={item.title}
className="[&[data-active='true']]:border-l-2 [&[data-active='true']]:border-l-sidebar-primary relative"
>
<Link href={item.href}>
<a href={item.href}>
<item.icon className="size-4 text-muted-foreground transition-colors group-hover/sidebar-menu-button:text-primary" />
<span>{item.title}</span>
{item.shortcut && (
@@ -263,7 +262,7 @@ export function AdminSidebar() {
{item.shortcut}
</kbd>
)}
</Link>
</a>
</SidebarMenuButton>
</SidebarMenuItem>
))}
@@ -274,10 +273,10 @@ export function AdminSidebar() {
isActive={pathname.startsWith("/seed")}
tooltip="Danger Zone"
>
<Link href="/seed">
<a href="/seed">
<AlertTriangle className="size-4 text-destructive" />
<span className="text-destructive">Danger Zone</span>
</Link>
</a>
</SidebarMenuButton>
</SidebarMenuItem>
)}