You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicecomb.apache.org by ti...@apache.org on 2021/05/26 08:57:54 UTC

[servicecomb-service-center] branch master updated: validate account creation (#1009)

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

tianxiaoliang 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 e338b4a  validate account creation (#1009)
e338b4a is described below

commit e338b4a07fbda8c7bb086b259d5d1f1edf29769e
Author: Shawn <xi...@gmail.com>
AuthorDate: Wed May 26 16:57:44 2021 +0800

    validate account creation (#1009)
---
 server/resource/v4/auth_resource.go                |  8 +--
 server/rest/govern/service.go                      |  4 +-
 server/service/dependency.go                       |  9 +--
 server/service/instance.go                         | 19 +++---
 server/service/microservice.go                     | 15 +++--
 server/service/rbac/rbac.go                        |  4 +-
 server/service/rule.go                             |  9 +--
 server/service/schema.go                           | 11 ++--
 server/service/tag.go                              |  9 +--
 .../{ => validator}/dependency_validator.go        |  2 +-
 .../service/{ => validator}/instance_validator.go  |  2 +-
 .../{ => validator}/microservice_validator.go      |  2 +-
 server/service/{ => validator}/rule_validator.go   |  2 +-
 server/service/{ => validator}/schema_validator.go |  2 +-
 server/service/{ => validator}/tag_validator.go    |  2 +-
 .../{validate.go => validator/validator.go}        | 14 ++--
 server/service/validator/validator_test.go         | 74 ++++++++++++++++++++++
 17 files changed, 132 insertions(+), 56 deletions(-)

diff --git a/server/resource/v4/auth_resource.go b/server/resource/v4/auth_resource.go
index b6b6491..19ede1d 100644
--- a/server/resource/v4/auth_resource.go
+++ b/server/resource/v4/auth_resource.go
@@ -29,9 +29,9 @@ import (
 	"github.com/apache/servicecomb-service-center/pkg/log"
 	"github.com/apache/servicecomb-service-center/pkg/rest"
 	"github.com/apache/servicecomb-service-center/pkg/util"
-	"github.com/apache/servicecomb-service-center/server/service"
 	rbacsvc "github.com/apache/servicecomb-service-center/server/service/rbac"
 	"github.com/apache/servicecomb-service-center/server/service/rbac/dao"
+	"github.com/apache/servicecomb-service-center/server/service/validator"
 
 	"github.com/go-chassis/cari/discovery"
 	"github.com/go-chassis/cari/rbac"
@@ -66,7 +66,7 @@ func (ar *AuthResource) CreateAccount(w http.ResponseWriter, req *http.Request)
 		rest.WriteError(w, discovery.ErrInvalidParams, errorsEx.MsgJSON)
 		return
 	}
-	err = service.ValidateCreateAccount(a)
+	err = validator.ValidateCreateAccount(a)
 	if err != nil {
 		rest.WriteError(w, discovery.ErrInvalidParams, err.Error())
 		return
@@ -168,7 +168,7 @@ func (ar *AuthResource) ChangePassword(w http.ResponseWriter, req *http.Request)
 		return
 	}
 	a.Name = req.URL.Query().Get(":name")
-	err = service.ValidateChangePWD(a)
+	err = validator.ValidateChangePWD(a)
 	if err != nil {
 		rest.WriteError(w, discovery.ErrInvalidParams, err.Error())
 		return
@@ -219,7 +219,7 @@ func (ar *AuthResource) Login(w http.ResponseWriter, r *http.Request) {
 	if a.TokenExpirationTime == "" {
 		a.TokenExpirationTime = "30m"
 	}
-	err = service.ValidateAccountLogin(a)
+	err = validator.ValidateAccountLogin(a)
 	if err != nil {
 		rest.WriteError(w, discovery.ErrInvalidParams, err.Error())
 		return
diff --git a/server/rest/govern/service.go b/server/rest/govern/service.go
index 6336891..4c35b1a 100644
--- a/server/rest/govern/service.go
+++ b/server/rest/govern/service.go
@@ -19,13 +19,13 @@ package govern
 
 import (
 	"context"
+	"github.com/apache/servicecomb-service-center/server/service/validator"
 
 	pb "github.com/go-chassis/cari/discovery"
 
 	"github.com/apache/servicecomb-service-center/datasource"
 	"github.com/apache/servicecomb-service-center/pkg/proto"
 	"github.com/apache/servicecomb-service-center/pkg/util"
-	"github.com/apache/servicecomb-service-center/server/service"
 )
 
 var ServiceAPI proto.GovernServiceCtrlServer = &Service{}
@@ -51,7 +51,7 @@ func (governService *Service) GetServiceDetail(ctx context.Context, in *pb.GetSe
 }
 
 func (governService *Service) GetApplications(ctx context.Context, in *pb.GetAppsRequest) (*pb.GetAppsResponse, error) {
-	err := service.Validate(in)
+	err := validator.Validate(in)
 	if err != nil {
 		return &pb.GetAppsResponse{
 			Response: pb.CreateResponse(pb.ErrInvalidParams, err.Error()),
diff --git a/server/service/dependency.go b/server/service/dependency.go
index 509889b..467cdd0 100644
--- a/server/service/dependency.go
+++ b/server/service/dependency.go
@@ -19,6 +19,7 @@ package service
 
 import (
 	"context"
+	"github.com/apache/servicecomb-service-center/server/service/validator"
 
 	"github.com/apache/servicecomb-service-center/datasource"
 	"github.com/apache/servicecomb-service-center/pkg/log"
@@ -27,7 +28,7 @@ import (
 
 func (s *MicroServiceService) AddDependenciesForMicroServices(ctx context.Context,
 	in *pb.AddDependenciesRequest) (*pb.AddDependenciesResponse, error) {
-	if err := Validate(in); err != nil {
+	if err := validator.Validate(in); err != nil {
 		return &pb.AddDependenciesResponse{
 			Response: datasource.BadParamsResponse(err.Error()).Response,
 		}, nil
@@ -39,7 +40,7 @@ func (s *MicroServiceService) AddDependenciesForMicroServices(ctx context.Contex
 
 func (s *MicroServiceService) CreateDependenciesForMicroServices(ctx context.Context,
 	in *pb.CreateDependenciesRequest) (*pb.CreateDependenciesResponse, error) {
-	if err := Validate(in); err != nil {
+	if err := validator.Validate(in); err != nil {
 		return &pb.CreateDependenciesResponse{
 			Response: datasource.BadParamsResponse(err.Error()).Response,
 		}, nil
@@ -51,7 +52,7 @@ func (s *MicroServiceService) CreateDependenciesForMicroServices(ctx context.Con
 
 func (s *MicroServiceService) GetProviderDependencies(ctx context.Context,
 	in *pb.GetDependenciesRequest) (*pb.GetProDependenciesResponse, error) {
-	err := Validate(in)
+	err := validator.Validate(in)
 	if err != nil {
 		log.Errorf(err, "GetProviderDependencies failed for validating parameters failed")
 		return &pb.GetProDependenciesResponse{
@@ -63,7 +64,7 @@ func (s *MicroServiceService) GetProviderDependencies(ctx context.Context,
 }
 
 func (s *MicroServiceService) GetConsumerDependencies(ctx context.Context, in *pb.GetDependenciesRequest) (*pb.GetConDependenciesResponse, error) {
-	err := Validate(in)
+	err := validator.Validate(in)
 	if err != nil {
 		log.Errorf(err, "GetConsumerDependencies failed for validating parameters failed")
 		return &pb.GetConDependenciesResponse{
diff --git a/server/service/instance.go b/server/service/instance.go
index 5628d65..f2fbf7a 100644
--- a/server/service/instance.go
+++ b/server/service/instance.go
@@ -21,6 +21,7 @@ import (
 	"context"
 	"errors"
 	"fmt"
+	"github.com/apache/servicecomb-service-center/server/service/validator"
 
 	pb "github.com/go-chassis/cari/discovery"
 
@@ -36,7 +37,7 @@ type InstanceService struct {
 }
 
 func (s *InstanceService) Register(ctx context.Context, in *pb.RegisterInstanceRequest) (*pb.RegisterInstanceResponse, error) {
-	if err := Validate(in); err != nil {
+	if err := validator.Validate(in); err != nil {
 		remoteIP := util.GetIPFromContext(ctx)
 		log.Errorf(err, "register instance failed, invalid parameters, operator %s", remoteIP)
 		return &pb.RegisterInstanceResponse{
@@ -65,7 +66,7 @@ func (s *InstanceService) Register(ctx context.Context, in *pb.RegisterInstanceR
 
 func (s *InstanceService) Unregister(ctx context.Context,
 	in *pb.UnregisterInstanceRequest) (*pb.UnregisterInstanceResponse, error) {
-	if err := Validate(in); err != nil {
+	if err := validator.Validate(in); err != nil {
 		remoteIP := util.GetIPFromContext(ctx)
 		log.Errorf(err, "unregister instance failed, invalid parameters, operator %s", remoteIP)
 		return &pb.UnregisterInstanceResponse{
@@ -77,7 +78,7 @@ func (s *InstanceService) Unregister(ctx context.Context,
 }
 
 func (s *InstanceService) Heartbeat(ctx context.Context, in *pb.HeartbeatRequest) (*pb.HeartbeatResponse, error) {
-	if err := Validate(in); err != nil {
+	if err := validator.Validate(in); err != nil {
 		remoteIP := util.GetIPFromContext(ctx)
 		log.Errorf(err, "heartbeat failed, invalid parameters, operator %s", remoteIP)
 		return &pb.HeartbeatResponse{
@@ -101,7 +102,7 @@ func (s *InstanceService) HeartbeatSet(ctx context.Context,
 
 func (s *InstanceService) GetOneInstance(ctx context.Context,
 	in *pb.GetOneInstanceRequest) (*pb.GetOneInstanceResponse, error) {
-	err := Validate(in)
+	err := validator.Validate(in)
 	if err != nil {
 		log.Errorf(err, "get instance failed: invalid parameters")
 		return &pb.GetOneInstanceResponse{
@@ -113,7 +114,7 @@ func (s *InstanceService) GetOneInstance(ctx context.Context,
 }
 
 func (s *InstanceService) GetInstances(ctx context.Context, in *pb.GetInstancesRequest) (*pb.GetInstancesResponse, error) {
-	err := Validate(in)
+	err := validator.Validate(in)
 	if err != nil {
 		log.Errorf(err, "get instances failed: invalid parameters")
 		return &pb.GetInstancesResponse{
@@ -125,7 +126,7 @@ func (s *InstanceService) GetInstances(ctx context.Context, in *pb.GetInstancesR
 }
 
 func (s *InstanceService) Find(ctx context.Context, in *pb.FindInstancesRequest) (*pb.FindInstancesResponse, error) {
-	err := Validate(in)
+	err := validator.Validate(in)
 	if err != nil {
 		log.Errorf(err, "find instance failed: invalid parameters")
 		return &pb.FindInstancesResponse{
@@ -145,7 +146,7 @@ func (s *InstanceService) BatchFind(ctx context.Context, in *pb.BatchFindInstanc
 		}, nil
 	}
 
-	err := Validate(in)
+	err := validator.Validate(in)
 	if err != nil {
 		log.Errorf(err, "batch find instance failed: invalid parameters")
 		return &pb.BatchFindInstancesResponse{
@@ -157,7 +158,7 @@ func (s *InstanceService) BatchFind(ctx context.Context, in *pb.BatchFindInstanc
 }
 
 func (s *InstanceService) UpdateStatus(ctx context.Context, in *pb.UpdateInstanceStatusRequest) (*pb.UpdateInstanceStatusResponse, error) {
-	if err := Validate(in); err != nil {
+	if err := validator.Validate(in); err != nil {
 		updateStatusFlag := util.StringJoin([]string{in.ServiceId, in.InstanceId, in.Status}, "/")
 		log.Errorf(nil, "update instance[%s] status failed", updateStatusFlag)
 		return &pb.UpdateInstanceStatusResponse{
@@ -169,7 +170,7 @@ func (s *InstanceService) UpdateStatus(ctx context.Context, in *pb.UpdateInstanc
 }
 
 func (s *InstanceService) UpdateInstanceProperties(ctx context.Context, in *pb.UpdateInstancePropsRequest) (*pb.UpdateInstancePropsResponse, error) {
-	if err := Validate(in); err != nil {
+	if err := validator.Validate(in); err != nil {
 		instanceFlag := util.StringJoin([]string{in.ServiceId, in.InstanceId}, "/")
 		log.Errorf(nil, "update instance[%s] properties failed", instanceFlag)
 		return &pb.UpdateInstancePropsResponse{
diff --git a/server/service/microservice.go b/server/service/microservice.go
index 1bf0de3..158c630 100644
--- a/server/service/microservice.go
+++ b/server/service/microservice.go
@@ -20,6 +20,7 @@ package service
 import (
 	"context"
 	"fmt"
+	"github.com/apache/servicecomb-service-center/server/service/validator"
 
 	pb "github.com/go-chassis/cari/discovery"
 
@@ -71,7 +72,7 @@ func (s *MicroServiceService) CreateServicePri(ctx context.Context, in *pb.Creat
 	domainProject := util.ParseDomainProject(ctx)
 
 	datasource.SetServiceDefaultValue(service)
-	err := Validate(in)
+	err := validator.Validate(in)
 	if err != nil {
 		log.Errorf(err, "create micro-service[%s] failed, operator: %s",
 			serviceFlag, remoteIP)
@@ -97,7 +98,7 @@ func (s *MicroServiceService) CreateServicePri(ctx context.Context, in *pb.Creat
 
 func (s *MicroServiceService) Delete(ctx context.Context, in *pb.DeleteServiceRequest) (*pb.DeleteServiceResponse, error) {
 	remoteIP := util.GetIPFromContext(ctx)
-	err := Validate(in)
+	err := validator.Validate(in)
 	if err != nil {
 		log.Errorf(err, "delete micro-service[%s] failed, operator: %s", in.ServiceId, remoteIP)
 		return &pb.DeleteServiceResponse{
@@ -138,7 +139,7 @@ func (s *MicroServiceService) DeleteServices(ctx context.Context, request *pb.De
 			ServiceId: serviceID,
 			Force:     request.Force,
 		}
-		err := Validate(in)
+		err := validator.Validate(in)
 		if err != nil {
 			log.Errorf(err, "delete micro-service[%s] failed, operator: %s", in.ServiceId, remoteIP)
 			serviceRespChan <- &pb.DelServicesRspInfo{
@@ -203,7 +204,7 @@ func (s *MicroServiceService) getDeleteServiceFunc(ctx context.Context, serviceI
 }
 
 func (s *MicroServiceService) GetOne(ctx context.Context, in *pb.GetServiceRequest) (*pb.GetServiceResponse, error) {
-	err := Validate(in)
+	err := validator.Validate(in)
 	if err != nil {
 		log.Errorf(err, "get micro-service[%s] failed", in.ServiceId)
 		return &pb.GetServiceResponse{
@@ -219,7 +220,7 @@ func (s *MicroServiceService) GetServices(ctx context.Context, in *pb.GetService
 }
 
 func (s *MicroServiceService) UpdateProperties(ctx context.Context, in *pb.UpdateServicePropsRequest) (*pb.UpdateServicePropsResponse, error) {
-	err := Validate(in)
+	err := validator.Validate(in)
 	if err != nil {
 		remoteIP := util.GetIPFromContext(ctx)
 		log.Errorf(err, "update service[%s] properties failed, operator: %s", in.ServiceId, remoteIP)
@@ -234,7 +235,7 @@ func (s *MicroServiceService) UpdateProperties(ctx context.Context, in *pb.Updat
 func (s *MicroServiceService) Exist(ctx context.Context, in *pb.GetExistenceRequest) (*pb.GetExistenceResponse, error) {
 	switch in.Type {
 	case ExistTypeMicroservice:
-		err := ExistenceReqValidator().Validate(in)
+		err := validator.ExistenceReqValidator().Validate(in)
 		if err != nil {
 			serviceFlag := util.StringJoin([]string{in.Environment, in.AppId, in.ServiceName, in.Version}, "/")
 			log.Errorf(err, "micro-service[%s] exist failed", serviceFlag)
@@ -245,7 +246,7 @@ func (s *MicroServiceService) Exist(ctx context.Context, in *pb.GetExistenceRequ
 
 		return datasource.Instance().ExistService(ctx, in)
 	case ExistTypeSchema:
-		err := GetSchemaReqValidator().Validate(in)
+		err := validator.GetSchemaReqValidator().Validate(in)
 		if err != nil {
 			log.Errorf(err, "schema[%s/%s] exist failed", in.ServiceId, in.SchemaId)
 			return &pb.GetExistenceResponse{
diff --git a/server/service/rbac/rbac.go b/server/service/rbac/rbac.go
index ed5f563..f7e5aa4 100644
--- a/server/service/rbac/rbac.go
+++ b/server/service/rbac/rbac.go
@@ -21,6 +21,7 @@ import (
 	"context"
 	"crypto/rsa"
 	"errors"
+	"github.com/apache/servicecomb-service-center/server/service/validator"
 	"io/ioutil"
 
 	"github.com/go-chassis/cari/rbac"
@@ -29,7 +30,6 @@ import (
 	"github.com/apache/servicecomb-service-center/pkg/log"
 	"github.com/apache/servicecomb-service-center/server/config"
 	"github.com/apache/servicecomb-service-center/server/plugin/security/cipher"
-	"github.com/apache/servicecomb-service-center/server/service"
 	"github.com/apache/servicecomb-service-center/server/service/rbac/dao"
 	"github.com/go-chassis/go-archaius"
 	"github.com/go-chassis/go-chassis/v2/security/authr"
@@ -119,7 +119,7 @@ func initFirstTime(admin string) {
 		Password: pwd,
 		Roles:    []string{rbac.RoleAdmin},
 	}
-	err = service.ValidateCreateAccount(a)
+	err = validator.ValidateCreateAccount(a)
 	if err != nil {
 		log.Fatal("invalid pwd", err)
 		return
diff --git a/server/service/rule.go b/server/service/rule.go
index 642b77c..f2c00c1 100644
--- a/server/service/rule.go
+++ b/server/service/rule.go
@@ -19,6 +19,7 @@ package service
 
 import (
 	"context"
+	"github.com/apache/servicecomb-service-center/server/service/validator"
 
 	"github.com/apache/servicecomb-service-center/datasource"
 	"github.com/apache/servicecomb-service-center/pkg/log"
@@ -27,7 +28,7 @@ import (
 )
 
 func (s *MicroServiceService) AddRule(ctx context.Context, in *pb.AddServiceRulesRequest) (*pb.AddServiceRulesResponse, error) {
-	err := Validate(in)
+	err := validator.Validate(in)
 	if err != nil {
 		remoteIP := util.GetIPFromContext(ctx)
 		log.Errorf(err, "add service[%s] rule failed, operator: %s", in.ServiceId, remoteIP)
@@ -40,7 +41,7 @@ func (s *MicroServiceService) AddRule(ctx context.Context, in *pb.AddServiceRule
 }
 
 func (s *MicroServiceService) UpdateRule(ctx context.Context, in *pb.UpdateServiceRuleRequest) (*pb.UpdateServiceRuleResponse, error) {
-	err := Validate(in)
+	err := validator.Validate(in)
 	if err != nil {
 		remoteIP := util.GetIPFromContext(ctx)
 		log.Errorf(err, "update service rule[%s/%s] failed, operator: %s", in.ServiceId, in.RuleId, remoteIP)
@@ -53,7 +54,7 @@ func (s *MicroServiceService) UpdateRule(ctx context.Context, in *pb.UpdateServi
 }
 
 func (s *MicroServiceService) GetRule(ctx context.Context, in *pb.GetServiceRulesRequest) (*pb.GetServiceRulesResponse, error) {
-	err := Validate(in)
+	err := validator.Validate(in)
 	if err != nil {
 		log.Errorf(err, "get service[%s] rule failed", in.ServiceId)
 		return &pb.GetServiceRulesResponse{
@@ -65,7 +66,7 @@ func (s *MicroServiceService) GetRule(ctx context.Context, in *pb.GetServiceRule
 }
 
 func (s *MicroServiceService) DeleteRule(ctx context.Context, in *pb.DeleteServiceRulesRequest) (*pb.DeleteServiceRulesResponse, error) {
-	err := Validate(in)
+	err := validator.Validate(in)
 	if err != nil {
 		remoteIP := util.GetIPFromContext(ctx)
 		log.Errorf(err, "delete service[%s] rules %v failed, operator: %s", in.ServiceId, in.RuleIds, remoteIP)
diff --git a/server/service/schema.go b/server/service/schema.go
index e139e7e..c26da98 100644
--- a/server/service/schema.go
+++ b/server/service/schema.go
@@ -22,13 +22,14 @@ import (
 	"github.com/apache/servicecomb-service-center/pkg/log"
 	"github.com/apache/servicecomb-service-center/pkg/util"
 	"github.com/apache/servicecomb-service-center/server/plugin/quota"
+	"github.com/apache/servicecomb-service-center/server/service/validator"
 	pb "github.com/go-chassis/cari/discovery"
 
 	"context"
 )
 
 func (s *MicroServiceService) GetSchemaInfo(ctx context.Context, in *pb.GetSchemaRequest) (*pb.GetSchemaResponse, error) {
-	err := Validate(in)
+	err := validator.Validate(in)
 	if err != nil {
 		log.Errorf(nil, "get schema[%s/%s] failed", in.ServiceId, in.SchemaId)
 		return &pb.GetSchemaResponse{
@@ -40,7 +41,7 @@ func (s *MicroServiceService) GetSchemaInfo(ctx context.Context, in *pb.GetSchem
 }
 
 func (s *MicroServiceService) GetAllSchemaInfo(ctx context.Context, in *pb.GetAllSchemaRequest) (*pb.GetAllSchemaResponse, error) {
-	err := Validate(in)
+	err := validator.Validate(in)
 	if err != nil {
 		log.Errorf(nil, "get service[%s] all schemas failed", in.ServiceId)
 		return &pb.GetAllSchemaResponse{
@@ -52,7 +53,7 @@ func (s *MicroServiceService) GetAllSchemaInfo(ctx context.Context, in *pb.GetAl
 }
 
 func (s *MicroServiceService) DeleteSchema(ctx context.Context, in *pb.DeleteSchemaRequest) (*pb.DeleteSchemaResponse, error) {
-	err := Validate(in)
+	err := validator.Validate(in)
 	if err != nil {
 		remoteIP := util.GetIPFromContext(ctx)
 		log.Errorf(err, "delete schema[%s/%s] failed, operator: %s", in.ServiceId, in.SchemaId, remoteIP)
@@ -77,7 +78,7 @@ func (s *MicroServiceService) DeleteSchema(ctx context.Context, in *pb.DeleteSch
 // the new schemaID will be automatically added to the service information.
 // Schema is allowed to add/delete/modify.
 func (s *MicroServiceService) ModifySchemas(ctx context.Context, in *pb.ModifySchemasRequest) (*pb.ModifySchemasResponse, error) {
-	err := Validate(in)
+	err := validator.Validate(in)
 	if err != nil {
 		remoteIP := util.GetIPFromContext(ctx)
 		log.Errorf(err, "modify service[%s] schemas failed, operator: %s", in.ServiceId, remoteIP)
@@ -123,7 +124,7 @@ func (s *MicroServiceService) canModifySchema(ctx context.Context, domainProject
 			serviceID, schemaID, remoteIP)
 		return pb.NewError(pb.ErrInvalidParams, "serviceID or schemaID is nil")
 	}
-	err := Validate(in)
+	err := validator.Validate(in)
 	if err != nil {
 		log.Errorf(err, "update schema[%s/%s] failed, operator: %s", serviceID, schemaID, remoteIP)
 		return pb.NewError(pb.ErrInvalidParams, err.Error())
diff --git a/server/service/tag.go b/server/service/tag.go
index 96300ba..7767457 100644
--- a/server/service/tag.go
+++ b/server/service/tag.go
@@ -19,6 +19,7 @@ package service
 
 import (
 	"context"
+	"github.com/apache/servicecomb-service-center/server/service/validator"
 
 	"github.com/apache/servicecomb-service-center/datasource"
 	"github.com/apache/servicecomb-service-center/pkg/log"
@@ -27,7 +28,7 @@ import (
 )
 
 func (s *MicroServiceService) AddTags(ctx context.Context, in *pb.AddServiceTagsRequest) (*pb.AddServiceTagsResponse, error) {
-	err := Validate(in)
+	err := validator.Validate(in)
 	if err != nil {
 		remoteIP := util.GetIPFromContext(ctx)
 		log.Errorf(err, "add service[%s]'s tags %v failed, operator: %s", in.ServiceId, in.Tags, remoteIP)
@@ -40,7 +41,7 @@ func (s *MicroServiceService) AddTags(ctx context.Context, in *pb.AddServiceTags
 }
 
 func (s *MicroServiceService) UpdateTag(ctx context.Context, in *pb.UpdateServiceTagRequest) (*pb.UpdateServiceTagResponse, error) {
-	err := Validate(in)
+	err := validator.Validate(in)
 	if err != nil {
 		remoteIP := util.GetIPFromContext(ctx)
 		tagFlag := util.StringJoin([]string{in.Key, in.Value}, "/")
@@ -54,7 +55,7 @@ func (s *MicroServiceService) UpdateTag(ctx context.Context, in *pb.UpdateServic
 }
 
 func (s *MicroServiceService) DeleteTags(ctx context.Context, in *pb.DeleteServiceTagsRequest) (*pb.DeleteServiceTagsResponse, error) {
-	err := Validate(in)
+	err := validator.Validate(in)
 	if err != nil {
 		remoteIP := util.GetIPFromContext(ctx)
 		log.Errorf(err, "delete service[%s]'s tags %v failed, operator: %s", in.ServiceId, in.Keys, remoteIP)
@@ -67,7 +68,7 @@ func (s *MicroServiceService) DeleteTags(ctx context.Context, in *pb.DeleteServi
 }
 
 func (s *MicroServiceService) GetTags(ctx context.Context, in *pb.GetServiceTagsRequest) (*pb.GetServiceTagsResponse, error) {
-	err := Validate(in)
+	err := validator.Validate(in)
 	if err != nil {
 		log.Errorf(err, "get service[%s]'s tags failed", in.ServiceId)
 		return &pb.GetServiceTagsResponse{
diff --git a/server/service/dependency_validator.go b/server/service/validator/dependency_validator.go
similarity index 99%
rename from server/service/dependency_validator.go
rename to server/service/validator/dependency_validator.go
index 84bdc6a..024c860 100644
--- a/server/service/dependency_validator.go
+++ b/server/service/validator/dependency_validator.go
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package service
+package validator
 
 import (
 	"regexp"
diff --git a/server/service/instance_validator.go b/server/service/validator/instance_validator.go
similarity index 99%
rename from server/service/instance_validator.go
rename to server/service/validator/instance_validator.go
index d8c443c..78fcb02 100644
--- a/server/service/instance_validator.go
+++ b/server/service/validator/instance_validator.go
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package service
+package validator
 
 import (
 	"math"
diff --git a/server/service/microservice_validator.go b/server/service/validator/microservice_validator.go
similarity index 99%
rename from server/service/microservice_validator.go
rename to server/service/validator/microservice_validator.go
index 266a9db..44d4b53 100644
--- a/server/service/microservice_validator.go
+++ b/server/service/validator/microservice_validator.go
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package service
+package validator
 
 import (
 	"regexp"
diff --git a/server/service/rule_validator.go b/server/service/validator/rule_validator.go
similarity index 99%
rename from server/service/rule_validator.go
rename to server/service/validator/rule_validator.go
index 306ee5d..6f7c7d4 100644
--- a/server/service/rule_validator.go
+++ b/server/service/validator/rule_validator.go
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package service
+package validator
 
 import (
 	"regexp"
diff --git a/server/service/schema_validator.go b/server/service/validator/schema_validator.go
similarity index 99%
rename from server/service/schema_validator.go
rename to server/service/validator/schema_validator.go
index 07392d2..7cecff5 100644
--- a/server/service/schema_validator.go
+++ b/server/service/validator/schema_validator.go
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package service
+package validator
 
 import (
 	"regexp"
diff --git a/server/service/tag_validator.go b/server/service/validator/tag_validator.go
similarity index 99%
rename from server/service/tag_validator.go
rename to server/service/validator/tag_validator.go
index 4acc235..bdd00af 100644
--- a/server/service/tag_validator.go
+++ b/server/service/validator/tag_validator.go
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package service
+package validator
 
 import (
 	"regexp"
diff --git a/server/service/validate.go b/server/service/validator/validator.go
similarity index 93%
rename from server/service/validate.go
rename to server/service/validator/validator.go
index 812cd7c..e9823ab 100644
--- a/server/service/validate.go
+++ b/server/service/validator/validator.go
@@ -15,17 +15,15 @@
  * limitations under the License.
  */
 
-package service
+package validator
 
 import (
 	"errors"
-	"reflect"
-	"regexp"
-
 	"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{}
@@ -33,14 +31,12 @@ var changePWDValidator = &validate.Validator{}
 var accountLoginValidator = &validate.Validator{}
 
 func init() {
-	var roleRegex, _ = regexp.Compile(`^$|^(admin|developer|[a-zA-Z]\w{2,15})$`)
-	var accountRegex, _ = regexp.Compile(`^[a-zA-Z]\w{3,15}$`)
-	createAccountValidator.AddRule("Name", &validate.Rule{Regexp: accountRegex})
-	createAccountValidator.AddRule("Roles", &validate.Rule{Min: 1, Regexp: roleRegex})
+	createAccountValidator.AddRule("Name", &validate.Rule{Max: 64, Regexp: nameRegex})
+	createAccountValidator.AddRule("Roles", &validate.Rule{Min: 1, Regexp: nameRegex})
 	createAccountValidator.AddRule("Password", &validate.Rule{Regexp: &validate.PasswordChecker{}})
 
 	changePWDValidator.AddRule("Password", &validate.Rule{Regexp: &validate.PasswordChecker{}})
-	changePWDValidator.AddRule("Name", &validate.Rule{Regexp: accountRegex})
+	changePWDValidator.AddRule("Name", &validate.Rule{Regexp: nameRegex})
 
 	accountLoginValidator.AddRule("TokenExpirationTime", &validate.Rule{Regexp: &validate.TokenExpirationTimeChecker{}})
 }
diff --git a/server/service/validator/validator_test.go b/server/service/validator/validator_test.go
new file mode 100644
index 0000000..e5faabf
--- /dev/null
+++ b/server/service/validator/validator_test.go
@@ -0,0 +1,74 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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 validator_test
+
+import (
+	"github.com/apache/servicecomb-service-center/server/service/validator"
+	"testing"
+
+	"github.com/go-chassis/cari/rbac"
+)
+
+func TestValidateCreateAccount(t *testing.T) {
+	type args struct {
+		a *rbac.Account
+	}
+	tests := []struct {
+		name    string
+		args    args
+		wantErr bool
+	}{
+		{name: "given valid field",
+			args: args{a: &rbac.Account{
+				Name:     "tester-_1",
+				Password: "Pwd0000_1",
+				Roles:    []string{"admin", "developer"},
+			}},
+			wantErr: false,
+		},
+		{name: "given invalid account name",
+			args: args{a: &rbac.Account{
+				Name:     "tester*",
+				Password: "Pwd0000_1",
+				Roles:    []string{"admin-2", "developer", "admin-a", "admin.a"},
+			}},
+			wantErr: true,
+		},
+		{name: "given invalid account name",
+			args: args{a: &rbac.Account{
+				Name:     "tester*a",
+				Password: "Pwd0000_1",
+				Roles:    []string{"admin", "developer"},
+			}},
+			wantErr: true,
+		},
+		{name: "given invalid role name",
+			args: args{a: &rbac.Account{
+				Name:     "tester",
+				Password: "Pwd0000_1",
+				Roles:    []string{"adm*in", "developer"},
+			}},
+			wantErr: true,
+		},
+	}
+	for _, tt := range tests {
+		if err := validator.ValidateCreateAccount(tt.args.a); (err != nil) != tt.wantErr {
+			t.Errorf("%q. ValidateCreateAccount() error = %v, wantErr %v", tt.name, err, tt.wantErr)
+		}
+	}
+}