[type:feature] Change password strictness (#280)

* fixbug/add-model-edit-fail

* feature/change-password

* Update en-US.json

* Update src/locales/zh-CN.json

---------

Co-authored-by: Liming Deng <liming.d.pro@gmail.com>
diff --git a/src/components/GlobalHeader/index.js b/src/components/GlobalHeader/index.js
index 6d3b9df..46edd03 100644
--- a/src/components/GlobalHeader/index.js
+++ b/src/components/GlobalHeader/index.js
@@ -150,7 +150,8 @@
                   payload: {
                     id: window.sessionStorage.getItem("userId"),
                     userName: window.sessionStorage.getItem("userName"),
-                    password: values.password
+                    password: values.password,
+                    oldPassword: values.oldPassword
                   },
                   callback: () => {
                     this.setState({ visible: false });
@@ -165,6 +166,28 @@
           <Form labelCol={{ span: 8 }} wrapperCol={{ span: 14 }}>
             <Form.Item
               required
+              label={getIntlContent("SHENYU.GLOBALHEADER.OLD.PASSWORD")}
+            >
+              {getFieldDecorator("oldPassword", {
+                rules: [
+                  {
+                    validator(rule, value, callback) {
+                      if (!value || value.length === 0) {
+                        callback(
+                          getIntlContent(
+                            "SHENYU.GLOBALHEADER.NOTNULL"
+                          )
+                        );
+                        return;
+                      }
+                      callback();
+                    }
+                  }
+                ]
+              })(<Input.Password />)}
+            </Form.Item>
+            <Form.Item
+              required
               label={getIntlContent("SHENYU.GLOBALHEADER.NEW.PASSWORD")}
               extra={getIntlContent("SHENYU.GLOBALHEADER.PASSWORD.EXTRA")}
             >
@@ -187,11 +210,7 @@
                         );
                         return;
                       }
-                      if (
-                        !/(?=.*\d)(?=.*[A-Z])(?=.*[a-z])(?=.*[^a-zA-Z0-9])/.test(
-                          value
-                        )
-                      ) {
+                      if (!/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$/.test(value)) {
                         callback(
                           getIntlContent("SHENYU.GLOBALHEADER.PASSWORD.RULE")
                         );
diff --git a/src/locales/en-US.json b/src/locales/en-US.json
index 087be7c..faf9bdf 100644
--- a/src/locales/en-US.json
+++ b/src/locales/en-US.json
@@ -1,9 +1,11 @@
 {
   "SHENYU.GLOBALHEADER.LOGOUT": "Logout",
+  "SHENYU.GLOBALHEADER.NOTNULL": "not null",
   "SHENYU.GLOBALHEADER.CHANGE.PASSWORD": "Change Password",
   "SHENYU.GLOBALHEADER.NEW.PASSWORD": "New Password",
+  "SHENYU.GLOBALHEADER.OLD.PASSWORD": "Old Password",
   "SHENYU.GLOBALHEADER.PASSWORD.EXTRA":
-    "The password is 8 ~ 16 characters long and must contain uppercase letters, lowercase letters, numbers and special characters",
+    "Minimum length of 8, including upper and lower case letters, numbers and special characters",
   "SHENYU.GLOBALHEADER.PASSWORD.REQUIRED": "Please enter a new password",
   "SHENYU.GLOBALHEADER.PASSWORD.LENGTH":
     "The password length is 8 ~ 16 characters",
@@ -221,6 +223,8 @@
   "SHENYU.AUTH.PARAMS": "Params",
   "SHENYU.AUTH.PHONE": "TelPhone",
   "SHENYU.AUTH.APPNAME": "AppName",
+  "SHENYU.AUTH.SERVER": "Service",
+  "SHENYU.AUTH.SERVERNAME": "ServiceName",
   "SHENYU.AUTH.RESOUCE.PATH": "ResourcePath",
   "SHENYU.AUTH.PATH.DESCRIBE": "PathDescribe",
   "SHENYU.AUTH.OPERATPATH": "PathOperation",
diff --git a/src/locales/zh-CN.json b/src/locales/zh-CN.json
index 023747f..163629d 100644
--- a/src/locales/zh-CN.json
+++ b/src/locales/zh-CN.json
@@ -1,9 +1,10 @@
 {
   "SHENYU.GLOBALHEADER.LOGOUT": "退出登录",
+  "SHENYU.GLOBALHEADER.NOTNULL": "不能为空",
   "SHENYU.GLOBALHEADER.CHANGE.PASSWORD": "修改密码",
   "SHENYU.GLOBALHEADER.NEW.PASSWORD": "新密码",
-  "SHENYU.GLOBALHEADER.PASSWORD.EXTRA":
-    "密码长度为8~16个字符,必须包含大写字母、小写字母、数字、特殊字符",
+  "SHENYU.GLOBALHEADER.OLD.PASSWORD": "旧密码",
+  "SHENYU.GLOBALHEADER.PASSWORD.EXTRA": "长度至少为8,包含大小写字母、数字和特殊字符",
   "SHENYU.GLOBALHEADER.PASSWORD.REQUIRED": "请输入新密码",
   "SHENYU.GLOBALHEADER.PASSWORD.LENGTH": "密码长度为8~16个字符",
   "SHENYU.GLOBALHEADER.PASSWORD.RULE":
@@ -213,6 +214,8 @@
   "SHENYU.AUTH.PARAMS": "参数",
   "SHENYU.AUTH.PHONE": "手机号",
   "SHENYU.AUTH.APPNAME": "应用名称",
+  "SHENYU.AUTH.SERVER": "服务",
+  "SHENYU.AUTH.SERVERNAME": "服务名称",
   "SHENYU.AUTH.RESOUCE.PATH": "资源路径",
   "SHENYU.AUTH.PATH.DESCRIBE": "路径描述",
   "SHENYU.AUTH.OPERATPATH": "路径操作",
diff --git a/src/services/api.js b/src/services/api.js
index d823fa5..8caf746 100644
--- a/src/services/api.js
+++ b/src/services/api.js
@@ -59,7 +59,8 @@
     method: `PUT`,
     body: {
       userName: params.userName,
-      password: params.password
+      password: params.password,
+      oldPassword: params.oldPassword
     }
   });
 }