From 5b59dc3231d815e5202aa9a601987aa4a801ae6b Mon Sep 17 00:00:00 2001 From: Love98 Date: Tue, 6 Aug 2024 16:02:14 +0800 Subject: [PATCH 1/3] feat: support ip rate limiting in the backend --- controllers/rule.go | 18 ++++++ go.mod | 1 + go.sum | 1 + rule/rule.go | 4 ++ rule/rule_ip_rate.go | 128 ++++++++++++++++++++++++++++++++++++ rule/rule_ip_rate_test.go | 133 ++++++++++++++++++++++++++++++++++++++ 6 files changed, 285 insertions(+) create mode 100644 rule/rule_ip_rate.go create mode 100644 rule/rule_ip_rate_test.go diff --git a/controllers/rule.go b/controllers/rule.go index d0d26f2..3f1c231 100644 --- a/controllers/rule.go +++ b/controllers/rule.go @@ -131,6 +131,8 @@ func checkExpressions(expressions []*object.Expression, ruleType string) error { return checkWafRule(values) case "IP": return checkIpRule(values) + case "IpRate": + return checkIpRateRule(expressions) } return nil } @@ -157,3 +159,19 @@ func checkIpRule(ipLists []string) error { } return nil } + +func checkIpRateRule(expressions []*object.Expression) error { + if len(expressions) != 1 { + return errors.New("IpRate rule should have only one expression") + } + expression := expressions[0] + _, err := util.ParseIntWithError(expression.Operator) + if err != nil { + return err + } + _, err = util.ParseIntWithError(expression.Value) + if err != nil { + return err + } + return nil +} diff --git a/go.mod b/go.mod index 7201aaf..d1a2eda 100644 --- a/go.mod +++ b/go.mod @@ -21,5 +21,6 @@ require ( github.com/xorm-io/core v0.7.4 github.com/xorm-io/xorm v1.1.6 golang.org/x/net v0.21.0 + golang.org/x/time v0.0.0-20191024005414-555d28b269f0 modernc.org/sqlite v1.11.2 ) diff --git a/go.sum b/go.sum index b8f3475..789ff72 100644 --- a/go.sum +++ b/go.sum @@ -762,6 +762,7 @@ golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20191024005414-555d28b269f0 h1:/5xXl8Y5W96D+TtHSlonuFqGHIWVuyCkGJLwGh9JJFs= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= diff --git a/rule/rule.go b/rule/rule.go index cb764a0..601d34f 100644 --- a/rule/rule.go +++ b/rule/rule.go @@ -36,6 +36,10 @@ func CheckRules(ruleIds []string, r *http.Request) (string, string, error) { ruleObj = &IpRule{} case "WAF": ruleObj = &WafRule{} + case "IpRate": + ruleObj = &IpRateRule{ + ruleName: rule.GetId(), + } default: return "", "", fmt.Errorf("unknown rule type: %s for rule: %s", rule.Type, rule.GetId()) } diff --git a/rule/rule_ip_rate.go b/rule/rule_ip_rate.go new file mode 100644 index 0000000..0b327ac --- /dev/null +++ b/rule/rule_ip_rate.go @@ -0,0 +1,128 @@ +// Copyright 2024 The casbin Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package rule + +import ( + "net/http" + "sync" + "time" + + "github.com/casbin/caswaf/object" + "github.com/casbin/caswaf/util" + "golang.org/x/time/rate" +) + +type IpRateRule struct { + ruleName string +} + +type IpRateLimiter struct { + ips map[string]*rate.Limiter + mu *sync.RWMutex + r rate.Limit + b int +} + +var blackList = map[string]map[string]time.Time{} + +var ipRateLimiters = map[string]*IpRateLimiter{} + +// NewIpRateLimiter . +func NewIpRateLimiter(r rate.Limit, b int) *IpRateLimiter { + i := &IpRateLimiter{ + ips: make(map[string]*rate.Limiter), + mu: &sync.RWMutex{}, + r: r, + b: b, + } + + return i +} + +// AddIP creates a new rate limiter and adds it to the ips map, +// using the IP address as the key +func (i *IpRateLimiter) AddIP(ip string) *rate.Limiter { + i.mu.Lock() + defer i.mu.Unlock() + + limiter := rate.NewLimiter(i.r, i.b) + + i.ips[ip] = limiter + + return limiter +} + +// GetLimiter returns the rate limiter for the provided IP address if it exists. +// Otherwise, calls AddIP to add IP address to the map +func (i *IpRateLimiter) GetLimiter(ip string) *rate.Limiter { + i.mu.Lock() + limiter, exists := i.ips[ip] + + if !exists { + i.mu.Unlock() + return i.AddIP(ip) + } + + i.mu.Unlock() + + return limiter +} + +func (r *IpRateRule) checkRule(expressions []*object.Expression, req *http.Request) (bool, string, string, error) { + expression := expressions[0] // IpRate rule should have only one expression + clientIp := util.GetClientIp(req) + + // If the client IP is in the blacklist, check the block time + createAt, ok := blackList[r.ruleName][clientIp] + if ok { + blockTime := util.ParseInt(expression.Value) + if time.Now().Sub(createAt) < time.Duration(blockTime)*time.Second { + return true, "Block", "Rate limit exceeded", nil + } else { + delete(blackList, clientIp) + } + } + + // If the client IP is not in the blacklist, check the rate limit + ipRateLimiter := ipRateLimiters[r.ruleName] + parseInt := util.ParseInt(expression.Operator) + if ipRateLimiter == nil { + ipRateLimiter = NewIpRateLimiter(rate.Limit(parseInt), parseInt) + ipRateLimiters[r.ruleName] = ipRateLimiter + } + + // If the rate limit has changed, update the rate limiter + limiter := ipRateLimiter.GetLimiter(clientIp) + if ipRateLimiter.r != rate.Limit(parseInt) { + ipRateLimiter.r = rate.Limit(parseInt) + ipRateLimiter.b = parseInt + limiter.SetLimit(ipRateLimiter.r) + limiter.SetBurst(ipRateLimiter.b) + err := limiter.Wait(req.Context()) + if err != nil { + return false, "", "", err + } + } else { + // If the rate limit is exceeded, add the client IP to the blacklist + allow := limiter.Allow() + if !allow { + blackList[r.ruleName] = map[string]time.Time{} + blackList[r.ruleName][clientIp] = time.Now() + return true, "Block", "Rate limit exceeded", nil + } + } + + return false, "", "", nil +} diff --git a/rule/rule_ip_rate_test.go b/rule/rule_ip_rate_test.go new file mode 100644 index 0000000..c78e29f --- /dev/null +++ b/rule/rule_ip_rate_test.go @@ -0,0 +1,133 @@ +package rule + +import ( + "net/http" + "testing" + + "github.com/casbin/caswaf/object" +) + +func TestIpRateRule_checkRule(t *testing.T) { + type fields struct { + ruleName string + } + type args struct { + args []struct { + expressions []*object.Expression + req *http.Request + } + } + + tests := []struct { + name string + fields fields + args args + want []bool + want1 []string + want2 []string + wantErr []bool + }{ + { + name: "Test 1", + fields: fields{ + ruleName: "rule1", + }, + args: args{ + args: []struct { + expressions []*object.Expression + req *http.Request + }{ + { + expressions: []*object.Expression{ + { + Operator: "1", + Value: "1", + }, + }, + req: &http.Request{ + RemoteAddr: "127.0.0.1", + }, + }, + { + expressions: []*object.Expression{ + { + Operator: "1", + Value: "1", + }, + }, + req: &http.Request{ + RemoteAddr: "127.0.0.1", + }, + }, + }, + }, + want: []bool{false, true}, + want1: []string{"", "Block"}, + want2: []string{"", "Rate limit exceeded"}, + wantErr: []bool{false, false}, + }, + { + name: "Test 2", + fields: fields{ + ruleName: "rule2", + }, + args: args{ + args: []struct { + expressions []*object.Expression + req *http.Request + }{ + { + expressions: []*object.Expression{ + { + Operator: "1", + Value: "1", + }, + }, + req: &http.Request{ + RemoteAddr: "127.0.0.1", + }, + }, + { + expressions: []*object.Expression{ + { + Operator: "10", + Value: "1", + }, + }, + req: &http.Request{ + RemoteAddr: "127.0.0.1", + }, + }, + }, + }, + want: []bool{false, false}, + want1: []string{"", ""}, + want2: []string{"", ""}, + wantErr: []bool{false, false}, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + r := &IpRateRule{ + ruleName: tt.fields.ruleName, + } + for i, arg := range tt.args.args { + got, got1, got2, err := r.checkRule(arg.expressions, arg.req) + if (err != nil) != tt.wantErr[i] { + t.Errorf("checkRule() error = %v, wantErr %v", err, tt.wantErr) + return + } + if got != tt.want[i] { + t.Errorf("checkRule() got = %v, want %v", got, tt.want) + } + if got1 != tt.want1[i] { + t.Errorf("checkRule() got1 = %v, want %v", got1, tt.want1) + } + if got2 != tt.want2[i] { + t.Errorf("checkRule() got2 = %v, want %v", got2, tt.want2) + } + } + }) + } +} From e86708f33fa1bc4da82f88c89400e74fc5640217 Mon Sep 17 00:00:00 2001 From: Love98 Date: Wed, 7 Aug 2024 00:08:52 +0800 Subject: [PATCH 2/3] feat: add IpRateTable --- web/package.json | 2 +- web/src/App.js | 23 +- web/src/RuleEditPage.js | 23 +- web/src/components/IpRateRuleTable.js | 113 +++++ web/src/components/UaRuleTable.js | 2 +- web/yarn.lock | 602 ++++++++++++++------------ 6 files changed, 487 insertions(+), 278 deletions(-) create mode 100644 web/src/components/IpRateRuleTable.js diff --git a/web/package.json b/web/package.json index 21b8854..0fa9c3e 100644 --- a/web/package.json +++ b/web/package.json @@ -5,7 +5,7 @@ "dependencies": { "@ant-design/icons": "4.6.2", "@craco/craco": "6.4.5", - "antd": "4.15.5", + "antd": "~4.24.0", "casdoor-js-sdk": "^0.2.7", "copy-to-clipboard": "^3.3.3", "craco-less": "2.0.0", diff --git a/web/src/App.js b/web/src/App.js index 18ff7ab..ccded07 100644 --- a/web/src/App.js +++ b/web/src/App.js @@ -167,12 +167,10 @@ class App extends Component { renderRightDropdown() { const menu = ( - - + }> {i18next.t("account:My Account")} - - + }> {i18next.t("account:Sign Out")} @@ -237,7 +235,7 @@ class App extends Component { ); return ( -
+
{ res } @@ -328,7 +326,7 @@ class App extends Component { renderContent() { return (
-
+
{ Setting.isMobile() ? null : ( @@ -340,16 +338,21 @@ class App extends Component { // theme="dark" mode={"horizontal"} selectedKeys={[`${this.state.selectedMenuKey}`]} - style={{lineHeight: "64px"}} + style={{lineHeight: "64px", position: "absolute", left: 138, right: "300px"}} > { this.renderMenu() } - { - this.renderAccount() - } {/* */} + {/* */} + { + this.renderAccount() + } + {/* */}
diff --git a/web/src/RuleEditPage.js b/web/src/RuleEditPage.js index 1447428..354bfa4 100644 --- a/web/src/RuleEditPage.js +++ b/web/src/RuleEditPage.js @@ -20,6 +20,7 @@ import i18next from "i18next"; import WafRuleTable from "./components/WafRuleTable"; import IpRuleTable from "./components/IpRuleTable"; import UaRuleTable from "./components/UaRuleTable"; +import IpRateRuleTable from "./components/IpRateRuleTable"; const {Option} = Select; @@ -57,6 +58,15 @@ class RuleEditPage extends React.Component { }); } + updateRuleFieldInExpressions(index, key, value) { + const rule = Setting.deepCopy(this.state.rule); + rule.expressions[index][key] = value; + this.updateRuleField("expressions", rule.expressions); + this.setState({ + rule: rule, + }); + } + renderRule() { return ( ) } @@ -131,6 +141,17 @@ class RuleEditPage extends React.Component { /> ) : null } + { + this.state.rule.type === "IpRate" ? ( + {this.updateRuleField("expressions", value);}} + /> + ) : null + } { diff --git a/web/src/components/IpRateRuleTable.js b/web/src/components/IpRateRuleTable.js new file mode 100644 index 0000000..94abd21 --- /dev/null +++ b/web/src/components/IpRateRuleTable.js @@ -0,0 +1,113 @@ +// Copyright 2023 The casbin Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import React from "react"; +import {Button, Col, Input, InputNumber, Row, Table} from "antd"; + +class IpRateRuleTable extends React.Component { + constructor(props) { + super(props); + this.state = { + classes: props, + defaultRules: [ + { + name: "Default IP Rate", + operator: "100", + value: "6000", + }, + ], + }; + if (this.props.table.length === 0) { + this.restore(); + } + } + + updateTable(table) { + this.props.onUpdateTable(table); + } + + updateField(table, index, key, value) { + table[index][key] = String(value); + this.updateTable(table); + } + + restore() { + this.updateTable(this.state.defaultRules); + } + + renderTable(table) { + const columns = [ + { + title: "Name", + dataIndex: "name", + key: "name", + width: "20%", + render: (text, record, index) => ( + { + this.updateField(table, index, "name", e.target.value); + }} /> + ), + }, + { + title: "Rate", + dataIndex: "operator", + key: "operator", + width: "40%", + render: (text, record, index) => ( + { + this.updateField(table, index, "operator", e); + }} /> + ), + }, + { + title: "Block Duration", + dataIndex: "value", + key: "value", + width: "100%", + render: (text, record, index) => ( + { + this.updateField(table, index, "value", e); + }} /> + ), + }, + ]; + + return ( + ( +
+ {this.props.title}     + +
+ )} + /> + ); + } + + render() { + return ( +
+ +
+ { + this.renderTable(this.props.table) + } + + + + ); + } +} + +export default IpRateRuleTable; diff --git a/web/src/components/UaRuleTable.js b/web/src/components/UaRuleTable.js index ca56b66..08c4043 100644 --- a/web/src/components/UaRuleTable.js +++ b/web/src/components/UaRuleTable.js @@ -147,7 +147,7 @@ class UaRuleTable extends React.Component {
{this.props.title}     - +
)} /> diff --git a/web/yarn.lock b/web/yarn.lock index d9a0f95..6120509 100644 --- a/web/yarn.lock +++ b/web/yarn.lock @@ -22,11 +22,16 @@ dependencies: "@ctrl/tinycolor" "^3.4.0" -"@ant-design/icons-svg@^4.0.0", "@ant-design/icons-svg@^4.2.1": +"@ant-design/icons-svg@^4.0.0": version "4.2.1" resolved "https://registry.yarnpkg.com/@ant-design/icons-svg/-/icons-svg-4.2.1.tgz#8630da8eb4471a4aabdaed7d1ff6a97dcb2cf05a" integrity sha512-EB0iwlKDGpG93hW8f85CTJTs4SvMX7tt5ceupvhALp1IF44SeUFOMhKUOYqpsoYWQKAOuTRDMqn75rEaKDp0Xw== +"@ant-design/icons-svg@^4.3.0": + version "4.4.2" + resolved "https://registry.yarnpkg.com/@ant-design/icons-svg/-/icons-svg-4.4.2.tgz#ed2be7fb4d82ac7e1d45a54a5b06d6cecf8be6f6" + integrity sha512-vHbT+zJEVzllwP+CM+ul7reTEfBR0vgxFe7+lREAsAA7YGsYpboiq2sQNeQeRvh09GfQgs/GyFEvZpJ9cLXpXA== + "@ant-design/icons@4.6.2": version "4.6.2" resolved "https://registry.yarnpkg.com/@ant-design/icons/-/icons-4.6.2.tgz#290f2e8cde505ab081fda63e511e82d3c48be982" @@ -38,27 +43,28 @@ classnames "^2.2.6" rc-util "^5.9.4" -"@ant-design/icons@^4.6.2": - version "4.8.0" - resolved "https://registry.yarnpkg.com/@ant-design/icons/-/icons-4.8.0.tgz#3084e2bb494cac3dad6c0392f77c1efc90ee1fa4" - integrity sha512-T89P2jG2vM7OJ0IfGx2+9FC5sQjtTzRSz+mCHTXkFn/ELZc2YpfStmYHmqzq2Jx55J0F7+O6i5/ZKFSVNWCKNg== +"@ant-design/icons@^4.8.2": + version "4.8.3" + resolved "https://registry.yarnpkg.com/@ant-design/icons/-/icons-4.8.3.tgz#41555408ed5e9b0c3d53f3f24fe6a73abfcf4000" + integrity sha512-HGlIQZzrEbAhpJR6+IGdzfbPym94Owr6JZkJ2QCCnOkPVIWMO2xgIVcOKnl8YcpijIo39V7l2qQL5fmtw56cMw== dependencies: "@ant-design/colors" "^6.0.0" - "@ant-design/icons-svg" "^4.2.1" + "@ant-design/icons-svg" "^4.3.0" "@babel/runtime" "^7.11.2" classnames "^2.2.6" + lodash "^4.17.15" rc-util "^5.9.4" -"@ant-design/react-slick@~0.28.1": - version "0.28.4" - resolved "https://registry.yarnpkg.com/@ant-design/react-slick/-/react-slick-0.28.4.tgz#8b296b87ad7c7ae877f2a527b81b7eebd9dd29a9" - integrity sha512-j9eAHTn7GxbXUFNknJoHS2ceAsqrQi2j8XykjZE1IXCD8kJF+t28EvhBLniDpbOsBk/3kjalnhriTfZcjBHNqg== +"@ant-design/react-slick@~1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@ant-design/react-slick/-/react-slick-1.0.2.tgz#241bb412aeacf7ff5d50c61fa5db66773fde6b56" + integrity sha512-Wj8onxL/T8KQLFFiCA4t8eIRGpRR+UPgOdac2sYzonv+i0n3kXHmvHLLiOYL655DQx2Umii9Y9nNgL7ssu5haQ== dependencies: "@babel/runtime" "^7.10.4" classnames "^2.2.5" json2mq "^0.2.0" - lodash "^4.17.21" - resize-observer-polyfill "^1.5.0" + resize-observer-polyfill "^1.5.1" + throttle-debounce "^5.0.0" "@apideck/better-ajv-errors@^0.3.1": version "0.3.6" @@ -1281,13 +1287,20 @@ resolved "https://registry.yarnpkg.com/@babel/regjsgen/-/regjsgen-0.8.0.tgz#f0ba69b075e1f05fb2825b7fad991e7adbb18310" integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA== -"@babel/runtime@^7.1.2", "@babel/runtime@^7.10.1", "@babel/runtime@^7.10.2", "@babel/runtime@^7.10.4", "@babel/runtime@^7.11.1", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.0", "@babel/runtime@^7.12.1", "@babel/runtime@^7.12.5", "@babel/runtime@^7.14.5", "@babel/runtime@^7.16.3", "@babel/runtime@^7.18.3", "@babel/runtime@^7.20.0", "@babel/runtime@^7.20.7", "@babel/runtime@^7.21.0", "@babel/runtime@^7.8.4": +"@babel/runtime@^7.1.2", "@babel/runtime@^7.10.1", "@babel/runtime@^7.10.4", "@babel/runtime@^7.11.1", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.0", "@babel/runtime@^7.12.1", "@babel/runtime@^7.12.5", "@babel/runtime@^7.14.5", "@babel/runtime@^7.16.3", "@babel/runtime@^7.18.3", "@babel/runtime@^7.20.0", "@babel/runtime@^7.20.7", "@babel/runtime@^7.21.0", "@babel/runtime@^7.8.4": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.22.5.tgz#8564dd588182ce0047d55d7a75e93921107b57ec" integrity sha512-ecjvYlnAaZ/KVneE/OdKYBYfgXV3Ptu6zQWmgEF7vwKhQnvVS6bjMD2XYgj+SNvQ1GfK/pjgokfPkC/2CO8CuA== dependencies: regenerator-runtime "^0.13.11" +"@babel/runtime@^7.16.7", "@babel/runtime@^7.18.0": + version "7.25.0" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.25.0.tgz#3af9a91c1b739c569d5d80cc917280919c544ecb" + integrity sha512-7dRy4DwXwtzBrPbZflqxnvfxLF8kdZXPkhymtDeFoFqE6ldzjQFgYTtYIFARcLEYDrqfBfYcZt1WqFxRoyC9Rw== + dependencies: + regenerator-runtime "^0.14.0" + "@babel/template@^7.22.5", "@babel/template@^7.3.3": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.22.5.tgz#0c8c4d944509875849bd0344ff0050756eefc6ec" @@ -1478,6 +1491,11 @@ resolved "https://registry.yarnpkg.com/@ctrl/tinycolor/-/tinycolor-3.6.0.tgz#53fa5fe9c34faee89469e48f91d51a3766108bc8" integrity sha512-/Z3l6pXthq0JvMYdUFyX9j0MaCltlIn6mfh9jLyQwg5aPKxkyNa0PTHtU1AlFXLNk55ZuAeJRcpvq+tmLfKmaQ== +"@ctrl/tinycolor@^3.6.1": + version "3.6.1" + resolved "https://registry.yarnpkg.com/@ctrl/tinycolor/-/tinycolor-3.6.1.tgz#b6c75a56a1947cc916ea058772d666a2c8932f31" + integrity sha512-SITSV6aIXsuVNV3f3O0f2n/cgyEDWoSqtZMYiAmcsYHydcKrOz3gUxB/iXd/Qf08+IZX4KpgNbvUdMBmWz+kcA== + "@eslint-community/eslint-utils@^4.2.0": version "4.4.0" resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" @@ -1890,6 +1908,15 @@ schema-utils "^3.0.0" source-map "^0.7.3" +"@rc-component/portal@^1.0.0-8", "@rc-component/portal@^1.0.2", "@rc-component/portal@^1.1.1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@rc-component/portal/-/portal-1.1.2.tgz#55db1e51d784e034442e9700536faaa6ab63fc71" + integrity sha512-6f813C0IsasTZms08kfA8kPAGxbbkYToa8ALaiDIGGECU4i9hj8Plgbx0sNJDrey3EtHO30hmdaxtT0138xZcg== + dependencies: + "@babel/runtime" "^7.18.0" + classnames "^2.3.2" + rc-util "^5.24.4" + "@rollup/plugin-babel@^5.2.0": version "5.3.1" resolved "https://registry.yarnpkg.com/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz#04bc0608f4aa4b2e4b1aebf284344d0f68fda283" @@ -2752,53 +2779,54 @@ ansi-styles@^5.0.0: resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== -antd@4.15.5: - version "4.15.5" - resolved "https://registry.yarnpkg.com/antd/-/antd-4.15.5.tgz#c54bf3a8a7e537c57395165b47c6caa4f9ea4860" - integrity sha512-zpdwZmdxZfSCVq6t329jXzq4oHZDDrMsD3L/bNilBJz9Y8yJZ0b4wGrWK7TSRipP2KcUB5Udm+bmfv2RBuzzNA== +antd@~4.24.0: + version "4.24.16" + resolved "https://registry.yarnpkg.com/antd/-/antd-4.24.16.tgz#19206b6082e25a9900ba486655f9a55fe405d672" + integrity sha512-zZrK4UYxHtU6tGOOf0uG/kBRx1kTvypfuSB3GqE/SBQxFhZ/TZ+yj7Z1qwI8vGfMtUUJdLeuoCAqGDa1zPsXnQ== dependencies: "@ant-design/colors" "^6.0.0" - "@ant-design/icons" "^4.6.2" - "@ant-design/react-slick" "~0.28.1" - "@babel/runtime" "^7.12.5" - array-tree-filter "^2.1.0" + "@ant-design/icons" "^4.8.2" + "@ant-design/react-slick" "~1.0.2" + "@babel/runtime" "^7.18.3" + "@ctrl/tinycolor" "^3.6.1" classnames "^2.2.6" copy-to-clipboard "^3.2.0" lodash "^4.17.21" - moment "^2.25.3" - rc-cascader "~1.4.0" - rc-checkbox "~2.3.0" - rc-collapse "~3.1.0" - rc-dialog "~8.5.1" - rc-drawer "~4.3.0" - rc-dropdown "~3.2.0" - rc-field-form "~1.20.0" - rc-image "~5.2.4" - rc-input-number "~7.1.0" - rc-mentions "~1.5.0" - rc-menu "~8.10.0" - rc-motion "^2.4.0" - rc-notification "~4.5.2" - rc-pagination "~3.1.6" - rc-picker "~2.5.10" - rc-progress "~3.1.0" - rc-rate "~2.9.0" - rc-resize-observer "^1.0.0" - rc-select "~12.1.6" - rc-slider "~9.7.1" - rc-steps "~4.1.0" - rc-switch "~3.2.0" - rc-table "~7.13.0" - rc-tabs "~11.7.0" - rc-textarea "~0.3.0" - rc-tooltip "~5.1.1" - rc-tree "~4.1.0" - rc-tree-select "~4.3.0" - rc-trigger "^5.2.1" - rc-upload "~4.2.0-alpha.0" - rc-util "^5.9.4" + moment "^2.29.2" + rc-cascader "~3.7.3" + rc-checkbox "~3.0.1" + rc-collapse "~3.4.2" + rc-dialog "~9.0.2" + rc-drawer "~6.3.0" + rc-dropdown "~4.0.1" + rc-field-form "~1.38.2" + rc-image "~5.13.0" + rc-input "~0.1.4" + rc-input-number "~7.3.11" + rc-mentions "~1.13.1" + rc-menu "~9.8.4" + rc-motion "^2.9.0" + rc-notification "~4.6.1" + rc-pagination "~3.2.0" + rc-picker "~2.7.6" + rc-progress "~3.4.2" + rc-rate "~2.9.3" + rc-resize-observer "^1.3.1" + rc-segmented "~2.3.0" + rc-select "~14.1.18" + rc-slider "~10.0.1" + rc-steps "~5.0.0" + rc-switch "~3.2.2" + rc-table "~7.26.0" + rc-tabs "~12.5.10" + rc-textarea "~0.4.7" + rc-tooltip "~5.2.2" + rc-tree "~5.7.12" + rc-tree-select "~5.5.5" + rc-trigger "^5.3.4" + rc-upload "~4.3.6" + rc-util "^5.37.0" scroll-into-view-if-needed "^2.2.25" - warning "^4.0.3" any-promise@^1.0.0: version "1.3.0" @@ -2933,10 +2961,10 @@ ast-types-flow@^0.0.7: resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad" integrity sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag== -async-validator@^3.0.3: - version "3.5.2" - resolved "https://registry.yarnpkg.com/async-validator/-/async-validator-3.5.2.tgz#68e866a96824e8b2694ff7a831c1a25c44d5e500" - integrity sha512-8eLCg00W9pIRZSB781UUX/H6Oskmm8xloZfr09lz5bikRpBVDlJ3hRVuxxP1SxcwsEYfJ4IU8Q19Y8/893r3rQ== +async-validator@^4.1.0: + version "4.2.5" + resolved "https://registry.yarnpkg.com/async-validator/-/async-validator-4.2.5.tgz#c96ea3332a521699d0afaaceed510a54656c6339" + integrity sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg== async@^3.2.3: version "3.2.4" @@ -3378,6 +3406,11 @@ classnames@2.x, classnames@^2.2.1, classnames@^2.2.3, classnames@^2.2.5, classna resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.3.2.tgz#351d813bf0137fcc6a76a16b88208d2560a0d924" integrity sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw== +classnames@^2.3.2: + version "2.5.1" + resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.5.1.tgz#ba774c614be0f016da105c858e7159eae8e7687b" + integrity sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow== + clean-css@^5.2.2: version "5.3.2" resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-5.3.2.tgz#70ecc7d4d4114921f5d298349ff86a31a9975224" @@ -5232,7 +5265,7 @@ history@^4.9.0: tiny-warning "^1.0.0" value-equal "^1.0.1" -hoist-non-react-statics@^3.1.0, hoist-non-react-statics@^3.3.2: +hoist-non-react-statics@^3.1.0: version "3.3.2" resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45" integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw== @@ -6555,7 +6588,7 @@ lodash@^4.17.15, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.7.0: resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== -loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.2.0, loose-envify@^1.3.1, loose-envify@^1.4.0: +loose-envify@^1.1.0, loose-envify@^1.2.0, loose-envify@^1.3.1, loose-envify@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== @@ -6704,14 +6737,6 @@ mini-css-extract-plugin@^2.4.5: dependencies: schema-utils "^4.0.0" -mini-store@^3.0.1: - version "3.0.6" - resolved "https://registry.yarnpkg.com/mini-store/-/mini-store-3.0.6.tgz#44b86be5b2877271224ce0689b3a35a2dffb1ca9" - integrity sha512-YzffKHbYsMQGUWQRKdsearR79QsMzzJcDDmZKlJBqt5JNkqpyJHYlK6gP61O36X+sLf76sO9G6mhKBe83gIZIQ== - dependencies: - hoist-non-react-statics "^3.3.2" - shallowequal "^1.0.2" - minimalistic-assert@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" @@ -6743,11 +6768,16 @@ mkdirp@~0.5.1: dependencies: minimist "^1.2.6" -moment@^2.24.0, moment@^2.25.3, moment@^2.29.1: +moment@^2.24.0, moment@^2.29.1: version "2.29.4" resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.4.tgz#3dbe052889fe7c1b2ed966fcb3a77328964ef108" integrity sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w== +moment@^2.29.2: + version "2.30.1" + resolved "https://registry.yarnpkg.com/moment/-/moment-2.30.1.tgz#f8c91c07b7a786e30c59926df530b4eac96974ae" + integrity sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how== + ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" @@ -7913,29 +7943,31 @@ rc-align@^4.0.0: rc-util "^5.26.0" resize-observer-polyfill "^1.5.1" -rc-cascader@~1.4.0: - version "1.4.3" - resolved "https://registry.yarnpkg.com/rc-cascader/-/rc-cascader-1.4.3.tgz#d91b0dcf8157b60ebe9ec3e58b4db054d5299464" - integrity sha512-Q4l9Mv8aaISJ+giVnM9IaXxDeMqHUGLvi4F+LksS6pHlaKlN4awop/L+IMjIXpL+ug/ojaCyv/ixcVopJYYCVA== +rc-cascader@~3.7.3: + version "3.7.3" + resolved "https://registry.yarnpkg.com/rc-cascader/-/rc-cascader-3.7.3.tgz#1e2ad238b283f7226ce4c9f3a420a35cb63fcc82" + integrity sha512-KBpT+kzhxDW+hxPiNk4zaKa99+Lie2/8nnI11XF+FIOPl4Bj9VlFZi61GrnWzhLGA7VEN+dTxAkNOjkySDa0dA== dependencies: "@babel/runtime" "^7.12.5" array-tree-filter "^2.1.0" - rc-trigger "^5.0.4" - rc-util "^5.0.1" - warning "^4.0.1" + classnames "^2.3.1" + rc-select "~14.1.0" + rc-tree "~5.7.0" + rc-util "^5.6.1" -rc-checkbox@~2.3.0: - version "2.3.2" - resolved "https://registry.yarnpkg.com/rc-checkbox/-/rc-checkbox-2.3.2.tgz#f91b3678c7edb2baa8121c9483c664fa6f0aefc1" - integrity sha512-afVi1FYiGv1U0JlpNH/UaEXdh6WUJjcWokj/nUN2TgG80bfG+MDdbfHKlLcNNba94mbjy2/SXJ1HDgrOkXGAjg== +rc-checkbox@~3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/rc-checkbox/-/rc-checkbox-3.0.1.tgz#f978771329be339d479cd81465eb2e2f8c82bc87" + integrity sha512-k7nxDWxYF+jDI0ZcCvuvj71xONmWRVe5+1MKcERRR9MRyP3tZ69b+yUCSXXh+sik4/Hc9P5wHr2nnUoGS2zBjA== dependencies: "@babel/runtime" "^7.10.1" - classnames "^2.2.1" + classnames "^2.3.2" + rc-util "^5.25.2" -rc-collapse@~3.1.0: - version "3.1.4" - resolved "https://registry.yarnpkg.com/rc-collapse/-/rc-collapse-3.1.4.tgz#063e33fcc427a378e63da757898cd1fba6269679" - integrity sha512-WayrhswKMwuJab9xbqFxXTgV0m6X8uOPEO6zm/GJ5YJiJ/wIh/Dd2VtWeI06HYUEnTFv0HNcYv+zWbB+p6OD2A== +rc-collapse@~3.4.2: + version "3.4.2" + resolved "https://registry.yarnpkg.com/rc-collapse/-/rc-collapse-3.4.2.tgz#1310be7ad4cd0dcfc622c45f6c3b5ffdee403ad7" + integrity sha512-jpTwLgJzkhAgp2Wpi3xmbTbbYExg6fkptL67Uu5LCRVEj6wqmy0DHTjjeynsjOLsppHGHu41t1ELntZ0lEvS/Q== dependencies: "@babel/runtime" "^7.10.1" classnames "2.x" @@ -7943,109 +7975,102 @@ rc-collapse@~3.1.0: rc-util "^5.2.1" shallowequal "^1.1.0" -rc-dialog@~8.5.1: - version "8.5.3" - resolved "https://registry.yarnpkg.com/rc-dialog/-/rc-dialog-8.5.3.tgz#84fb1f7637dd8aadd709ba905eac2a3a2e07d21b" - integrity sha512-zoamT8L6+rBwnwjPlrZRxiHCHQXrTcWZD3a6ruoqEdUKP1KgO0eSjMDH9WlF3WEPYMVnb2G5SrjHrhnwgPDu5w== - dependencies: - "@babel/runtime" "^7.10.1" - classnames "^2.2.6" - rc-motion "^2.3.0" - rc-util "^5.6.1" - -rc-dialog@~8.6.0: - version "8.6.0" - resolved "https://registry.yarnpkg.com/rc-dialog/-/rc-dialog-8.6.0.tgz#3b228dac085de5eed8c6237f31162104687442e7" - integrity sha512-GSbkfqjqxpZC5/zc+8H332+q5l/DKUhpQr0vdX2uDsxo5K0PhvaMEVjyoJUTkZ3+JstEADQji1PVLVb/2bJeOQ== +rc-dialog@~9.0.0, rc-dialog@~9.0.2: + version "9.0.4" + resolved "https://registry.yarnpkg.com/rc-dialog/-/rc-dialog-9.0.4.tgz#16c5a47aff0ee4e009f966e79926bef0451b6cda" + integrity sha512-pmnPRZKd9CGzGgf4a1ysBvMhxm8Afx5fF6M7AzLtJ0qh8X1bshurDlqnK4MBNAB4hAeAMMbz6Ytb1rkGMvKFbQ== dependencies: "@babel/runtime" "^7.10.1" + "@rc-component/portal" "^1.0.0-8" classnames "^2.2.6" rc-motion "^2.3.0" - rc-util "^5.6.1" + rc-util "^5.21.0" -rc-drawer@~4.3.0: - version "4.3.1" - resolved "https://registry.yarnpkg.com/rc-drawer/-/rc-drawer-4.3.1.tgz#356333a7af01b777abd685c96c2ce62efb44f3f3" - integrity sha512-GMfFy4maqxS9faYXEhQ+0cA1xtkddEQzraf6SAdzWbn444DrrLogwYPk1NXSpdXjLCLxgxOj9MYtyYG42JsfXg== +rc-drawer@~6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/rc-drawer/-/rc-drawer-6.3.0.tgz#f8af5fafbab19b83722360dcf93e966d8a2875ad" + integrity sha512-uBZVb3xTAR+dBV53d/bUhTctCw3pwcwJoM7g5aX+7vgwt2zzVzoJ6aqFjYJpBlZ9zp0dVYN8fV+hykFE7c4lig== dependencies: "@babel/runtime" "^7.10.1" + "@rc-component/portal" "^1.1.1" classnames "^2.2.6" - rc-util "^5.7.0" + rc-motion "^2.6.1" + rc-util "^5.21.2" -rc-dropdown@^3.1.3: - version "3.6.2" - resolved "https://registry.yarnpkg.com/rc-dropdown/-/rc-dropdown-3.6.2.tgz#d23b8b2762941ac39e665673946f67ca9c39118f" - integrity sha512-Wsw7GkVbUXADEs8FPL0v8gd+3mWQiydPFXBlr2imMScQaf8hh79pG9KrBc1DwK+nqHmYOpQfK2gn6jG2AQw9Pw== +rc-dropdown@~4.0.0, rc-dropdown@~4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/rc-dropdown/-/rc-dropdown-4.0.1.tgz#f65d9d3d89750241057db59d5a75e43cd4576b68" + integrity sha512-OdpXuOcme1rm45cR0Jzgfl1otzmU4vuBVb+etXM8vcaULGokAKVpKlw8p6xzspG7jGd/XxShvq+N3VNEfk/l5g== dependencies: - "@babel/runtime" "^7.10.1" + "@babel/runtime" "^7.18.3" classnames "^2.2.6" - rc-trigger "^5.0.4" + rc-trigger "^5.3.1" rc-util "^5.17.0" -rc-dropdown@~3.2.0: - version "3.2.5" - resolved "https://registry.yarnpkg.com/rc-dropdown/-/rc-dropdown-3.2.5.tgz#c211e571d29d15e7f725b5a75fc8c7f371fc3348" - integrity sha512-dVO2eulOSbEf+F4OyhCY5iGiMVhUYY/qeXxL7Ex2jDBt/xc89jU07mNoowV6aWxwVOc70pxEINff0oM2ogjluA== - dependencies: - "@babel/runtime" "^7.10.1" - classnames "^2.2.6" - rc-trigger "^5.0.4" - -rc-field-form@~1.20.0: - version "1.20.1" - resolved "https://registry.yarnpkg.com/rc-field-form/-/rc-field-form-1.20.1.tgz#d1c51888107cf075b42704b7b575bef84c359291" - integrity sha512-f64KEZop7zSlrG4ef/PLlH12SLn6iHDQ3sTG+RfKBM45hikwV1i8qMf53xoX12NvXXWg1VwchggX/FSso4bWaA== +rc-field-form@~1.38.2: + version "1.38.2" + resolved "https://registry.yarnpkg.com/rc-field-form/-/rc-field-form-1.38.2.tgz#1eafac98eb84d47dc3b55de98ed50751d9852dd2" + integrity sha512-O83Oi1qPyEv31Sg+Jwvsj6pXc8uQI2BtIAkURr5lvEYHVggXJhdU/nynK8wY1gbw0qR48k731sN5ON4egRCROA== dependencies: - "@babel/runtime" "^7.8.4" - async-validator "^3.0.3" - rc-util "^5.8.0" + "@babel/runtime" "^7.18.0" + async-validator "^4.1.0" + rc-util "^5.32.2" -rc-image@~5.2.4: - version "5.2.5" - resolved "https://registry.yarnpkg.com/rc-image/-/rc-image-5.2.5.tgz#44e6ffc842626827960e7ab72e1c0d6f3a8ce440" - integrity sha512-qUfZjYIODxO0c8a8P5GeuclYXZjzW4hV/5hyo27XqSFo1DmTCs2HkVeQObkcIk5kNsJtgsj1KoPThVsSc/PXOw== +rc-image@~5.13.0: + version "5.13.0" + resolved "https://registry.yarnpkg.com/rc-image/-/rc-image-5.13.0.tgz#1ed9b852a40b5eff34786ba7d2f0e9d26eeab874" + integrity sha512-iZTOmw5eWo2+gcrJMMcnd7SsxVHl3w5xlyCgsULUdJhJbnuI8i/AL0tVOsE7aLn9VfOh1qgDT3mC2G75/c7mqg== dependencies: "@babel/runtime" "^7.11.2" + "@rc-component/portal" "^1.0.2" classnames "^2.2.6" - rc-dialog "~8.6.0" + rc-dialog "~9.0.0" + rc-motion "^2.6.2" rc-util "^5.0.6" -rc-input-number@~7.1.0: - version "7.1.4" - resolved "https://registry.yarnpkg.com/rc-input-number/-/rc-input-number-7.1.4.tgz#9d7410c91ff8dc6384d0233c20df278982989f9a" - integrity sha512-EG4iqkqyqzLRu/Dq+fw2od7nlgvXLEatE+J6uhi3HXE1qlM3C7L6a7o/hL9Ly9nimkES2IeQoj3Qda3I0izj3Q== +rc-input-number@~7.3.11: + version "7.3.11" + resolved "https://registry.yarnpkg.com/rc-input-number/-/rc-input-number-7.3.11.tgz#c7089705a220e1a59ba974fabf89693e00dd2442" + integrity sha512-aMWPEjFeles6PQnMqP5eWpxzsvHm9rh1jQOWXExUEIxhX62Fyl/ptifLHOn17+waDG1T/YUb6flfJbvwRhHrbA== dependencies: "@babel/runtime" "^7.10.1" classnames "^2.2.5" - rc-util "^5.9.8" + rc-util "^5.23.0" -rc-mentions@~1.5.0: - version "1.5.3" - resolved "https://registry.yarnpkg.com/rc-mentions/-/rc-mentions-1.5.3.tgz#b92bebadf8ad9fb3586ba1af922d63b49d991c67" - integrity sha512-NG/KB8YiKBCJPHHvr/QapAb4f9YzLJn7kDHtmI1K6t7ZMM5YgrjIxNNhoRKKP9zJvb9PdPts69Hbg4ZMvLVIFQ== +rc-input@~0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/rc-input/-/rc-input-0.1.4.tgz#45cb4ba209ae6cc835a2acb8629d4f8f0cb347e0" + integrity sha512-FqDdNz+fV2dKNgfXzcSLKvC+jEs1709t7nD+WdfjrdSaOcefpgc7BUJYadc3usaING+b7ediMTfKxuJBsEFbXA== + dependencies: + "@babel/runtime" "^7.11.1" + classnames "^2.2.1" + rc-util "^5.18.1" + +rc-mentions@~1.13.1: + version "1.13.1" + resolved "https://registry.yarnpkg.com/rc-mentions/-/rc-mentions-1.13.1.tgz#c884b70e1505a197f1b32a7c6b39090db6992a72" + integrity sha512-FCkaWw6JQygtOz0+Vxz/M/NWqrWHB9LwqlY2RtcuFqWJNFK9njijOOzTSsBGANliGufVUzx/xuPHmZPBV0+Hgw== dependencies: "@babel/runtime" "^7.10.1" classnames "^2.2.6" - rc-menu "^8.0.1" - rc-textarea "^0.3.0" + rc-menu "~9.8.0" + rc-textarea "^0.4.0" rc-trigger "^5.0.4" - rc-util "^5.0.1" + rc-util "^5.22.5" -rc-menu@^8.0.1, rc-menu@^8.6.1, rc-menu@~8.10.0: - version "8.10.8" - resolved "https://registry.yarnpkg.com/rc-menu/-/rc-menu-8.10.8.tgz#c3eb2158b3983e42a67192babad9c8128755d26a" - integrity sha512-0gnSR0nmR/60NnK+72EGd+QheHyPSQ3wYg1TwX1zl0JJ9Gm0purFFykCXVv/G0Jynpt0QySPAos+bpHpjMZdoQ== +rc-menu@~9.8.0, rc-menu@~9.8.4: + version "9.8.4" + resolved "https://registry.yarnpkg.com/rc-menu/-/rc-menu-9.8.4.tgz#58bf19d471e3c74ff4bcfdb0f02a3826ebe2553b" + integrity sha512-lmw2j8I2fhdIzHmC9ajfImfckt0WDb2KVJJBBRIsxPEw2kGkEfjLMUoB1NgiNT/Q5cC8PdjGOGQjHJIJMwyNMw== dependencies: "@babel/runtime" "^7.10.1" classnames "2.x" - mini-store "^3.0.1" - rc-motion "^2.0.1" + rc-motion "^2.4.3" + rc-overflow "^1.2.8" rc-trigger "^5.1.2" - rc-util "^5.7.0" - resize-observer-polyfill "^1.5.0" - shallowequal "^1.1.0" + rc-util "^5.27.0" -rc-motion@^2.0.0, rc-motion@^2.0.1, rc-motion@^2.2.0, rc-motion@^2.3.0, rc-motion@^2.3.4, rc-motion@^2.4.0: +rc-motion@^2.0.0, rc-motion@^2.0.1, rc-motion@^2.2.0, rc-motion@^2.3.0, rc-motion@^2.3.4: version "2.7.3" resolved "https://registry.yarnpkg.com/rc-motion/-/rc-motion-2.7.3.tgz#126155bb3e687174fb3b92fddade2835c963b04d" integrity sha512-2xUvo8yGHdOHeQbdI8BtBsCIrWKchEmFEIskf0nmHtJsou+meLd/JE+vnvSX2JxcBrJtXY2LuBpxAOxrbY/wMQ== @@ -8054,15 +8079,24 @@ rc-motion@^2.0.0, rc-motion@^2.0.1, rc-motion@^2.2.0, rc-motion@^2.3.0, rc-motio classnames "^2.2.1" rc-util "^5.21.0" -rc-notification@~4.5.2: - version "4.5.7" - resolved "https://registry.yarnpkg.com/rc-notification/-/rc-notification-4.5.7.tgz#265e6e6a0c1a0fac63d6abd4d832eb8ff31522f1" - integrity sha512-zhTGUjBIItbx96SiRu3KVURcLOydLUHZCPpYEn1zvh+re//Tnq/wSxN4FKgp38n4HOgHSVxcLEeSxBMTeBBDdw== +rc-motion@^2.4.3, rc-motion@^2.4.4, rc-motion@^2.6.1, rc-motion@^2.6.2, rc-motion@^2.9.0: + version "2.9.2" + resolved "https://registry.yarnpkg.com/rc-motion/-/rc-motion-2.9.2.tgz#f7c6d480250df8a512d0cfdce07ff3da906958cf" + integrity sha512-fUAhHKLDdkAXIDLH0GYwof3raS58dtNUmzLF2MeiR8o6n4thNpSDQhOqQzWE4WfFZDCi9VEN8n7tiB7czREcyw== + dependencies: + "@babel/runtime" "^7.11.1" + classnames "^2.2.1" + rc-util "^5.43.0" + +rc-notification@~4.6.1: + version "4.6.1" + resolved "https://registry.yarnpkg.com/rc-notification/-/rc-notification-4.6.1.tgz#068e8674f4bd7926a447eca512915d4b41b15c91" + integrity sha512-NSmFYwrrdY3+un1GvDAJQw62Xi9LNMSsoQyo95tuaYrcad5Bn9gJUL8AREufRxSQAQnr64u3LtP3EUyLYT6bhw== dependencies: "@babel/runtime" "^7.10.1" classnames "2.x" rc-motion "^2.2.0" - rc-util "^5.0.1" + rc-util "^5.20.1" rc-overflow@^1.0.0: version "1.3.1" @@ -8074,18 +8108,28 @@ rc-overflow@^1.0.0: rc-resize-observer "^1.0.0" rc-util "^5.19.2" -rc-pagination@~3.1.6: - version "3.1.17" - resolved "https://registry.yarnpkg.com/rc-pagination/-/rc-pagination-3.1.17.tgz#91e690aa894806e344cea88ea4a16d244194a1bd" - integrity sha512-/BQ5UxcBnW28vFAcP2hfh+Xg15W0QZn8TWYwdCApchMH1H0CxiaUUcULP8uXcFM1TygcdKWdt3JqsL9cTAfdkQ== +rc-overflow@^1.2.8: + version "1.3.2" + resolved "https://registry.yarnpkg.com/rc-overflow/-/rc-overflow-1.3.2.tgz#72ee49e85a1308d8d4e3bd53285dc1f3e0bcce2c" + integrity sha512-nsUm78jkYAoPygDAcGZeC2VwIg/IBGSodtOY3pMof4W3M9qRJgqaDYm03ZayHlde3I6ipliAxbN0RUcGf5KOzw== + dependencies: + "@babel/runtime" "^7.11.1" + classnames "^2.2.1" + rc-resize-observer "^1.0.0" + rc-util "^5.37.0" + +rc-pagination@~3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/rc-pagination/-/rc-pagination-3.2.0.tgz#4f2fdba9fdac0f48e5c9fb1141973818138af7e1" + integrity sha512-5tIXjB670WwwcAJzAqp2J+cOBS9W3cH/WU1EiYwXljuZ4vtZXKlY2Idq8FZrnYBz8KhN3vwPo9CoV/SJS6SL1w== dependencies: "@babel/runtime" "^7.10.1" classnames "^2.2.1" -rc-picker@~2.5.10: - version "2.5.19" - resolved "https://registry.yarnpkg.com/rc-picker/-/rc-picker-2.5.19.tgz#73d07546fac3992f0bfabf2789654acada39e46f" - integrity sha512-u6myoCu/qiQ0vLbNzSzNrzTQhs7mldArCpPHrEI6OUiifs+IPXmbesqSm0zilJjfzrZJLgYeyyOMSznSlh0GKA== +rc-picker@~2.7.6: + version "2.7.6" + resolved "https://registry.yarnpkg.com/rc-picker/-/rc-picker-2.7.6.tgz#03d855888d1878d8946bab77a3d24477fd3a0792" + integrity sha512-H9if/BUJUZBOhPfWcPeT15JUI3/ntrG9muzERrXDkSoWmDj4yzmBvumozpxYrHwjcKnjyDGAke68d+whWwvhHA== dependencies: "@babel/runtime" "^7.10.1" classnames "^2.2.1" @@ -8093,21 +8137,22 @@ rc-picker@~2.5.10: dayjs "1.x" moment "^2.24.0" rc-trigger "^5.0.4" - rc-util "^5.4.0" + rc-util "^5.37.0" shallowequal "^1.1.0" -rc-progress@~3.1.0: - version "3.1.4" - resolved "https://registry.yarnpkg.com/rc-progress/-/rc-progress-3.1.4.tgz#66040d0fae7d8ced2b38588378eccb2864bad615" - integrity sha512-XBAif08eunHssGeIdxMXOmRQRULdHaDdIFENQ578CMb4dyewahmmfJRyab+hw4KH4XssEzzYOkAInTLS7JJG+Q== +rc-progress@~3.4.2: + version "3.4.2" + resolved "https://registry.yarnpkg.com/rc-progress/-/rc-progress-3.4.2.tgz#f8df9ee95e790490171ab6b31bf07303cdc79980" + integrity sha512-iAGhwWU+tsayP+Jkl9T4+6rHeQTG9kDz8JAHZk4XtQOcYN5fj9H34NXNEdRdZx94VUDHMqCb1yOIvi8eJRh67w== dependencies: "@babel/runtime" "^7.10.1" classnames "^2.2.6" + rc-util "^5.16.1" -rc-rate@~2.9.0: - version "2.9.2" - resolved "https://registry.yarnpkg.com/rc-rate/-/rc-rate-2.9.2.tgz#4a58965d1ecf91896ebae01d458b59056df0b4ea" - integrity sha512-SaiZFyN8pe0Fgphv8t3+kidlej+cq/EALkAJAc3A0w0XcPaH2L1aggM8bhe1u6GAGuQNAoFvTLjw4qLPGRKV5g== +rc-rate@~2.9.3: + version "2.9.3" + resolved "https://registry.yarnpkg.com/rc-rate/-/rc-rate-2.9.3.tgz#b30a8043ffcb327bab053cd78508e07015d8a483" + integrity sha512-2THssUSnRhtqIouQIIXqsZGzRczvp4WsH4WvGuhiwm+LG2fVpDUJliP9O1zeDOZvYfBE/Bup4SgHun/eCkbjgQ== dependencies: "@babel/runtime" "^7.10.1" classnames "^2.2.5" @@ -8123,40 +8168,59 @@ rc-resize-observer@^1.0.0: rc-util "^5.27.0" resize-observer-polyfill "^1.5.1" -rc-select@^12.0.0, rc-select@~12.1.6: - version "12.1.13" - resolved "https://registry.yarnpkg.com/rc-select/-/rc-select-12.1.13.tgz#c33560ccb9339d30695b52458f55efc35af35273" - integrity sha512-cPI+aesP6dgCAaey4t4upDbEukJe+XN0DK6oO/6flcCX5o28o7KNZD7JAiVtC/6fCwqwI/kSs7S/43dvHmBl+A== +rc-resize-observer@^1.1.0, rc-resize-observer@^1.3.1: + version "1.4.0" + resolved "https://registry.yarnpkg.com/rc-resize-observer/-/rc-resize-observer-1.4.0.tgz#7bba61e6b3c604834980647cce6451914750d0cc" + integrity sha512-PnMVyRid9JLxFavTjeDXEXo65HCRqbmLBw9xX9gfC4BZiSzbLXKzW3jPz+J0P71pLbD5tBMTT+mkstV5gD0c9Q== + dependencies: + "@babel/runtime" "^7.20.7" + classnames "^2.2.1" + rc-util "^5.38.0" + resize-observer-polyfill "^1.5.1" + +rc-segmented@~2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/rc-segmented/-/rc-segmented-2.3.0.tgz#b3fe080fb434a266c02e30bb62a47d2c6e094341" + integrity sha512-I3FtM5Smua/ESXutFfb8gJ8ZPcvFR+qUgeeGFQHBOvRiRKyAk4aBE5nfqrxXx+h8/vn60DQjOt6i4RNtrbOobg== + dependencies: + "@babel/runtime" "^7.11.1" + classnames "^2.2.1" + rc-motion "^2.4.4" + rc-util "^5.17.0" + +rc-select@~14.1.0, rc-select@~14.1.18: + version "14.1.18" + resolved "https://registry.yarnpkg.com/rc-select/-/rc-select-14.1.18.tgz#f1d95233132cda9c1485963254255b83e97a37a9" + integrity sha512-4JgY3oG2Yz68ECMUSCON7mtxuJvCSj+LJpHEg/AONaaVBxIIrmI/ZTuMJkyojall/X50YdBe5oMKqHHPNiPzEg== dependencies: "@babel/runtime" "^7.10.1" classnames "2.x" rc-motion "^2.0.1" rc-overflow "^1.0.0" rc-trigger "^5.0.4" - rc-util "^5.9.8" + rc-util "^5.16.1" rc-virtual-list "^3.2.0" -rc-slider@~9.7.1: - version "9.7.5" - resolved "https://registry.yarnpkg.com/rc-slider/-/rc-slider-9.7.5.tgz#193141c68e99b1dc3b746daeb6bf852946f5b7f4" - integrity sha512-LV/MWcXFjco1epPbdw1JlLXlTgmWpB9/Y/P2yinf8Pg3wElHxA9uajN21lJiWtZjf5SCUekfSP6QMJfDo4t1hg== +rc-slider@~10.0.1: + version "10.0.1" + resolved "https://registry.yarnpkg.com/rc-slider/-/rc-slider-10.0.1.tgz#7058c68ff1e1aa4e7c3536e5e10128bdbccb87f9" + integrity sha512-igTKF3zBet7oS/3yNiIlmU8KnZ45npmrmHlUUio8PNbIhzMcsh+oE/r2UD42Y6YD2D/s+kzCQkzQrPD6RY435Q== dependencies: "@babel/runtime" "^7.10.1" classnames "^2.2.5" - rc-tooltip "^5.0.1" - rc-util "^5.16.1" + rc-util "^5.18.1" shallowequal "^1.1.0" -rc-steps@~4.1.0: - version "4.1.4" - resolved "https://registry.yarnpkg.com/rc-steps/-/rc-steps-4.1.4.tgz#0ba82db202d59ca52d0693dc9880dd145b19dc23" - integrity sha512-qoCqKZWSpkh/b03ASGx1WhpKnuZcRWmvuW+ZUu4mvMdfvFzVxblTwUM+9aBd0mlEUFmt6GW8FXhMpHkK3Uzp3w== +rc-steps@~5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/rc-steps/-/rc-steps-5.0.0.tgz#2e2403f2dd69eb3966d65f461f7e3a8ee1ef69fe" + integrity sha512-9TgRvnVYirdhbV0C3syJFj9EhCRqoJAsxt4i1rED5o8/ZcSv5TLIYyo4H8MCjLPvbe2R+oBAm/IYBEtC+OS1Rw== dependencies: - "@babel/runtime" "^7.10.2" + "@babel/runtime" "^7.16.7" classnames "^2.2.3" - rc-util "^5.0.1" + rc-util "^5.16.1" -rc-switch@~3.2.0: +rc-switch@~3.2.2: version "3.2.2" resolved "https://registry.yarnpkg.com/rc-switch/-/rc-switch-3.2.2.tgz#d001f77f12664d52595b4f6fb425dd9e66fba8e8" integrity sha512-+gUJClsZZzvAHGy1vZfnwySxj+MjLlGRyXKXScrtCTcmiYNPzxDFOxdQ/3pK1Kt/0POvwJ/6ALOR8gwdXGhs+A== @@ -8165,91 +8229,73 @@ rc-switch@~3.2.0: classnames "^2.2.1" rc-util "^5.0.1" -rc-table@~7.13.0: - version "7.13.3" - resolved "https://registry.yarnpkg.com/rc-table/-/rc-table-7.13.3.tgz#25d5f5ec47ee2d8a293aff18c4c4b8876f78c22b" - integrity sha512-oP4fknjvKCZAaiDnvj+yzBaWcg+JYjkASbeWonU1BbrLcomkpKvMUgPODNEzg0QdXA9OGW0PO86h4goDSW06Kg== +rc-table@~7.26.0: + version "7.26.0" + resolved "https://registry.yarnpkg.com/rc-table/-/rc-table-7.26.0.tgz#9d517e7fa512e7571fdcc453eb1bf19edfac6fbc" + integrity sha512-0cD8e6S+DTGAt5nBZQIPFYEaIukn17sfa5uFL98faHlH/whZzD8ii3dbFL4wmUDEL4BLybhYop+QUfZJ4CPvNQ== dependencies: "@babel/runtime" "^7.10.1" classnames "^2.2.5" - rc-resize-observer "^1.0.0" - rc-util "^5.4.0" + rc-resize-observer "^1.1.0" + rc-util "^5.22.5" shallowequal "^1.1.0" -rc-tabs@~11.7.0: - version "11.7.3" - resolved "https://registry.yarnpkg.com/rc-tabs/-/rc-tabs-11.7.3.tgz#32a30e59c6992d60fb58115ba0bf2652b337ed43" - integrity sha512-5nd2NVss9TprPRV9r8N05SjQyAE7zDrLejxFLcbJ+BdLxSwnGnk3ws/Iq0smqKZUnPQC0XEvnpF3+zlllUUT2w== +rc-tabs@~12.5.10: + version "12.5.10" + resolved "https://registry.yarnpkg.com/rc-tabs/-/rc-tabs-12.5.10.tgz#0e41c723fac66c4f0bcad3271429fff6653b0721" + integrity sha512-Ay0l0jtd4eXepFH9vWBvinBjqOpqzcsJTerBGwJy435P2S90Uu38q8U/mvc1sxUEVOXX5ZCFbxcWPnfG3dH+tQ== dependencies: "@babel/runtime" "^7.11.2" classnames "2.x" - rc-dropdown "^3.1.3" - rc-menu "^8.6.1" + rc-dropdown "~4.0.0" + rc-menu "~9.8.0" + rc-motion "^2.6.2" rc-resize-observer "^1.0.0" - rc-util "^5.5.0" + rc-util "^5.16.0" -rc-textarea@^0.3.0, rc-textarea@~0.3.0: - version "0.3.7" - resolved "https://registry.yarnpkg.com/rc-textarea/-/rc-textarea-0.3.7.tgz#987142891efdedb774883c07e2f51b318fde5a11" - integrity sha512-yCdZ6binKmAQB13hc/oehh0E/QRwoPP1pjF21aHBxlgXO3RzPF6dUu4LG2R4FZ1zx/fQd2L1faktulrXOM/2rw== +rc-textarea@^0.4.0, rc-textarea@~0.4.7: + version "0.4.7" + resolved "https://registry.yarnpkg.com/rc-textarea/-/rc-textarea-0.4.7.tgz#627f662d46f99e0059d1c1ebc8db40c65339fe90" + integrity sha512-IQPd1CDI3mnMlkFyzt2O4gQ2lxUsnBAeJEoZGJnkkXgORNqyM9qovdrCj9NzcRfpHgLdzaEbU3AmobNFGUznwQ== dependencies: "@babel/runtime" "^7.10.1" classnames "^2.2.1" rc-resize-observer "^1.0.0" - rc-util "^5.7.0" + rc-util "^5.24.4" shallowequal "^1.1.0" -rc-tooltip@^5.0.1: - version "5.3.1" - resolved "https://registry.yarnpkg.com/rc-tooltip/-/rc-tooltip-5.3.1.tgz#3dde4e1865f79cd23f202bba4e585c2a1173024b" - integrity sha512-e6H0dMD38EPaSPD2XC8dRfct27VvT2TkPdoBSuNl3RRZ5tspiY/c5xYEmGC0IrABvMBgque4Mr2SMZuliCvoiQ== +rc-tooltip@~5.2.2: + version "5.2.2" + resolved "https://registry.yarnpkg.com/rc-tooltip/-/rc-tooltip-5.2.2.tgz#e5cafa8ecebf78108936a0bcb93c150fa81ac93b" + integrity sha512-jtQzU/18S6EI3lhSGoDYhPqNpWajMtS5VV/ld1LwyfrDByQpYmw/LW6U7oFXXLukjfDHQ7Ju705A82PRNFWYhg== dependencies: "@babel/runtime" "^7.11.2" classnames "^2.3.1" - rc-trigger "^5.3.1" - -rc-tooltip@~5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/rc-tooltip/-/rc-tooltip-5.1.1.tgz#94178ed162d0252bc4993b725f5dc2ac0fccf154" - integrity sha512-alt8eGMJulio6+4/uDm7nvV+rJq9bsfxFDCI0ljPdbuoygUscbsMYb6EQgwib/uqsXQUvzk+S7A59uYHmEgmDA== - dependencies: - "@babel/runtime" "^7.11.2" rc-trigger "^5.0.0" -rc-tree-select@~4.3.0: - version "4.3.3" - resolved "https://registry.yarnpkg.com/rc-tree-select/-/rc-tree-select-4.3.3.tgz#28eba4d8a8dc8c0f9b61d83ce465842a6915eca4" - integrity sha512-0tilOHLJA6p+TNg4kD559XnDX3PTEYuoSF7m7ryzFLAYvdEEPtjn0QZc5z6L0sMKBiBlj8a2kf0auw8XyHU3lA== +rc-tree-select@~5.5.5: + version "5.5.5" + resolved "https://registry.yarnpkg.com/rc-tree-select/-/rc-tree-select-5.5.5.tgz#d28b3b45da1e820cd21762ba0ee93c19429bb369" + integrity sha512-k2av7jF6tW9bIO4mQhaVdV4kJ1c54oxV3/hHVU+oD251Gb5JN+m1RbJFTMf1o0rAFqkvto33rxMdpafaGKQRJw== dependencies: "@babel/runtime" "^7.10.1" classnames "2.x" - rc-select "^12.0.0" - rc-tree "^4.0.0" - rc-util "^5.0.5" - -rc-tree@^4.0.0: - version "4.2.2" - resolved "https://registry.yarnpkg.com/rc-tree/-/rc-tree-4.2.2.tgz#4429187cbbfbecbe989714a607e3de8b3ab7763f" - integrity sha512-V1hkJt092VrOVjNyfj5IYbZKRMHxWihZarvA5hPL/eqm7o2+0SNkeidFYm7LVVBrAKBpOpa0l8xt04uiqOd+6w== - dependencies: - "@babel/runtime" "^7.10.1" - classnames "2.x" - rc-motion "^2.0.1" - rc-util "^5.0.0" - rc-virtual-list "^3.0.1" + rc-select "~14.1.0" + rc-tree "~5.7.0" + rc-util "^5.16.1" -rc-tree@~4.1.0: - version "4.1.5" - resolved "https://registry.yarnpkg.com/rc-tree/-/rc-tree-4.1.5.tgz#734ab1bfe835e78791be41442ca0e571147ab6fa" - integrity sha512-q2vjcmnBDylGZ9/ZW4F9oZMKMJdbFWC7um+DAQhZG1nqyg1iwoowbBggUDUaUOEryJP+08bpliEAYnzJXbI5xQ== +rc-tree@~5.7.0, rc-tree@~5.7.12: + version "5.7.12" + resolved "https://registry.yarnpkg.com/rc-tree/-/rc-tree-5.7.12.tgz#6910e551390963708936c2cbf925f9deff4a6d76" + integrity sha512-LXA5nY2hG5koIAlHW5sgXgLpOMz+bFRbnZZ+cCg0tQs4Wv1AmY7EDi1SK7iFXhslYockbqUerQan82jljoaItg== dependencies: "@babel/runtime" "^7.10.1" classnames "2.x" rc-motion "^2.0.1" - rc-util "^5.0.0" - rc-virtual-list "^3.0.1" + rc-util "^5.16.1" + rc-virtual-list "^3.5.1" -rc-trigger@^5.0.0, rc-trigger@^5.0.4, rc-trigger@^5.1.2, rc-trigger@^5.2.1, rc-trigger@^5.3.1: +rc-trigger@^5.0.0, rc-trigger@^5.0.4, rc-trigger@^5.1.2, rc-trigger@^5.3.1, rc-trigger@^5.3.4: version "5.3.4" resolved "https://registry.yarnpkg.com/rc-trigger/-/rc-trigger-5.3.4.tgz#6b4b26e32825677c837d1eb4d7085035eecf9a61" integrity sha512-mQv+vas0TwKcjAO2izNPkqR4j86OemLRmvL2nOzdP9OWNWA1ivoTt5hzFqYNW9zACwmTezRiN8bttrC7cZzYSw== @@ -8260,16 +8306,16 @@ rc-trigger@^5.0.0, rc-trigger@^5.0.4, rc-trigger@^5.1.2, rc-trigger@^5.2.1, rc-t rc-motion "^2.0.0" rc-util "^5.19.2" -rc-upload@~4.2.0-alpha.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/rc-upload/-/rc-upload-4.2.1.tgz#0360c971475ae5545ec8c21ec8ef1ba6d53b6570" - integrity sha512-ylCwyzKjCFpD2ZrTe49adxnyo/bJIhoydWRg9y6LwYM0eRT/GDYvkLauXR0MKWVVmCtp+x6pOjTXqd3b0Z3KzA== +rc-upload@~4.3.6: + version "4.3.6" + resolved "https://registry.yarnpkg.com/rc-upload/-/rc-upload-4.3.6.tgz#6a87397315cee065a04bee4103d6de9dbe2e377a" + integrity sha512-Bt7ESeG5tT3IY82fZcP+s0tQU2xmo1W6P3S8NboUUliquJLQYLkUcsaExi3IlBVr43GQMCjo30RA2o0i70+NjA== dependencies: - "@babel/runtime" "^7.10.1" + "@babel/runtime" "^7.18.3" classnames "^2.2.5" rc-util "^5.2.0" -rc-util@^5.0.0, rc-util@^5.0.1, rc-util@^5.0.5, rc-util@^5.0.6, rc-util@^5.15.0, rc-util@^5.16.1, rc-util@^5.17.0, rc-util@^5.19.2, rc-util@^5.2.0, rc-util@^5.2.1, rc-util@^5.21.0, rc-util@^5.26.0, rc-util@^5.27.0, rc-util@^5.4.0, rc-util@^5.5.0, rc-util@^5.6.1, rc-util@^5.7.0, rc-util@^5.8.0, rc-util@^5.9.4, rc-util@^5.9.8: +rc-util@^5.0.1, rc-util@^5.0.6, rc-util@^5.15.0, rc-util@^5.16.1, rc-util@^5.17.0, rc-util@^5.19.2, rc-util@^5.2.0, rc-util@^5.2.1, rc-util@^5.21.0, rc-util@^5.26.0, rc-util@^5.27.0, rc-util@^5.6.1, rc-util@^5.9.4: version "5.34.0" resolved "https://registry.yarnpkg.com/rc-util/-/rc-util-5.34.0.tgz#3bec84f98c1dbf5305d89cda124aa8a0c9615f97" integrity sha512-+zCDJ1gq+KwqbaZPAk7PGlNAssoTcnZSnTsr5KMYDBhzdPNFxyuglnewWMP5PyP/kAC6uW4r9Ejc08M+Lei04A== @@ -8277,7 +8323,15 @@ rc-util@^5.0.0, rc-util@^5.0.1, rc-util@^5.0.5, rc-util@^5.0.6, rc-util@^5.15.0, "@babel/runtime" "^7.18.3" react-is "^16.12.0" -rc-virtual-list@^3.0.1, rc-virtual-list@^3.2.0: +rc-util@^5.16.0, rc-util@^5.18.1, rc-util@^5.20.1, rc-util@^5.21.2, rc-util@^5.22.5, rc-util@^5.23.0, rc-util@^5.24.4, rc-util@^5.25.2, rc-util@^5.32.2, rc-util@^5.36.0, rc-util@^5.37.0, rc-util@^5.38.0, rc-util@^5.43.0: + version "5.43.0" + resolved "https://registry.yarnpkg.com/rc-util/-/rc-util-5.43.0.tgz#bba91fbef2c3e30ea2c236893746f3e9b05ecc4c" + integrity sha512-AzC7KKOXFqAdIBqdGWepL9Xn7cm3vnAmjlHqUnoQaTMZYhM4VlXGLkkHHxj/BZ7Td0+SOPKB4RGPboBVKT9htw== + dependencies: + "@babel/runtime" "^7.18.3" + react-is "^18.2.0" + +rc-virtual-list@^3.2.0: version "3.5.2" resolved "https://registry.yarnpkg.com/rc-virtual-list/-/rc-virtual-list-3.5.2.tgz#5e1028869bae900eacbae6788d4eca7210736006" integrity sha512-sE2G9hTPjVmatQni8OP2Kx33+Oth6DMKm67OblBBmgMBJDJQOOFpSGH7KZ6Pm85rrI2IGxDRXZCr0QhYOH2pfQ== @@ -8287,6 +8341,16 @@ rc-virtual-list@^3.0.1, rc-virtual-list@^3.2.0: rc-resize-observer "^1.0.0" rc-util "^5.15.0" +rc-virtual-list@^3.5.1: + version "3.14.5" + resolved "https://registry.yarnpkg.com/rc-virtual-list/-/rc-virtual-list-3.14.5.tgz#593cd13fe05eabf4ad098329704a30c77701869e" + integrity sha512-ZMOnkCLv2wUN8Jz7yI4XiSLa9THlYvf00LuMhb1JlsQCewuU7ydPuHw1rGVPhe9VZYl/5UqODtNd7QKJ2DMGfg== + dependencies: + "@babel/runtime" "^7.20.0" + classnames "^2.2.6" + rc-resize-observer "^1.0.0" + rc-util "^5.36.0" + react-app-polyfill@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/react-app-polyfill/-/react-app-polyfill-3.0.0.tgz#95221e0a9bd259e5ca6b177c7bb1cb6768f68fd7" @@ -8373,6 +8437,11 @@ react-is@^18.0.0: resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== +react-is@^18.2.0: + version "18.3.1" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.3.1.tgz#e83557dc12eae63a99e003a46388b1dcbb44db7e" + integrity sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg== + react-refresh@^0.11.0: version "0.11.0" resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.11.0.tgz#77198b944733f0f1f1a90e791de4541f9f074046" @@ -8530,6 +8599,11 @@ regenerator-runtime@^0.13.11, regenerator-runtime@^0.13.9: resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9" integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg== +regenerator-runtime@^0.14.0: + version "0.14.1" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz#356ade10263f685dda125100cd862c1db895327f" + integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw== + regenerator-transform@^0.15.1: version "0.15.1" resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.15.1.tgz#f6c4e99fc1b4591f780db2586328e4d9a9d8dc56" @@ -8606,7 +8680,7 @@ requires-port@^1.0.0: resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== -resize-observer-polyfill@^1.5.0, resize-observer-polyfill@^1.5.1: +resize-observer-polyfill@^1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz#0e9020dd3d21024458d4ebd27e23e40269810464" integrity sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg== @@ -8919,7 +8993,7 @@ setprototypeof@1.2.0: resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== -shallowequal@^1.0.2, shallowequal@^1.1.0: +shallowequal@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/shallowequal/-/shallowequal-1.1.0.tgz#188d521de95b9087404fd4dcb68b13df0ae4e7f8" integrity sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ== @@ -9444,6 +9518,11 @@ throat@^6.0.1: resolved "https://registry.yarnpkg.com/throat/-/throat-6.0.2.tgz#51a3fbb5e11ae72e2cf74861ed5c8020f89f29fe" integrity sha512-WKexMoJj3vEuK0yFEapj8y64V0A6xcuPuK9Gt1d0R+dzCSJc0lHqQytAbSB4cDAK0dWh4T0E2ETkoLE2WZ41OQ== +throttle-debounce@^5.0.0: + version "5.0.2" + resolved "https://registry.yarnpkg.com/throttle-debounce/-/throttle-debounce-5.0.2.tgz#ec5549d84e053f043c9fd0f2a6dd892ff84456b1" + integrity sha512-B71/4oyj61iNH0KeCamLuE2rmKuTO5byTOSVwECM5FA7TiAiAW+UqTKZ9ERueC4qvgSttUhdmq1mXC3kJqGX7A== + thunky@^1.0.2: version "1.1.0" resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d" @@ -9807,13 +9886,6 @@ walker@^1.0.7: dependencies: makeerror "1.0.12" -warning@^4.0.1, warning@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/warning/-/warning-4.0.3.tgz#16e9e077eb8a86d6af7d64aa1e05fd85b4678ca3" - integrity sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w== - dependencies: - loose-envify "^1.0.0" - watchpack@^2.4.0: version "2.4.0" resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.0.tgz#fa33032374962c78113f93c7f2fb4c54c9862a5d" From 2f7d9466cce565897cad4ae214df20764674917c Mon Sep 17 00:00:00 2001 From: Love98 Date: Sat, 10 Aug 2024 12:27:55 +0800 Subject: [PATCH 3/3] update: rename to IP Rate Limiting and add i18n support --- controllers/rule.go | 4 ++-- rule/rule.go | 2 +- web/src/RuleEditPage.js | 10 +++++----- web/src/components/IpRateRuleTable.js | 11 ++++++----- web/src/components/UaRuleTable.js | 13 +++++++------ 5 files changed, 21 insertions(+), 19 deletions(-) diff --git a/controllers/rule.go b/controllers/rule.go index 20d91a5..85c288f 100644 --- a/controllers/rule.go +++ b/controllers/rule.go @@ -156,7 +156,7 @@ func checkExpressions(expressions []*object.Expression, ruleType string) error { return checkWafRule(values) case "IP": return checkIpRule(values) - case "IpRate": + case "IP Rate Limiting": return checkIpRateRule(expressions) } return nil @@ -187,7 +187,7 @@ func checkIpRule(ipLists []string) error { func checkIpRateRule(expressions []*object.Expression) error { if len(expressions) != 1 { - return errors.New("IpRate rule should have only one expression") + return errors.New("IP Rate Limiting rule must have exactly one expression") } expression := expressions[0] _, err := util.ParseIntWithError(expression.Operator) diff --git a/rule/rule.go b/rule/rule.go index 601d34f..a4a9e02 100644 --- a/rule/rule.go +++ b/rule/rule.go @@ -36,7 +36,7 @@ func CheckRules(ruleIds []string, r *http.Request) (string, string, error) { ruleObj = &IpRule{} case "WAF": ruleObj = &WafRule{} - case "IpRate": + case "IP Rate Limiting": ruleObj = &IpRateRule{ ruleName: rule.GetId(), } diff --git a/web/src/RuleEditPage.js b/web/src/RuleEditPage.js index 354bfa4..3fa11eb 100644 --- a/web/src/RuleEditPage.js +++ b/web/src/RuleEditPage.js @@ -71,8 +71,8 @@ class RuleEditPage extends React.Component { return ( - Edit Rule     - + {i18next.t("rule:Edit Rule")}     + } style={{marginTop: 10}} type="inner"> @@ -96,7 +96,7 @@ class RuleEditPage extends React.Component { {value: "WAF", text: "WAF"}, {value: "IP", text: "IP"}, {value: "User-Agent", text: "User-Agent"}, - {value: "IpRate", text: "IP Rate"}, + {value: "IP Rate Limiting", text: "IP Rate Limiting"}, // {value: "complex", text: "Complex"}, ].map((item, index) => ) } @@ -142,9 +142,9 @@ class RuleEditPage extends React.Component { ) : null } { - this.state.rule.type === "IpRate" ? ( + this.state.rule.type === "IP Rate Limiting" ? ( ( - { + { this.updateField(table, index, "value", e); }} /> ), @@ -88,7 +89,7 @@ class IpRateRuleTable extends React.Component { title={() => (
{this.props.title}     - +
)} /> diff --git a/web/src/components/UaRuleTable.js b/web/src/components/UaRuleTable.js index 08c4043..b04415a 100644 --- a/web/src/components/UaRuleTable.js +++ b/web/src/components/UaRuleTable.js @@ -16,6 +16,7 @@ import React from "react"; import {DeleteOutlined, DownOutlined, UpOutlined} from "@ant-design/icons"; import {Button, Col, Input, Row, Select, Table, Tooltip} from "antd"; import * as Setting from "../Setting"; +import i18next from "i18next"; const {Option} = Select; @@ -78,7 +79,7 @@ class UaRuleTable extends React.Component { renderTable(table) { const columns = [ { - title: "Name", + title: i18next.t("rule:Name"), dataIndex: "name", key: "name", width: "180px", @@ -89,7 +90,7 @@ class UaRuleTable extends React.Component { ), }, { - title: "Operator", + title: i18next.t("rule:Operator"), dataIndex: "operator", key: "operator", width: "180px", @@ -110,7 +111,7 @@ class UaRuleTable extends React.Component { ), }, { - title: "Value", + title: i18next.t("rule:Value"), dataIndex: "value", key: "value", width: "100%", @@ -123,7 +124,7 @@ class UaRuleTable extends React.Component { ), }, { - title: "Action", + title: i18next.t("general:Action"), key: "action", width: "100px", render: (text, record, index) => ( @@ -146,8 +147,8 @@ class UaRuleTable extends React.Component { title={() => (
{this.props.title}     - - + +
)} />