1 Star 0 Fork 0

李童 / cmdb

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
app.go 4.07 KB
一键复制 编辑 原始数据 按行查看 历史
李童 提交于 2023-05-17 13:19 . add keyauth middleware
package resouce
import (
"fmt"
"net/http"
"strings"
"gitee.com/vak80/cmdb/utils"
"github.com/infraboard/mcube/http/request"
)
const (
AppName = "resource"
)
type Operator string
const (
Operator_EQUAL = "="
Operator_NOT_EQUAL = "!="
Operator_LIKE_EQUAL = "=~"
Operator_NOT_LIKE_EQUAL = "!~"
)
func (s *TagSelector) RelationShip() string {
switch s.Operator {
case Operator_EQUAL, Operator_LIKE_EQUAL:
return " OR "
case Operator_NOT_EQUAL, Operator_NOT_LIKE_EQUAL:
return " AND "
default:
return " OR "
}
}
func (r *SearchRequest) HasTag() bool {
return len(r.Tags) > 0
}
func NewResourceSet() *ResourceSet {
return &ResourceSet{
Items: []*Resource{},
}
}
func (s *ResourceSet) Add(item *Resource) {
s.Items = append(s.Items, item)
}
func NewDefaultResource() *Resource {
return &Resource{
Base: &Base{},
Information: &Information{},
}
}
func (i *Information) LoadPrivateIPString(s string) {
if s != "" {
i.PrivateIp = strings.Split(s, ",")
}
}
func (i *Information) LoadPublicIPString(s string) {
if s != "" {
i.PublicIp = strings.Split(s, ",")
}
}
func (i *Information) Hash() string {
return utils.Hash(i)
}
func (i *Information) PrivateIPToString() string {
return strings.Join(i.PrivateIp, ",")
}
func (i *Information) PublicIPToString() string {
return strings.Join(i.PublicIp, ",")
}
func NewQueryRequest() *SearchRequest {
return &SearchRequest{
Page: request.NewDefaultPageRequest(),
}
}
// keywords=xx&domain=xx&tag=app=~app1,app2,app3
func NewSearchRequestFromHTTP(r *http.Request) (*SearchRequest, error) {
qs := r.URL.Query()
req := &SearchRequest{
Page: request.NewPageRequestFromHTTP(r),
Keywords: qs.Get("keywords"),
ExactMatch: qs.Get("exact_match") == "true",
Domain: qs.Get("domain"),
Namespace: qs.Get("namespace"),
Env: qs.Get("env"),
Status: qs.Get("status"),
SyncAccount: qs.Get("sync_account"),
WithTags: qs.Get("with_tags") == "true",
Tags: []*TagSelector{},
}
umStr := qs.Get("usage_mode")
if umStr != "" {
mode, err := ParseUsageModeFromString(umStr)
if err != nil {
return nil, err
}
req.UsageMode = &mode
}
rtStr := qs.Get("resource_type")
if rtStr != "" {
rt, err := ParseTypeFromString(rtStr)
if err != nil {
return nil, err
}
req.Type = &rt
}
// 单独处理Tag参数 app~=app1,app2,app3 --> TagSelector ---> req
tgStr := qs.Get("tags")
if tgStr != "" {
tg, err := NewTagsFromString(tgStr)
if err != nil {
return nil, err
}
req.AddTag(tg...)
}
return req, nil
}
func (req *SearchRequest) AddTag(t ...*TagSelector) {
req.Tags = append(req.Tags, t...)
}
func NewDefaultTag() *Tag {
return &Tag{
Type: TagType_USER,
Weight: 1,
}
}
func (r *Information) AddTag(t *Tag) {
r.Tags = append(r.Tags, t)
}
// key1=v1,v2,v3&key2=~v1,v2,v3
func NewTagsFromString(tagStr string) (tags []*TagSelector, err error) {
if tagStr == "" {
return
}
items := strings.Split(tagStr, "&")
for _, v := range items {
// key1=v1,v2,v3 --> TagSelector
t, err := ParExpr(v)
if err != nil {
return nil, err
}
tags = append(tags, t)
}
return
}
func ParExpr(str string) (*TagSelector, error) {
var (
op = ""
kv = []string{}
)
//app=~v1,v2,v3
if strings.Contains(str, Operator_LIKE_EQUAL) {
op = "LIKE"
kv = strings.Split(str, Operator_LIKE_EQUAL)
} else if strings.Contains(str, Operator_NOT_LIKE_EQUAL) {
op = "NOT LIKE"
kv = strings.Split(str, Operator_NOT_LIKE_EQUAL)
} else if strings.Contains(str, Operator_NOT_EQUAL) {
op = "!="
kv = strings.Split(str, Operator_NOT_EQUAL)
} else if strings.Contains(str, Operator_EQUAL) {
op = "="
kv = strings.Split(str, Operator_EQUAL)
} else {
return nil, fmt.Errorf("no support operator [=, =~, !=, !~]")
}
if len(kv) != 2 {
return nil, fmt.Errorf("key,value format error, requred key=value")
}
selector := &TagSelector{
Key: kv[0],
Operator: op,
Values: []string{},
}
// v1,v2,v3 splite [v1,v2,v3]
// 如果Value等于*表示只匹配key
if kv[1] != "*" {
selector.Values = strings.Split(kv[1], ",")
}
return selector, nil
}
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Go
1
https://gitee.com/vak80/cmdb.git
git@gitee.com:vak80/cmdb.git
vak80
cmdb
cmdb
v0.0.3

搜索帮助

344bd9b3 5694891 D2dac590 5694891