You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@apisix.apache.org by li...@apache.org on 2021/05/27 06:32:17 UTC
[apisix-dashboard] branch master updated: fix: regex & omit vars
when no value (#1921)
This is an automated email from the ASF dual-hosted git repository.
liuxiran pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/apisix-dashboard.git
The following commit(s) were added to refs/heads/master by this push:
new d11ff4f fix: regex & omit vars when no value (#1921)
d11ff4f is described below
commit d11ff4f587438d2854007424ecd436b3b907ad62
Author: Ayush das <ay...@gmail.com>
AuthorDate: Thu May 27 12:02:09 2021 +0530
fix: regex & omit vars when no value (#1921)
---
.../route/create-edit-duplicate-delete-route.spec.js | 18 +++++++++++++++++-
web/src/components/Plugin/UI/referer-restriction.tsx | 4 +++-
web/src/components/Upstream/components/Nodes.tsx | 4 ++--
.../Upstream/components/active-check/Host.tsx | 2 +-
.../pages/Route/components/Step1/RequestConfigView.tsx | 8 +-------
web/src/pages/Route/locales/en-US.ts | 5 +----
web/src/pages/Route/locales/zh-CN.ts | 4 +---
web/src/pages/Route/transform.ts | 7 ++++---
8 files changed, 30 insertions(+), 22 deletions(-)
diff --git a/web/cypress/integration/route/create-edit-duplicate-delete-route.spec.js b/web/cypress/integration/route/create-edit-duplicate-delete-route.spec.js
index c4fde0c..a579471 100644
--- a/web/cypress/integration/route/create-edit-duplicate-delete-route.spec.js
+++ b/web/cypress/integration/route/create-edit-duplicate-delete-route.spec.js
@@ -52,6 +52,9 @@ context('Create and Delete Route', () => {
notificationCloseIcon: '.ant-notification-close-icon',
notification: '.ant-notification-notice-message',
addHost: '[data-cy=addHost]',
+ schemaErrorMessage: ".ant-form-item-explain.ant-form-item-explain-error",
+ advancedMatchingTable: ".ant-table-row.ant-table-row-level-0",
+ advancedMatchingTableOperation: ".ant-space"
};
const data = {
@@ -59,6 +62,8 @@ context('Create and Delete Route', () => {
host1: '11.11.11.11',
host2: '12.12.12.12',
host3: '10.10.10.10',
+ host4: '@',
+ host5: '*1',
port: '80',
weight: 1,
basicAuthPlugin: 'basic-auth',
@@ -101,7 +106,11 @@ context('Create and Delete Route', () => {
cy.contains('Confirm').click();
cy.contains('Next').click();
- cy.get(selector.nodes_0_host).type(data.host2);
+ cy.get(selector.nodes_0_host).type(data.host4);
+ cy.get(selector.schemaErrorMessage).should('exist');
+ cy.get(selector.nodes_0_host).clear().type(data.host5);
+ cy.get(selector.schemaErrorMessage).should('not.exist');
+ cy.get(selector.nodes_0_host).clear().type(data.host2);
cy.get(selector.nodes_0_port).type(data.port);
cy.get(selector.nodes_0_weight).type(data.weight);
cy.contains('Next').click();
@@ -174,6 +183,7 @@ context('Create and Delete Route', () => {
cy.get(selector.codemirrorScroll).within(() => {
cy.contains('upstream').should('exist');
+ cy.contains('vars').should('exist')
cy.contains(name).should('exist');
});
});
@@ -190,6 +200,11 @@ context('Create and Delete Route', () => {
cy.get('#status').should('have.class', 'ant-switch-checked');
cy.get(selector.name).clear().type(newName);
cy.get(selector.description).clear().type(data.description2);
+ cy.get(selector.advancedMatchingTable).should('exist');
+ cy.get(selector.advancedMatchingTableOperation).within(() => {
+ cy.contains('Delete').click().should('not.exist');
+ });
+
cy.contains('Next').click();
cy.contains('Next').click();
cy.contains('Next').click();
@@ -207,6 +222,7 @@ context('Create and Delete Route', () => {
cy.get(selector.codemirrorScroll).within(() => {
cy.contains('upstream').should('exist');
cy.contains(newName).should('exist');
+ cy.contains('vars').should('not.exist');
});
});
diff --git a/web/src/components/Plugin/UI/referer-restriction.tsx b/web/src/components/Plugin/UI/referer-restriction.tsx
index 971302b..0e527a1 100644
--- a/web/src/components/Plugin/UI/referer-restriction.tsx
+++ b/web/src/components/Plugin/UI/referer-restriction.tsx
@@ -73,7 +73,9 @@ const RefererRestriction: React.FC<Props> = ({ form }) => {
noStyle
required
rules={[{
- message: "",
+ message: formatMessage({
+ id: 'page.route.form.itemRulesPatternMessage.domain',
+ }),
pattern: new RegExp(/^\*?[0-9a-zA-Z-._]+$/, 'g')
}, {
required: true,
diff --git a/web/src/components/Upstream/components/Nodes.tsx b/web/src/components/Upstream/components/Nodes.tsx
index d6eb809..50fabd3 100644
--- a/web/src/components/Upstream/components/Nodes.tsx
+++ b/web/src/components/Upstream/components/Nodes.tsx
@@ -49,11 +49,11 @@ const Component: React.FC<Props> = ({ readonly }) => {
},
{
pattern: new RegExp(
- /(^([1-9]?\d|1\d{2}|2[0-4]\d|25[0-5])(\.(25[0-5]|1\d{2}|2[0-4]\d|[1-9]?\d)){3}$|^(?![0-9.]+$)([a-zA-Z0-9_-]+)(\.[a-zA-Z0-9_-]+){0,}$)/,
+ /^\*?[0-9a-zA-Z-._]+$/,
'g',
),
message: formatMessage({
- id: 'page.upstream.step.valid.domain.name.or.ip',
+ id: 'page.route.form.itemRulesPatternMessage.domain',
})
},
]}
diff --git a/web/src/components/Upstream/components/active-check/Host.tsx b/web/src/components/Upstream/components/active-check/Host.tsx
index 148d60a..87e68a3 100644
--- a/web/src/components/Upstream/components/active-check/Host.tsx
+++ b/web/src/components/Upstream/components/active-check/Host.tsx
@@ -35,7 +35,7 @@ const Component: React.FC<Props> = ({ readonly }) => {
rules={[
{
pattern: new RegExp(
- /^\\*?[0-9a-zA-Z-._]+$/,
+ /^\*?[0-9a-zA-Z-._]+$/,
'g',
),
message: formatMessage({ id: 'component.upstream.fields.checks.active.host.scope' }),
diff --git a/web/src/pages/Route/components/Step1/RequestConfigView.tsx b/web/src/pages/Route/components/Step1/RequestConfigView.tsx
index 05ce260..2c7bf89 100644
--- a/web/src/pages/Route/components/Step1/RequestConfigView.tsx
+++ b/web/src/pages/Route/components/Step1/RequestConfigView.tsx
@@ -58,7 +58,7 @@ const RequestConfigView: React.FC<RouteModule.Step1PassProps> = ({
rules={[
{
// NOTE: https://github.com/apache/apisix/blob/master/apisix/schema_def.lua#L40
- pattern: new RegExp(/^\\*?[0-9a-zA-Z-._]+$/, 'g'),
+ pattern: new RegExp(/^\*?[0-9a-zA-Z-._]+$/, 'g'),
message: formatMessage({
id: 'page.route.form.itemRulesPatternMessage.domain',
}),
@@ -129,12 +129,6 @@ const RequestConfigView: React.FC<RouteModule.Step1PassProps> = ({
whitespace: true,
message: formatMessage({ id: "page.route.configuration.path.rules.required.description" }),
},
- {
- pattern: new RegExp(/^\/[a-zA-Z0-9\-._~%!$&'()+,;=:@/]*\*?$/, 'g'),
- message: formatMessage({
- id: 'page.route.form.itemRulesPatternMessage.path',
- }),
- },
]}
noStyle
>
diff --git a/web/src/pages/Route/locales/en-US.ts b/web/src/pages/Route/locales/en-US.ts
index 60bc6b9..47aa7fa 100644
--- a/web/src/pages/Route/locales/en-US.ts
+++ b/web/src/pages/Route/locales/en-US.ts
@@ -75,10 +75,9 @@ export default {
'page.route.form.itemExtraMessage.domain':
'Domain Name or IP, support for generic Domain Name, for example: *.test.com',
'page.route.form.itemRulesPatternMessage.domain':
- 'Only letters, numbers and * are supported. * can only be at the beginning, and only single * is supported',
+ 'Only letters, numbers, -,_ and * are supported, but * needs to be at the beginning.',
'page.route.form.itemExtraMessage1.path':
'HTTP Request path, for example: /foo/index.html, supports request path prefix /foo/* ; /* represents all paths',
- 'page.route.form.itemRulesPatternMessage.path': 'Begin with / , and * can only at the end',
'page.route.form.itemRulesPatternMessage.remoteAddrs':
'Please enter a valid IP address, for example: 192.168.1.101, 192.168.1.0/24, ::1, fe80::1, fe80::1/64',
'page.route.form.itemExtraMessage1.remoteAddrs':
@@ -98,8 +97,6 @@ export default {
'page.route.form.itemLabel.domainNameOrIp': 'Domain Name/IP',
'page.route.form.itemExtraMessage.domainNameOrIp':
'When using Domain Name, it will analysis the local: /etc/resolv.conf by default',
- 'page.route.form.itemRulesPatternMessage.domainNameOrIp':
- 'Only letters, numbers and . are supported',
'page.route.portNumber': 'Port Number',
'page.route.weight': 'Weight',
'page.route.radio.staySame': 'Stay The Same',
diff --git a/web/src/pages/Route/locales/zh-CN.ts b/web/src/pages/Route/locales/zh-CN.ts
index 80a82bf..edb767f 100644
--- a/web/src/pages/Route/locales/zh-CN.ts
+++ b/web/src/pages/Route/locales/zh-CN.ts
@@ -74,10 +74,9 @@ export default {
'page.route.form.itemLabel.redirectURI': '重定向路径',
'page.route.form.itemExtraMessage.domain': '路由匹配的域名列表。支持泛域名,如:*.test.com',
'page.route.form.itemRulesPatternMessage.domain':
- '仅支持字母、数字和 * ,且 * 只能是在开头,支持单个 * ',
+ '仅支持字母、数字、-、_和 *,但 * 需要在开头位置。',
'page.route.form.itemExtraMessage1.path':
'HTTP 请求路径,如 /foo/index.html,支持请求路径前缀 /foo/*。/* 代表所有路径',
- 'page.route.form.itemRulesPatternMessage.path': '以 / 开头,且 * 只能在最后',
'page.route.form.itemExtraMessage1.remoteAddrs':
'客户端与服务器握手时 IP,即客户端 IP,例如:192.168.1.101,192.168.1.0/24,::1,fe80::1,fe80::1/64',
'page.route.form.itemRulesPatternMessage.remoteAddrs':
@@ -113,7 +112,6 @@ export default {
'page.route.form.itemLabel.domainNameOrIp': '域名/IP',
'page.route.form.itemExtraMessage.domainNameOrIp': '使用域名时,默认解析本地:/etc/resolv.conf',
- 'page.route.form.itemRulesPatternMessage.domainNameOrIp': '仅支持字母、数字和 . ',
'page.route.portNumber': '端口',
'page.route.weight': '权重',
diff --git a/web/src/pages/Route/transform.ts b/web/src/pages/Route/transform.ts
index 4b03caa..6146b10 100644
--- a/web/src/pages/Route/transform.ts
+++ b/web/src/pages/Route/transform.ts
@@ -218,7 +218,8 @@ export const transformStepData = ({
form1Data.hosts.filter(Boolean).length === 0 ? 'hosts' : '',
form1Data.redirectOption === 'disabled' ? 'redirect' : '',
data.remote_addrs?.filter(Boolean).length === 0 ? 'remote_addrs' : '',
- step3DataCloned.plugin_config_id === '' ? 'plugin_config_id' : ''
+ step3DataCloned.plugin_config_id === '' ? 'plugin_config_id' : '',
+ data.vars?.length ? '' : 'vars',
]);
}
@@ -235,9 +236,9 @@ export const transformStepData = ({
'uris',
'methods',
'redirect',
- 'vars',
'plugins',
'labels',
+ data.vars?.length ? 'vars' : '',
service_id.length !== 0 ? 'service_id' : '',
form1Data.hosts.filter(Boolean).length !== 0 ? 'hosts' : '',
data.remote_addrs?.filter(Boolean).length !== 0 ? 'remote_addrs' : '',
@@ -284,7 +285,7 @@ export const transformRouteData = (data: RouteModule.Body) => {
hosts,
host,
remote_addrs,
- vars,
+ vars = [],
status,
upstream,
upstream_id,