waf.go 3.34 KB
Newer Older
qiuqunfeng's avatar
qiuqunfeng committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
package model

import (
	"database/sql/driver"
	"encoding/json"
	"strings"
)

type HostList []string

func (h HostList) Value() (driver.Value, error) {
	return strings.Join(h, ","), nil
}

func (h *HostList) Scan(src interface{}) error {
	*h = strings.Split(src.(string), ",")
	return nil
}

qiuqunfeng's avatar
commit  
qiuqunfeng committed
20
type RuleCategoryStatus struct {
qiuqunfeng's avatar
commit  
qiuqunfeng committed
21 22 23 24 25 26 27 28 29 30
	CategoryID []string `json:"category_id"`
	Status     int      `json:"status"`
}

func (r *RuleCategoryStatus) Scan(src interface{}) error {
	return json.Unmarshal(src.([]byte), r)
}

func (r RuleCategoryStatus) Value() (driver.Value, error) {
	return json.Marshal(r)
qiuqunfeng's avatar
qiuqunfeng committed
31 32
}

qiuqunfeng's avatar
commit  
qiuqunfeng committed
33 34 35 36 37 38 39 40 41 42
type RuleCategoryStatusList []RuleCategoryStatus

func (r RuleCategoryStatusList) Value() (driver.Value, error) {
	return json.Marshal(r)
}

func (r *RuleCategoryStatusList) Scan(src interface{}) error {
	return json.Unmarshal(src.([]byte), r)
}

qiuqunfeng's avatar
commit  
qiuqunfeng committed
43 44 45 46 47 48
const (
	WafStatusEnable  = 0
	WafStatusDisable = 1
	WafStatusUnknown = 2
)

qiuqunfeng's avatar
commit  
qiuqunfeng committed
49
type WafService struct {
qiuqunfeng's avatar
commit  
qiuqunfeng committed
50 51 52 53 54 55 56 57
	ID                 uint                `gorm:"column:id;primaryKey;autoIncrement"`
	GatewayName        string              `gorm:"column:gateway_name"`
	Namespace          string              `gorm:"column:namespace"`
	RegionCode         string              `gorm:"column:region_code"`
	Mode               string              `gorm:"column:mode"`
	RuleNum            int                 `gorm:"column:rule_num"`
	AttackNum          int                 `gorm:"column:attack_num"`
	RuleCategoryStatus *RuleCategoryStatus `gorm:"column:rule_category_status;type:json"`
qiuqunfeng's avatar
commit  
qiuqunfeng committed
58
	Host               HostList            `gorm:"column:host"`
qiuqunfeng's avatar
commit  
qiuqunfeng committed
59 60 61 62
}

func (WafService) TableName() string {
	return "waf_services"
qiuqunfeng's avatar
qiuqunfeng committed
63 64 65
}

type WafRule struct {
qiuqunfeng's avatar
commit  
qiuqunfeng committed
66 67 68 69
	ID         int    `json:"id"`
	CategoryID string `gorm:"column:category_id"`
	Level      int    `json:"level"`
	// Status      int    `gorm:"column:status"`
qiuqunfeng's avatar
qiuqunfeng committed
70 71 72 73 74 75 76 77 78 79 80
	Name        string `json:"name"`
	Type        string `json:"type"`
	Description string `json:"description"`
	Expr        string `json:"expr"`
	Mode        string `json:"mode"`
}

func (WafRule) TableName() string {
	return "waf_rules"
}

qiuqunfeng's avatar
commit  
qiuqunfeng committed
81 82 83 84 85 86 87 88 89 90
type RuleList []WafRule

func (r RuleList) Value() (driver.Value, error) {
	return json.Marshal(r)
}

func (r *RuleList) Scan(src interface{}) error {
	return json.Unmarshal(src.([]byte), r)
}

qiuqunfeng's avatar
qiuqunfeng committed
91
type WafRuleCategory struct {
qiuqunfeng's avatar
commit  
qiuqunfeng committed
92 93 94 95 96 97 98 99
	ID            int      `gorm:"column:id;primaryKey;autoIncrement"`
	CategoryID    string   `gorm:"column:category_id"`
	CategoryEN    string   `gorm:"column:category_en"`
	CategoryZH    string   `gorm:"column:category_zh"`
	DescriptionEN string   `gorm:"column:description_en"`
	DescriptionZH string   `gorm:"column:description_zh"`
	Status        int      `gorm:"column:status"`
	Rules         RuleList `gorm:"column:rules"`
qiuqunfeng's avatar
qiuqunfeng committed
100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116
}

func (WafRuleCategory) TableName() string {
	return "waf_rule_categories"
}

func (r *WafRuleCategory) Scan(src interface{}) error {
	err := json.Unmarshal(src.([]byte), r)
	if err != nil {
		return err
	}
	return nil
}

func (r WafRuleCategory) Value() (driver.Value, error) {
	return json.Marshal(r)
}
qiuqunfeng's avatar
commit  
qiuqunfeng committed
117 118 119 120 121 122 123 124 125 126 127 128 129

type GatewayListener struct {
	ID          int    `gorm:"column:id;primaryKey;autoIncrement"`
	GatewayName string `gorm:"column:gateway_name"`
	Namespace   string `gorm:"column:namespace"`
	RegionCode  string `gorm:"column:region_code"`
	Port        int    `gorm:"column:port"`
	Enable      bool   `gorm:"column:enable"`
}

func (GatewayListener) TableName() string {
	return "gateway_listeners"
}