You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@apisix.apache.org by ju...@apache.org on 2020/06/04 04:25:55 UTC

[incubator-apisix-dashboard] branch fix-upstream created (now cc45226)

This is an automated email from the ASF dual-hosted git repository.

juzhiyuan pushed a change to branch fix-upstream
in repository https://gitbox.apache.org/repos/asf/incubator-apisix-dashboard.git.


      at cc45226  feat: update upstream

This branch includes the following new commits:

     new cc45226  feat: update upstream

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



[incubator-apisix-dashboard] 01/01: feat: update upstream

Posted by ju...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

juzhiyuan pushed a commit to branch fix-upstream
in repository https://gitbox.apache.org/repos/asf/incubator-apisix-dashboard.git

commit cc452260e9d7e4a1bb4f063999ad03da47f6587a
Author: juzhiyuan <jj...@gmail.com>
AuthorDate: Thu Jun 4 12:25:31 2020 +0800

    feat: update upstream
---
 src/pages/Routes/Create.tsx                        |  2 +-
 .../Routes/components/Step2/RequestRewriteView.tsx | 28 ++++++++++++++++------
 src/pages/Routes/constants.ts                      | 11 +++++----
 src/pages/Routes/transform.ts                      | 26 +++++++++++++-------
 src/pages/Routes/typing.d.ts                       | 21 +++++++---------
 5 files changed, 53 insertions(+), 35 deletions(-)

diff --git a/src/pages/Routes/Create.tsx b/src/pages/Routes/Create.tsx
index 3196fc3..035f09b 100644
--- a/src/pages/Routes/Create.tsx
+++ b/src/pages/Routes/Create.tsx
@@ -33,7 +33,7 @@ const Create: React.FC = (props) => {
   const initRoute = (rid: number) => {
     fetchRoute(rid).then((data) => {
       form1.setFieldsValue(data.step1Data);
-      setStep1Data(data.step1Data);
+      setStep1Data(data.step1Data as RouteModule.Step1Data);
 
       form2.setFieldsValue(data.step2Data);
       setStep2Data(data.step2Data);
diff --git a/src/pages/Routes/components/Step2/RequestRewriteView.tsx b/src/pages/Routes/components/Step2/RequestRewriteView.tsx
index dc31a1c..3c622e2 100644
--- a/src/pages/Routes/components/Step2/RequestRewriteView.tsx
+++ b/src/pages/Routes/components/Step2/RequestRewriteView.tsx
@@ -105,19 +105,33 @@ const RequestRewriteView: React.FC<Props> = ({ data, form, disabled, onChange })
           rules={[{ required: true, message: '请勾选协议' }]}
         >
           <Radio.Group onChange={onProtocolChange} name="upstreamProtocol" disabled={disabled}>
-            <Radio value="original">原始请求</Radio>
+            <Radio value="keep">保持原样</Radio>
             <Radio value="http">HTTP</Radio>
             <Radio value="https">HTTPS</Radio>
           </Radio.Group>
         </Form.Item>
         {renderUpstreamMeta()}
-        <Form.Item
-          label="请求路径"
-          name="upstreamPath"
-          rules={[{ required: true, message: '请输入请求路径' }]}
-        >
-          <Input disabled={disabled} />
+        <Form.Item label="请求路径">
+          <Radio.Group
+            defaultValue={step2Data.upstreamPath === undefined ? 'keep' : 'modify'}
+            onChange={(e) => {
+              onChange({ upstreamPath: e.target.value === 'keep' ? undefined : '' });
+            }}
+            disabled={disabled}
+          >
+            <Radio value="keep">保持原样</Radio>
+            <Radio value="modify">修改</Radio>
+          </Radio.Group>
         </Form.Item>
+        {step2Data.upstreamPath !== undefined && (
+          <Form.Item
+            label="新路径"
+            name="upstreamPath"
+            rules={[{ required: true, message: '请输入请求路径' }]}
+          >
+            <Input disabled={disabled} />
+          </Form.Item>
+        )}
         <Form.Item label="连接超时" required>
           <Form.Item
             name={['timeout', 'connect']}
diff --git a/src/pages/Routes/constants.ts b/src/pages/Routes/constants.ts
index fade6a1..b943542 100644
--- a/src/pages/Routes/constants.ts
+++ b/src/pages/Routes/constants.ts
@@ -38,14 +38,15 @@ export const DEFAULT_STEP_1_DATA: RouteModule.Step1Data = {
 };
 
 export const DEFAULT_STEP_2_DATA: RouteModule.Step2Data = {
-  upstreamProtocol: 'original',
+  upstreamProtocol: 'keep',
+  // TODO: 展示 placeholder
   upstreamHostList: [{ host: '', port: 80, weight: 0 }],
   upstreamHeaderList: [],
-  upstreamPath: '',
+  upstreamPath: undefined,
   timeout: {
-    connect: 30000,
-    send: 30000,
-    read: 30000,
+    connect: 10000,
+    send: 10000,
+    read: 10000,
   },
 };
 
diff --git a/src/pages/Routes/transform.ts b/src/pages/Routes/transform.ts
index 0842978..4000ffd 100644
--- a/src/pages/Routes/transform.ts
+++ b/src/pages/Routes/transform.ts
@@ -30,7 +30,7 @@ export const transformStepData = ({
     protocols = protocols.concat('websocket');
   }
 
-  const data: RouteModule.Body = {
+  const data: Partial<RouteModule.Body> = {
     ...step1Data,
     ...step2Data,
     ...step3Data,
@@ -59,11 +59,14 @@ export const transformStepData = ({
       timeout: step2Data.timeout,
     },
     upstream_header,
-    upstream_path: {
-      to: step2Data.upstreamPath,
-    },
   };
 
+  if (step2Data.upstreamPath) {
+    data.upstream_path = {
+      to: step2Data.upstreamPath,
+    };
+  }
+
   return omit(data, [
     'advancedMatchingRules',
     'upstreamProtocol',
@@ -102,10 +105,9 @@ const transformUpstreamNodes = (nodes: { [key: string]: number }): RouteModule.U
 };
 
 export const transformRouteData = (data: RouteModule.Body) => {
-  const { name, desc, methods, uris, protocols, hosts, vars } = data;
-  // TODO: redirect
+  const { name, desc, methods, uris, protocols, hosts, vars, redirect } = data;
 
-  const step1Data: RouteModule.Step1Data = {
+  const step1Data: Partial<RouteModule.Step1Data> = {
     name,
     desc,
     protocols: protocols.filter((item) => item !== 'websocket'),
@@ -114,8 +116,15 @@ export const transformRouteData = (data: RouteModule.Body) => {
     paths: uris,
     methods,
     advancedMatchingRules: transformVarsToRules(vars),
+    redirect: Boolean(redirect),
+    forceHttps: Boolean(redirect.redirect_to_https),
   };
 
+  if (redirect.code) {
+    step1Data.redirectCode = redirect.code;
+    step1Data.redirectURI = redirect.uri;
+  }
+
   const { upstream, upstream_path, upstream_header } = data;
 
   const upstreamHeaderList = Object.entries(upstream_header).map(([k, v]) => {
@@ -123,8 +132,7 @@ export const transformRouteData = (data: RouteModule.Body) => {
   });
 
   const step2Data: RouteModule.Step2Data = {
-    // TODO: API
-    upstreamProtocol: 'original',
+    upstreamProtocol: 'keep',
     upstreamHeaderList,
     upstreamHostList: transformUpstreamNodes(upstream.nodes),
     upstreamPath: upstream_path.to,
diff --git a/src/pages/Routes/typing.d.ts b/src/pages/Routes/typing.d.ts
index 5024e20..5f513ba 100644
--- a/src/pages/Routes/typing.d.ts
+++ b/src/pages/Routes/typing.d.ts
@@ -25,7 +25,7 @@ declare namespace RouteModule {
     redirect: boolean;
     forceHttps: boolean;
     redirectURI?: string;
-    redirectCode?: boolean;
+    redirectCode?: number;
     advancedMatchingRules: MatchingRule[];
   };
 
@@ -61,9 +61,9 @@ declare namespace RouteModule {
   }
 
   type Step2Data = {
-    upstreamProtocol: 'http' | 'https' | 'original';
+    upstreamProtocol: 'http' | 'https' | 'keep';
     upstreamHostList: UpstreamHost[];
-    upstreamPath: string;
+    upstreamPath: string | undefined;
     upstreamHeaderList: UpstreamHeader[];
     timeout: {
       connect: number;
@@ -74,16 +74,11 @@ declare namespace RouteModule {
 
   type ModalType = 'CREATE' | 'EDIT';
 
-  type Redirect =
-    | {
-        redirect_to_https: boolean;
-        code: 301 | 302;
-        uri: string;
-      }
-    | {
-        redirect_to_https: boolean;
-      }
-    | {};
+  type Redirect = {
+    code?: number;
+    uri?: string;
+    redirect_to_https?: boolean;
+  };
 
   // Request Body or Response Data for API
   type Body = {