mirror of
https://github.com/Rain-kl/OpenFlare.git
synced 2026-10-10 17:26:38 +08:00
[重构] 清除旧兼容层
This commit is contained in:
@@ -5,7 +5,6 @@ import (
|
|||||||
"atsflare/controller"
|
"atsflare/controller"
|
||||||
"atsflare/middleware"
|
"atsflare/middleware"
|
||||||
"embed"
|
"embed"
|
||||||
"fmt"
|
|
||||||
"github.com/gin-contrib/static"
|
"github.com/gin-contrib/static"
|
||||||
"github.com/gin-gonic/gin"
|
"github.com/gin-gonic/gin"
|
||||||
"io/fs"
|
"io/fs"
|
||||||
@@ -23,7 +22,6 @@ func setWebRouter(router *gin.Engine, buildFS embed.FS, indexPage []byte) {
|
|||||||
router.Use(middleware.GlobalWebRateLimit())
|
router.Use(middleware.GlobalWebRateLimit())
|
||||||
fileDownloadRoute := router.Group("/")
|
fileDownloadRoute := router.Group("/")
|
||||||
fileDownloadRoute.GET("/upload/:file", middleware.DownloadRateLimit(), controller.DownloadFile)
|
fileDownloadRoute.GET("/upload/:file", middleware.DownloadRateLimit(), controller.DownloadFile)
|
||||||
registerLegacyWebRedirects(router)
|
|
||||||
router.Use(middleware.Cache())
|
router.Use(middleware.Cache())
|
||||||
router.Use(static.Serve("/", common.EmbedFolder(buildFS, "web/build")))
|
router.Use(static.Serve("/", common.EmbedFolder(buildFS, "web/build")))
|
||||||
router.NoRoute(func(c *gin.Context) {
|
router.NoRoute(func(c *gin.Context) {
|
||||||
@@ -40,35 +38,6 @@ func setWebRouter(router *gin.Engine, buildFS embed.FS, indexPage []byte) {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
func registerLegacyWebRedirects(router *gin.Engine) {
|
|
||||||
legacyRoutes := map[string]string{
|
|
||||||
"/proxy-route": "/proxy-routes",
|
|
||||||
"/config-version": "/config-versions",
|
|
||||||
"/node": "/nodes",
|
|
||||||
"/apply-log": "/apply-logs",
|
|
||||||
"/managed-domain": "/managed-domains",
|
|
||||||
"/tls-certificate": "/tls-certificates",
|
|
||||||
"/file": "/files",
|
|
||||||
"/user": "/users",
|
|
||||||
"/user/add": "/users?mode=create",
|
|
||||||
"/user/edit": "/users",
|
|
||||||
"/setting": "/settings",
|
|
||||||
}
|
|
||||||
|
|
||||||
for source, target := range legacyRoutes {
|
|
||||||
router.GET(source, func(target string) gin.HandlerFunc {
|
|
||||||
return func(c *gin.Context) {
|
|
||||||
c.Redirect(http.StatusFound, target)
|
|
||||||
}
|
|
||||||
}(target))
|
|
||||||
}
|
|
||||||
|
|
||||||
router.GET("/user/edit/:id", func(c *gin.Context) {
|
|
||||||
target := fmt.Sprintf("/users?edit=%s", c.Param("id"))
|
|
||||||
c.Redirect(http.StatusFound, target)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
func serveExportedPage(c *gin.Context, buildFS fs.FS) bool {
|
func serveExportedPage(c *gin.Context, buildFS fs.FS) bool {
|
||||||
requestPath := strings.Trim(c.Request.URL.Path, "/")
|
requestPath := strings.Trim(c.Request.URL.Path, "/")
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +0,0 @@
|
|||||||
import { LegacyRouteRedirect } from '@/features/shared/components/legacy-route-redirect';
|
|
||||||
|
|
||||||
export default function LegacyApplyLogRoute() {
|
|
||||||
return <LegacyRouteRedirect href='/apply-logs' />;
|
|
||||||
}
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
import { LegacyRouteRedirect } from '@/features/shared/components/legacy-route-redirect';
|
|
||||||
|
|
||||||
export default function LegacyConfigVersionPage() {
|
|
||||||
return <LegacyRouteRedirect href='/config-versions' />;
|
|
||||||
}
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
import { LegacyRouteRedirect } from '@/features/shared/components/legacy-route-redirect';
|
|
||||||
|
|
||||||
export default function LegacyFilePage() {
|
|
||||||
return <LegacyRouteRedirect href='/files' />;
|
|
||||||
}
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
import { LegacyRouteRedirect } from '@/features/shared/components/legacy-route-redirect';
|
|
||||||
|
|
||||||
export default function LegacyManagedDomainRoute() {
|
|
||||||
return <LegacyRouteRedirect href='/managed-domains' />;
|
|
||||||
}
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
import { LegacyRouteRedirect } from '@/features/shared/components/legacy-route-redirect';
|
|
||||||
|
|
||||||
export default function LegacyNodePage() {
|
|
||||||
return <LegacyRouteRedirect href='/nodes' />;
|
|
||||||
}
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
import { LegacyRouteRedirect } from '@/features/shared/components/legacy-route-redirect';
|
|
||||||
|
|
||||||
export default function LegacyProxyRoutePage() {
|
|
||||||
return <LegacyRouteRedirect href='/proxy-routes' />;
|
|
||||||
}
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
import { LegacyRouteRedirect } from '@/features/shared/components/legacy-route-redirect';
|
|
||||||
|
|
||||||
export default function LegacySettingPage() {
|
|
||||||
return <LegacyRouteRedirect href='/settings' />;
|
|
||||||
}
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
import { LegacyRouteRedirect } from '@/features/shared/components/legacy-route-redirect';
|
|
||||||
|
|
||||||
export default function LegacyTlsCertificateRoute() {
|
|
||||||
return <LegacyRouteRedirect href='/tls-certificates' />;
|
|
||||||
}
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
import { LegacyRouteRedirect } from '@/features/shared/components/legacy-route-redirect';
|
|
||||||
|
|
||||||
export default function LegacyUserAddPage() {
|
|
||||||
return <LegacyRouteRedirect href='/users?mode=create' />;
|
|
||||||
}
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
import { LegacyRouteRedirect } from '@/features/shared/components/legacy-route-redirect';
|
|
||||||
|
|
||||||
export default function LegacyUserEditPage() {
|
|
||||||
return <LegacyRouteRedirect href='/users' />;
|
|
||||||
}
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
import { LegacyRouteRedirect } from '@/features/shared/components/legacy-route-redirect';
|
|
||||||
|
|
||||||
export default function LegacyUserPage() {
|
|
||||||
return <LegacyRouteRedirect href='/users' />;
|
|
||||||
}
|
|
||||||
@@ -1,24 +0,0 @@
|
|||||||
'use client';
|
|
||||||
|
|
||||||
import { useRouter } from 'next/navigation';
|
|
||||||
import { useEffect } from 'react';
|
|
||||||
|
|
||||||
import { LoadingState } from '@/components/feedback/loading-state';
|
|
||||||
|
|
||||||
interface LegacyRouteRedirectProps {
|
|
||||||
href: string;
|
|
||||||
}
|
|
||||||
|
|
||||||
export function LegacyRouteRedirect({ href }: LegacyRouteRedirectProps) {
|
|
||||||
const router = useRouter();
|
|
||||||
|
|
||||||
useEffect(() => {
|
|
||||||
router.replace(href);
|
|
||||||
}, [href, router]);
|
|
||||||
|
|
||||||
return (
|
|
||||||
<main className='flex min-h-screen items-center justify-center px-4 py-8'>
|
|
||||||
<LoadingState className='w-full max-w-md' />
|
|
||||||
</main>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
@@ -2,7 +2,6 @@
|
|||||||
|
|
||||||
import { zodResolver } from '@hookform/resolvers/zod';
|
import { zodResolver } from '@hookform/resolvers/zod';
|
||||||
import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';
|
import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';
|
||||||
import { useSearchParams } from 'next/navigation';
|
|
||||||
import { useEffect, useMemo, useState } from 'react';
|
import { useEffect, useMemo, useState } from 'react';
|
||||||
import { useForm } from 'react-hook-form';
|
import { useForm } from 'react-hook-form';
|
||||||
import { z } from 'zod';
|
import { z } from 'zod';
|
||||||
@@ -95,7 +94,6 @@ function toPayload(values: UserFormValues): UserMutationPayload {
|
|||||||
|
|
||||||
export function UsersPage() {
|
export function UsersPage() {
|
||||||
const queryClient = useQueryClient();
|
const queryClient = useQueryClient();
|
||||||
const searchParams = useSearchParams();
|
|
||||||
const { user: currentUser } = useAuth();
|
const { user: currentUser } = useAuth();
|
||||||
const [page, setPage] = useState(0);
|
const [page, setPage] = useState(0);
|
||||||
const [searchInput, setSearchInput] = useState('');
|
const [searchInput, setSearchInput] = useState('');
|
||||||
@@ -132,32 +130,12 @@ export function UsersPage() {
|
|||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (editingUserQuery.data) {
|
if (editingUserQuery.data) {
|
||||||
form.reset({
|
form.reset({
|
||||||
username: editingUserQuery.data.username,
|
username: editingUserQuery.data.username,
|
||||||
display_name: editingUserQuery.data.display_name || '',
|
display_name: editingUserQuery.data.display_name || '',
|
||||||
password: '',
|
password: '',
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}, [editingUserQuery.data, form]);
|
}, [editingUserQuery.data, form]);
|
||||||
|
|
||||||
useEffect(() => {
|
|
||||||
const editParam = searchParams?.get('edit');
|
|
||||||
const modeParam = searchParams?.get('mode');
|
|
||||||
|
|
||||||
if (editParam) {
|
|
||||||
const parsedUserId = Number.parseInt(editParam, 10);
|
|
||||||
if (!Number.isNaN(parsedUserId) && parsedUserId > 0) {
|
|
||||||
setFeedback(null);
|
|
||||||
setEditingUserId(parsedUserId);
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (modeParam === 'create') {
|
|
||||||
setFeedback(null);
|
|
||||||
setEditingUserId(null);
|
|
||||||
form.reset(defaultValues);
|
|
||||||
}
|
|
||||||
}, [form, searchParams]);
|
|
||||||
|
|
||||||
const saveMutation = useMutation({
|
const saveMutation = useMutation({
|
||||||
mutationFn: async (values: UserFormValues) => {
|
mutationFn: async (values: UserFormValues) => {
|
||||||
|
|||||||
Reference in New Issue
Block a user