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

littlecui pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/servicecomb-service-center.git


The following commit(s) were added to refs/heads/master by this push:
     new 7898767  validate role name (#1012)
7898767 is described below

commit 78987676d89fde739e3dc5dc5c168c025c13abac
Author: Shawn <[email protected]>
AuthorDate: Wed May 26 20:02:53 2021 +0800

    validate role name (#1012)
---
 server/resource/v4/role_resource.go                |  6 ++++
 server/service/validator/rbac_validator.go         | 32 ++++++++++++++++++++++
 .../{validator_test.go => rbac_validator_test.go}  | 31 ++++++++++++++++++++-
 server/service/validator/validator.go              | 26 +++---------------
 4 files changed, 72 insertions(+), 23 deletions(-)

diff --git a/server/resource/v4/role_resource.go 
b/server/resource/v4/role_resource.go
index 5076529..417b690 100644
--- a/server/resource/v4/role_resource.go
+++ b/server/resource/v4/role_resource.go
@@ -20,6 +20,7 @@ package v4
 import (
        "context"
        "encoding/json"
+       "github.com/apache/servicecomb-service-center/server/service/validator"
        "io/ioutil"
        "net/http"
 
@@ -89,6 +90,11 @@ func (rr *RoleResource) CreateRolePermission(w 
http.ResponseWriter, req *http.Re
                rest.WriteError(w, discovery.ErrInvalidParams, errorsEx.MsgJSON)
                return
        }
+       err = validator.ValidateCreateRole(role)
+       if err != nil {
+               rest.WriteError(w, discovery.ErrInvalidParams, err.Error())
+               return
+       }
        err = dao.CreateRole(context.TODO(), role)
        if err != nil {
                if err == datasource.ErrRoleDuplicated {
diff --git a/server/service/validator/rbac_validator.go 
b/server/service/validator/rbac_validator.go
new file mode 100644
index 0000000..d4497a5
--- /dev/null
+++ b/server/service/validator/rbac_validator.go
@@ -0,0 +1,32 @@
+package validator
+
+import "github.com/go-chassis/cari/rbac"
+
+func ValidateCreateAccount(a *rbac.Account) error {
+       err := baseCheck(a)
+       if err != nil {
+               return err
+       }
+       return createAccountValidator.Validate(a)
+}
+func ValidateCreateRole(a *rbac.Role) error {
+       err := baseCheck(a)
+       if err != nil {
+               return err
+       }
+       return createRoleValidator.Validate(a)
+}
+func ValidateAccountLogin(a *rbac.Account) error {
+       err := baseCheck(a)
+       if err != nil {
+               return err
+       }
+       return accountLoginValidator.Validate(a)
+}
+func ValidateChangePWD(a *rbac.Account) error {
+       err := baseCheck(a)
+       if err != nil {
+               return err
+       }
+       return changePWDValidator.Validate(a)
+}
diff --git a/server/service/validator/validator_test.go 
b/server/service/validator/rbac_validator_test.go
similarity index 78%
rename from server/service/validator/validator_test.go
rename to server/service/validator/rbac_validator_test.go
index e5faabf..6523f94 100644
--- a/server/service/validator/validator_test.go
+++ b/server/service/validator/rbac_validator_test.go
@@ -18,9 +18,9 @@
 package validator_test
 
 import (
-       "github.com/apache/servicecomb-service-center/server/service/validator"
        "testing"
 
+       "github.com/apache/servicecomb-service-center/server/service/validator"
        "github.com/go-chassis/cari/rbac"
 )
 
@@ -72,3 +72,32 @@ func TestValidateCreateAccount(t *testing.T) {
                }
        }
 }
+
+func TestValidateCreateRole(t *testing.T) {
+       type args struct {
+               a *rbac.Role
+       }
+       tests := []struct {
+               name    string
+               args    args
+               wantErr bool
+       }{
+               {name: "given invalid role name",
+                       args: args{a: &rbac.Role{
+                               Name: "tester*a",
+                       }},
+                       wantErr: true,
+               },
+               {name: "given valid role name",
+                       args: args{a: &rbac.Role{
+                               Name: "tester-a",
+                       }},
+                       wantErr: false,
+               },
+       }
+       for _, tt := range tests {
+               if err := validator.ValidateCreateRole(tt.args.a); (err != nil) 
!= tt.wantErr {
+                       t.Errorf("%q. ValidateCreateRole() error = %v, wantErr 
%v", tt.name, err, tt.wantErr)
+               }
+       }
+}
diff --git a/server/service/validator/validator.go 
b/server/service/validator/validator.go
index e9823ab..994e1bf 100644
--- a/server/service/validator/validator.go
+++ b/server/service/validator/validator.go
@@ -22,11 +22,12 @@ import (
        "github.com/apache/servicecomb-service-center/pkg/log"
        "github.com/apache/servicecomb-service-center/pkg/validate"
        pb "github.com/go-chassis/cari/discovery"
-       "github.com/go-chassis/cari/rbac"
        "reflect"
 )
 
 var createAccountValidator = &validate.Validator{}
+var createRoleValidator = &validate.Validator{}
+
 var changePWDValidator = &validate.Validator{}
 var accountLoginValidator = &validate.Validator{}
 
@@ -35,6 +36,8 @@ func init() {
        createAccountValidator.AddRule("Roles", &validate.Rule{Min: 1, Regexp: 
nameRegex})
        createAccountValidator.AddRule("Password", &validate.Rule{Regexp: 
&validate.PasswordChecker{}})
 
+       createRoleValidator.AddRule("Name", &validate.Rule{Max: 64, Regexp: 
nameRegex})
+
        changePWDValidator.AddRule("Password", &validate.Rule{Regexp: 
&validate.PasswordChecker{}})
        changePWDValidator.AddRule("Name", &validate.Rule{Regexp: nameRegex})
 
@@ -117,24 +120,3 @@ func baseCheck(v interface{}) error {
        }
        return nil
 }
-func ValidateCreateAccount(a *rbac.Account) error {
-       err := baseCheck(a)
-       if err != nil {
-               return err
-       }
-       return createAccountValidator.Validate(a)
-}
-func ValidateAccountLogin(a *rbac.Account) error {
-       err := baseCheck(a)
-       if err != nil {
-               return err
-       }
-       return accountLoginValidator.Validate(a)
-}
-func ValidateChangePWD(a *rbac.Account) error {
-       err := baseCheck(a)
-       if err != nil {
-               return err
-       }
-       return changePWDValidator.Validate(a)
-}

Reply via email to