Bläddra i källkod

add config auth location

lloydzhou 1 år sedan
förälder
incheckning
2b317f60c8
5 ändrade filer med 55 tillägg och 14 borttagningar
  1. 1 0
      app/components/plugin.module.scss
  2. 24 0
      app/components/plugin.tsx
  3. 5 1
      app/locales/cn.ts
  4. 5 1
      app/locales/en.ts
  5. 20 12
      app/store/plugin.ts

+ 1 - 0
app/components/plugin.module.scss

@@ -10,6 +10,7 @@
     max-height: 240px;
     overflow-y: auto;
     white-space: pre-wrap;
+    min-width: 300px;
   }
 }
 

+ 24 - 0
app/components/plugin.tsx

@@ -249,6 +249,30 @@ export function PluginPage() {
                   <option value="custom">{Locale.Plugin.Auth.Custom}</option>
                 </select>
               </ListItem>
+              {["bearer", "basic", "custom"].includes(
+                editingPlugin.authType as string,
+              ) && (
+                <ListItem title={Locale.Plugin.Auth.Location}>
+                  <select
+                    value={editingPlugin?.authLocation}
+                    onChange={(e) => {
+                      pluginStore.updatePlugin(editingPlugin.id, (plugin) => {
+                        plugin.authLocation = e.target.value;
+                      });
+                    }}
+                  >
+                    <option value="header">
+                      {Locale.Plugin.Auth.LocationHeader}
+                    </option>
+                    <option value="query">
+                      {Locale.Plugin.Auth.LocationQuery}
+                    </option>
+                    <option value="body">
+                      {Locale.Plugin.Auth.LocationBody}
+                    </option>
+                  </select>
+                </ListItem>
+              )}
               {editingPlugin.authType == "custom" && (
                 <ListItem title={Locale.Plugin.Auth.CustomHeader}>
                   <input

+ 5 - 1
app/locales/cn.ts

@@ -551,10 +551,14 @@ const cn = {
       Basic: "Basic",
       Bearer: "Bearer",
       Custom: "自定义",
-      CustomHeader: "自定义",
+      CustomHeader: "自定义参数名称",
       Token: "Token",
       Proxy: "使用代理",
       ProxyDescription: "使用代理解决 CORS 错误",
+      Location: "位置",
+      LocationHeader: "Header",
+      LocationQuery: "Query",
+      LocationBody: "Body",
     },
     EditModal: {
       Title: (readonly: boolean) => `编辑插件 ${readonly ? "(只读)" : ""}`,

+ 5 - 1
app/locales/en.ts

@@ -559,10 +559,14 @@ const en: LocaleType = {
       Basic: "Basic",
       Bearer: "Bearer",
       Custom: "Custom",
-      CustomHeader: "Custom Header",
+      CustomHeader: "Parameter Name",
       Token: "Token",
       Proxy: "Using Proxy",
       ProxyDescription: "Using proxies to solve CORS error",
+      Location: "Location",
+      LocationHeader: "Header",
+      LocationQuery: "Query",
+      LocationBody: "Body",
     },
     EditModal: {
       Title: (readonly: boolean) =>

+ 20 - 12
app/store/plugin.ts

@@ -13,6 +13,7 @@ export type Plugin = {
   content: string;
   builtin: boolean;
   authType?: string;
+  authLocation?: string;
   authHeader?: string;
   authToken?: string;
   usingProxy?: boolean;
@@ -50,16 +51,17 @@ export const FunctionToolService = {
     const definition = yaml.load(plugin.content) as any;
     const serverURL = definition?.servers?.[0]?.url;
     const baseURL = !!plugin?.usingProxy ? "/api/proxy" : serverURL;
+    const headers: Record<string, string | undefined> = {
+      "X-Base-URL": !!plugin?.usingProxy ? serverURL : undefined,
+    };
+    if (plugin?.authLocation == "header") {
+      headers[headerName] = tokenValue;
+    }
     const api = new OpenAPIClientAxios({
       definition: yaml.load(plugin.content) as any,
       axiosConfigDefaults: {
         baseURL,
-        headers: {
-          // 'Cache-Control': 'no-cache',
-          // 'Content-Type': 'application/json',  // TODO
-          [headerName]: tokenValue,
-          "X-Base-URL": !!plugin?.usingProxy ? serverURL : undefined,
-        },
+        headers,
       },
     });
     try {
@@ -111,20 +113,26 @@ export const FunctionToolService = {
       funcs: operations.reduce((s, o) => {
         // @ts-ignore
         s[o.operationId] = function (args) {
-          const argument = [];
+          const parameters: Record<string, any> = {};
           if (o.parameters instanceof Array) {
             o.parameters.forEach((p) => {
               // @ts-ignore
-              argument.push(args[p?.name]);
+              parameters[p?.name] = args[p?.name];
               // @ts-ignore
               delete args[p?.name];
             });
-          } else {
-            argument.push(null);
           }
-          argument.push(args);
+          if (plugin?.authLocation == "query") {
+            parameters[headerName] = tokenValue;
+          } else if (plugin?.authLocation == "body") {
+            args[headerName] = tokenValue;
+          }
           // @ts-ignore
-          return api.client[o.operationId].apply(null, argument);
+          return api.client[o.operationId](
+            parameters,
+            args,
+            api.axiosConfigDefaults,
+          );
         };
         return s;
       }, {}),