feat: support boot-ui

This commit is contained in:
ReaJason
2024-12-20 01:15:12 +08:00
parent da4a5b234d
commit 3b0aeaa294
81 changed files with 1556 additions and 929 deletions
+297 -82
View File
@@ -1,17 +1,39 @@
import { UrlPatternTip } from "@/components/tips/url-pattern-tip.tsx";
import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card.tsx";
import { FormControl, FormDescription, FormField, FormItem, FormLabel } from "@/components/ui/form.tsx";
import { Input } from "@/components/ui/input.tsx";
import { Label } from "@/components/ui/label.tsx";
import {
Select,
SelectContent,
SelectItem,
SelectTrigger,
SelectValue,
} from "@/components/ui/select.tsx";
import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select.tsx";
import { Separator } from "@/components/ui/separator.tsx";
import { Switch } from "@/components/ui/switch.tsx";
import { FormSchema } from "@/types/schema.ts";
import { MainConfig } from "@/types/shell.ts";
import { ServerIcon } from "lucide-react";
import { useState } from "react";
import { FormProvider, UseFormReturn } from "react-hook-form";
const JDKVersion = [
{ name: "Java6", value: "50" },
{ name: "Java8", value: "52" },
{ name: "Java9", value: "53" },
{ name: "Java11", value: "55" },
{ name: "Java17", value: "61" },
{ name: "Java21", value: "65" },
];
export function MainConfigCard({
mainConfig,
form,
servers,
}: {
mainConfig: MainConfig | undefined;
form: UseFormReturn<FormSchema>;
servers?: string[];
}) {
const [shellToolMap, setShellToolMap] = useState<{ [toolName: string]: string[] }>();
const [shellTools, setShellTools] = useState<string[]>([]);
const [shellTypes, setShellTypes] = useState<string[]>([]);
export function MainConfigCard() {
return (
<Card className="w-full">
<CardHeader className="pb-1">
@@ -20,87 +42,280 @@ export function MainConfigCard() {
<span></span>
</CardTitle>
</CardHeader>
<CardContent className="space-y-2">
<div className="grid grid-cols-2 gap-2">
<div className="space-y-1">
<Label htmlFor="server" className="text-sm">
<FormProvider {...form}>
<CardContent>
<div className="grid grid-cols-2 gap-2">
<FormField
control={form.control}
name="server"
render={({ field }) => (
<FormItem className="space-y-1">
<FormLabel></FormLabel>
<Select
onValueChange={(v) => {
field.onChange(v);
if (mainConfig) {
setShellToolMap(mainConfig[v]);
setShellTools(Object.keys(mainConfig[v]));
setShellTypes([]);
}
}}
value={field.value}
>
<FormControl>
<SelectTrigger className="h-8">
<SelectValue placeholder="请选择" />
</SelectTrigger>
</FormControl>
<SelectContent>
{servers?.map((server: string) => (
<SelectItem key={server} value={server}>
{server}
</SelectItem>
))}
</SelectContent>
</Select>
</FormItem>
)}
/>
<FormField
control={form.control}
name="targetJdkVersion"
render={({ field }) => (
<FormItem className="space-y-1">
<FormLabel>JRE()</FormLabel>
<Select onValueChange={field.onChange} value={field.value}>
<FormControl>
<SelectTrigger className="h-8">
<SelectValue placeholder="请选择" />
</SelectTrigger>
</FormControl>
<SelectContent>
{JDKVersion.map((v) => (
<SelectItem key={v.value} value={v.value}>
{v.name}
</SelectItem>
))}
</SelectContent>
</Select>
</FormItem>
)}
/>
</div>
<div className="flex items-center space-x-4 mt-2">
<FormField
control={form.control}
name="debug"
render={({ field }) => (
<FormItem className="flex items-center space-x-2 space-y-0">
<FormControl>
<Switch id="debug" checked={field.value} onCheckedChange={field.onChange} />
</FormControl>
<FormLabel htmlFor="debug"></FormLabel>
</FormItem>
)}
/>
<FormField
control={form.control}
name="bypassJavaModule"
render={({ field }) => (
<FormItem className="flex items-center space-x-2 space-y-0">
<FormControl>
<Switch id="bypassJavaModule" checked={field.value} onCheckedChange={field.onChange} />
</FormControl>
<Label htmlFor="bypassJavaModule">bypassJavaModule</Label>
</FormItem>
)}
/>
<div className="flex items-center space-x-2">
<Switch id="lambda" disabled />
<Label htmlFor="lambda">Lambda (WIP)</Label>
</div>
<div className="flex items-center space-x-2">
<Switch id="obfuscate" disabled />
<Label htmlFor="obfuscate"> (WIP)</Label>
</div>
</div>
<Separator className="mt-4 mb-2" />
<FormField
control={form.control}
name="shellClassName"
render={({ field }) => (
<FormItem className="space-y-1">
<FormLabel></FormLabel>
<Input id="shellClassName" {...field} placeholder="请输入" className="h-8" />
</FormItem>
)}
/>
<div className="grid grid-cols-3 gap-2 mt-2">
<FormField
control={form.control}
name="shellTool"
render={({ field }) => (
<FormItem className="space-y-1">
<FormLabel></FormLabel>
<Select
value={field.value}
onValueChange={(value: string) => {
field.onChange(value);
if (shellToolMap) {
setShellTypes(shellToolMap[value]);
}
}}
>
<FormControl>
<SelectTrigger className="h-8">
<SelectValue placeholder="请选择" />
</SelectTrigger>
</FormControl>
<SelectContent>
{shellTools.length ? (
shellTools.map((v) => (
<SelectItem key={v} value={v}>
{v}
</SelectItem>
))
) : (
<SelectItem value=" "></SelectItem>
)}
</SelectContent>
</Select>
</FormItem>
)}
/>
<FormField
control={form.control}
name="shellType"
render={({ field }) => (
<FormItem className="space-y-1">
<FormLabel></FormLabel>
<Select onValueChange={field.onChange} value={field.value}>
<FormControl>
<SelectTrigger className="h-8">
<SelectValue placeholder="请选择" />
</SelectTrigger>
</FormControl>
<SelectContent>
{shellTypes.length ? (
shellTypes.map((v) => (
<SelectItem key={v} value={v}>
{v}
</SelectItem>
))
) : (
<SelectItem value=" "></SelectItem>
)}
</SelectContent>
</Select>
</FormItem>
)}
/>
<FormField
control={form.control}
name="urlPattern"
render={({ field }) => (
<FormItem className="flex flex-col mt-1">
<Label className="flex items-center">
<UrlPatternTip />
</Label>
<Input {...field} placeholder="请输入" className="h-8" />
</FormItem>
)}
/>
</div>
<div className="mt-2">
{form.getValues().shellTool === "Godzilla" && (
<div className="space-y-1">
<Label>Godzilla </Label>
<div className="grid grid-cols-2 gap-2">
<FormField
control={form.control}
name="godzillaPass"
render={({ field }) => (
<FormItem className="space-y-1 flex items-center justify-start">
<Label className="text-xs whitespace-nowrap w-1/2"></Label>
<Input {...field} placeholder="Pass" className="h-8" />
</FormItem>
)}
/>
<FormField
control={form.control}
name="godzillaKey"
render={({ field }) => (
<FormItem className="space-y-1 flex items-center justify-start">
<Label className="text-xs whitespace-nowrap w-1/2"></Label>
<Input {...field} placeholder="Key" className="h-8" />
</FormItem>
)}
/>
<FormField
control={form.control}
name="godzillaHeaderName"
render={({ field }) => (
<FormItem className="space-y-1 flex items-center justify-start">
<Label className="text-xs whitespace-nowrap w-1/2"></Label>
<Input {...field} placeholder="Header Name" className="h-8" />
</FormItem>
)}
/>
<FormField
control={form.control}
name="godzillaHeaderValue"
render={({ field }) => (
<FormItem className="space-y-1 flex items-center justify-start">
<Label className="text-xs whitespace-nowrap w-1/2"></Label>
<Input {...field} placeholder="Header Value" className="h-8" />
</FormItem>
)}
/>
</div>
</div>
)}
{form.getValues().shellTool === "Command" && (
<FormField
control={form.control}
name="commandParamName"
render={({ field }) => (
<FormItem className="space-y-1">
<FormLabel></FormLabel>
<FormControl>
<Input {...field} placeholder="请输入" className="h-8" />
</FormControl>
<FormDescription> cmd `?cmd=whoami` </FormDescription>
</FormItem>
)}
/>
)}
</div>
<Separator className="mt-4 mb-2" />
<FormField
control={form.control}
name="injectorClassName"
render={({ field }) => (
<FormItem className="space-y-1">
<FormLabel></FormLabel>
<Input id="injectorClassName" {...field} placeholder="请输入" className="h-8" />
</FormItem>
)}
/>
<div className="space-y-1 mt-2">
<Label htmlFor="interface" className="flex items-center gap-2">
(WIP)
</Label>
<Select>
<SelectTrigger id="server" className="h-8">
<Select disabled>
<SelectTrigger id="interface" className="h-8">
<SelectValue placeholder="请选择" />
</SelectTrigger>
<SelectContent>
<SelectItem value="tomcat">Tomcat</SelectItem>
<SelectItem value="jetty">Jetty</SelectItem>
<SelectItem value="undertow">Undertow</SelectItem>
<SelectItem value="jboss">JBoss</SelectItem>
<SelectItem value="wildfly">Wildfly</SelectItem>
<SelectItem value="springmvc">SpringMVC</SelectItem>
<SelectItem value="springwebflux">SpringWebflux</SelectItem>
<SelectItem value="weblogic">WebLogic</SelectItem>
<SelectItem value="websphere">WebSphere</SelectItem>
<SelectItem value="resin">Resin</SelectItem>
<SelectItem value="glassfish">Glassfish</SelectItem>
<SelectItem value="bes">BES</SelectItem>
<SelectItem value="tongweb">TongWeb</SelectItem>
<SelectItem value="JDK_AbstractTranslet">JDK_AbstractTranslet</SelectItem>
<SelectItem value="XALAN_AbstractTranslet">XALAN_AbstractTranslet</SelectItem>
<SelectItem value="FASTJSON_GroovyASTTransformation">FASTJSON_GroovyASTTransformation</SelectItem>
<SelectItem value="SnakeYaml_ScriptEngineFactory">SnakeYaml_ScriptEngineFactory</SelectItem>
</SelectContent>
</Select>
</div>
<div className="space-y-1">
<Label htmlFor="targetJdkVersion" className="text-sm">
JRE
</Label>
<Select defaultValue="6">
<SelectTrigger id="targetJdkVersion" className="h-8">
<SelectValue placeholder="请选择" />
</SelectTrigger>
<SelectContent>
<SelectItem value="6">Java 6</SelectItem>
<SelectItem value="7">Java 7</SelectItem>
<SelectItem value="8">Java 8</SelectItem>
<SelectItem value="9">Java 9</SelectItem>
<SelectItem value="11">Java 11</SelectItem>
<SelectItem value="17">Java 17</SelectItem>
</SelectContent>
</Select>
</div>
</div>
<div className="grid grid-cols-2 gap-2">
<div>
<Label htmlFor="shellClassName" className="text-sm">
</Label>
<Input id="shellClassName" placeholder="请输入" className="h-8" />
</div>
<div>
<Label htmlFor="injectorClassName" className="text-sm">
</Label>
<Input id="injectorClassName" placeholder="请输入" className="h-8" />
</div>
</div>
<div className="flex items-center space-x-4">
<div className="flex items-center space-x-2">
<Switch id="obfuscate" />
<Label htmlFor="obfuscate" className="text-sm">
</Label>
</div>
<div className="flex items-center space-x-2">
<Switch id="debug" />
<Label htmlFor="debug" className="text-sm">
</Label>
</div>
<div className="flex items-center space-x-2">
<Switch id="lambda" />
<Label htmlFor="debug" className="text-sm">
Lambda
</Label>
</div>
</div>
</CardContent>
</CardContent>
</FormProvider>
</Card>
);
}