github.com/infraboard/keyauth@v0.8.1/apps/endpoint/request_ext.go (about)

     1  package endpoint
     2  
     3  import (
     4  	"fmt"
     5  	"net/http"
     6  	"strings"
     7  
     8  	"github.com/go-playground/validator/v10"
     9  	"github.com/infraboard/mcube/exception"
    10  	"github.com/infraboard/mcube/http/request"
    11  	httpb "github.com/infraboard/mcube/pb/http"
    12  	"github.com/infraboard/mcube/types/ftime"
    13  )
    14  
    15  // use a single instance of Validate, it caches struct info
    16  var (
    17  	validate = validator.New()
    18  )
    19  
    20  // NewRegistryRequest 注册请求
    21  func NewRegistryRequest(version string, entries []*httpb.Entry) *RegistryRequest {
    22  	return &RegistryRequest{
    23  		Version: version,
    24  		Entries: entries,
    25  	}
    26  }
    27  
    28  // NewDefaultRegistryRequest todo
    29  func NewDefaultRegistryRequest() *RegistryRequest {
    30  	return &RegistryRequest{
    31  		Entries: []*httpb.Entry{},
    32  	}
    33  }
    34  
    35  // Validate 校验注册请求合法性
    36  func (req *RegistryRequest) Validate() error {
    37  	if len(req.Entries) == 0 {
    38  		return fmt.Errorf("must require *router.Entry")
    39  	}
    40  
    41  	return validate.Struct(req)
    42  }
    43  
    44  // Endpoints 功能列表
    45  func (req *RegistryRequest) Endpoints(serviceID string) []*Endpoint {
    46  	eps := make([]*Endpoint, 0, len(req.Entries))
    47  	for i := range req.Entries {
    48  		ep := &Endpoint{
    49  			Id:        GenHashID(serviceID, req.Entries[i].Path),
    50  			CreateAt:  ftime.Now().Timestamp(),
    51  			UpdateAt:  ftime.Now().Timestamp(),
    52  			ServiceId: serviceID,
    53  			Version:   req.Version,
    54  			Entry:     req.Entries[i],
    55  		}
    56  		eps = append(eps, ep)
    57  	}
    58  	return eps
    59  }
    60  
    61  // NewRegistryResponse todo
    62  func NewRegistryResponse(message string) *RegistryResponse {
    63  	return &RegistryResponse{Message: message}
    64  }
    65  
    66  // NewQueryEndpointRequestFromHTTP 列表查询请求
    67  func NewQueryEndpointRequestFromHTTP(r *http.Request) *QueryEndpointRequest {
    68  	page := request.NewPageRequestFromHTTP(r)
    69  	qs := r.URL.Query()
    70  
    71  	query := &QueryEndpointRequest{
    72  		Page:         page,
    73  		Path:         qs.Get("path"),
    74  		Method:       qs.Get("method"),
    75  		FunctionName: qs.Get("function_name"),
    76  	}
    77  
    78  	sids := qs.Get("service_ids")
    79  	if sids != "" {
    80  		query.ServiceIds = strings.Split(sids, ",")
    81  	}
    82  	rs := qs.Get("resources")
    83  	if rs != "" {
    84  		query.Resources = strings.Split(rs, ",")
    85  	}
    86  
    87  	return query
    88  }
    89  
    90  // NewQueryEndpointRequest 列表查询请求
    91  func NewQueryEndpointRequest(pageReq *request.PageRequest) *QueryEndpointRequest {
    92  	return &QueryEndpointRequest{
    93  		Page: pageReq,
    94  	}
    95  }
    96  
    97  // NewDescribeEndpointRequestWithID todo
    98  func NewDescribeEndpointRequestWithID(id string) *DescribeEndpointRequest {
    99  	return &DescribeEndpointRequest{Id: id}
   100  }
   101  
   102  // Validate 校验
   103  func (req *DescribeEndpointRequest) Validate() error {
   104  	if req.Id == "" {
   105  		return fmt.Errorf("endpoint id is required")
   106  	}
   107  
   108  	return nil
   109  }
   110  
   111  // NewDeleteEndpointRequestWithServiceID todo
   112  func NewDeleteEndpointRequestWithServiceID(id string) *DeleteEndpointRequest {
   113  	return &DeleteEndpointRequest{ServiceId: id}
   114  }
   115  
   116  // NewQueryResourceRequestFromHTTP 列表查询请求
   117  func NewQueryResourceRequestFromHTTP(r *http.Request) *QueryResourceRequest {
   118  	page := request.NewPageRequestFromHTTP(r)
   119  	qs := r.URL.Query()
   120  	pe, err := ParseBoolQueryFromString(qs.Get("permission_enable"))
   121  	if err != nil {
   122  		pe = BoolQuery_ALL
   123  	}
   124  
   125  	query := &QueryResourceRequest{
   126  		Page:             page,
   127  		PermissionEnable: pe,
   128  	}
   129  
   130  	strIds := qs.Get("service_ids")
   131  	if strIds != "" {
   132  		query.ServiceIds = strings.Split(strIds, ",")
   133  	}
   134  	rs := qs.Get("resources")
   135  	if rs != "" {
   136  		query.Resources = strings.Split(rs, ",")
   137  	}
   138  
   139  	return query
   140  }
   141  
   142  // Validate todo
   143  func (req *QueryResourceRequest) Validate() error {
   144  	if len(req.ServiceIds) == 0 {
   145  		return exception.NewBadRequest("service_ids required, but \"\"")
   146  	}
   147  
   148  	return nil
   149  }