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 }