fix(ui): generate fail

This commit is contained in:
ReaJason
2025-02-28 23:25:28 +08:00
parent d14203e78f
commit b71e8ea4de
16 changed files with 113 additions and 94 deletions
@@ -57,6 +57,11 @@ public class GenerateRequest {
.headerName(shellToolConfig.getHeaderName()) .headerName(shellToolConfig.getHeaderName())
.headerValue(shellToolConfig.getHeaderValue()) .headerValue(shellToolConfig.getHeaderValue())
.build(); .build();
case NeoreGeorg -> NeoreGeorgConfig.builder()
.shellClassName(shellToolConfig.getShellClassName())
.headerName(shellToolConfig.getHeaderName())
.headerValue(shellToolConfig.getHeaderValue())
.build();
default -> throw new UnsupportedOperationException("unknown shell tool " + shellConfig.getShellTool()); default -> throw new UnsupportedOperationException("unknown shell tool " + shellConfig.getShellTool());
}; };
} }
+1 -1
View File
@@ -36,7 +36,7 @@ export function CopyableField({ label, value, text }: CopyableFieldProps) {
return ( return (
<div className="flex flex-col gap-1 py-1"> <div className="flex flex-col gap-1 py-1">
<div className="flex items-center justify-between gap-2"> <div className="flex items-center justify-between gap-2 h-8">
<Label className="text-sm text-muted-foreground">{label}</Label> <Label className="text-sm text-muted-foreground">{label}</Label>
{value && ( {value && (
<CopyToClipboard text={value as string} onCopy={handleCopy}> <CopyToClipboard text={value as string} onCopy={handleCopy}>
+1 -1
View File
@@ -282,7 +282,7 @@ export function MainConfigCard({
}} }}
className="w-full" className="w-full"
> >
<div className="relative bg-muted rounded-lg mb-4"> <div className="relative bg-muted rounded-lg">
<TabsList className="flex flex-wrap gap-1 w-full bg-transparent tabs-list"> <TabsList className="flex flex-wrap gap-1 w-full bg-transparent tabs-list">
{shellTools.map((shellTool) => ( {shellTools.map((shellTool) => (
<TabsTrigger <TabsTrigger
+1 -1
View File
@@ -1,6 +1,6 @@
import { downloadBytes } from "@/lib/utils"; import { downloadBytes } from "@/lib/utils";
import { GenerateResult } from "@/types/shell"; import { GenerateResult } from "@/types/shell";
import { Separator } from "@radix-ui/react-dropdown-menu"; import { Separator } from "../ui/separator";
import { ScrollTextIcon } from "lucide-react"; import { ScrollTextIcon } from "lucide-react";
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { Button } from "../ui/button"; import { Button } from "../ui/button";
+87 -83
View File
@@ -4,15 +4,17 @@ import {
CommandShellToolConfig, CommandShellToolConfig,
GenerateResult, GenerateResult,
GodzillaShellToolConfig, GodzillaShellToolConfig,
NeoreGeorgShellToolConfig,
ShellToolType,
Suo5ShellToolConfig, Suo5ShellToolConfig,
} from "@/types/shell"; } from "@/types/shell";
import { Separator } from "@radix-ui/react-dropdown-menu";
import { FileTextIcon } from "lucide-react"; import { FileTextIcon } from "lucide-react";
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { Fragment } from "react/jsx-runtime"; import { Fragment } from "react/jsx-runtime";
import { CopyableField } from "../copyable-field"; import { CopyableField } from "../copyable-field";
import { Card, CardContent, CardHeader, CardTitle } from "../ui/card"; import { Card, CardContent, CardHeader, CardTitle } from "../ui/card";
import { FeedbackAlert } from "./feedback-alert"; import { FeedbackAlert } from "./feedback-alert";
import { Separator } from "../ui/separator";
export function BasicInfo({ generateResult }: { generateResult?: GenerateResult }) { export function BasicInfo({ generateResult }: { generateResult?: GenerateResult }) {
const { t } = useTranslation(); const { t } = useTranslation();
@@ -39,88 +41,90 @@ export function BasicInfo({ generateResult }: { generateResult?: GenerateResult
/> />
</div> </div>
<Separator className="my-2" /> <Separator className="my-2" />
<div className="grid grid-cols-1 md:grid-cols-2 gap-2">
{(generateResult?.shellConfig.shellTool === "Behinder" || {generateResult?.shellConfig.shellTool === ShellToolType.Behinder && (
generateResult?.shellConfig.shellTool === "Godzilla" || <>
generateResult?.shellConfig.shellTool === "Command" || <CopyableField label={t("shellToolConfig.behinderScriptType")} text="jsp" />
generateResult?.shellConfig.shellTool === "AntSword" || <CopyableField
generateResult?.shellConfig.shellTool === "Suo5") && ( label={t("shellToolConfig.behinderEncryptType")}
<div className="grid grid-cols-1 md:grid-cols-2 gap-2"> text={t("shellToolConfig.behinderDefaultEncryptType")}
{/* Tool-specific fields */} />
{generateResult?.shellConfig.shellTool === "Behinder" && ( <CopyableField
<> label={t("shellToolConfig.behinderPass")}
<CopyableField label={t("shellToolConfig.behinderScriptType")} text="jsp" /> text={(generateResult?.shellToolConfig as BehinderShellToolConfig).pass}
<CopyableField value={(generateResult?.shellToolConfig as BehinderShellToolConfig).pass}
label={t("shellToolConfig.behinderEncryptType")} />
text={t("shellToolConfig.behinderDefaultEncryptType")} <CopyableField
/> label={t("shellToolConfig.customHeader")}
<CopyableField text={`${(generateResult?.shellToolConfig as BehinderShellToolConfig).headerName}: ${(generateResult?.shellToolConfig as BehinderShellToolConfig).headerValue}`}
label={t("shellToolConfig.behinderPass")} value={`${(generateResult?.shellToolConfig as BehinderShellToolConfig).headerName}: ${(generateResult?.shellToolConfig as BehinderShellToolConfig).headerValue}`}
text={(generateResult?.shellToolConfig as BehinderShellToolConfig).pass} />
value={(generateResult?.shellToolConfig as BehinderShellToolConfig).pass} </>
/> )}
<CopyableField {generateResult?.shellConfig.shellTool === ShellToolType.Godzilla && (
label={t("shellToolConfig.customHeader")} <Fragment>
text={`${(generateResult?.shellToolConfig as BehinderShellToolConfig).headerName}: ${(generateResult?.shellToolConfig as BehinderShellToolConfig).headerValue}`} <CopyableField
value={`${(generateResult?.shellToolConfig as BehinderShellToolConfig).headerName}: ${(generateResult?.shellToolConfig as BehinderShellToolConfig).headerValue}`} label={t("shellToolConfig.pass")}
/> text={(generateResult?.shellToolConfig as GodzillaShellToolConfig).pass}
</> value={(generateResult?.shellToolConfig as GodzillaShellToolConfig).pass}
)} />
{generateResult?.shellConfig.shellTool === "Godzilla" && ( <CopyableField
<Fragment> label={t("shellToolConfig.key")}
<CopyableField text={(generateResult?.shellToolConfig as GodzillaShellToolConfig).key}
label={t("shellToolConfig.pass")} value={(generateResult?.shellToolConfig as GodzillaShellToolConfig).key}
text={(generateResult?.shellToolConfig as GodzillaShellToolConfig).pass} />
value={(generateResult?.shellToolConfig as GodzillaShellToolConfig).pass} <CopyableField label={t("shellToolConfig.godzillaPayload")} text="JavaDynamicPayload" />
/> <CopyableField label={t("shellToolConfig.godzillaEncryptor")} text="JAVA_AES_BASE64" />
<CopyableField <CopyableField
label={t("shellToolConfig.key")} label={t("shellToolConfig.godzillaHeader")}
text={(generateResult?.shellToolConfig as GodzillaShellToolConfig).key} text={`${(generateResult?.shellToolConfig as GodzillaShellToolConfig).headerName}: ${(generateResult?.shellToolConfig as GodzillaShellToolConfig).headerValue}`}
value={(generateResult?.shellToolConfig as GodzillaShellToolConfig).key} value={`${(generateResult?.shellToolConfig as GodzillaShellToolConfig).headerName}: ${(generateResult?.shellToolConfig as GodzillaShellToolConfig).headerValue}`}
/> />
<CopyableField label={t("shellToolConfig.godzillaPayload")} text="JavaDynamicPayload" /> </Fragment>
<CopyableField label={t("shellToolConfig.godzillaEncryptor")} text="JAVA_AES_BASE64" /> )}
<CopyableField {generateResult?.shellConfig.shellTool === ShellToolType.Command && (
label={t("shellToolConfig.godzillaHeader")} <Fragment>
text={`${(generateResult?.shellToolConfig as GodzillaShellToolConfig).headerName}: ${(generateResult?.shellToolConfig as GodzillaShellToolConfig).headerValue}`} <CopyableField
value={`${(generateResult?.shellToolConfig as GodzillaShellToolConfig).headerName}: ${(generateResult?.shellToolConfig as GodzillaShellToolConfig).headerValue}`} label={t("shellToolConfig.paramName")}
/> text={(generateResult?.shellToolConfig as CommandShellToolConfig).paramName}
</Fragment> value={(generateResult?.shellToolConfig as CommandShellToolConfig).paramName}
)} />
{generateResult?.shellConfig.shellTool === "Command" && ( </Fragment>
<Fragment> )}
<CopyableField {generateResult?.shellConfig.shellTool === ShellToolType.Suo5 && (
label={t("shellToolConfig.paramName")} <Fragment>
text={(generateResult?.shellToolConfig as CommandShellToolConfig).paramName} <CopyableField
value={(generateResult?.shellToolConfig as CommandShellToolConfig).paramName} label={t("shellToolConfig.suo5Header")}
/> text={`${(generateResult?.shellToolConfig as Suo5ShellToolConfig).headerName}: ${(generateResult?.shellToolConfig as Suo5ShellToolConfig).headerValue}`}
</Fragment> value={`${(generateResult?.shellToolConfig as Suo5ShellToolConfig).headerName}: ${(generateResult?.shellToolConfig as Suo5ShellToolConfig).headerValue}`}
)} />
{generateResult?.shellConfig.shellTool === "Suo5" && ( </Fragment>
<Fragment> )}
<CopyableField {generateResult?.shellConfig.shellTool === ShellToolType.AntSword && (
label={t("shellToolConfig.suo5Header")} <Fragment>
text={`${(generateResult?.shellToolConfig as Suo5ShellToolConfig).headerName}: ${(generateResult?.shellToolConfig as Suo5ShellToolConfig).headerValue}`} <CopyableField
value={`${(generateResult?.shellToolConfig as Suo5ShellToolConfig).headerName}: ${(generateResult?.shellToolConfig as Suo5ShellToolConfig).headerValue}`} label={t("shellToolConfig.antSwordPass")}
/> text={(generateResult?.shellToolConfig as AntSwordShellToolConfig).pass}
</Fragment> value={(generateResult?.shellToolConfig as AntSwordShellToolConfig).pass}
)} />
{generateResult?.shellConfig.shellTool === "AntSword" && ( <CopyableField
<Fragment> label={t("shellToolConfig.httpHeader")}
<CopyableField text={`${(generateResult?.shellToolConfig as AntSwordShellToolConfig).headerName}: ${(generateResult?.shellToolConfig as AntSwordShellToolConfig).headerValue}`}
label={t("shellToolConfig.antSwordPass")} value={`${(generateResult?.shellToolConfig as AntSwordShellToolConfig).headerName}: ${(generateResult?.shellToolConfig as AntSwordShellToolConfig).headerValue}`}
text={(generateResult?.shellToolConfig as AntSwordShellToolConfig).pass} />
value={(generateResult?.shellToolConfig as AntSwordShellToolConfig).pass} </Fragment>
/> )}
<CopyableField {generateResult?.shellConfig.shellTool === ShellToolType.NeoreGeorg && (
label={t("shellToolConfig.httpHeader")} <Fragment>
text={`${(generateResult?.shellToolConfig as AntSwordShellToolConfig).headerName}: ${(generateResult?.shellToolConfig as AntSwordShellToolConfig).headerValue}`} <CopyableField label={t("shellToolConfig.neoreGeorgKey")} text="key" value="key" />
value={`${(generateResult?.shellToolConfig as AntSwordShellToolConfig).headerName}: ${(generateResult?.shellToolConfig as AntSwordShellToolConfig).headerValue}`} <CopyableField
/> label={t("shellToolConfig.neoreGeorgHeader")}
</Fragment> text={`${(generateResult?.shellToolConfig as NeoreGeorgShellToolConfig).headerName}: ${(generateResult?.shellToolConfig as NeoreGeorgShellToolConfig).headerValue}`}
)} value={`${(generateResult?.shellToolConfig as NeoreGeorgShellToolConfig).headerName}: ${(generateResult?.shellToolConfig as NeoreGeorgShellToolConfig).headerValue}`}
</div> />
)} </Fragment>
)}
</div>
<Separator className="my-2" /> <Separator className="my-2" />
<div className="grid grid-cols-1 md:grid-cols-2 gap-2"> <div className="grid grid-cols-1 md:grid-cols-2 gap-2">
<CopyableField <CopyableField
@@ -6,7 +6,7 @@ import {
AlertDialogDescription, AlertDialogDescription,
AlertDialogTitle, AlertDialogTitle,
AlertDialogTrigger, AlertDialogTrigger,
} from "@radix-ui/react-alert-dialog"; } from "../ui/alert-dialog";
import { CircleHelpIcon } from "lucide-react"; import { CircleHelpIcon } from "lucide-react";
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { AlertDialogFooter, AlertDialogHeader } from "../ui/alert-dialog"; import { AlertDialogFooter, AlertDialogHeader } from "../ui/alert-dialog";
+1 -1
View File
@@ -1,4 +1,4 @@
import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@radix-ui/react-select"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "../ui/select";
import { TFunction } from "i18next"; import { TFunction } from "i18next";
import { useEffect, useState } from "react"; import { useEffect, useState } from "react";
import { Fragment } from "react/jsx-runtime"; import { Fragment } from "react/jsx-runtime";
+1 -1
View File
@@ -1,5 +1,5 @@
import { FormSchema } from "@/types/schema"; import { FormSchema } from "@/types/schema";
import { TabsContent } from "@radix-ui/react-tabs"; import { TabsContent } from "../ui/tabs";
import { FormProvider, UseFormReturn } from "react-hook-form"; import { FormProvider, UseFormReturn } from "react-hook-form";
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { Card, CardContent } from "../ui/card"; import { Card, CardContent } from "../ui/card";
+1 -1
View File
@@ -1,5 +1,5 @@
import { FormSchema } from "@/types/schema"; import { FormSchema } from "@/types/schema";
import { TabsContent } from "@radix-ui/react-tabs"; import { TabsContent } from "../ui/tabs";
import { FormProvider, UseFormReturn } from "react-hook-form"; import { FormProvider, UseFormReturn } from "react-hook-form";
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { Card, CardContent } from "../ui/card"; import { Card, CardContent } from "../ui/card";
+1 -1
View File
@@ -1,5 +1,5 @@
import { FormSchema } from "@/types/schema"; import { FormSchema } from "@/types/schema";
import { TabsContent } from "@radix-ui/react-tabs"; import { TabsContent } from "../ui/tabs";
import { FormProvider, UseFormReturn } from "react-hook-form"; import { FormProvider, UseFormReturn } from "react-hook-form";
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { Card, CardContent } from "../ui/card"; import { Card, CardContent } from "../ui/card";
+1 -1
View File
@@ -1,5 +1,5 @@
import { FormSchema } from "@/types/schema"; import { FormSchema } from "@/types/schema";
import { TabsContent } from "@radix-ui/react-tabs"; import { TabsContent } from "../ui/tabs";
import { FormProvider, UseFormReturn } from "react-hook-form"; import { FormProvider, UseFormReturn } from "react-hook-form";
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { Card, CardContent } from "../ui/card"; import { Card, CardContent } from "../ui/card";
+1 -1
View File
@@ -1,5 +1,5 @@
import { FormSchema } from "@/types/schema"; import { FormSchema } from "@/types/schema";
import { TabsContent } from "@radix-ui/react-tabs"; import { TabsContent } from "../ui/tabs";
import { FormProvider, UseFormReturn } from "react-hook-form"; import { FormProvider, UseFormReturn } from "react-hook-form";
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { Card, CardContent } from "../ui/card"; import { Card, CardContent } from "../ui/card";
+1 -1
View File
@@ -1,5 +1,5 @@
import { FormSchema } from "@/types/schema"; import { FormSchema } from "@/types/schema";
import { TabsContent } from "@radix-ui/react-tabs"; import { TabsContent } from "../ui/tabs";
import { FormProvider, UseFormReturn } from "react-hook-form"; import { FormProvider, UseFormReturn } from "react-hook-form";
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { Card, CardContent } from "../ui/card"; import { Card, CardContent } from "../ui/card";
+2
View File
@@ -103,6 +103,8 @@
"headerValue": "Header Value", "headerValue": "Header Value",
"httpHeader": "HTTP -> HTTP HEADERS", "httpHeader": "HTTP -> HTTP HEADERS",
"key": "Key", "key": "Key",
"neoreGeorgHeader": "Custom Header",
"neoreGeorgKey": "Connection Key",
"paramName": "Param Name", "paramName": "Param Name",
"pass": "Pass", "pass": "Pass",
"suo5Header": "AdvanceConfiguration -> Request Header" "suo5Header": "AdvanceConfiguration -> Request Header"
+2
View File
@@ -103,6 +103,8 @@
"headerValue": "请求头值", "headerValue": "请求头值",
"httpHeader": "请求信息 -> HTTP HEADERS", "httpHeader": "请求信息 -> HTTP HEADERS",
"key": "密钥", "key": "密钥",
"neoreGeorgHeader": "自定义请求头",
"neoreGeorgKey": "连接密钥",
"paramName": "请求参数", "paramName": "请求参数",
"pass": "密码", "pass": "密码",
"suo5Header": "高级配置 -> 请求头" "suo5Header": "高级配置 -> 请求头"
+6
View File
@@ -53,6 +53,12 @@ export interface AntSwordShellToolConfig {
headerValue?: string; headerValue?: string;
} }
export interface NeoreGeorgShellToolConfig {
shellClassName?: string;
headerName?: string;
headerValue?: string;
}
export interface InjectorConfig { export interface InjectorConfig {
injectorClassName?: string; injectorClassName?: string;
classInheritance?: string; classInheritance?: string;