channel 表添加 IP 白名单字段用于快照保存与展示

This commit is contained in:
2025-05-22 15:22:40 +08:00
parent 15ffccf554
commit 09a9cc573e
5 changed files with 18 additions and 6 deletions

View File

@@ -1,12 +1,13 @@
## TODO
## 枚举字典 ## 枚举字典
### 产品 ### 产品
| 代码 | 缩写 | 产品 | | 代码 | 产品 |
|----------------------|-----|------| |-------|------|
| proxy/shared-static | pss | 动态代理 | | short | 短效代理 |
| proxy/shared-rotate | psr | 隧道代理 | | long | 长效代理 |
| proxy/private-static | pps | 独享代理 |
## 业务流程 ## 业务流程

View File

@@ -635,6 +635,7 @@ create table channel (
edge_host varchar(255), edge_host varchar(255),
protocol int, protocol int,
auth_ip bool not null default false, auth_ip bool not null default false,
whitelists text,
auth_pass bool not null default false, auth_pass bool not null default false,
username varchar(255), username varchar(255),
password varchar(255), password varchar(255),
@@ -666,6 +667,7 @@ comment on column channel.proxy_port is '转发端口';
comment on column channel.edge_host is '节点地址'; comment on column channel.edge_host is '节点地址';
comment on column channel.protocol is '协议类型1-http2-https3-socks5'; comment on column channel.protocol is '协议类型1-http2-https3-socks5';
comment on column channel.auth_ip is 'IP认证'; comment on column channel.auth_ip is 'IP认证';
comment on column channel.whitelists is 'IP白名单逗号分隔';
comment on column channel.auth_pass is '密码认证'; comment on column channel.auth_pass is '密码认证';
comment on column channel.username is '用户名'; comment on column channel.username is '用户名';
comment on column channel.password is '密码'; comment on column channel.password is '密码';

View File

@@ -30,6 +30,7 @@ type Channel struct {
DeletedAt gorm.DeletedAt `gorm:"column:deleted_at;type:timestamp without time zone;comment:删除时间" json:"deleted_at"` // 删除时间 DeletedAt gorm.DeletedAt `gorm:"column:deleted_at;type:timestamp without time zone;comment:删除时间" json:"deleted_at"` // 删除时间
EdgeHost string `gorm:"column:edge_host;type:character varying(255);comment:节点地址" json:"edge_host"` // 节点地址 EdgeHost string `gorm:"column:edge_host;type:character varying(255);comment:节点地址" json:"edge_host"` // 节点地址
EdgeID int32 `gorm:"column:edge_id;type:integer;comment:节点ID" json:"edge_id"` // 节点ID EdgeID int32 `gorm:"column:edge_id;type:integer;comment:节点ID" json:"edge_id"` // 节点ID
Whitelists string `gorm:"column:whitelists;type:text;comment:IP白名单逗号分隔" json:"whitelists"` // IP白名单逗号分隔
} }
// TableName Channel's table name // TableName Channel's table name

View File

@@ -43,6 +43,7 @@ func newChannel(db *gorm.DB, opts ...gen.DOOption) channel {
_channel.DeletedAt = field.NewField(tableName, "deleted_at") _channel.DeletedAt = field.NewField(tableName, "deleted_at")
_channel.EdgeHost = field.NewString(tableName, "edge_host") _channel.EdgeHost = field.NewString(tableName, "edge_host")
_channel.EdgeID = field.NewInt32(tableName, "edge_id") _channel.EdgeID = field.NewInt32(tableName, "edge_id")
_channel.Whitelists = field.NewString(tableName, "whitelists")
_channel.fillFieldMap() _channel.fillFieldMap()
@@ -69,6 +70,7 @@ type channel struct {
DeletedAt field.Field // 删除时间 DeletedAt field.Field // 删除时间
EdgeHost field.String // 节点地址 EdgeHost field.String // 节点地址
EdgeID field.Int32 // 节点ID EdgeID field.Int32 // 节点ID
Whitelists field.String // IP白名单逗号分隔
fieldMap map[string]field.Expr fieldMap map[string]field.Expr
} }
@@ -101,6 +103,7 @@ func (c *channel) updateTableName(table string) *channel {
c.DeletedAt = field.NewField(table, "deleted_at") c.DeletedAt = field.NewField(table, "deleted_at")
c.EdgeHost = field.NewString(table, "edge_host") c.EdgeHost = field.NewString(table, "edge_host")
c.EdgeID = field.NewInt32(table, "edge_id") c.EdgeID = field.NewInt32(table, "edge_id")
c.Whitelists = field.NewString(table, "whitelists")
c.fillFieldMap() c.fillFieldMap()
@@ -117,7 +120,7 @@ func (c *channel) GetFieldByName(fieldName string) (field.OrderExpr, bool) {
} }
func (c *channel) fillFieldMap() { func (c *channel) fillFieldMap() {
c.fieldMap = make(map[string]field.Expr, 16) c.fieldMap = make(map[string]field.Expr, 17)
c.fieldMap["id"] = c.ID c.fieldMap["id"] = c.ID
c.fieldMap["user_id"] = c.UserID c.fieldMap["user_id"] = c.UserID
c.fieldMap["proxy_id"] = c.ProxyID c.fieldMap["proxy_id"] = c.ProxyID
@@ -134,6 +137,7 @@ func (c *channel) fillFieldMap() {
c.fieldMap["deleted_at"] = c.DeletedAt c.fieldMap["deleted_at"] = c.DeletedAt
c.fieldMap["edge_host"] = c.EdgeHost c.fieldMap["edge_host"] = c.EdgeHost
c.fieldMap["edge_id"] = c.EdgeID c.fieldMap["edge_id"] = c.EdgeID
c.fieldMap["whitelists"] = c.Whitelists
} }
func (c channel) clone(db *gorm.DB) channel { func (c channel) clone(db *gorm.DB) channel {

View File

@@ -512,6 +512,7 @@ func assignShortChannels(
if config.AuthIp { if config.AuthIp {
portConf.Whitelist = &config.Whitelists portConf.Whitelist = &config.Whitelists
newChannel.AuthIP = true newChannel.AuthIP = true
newChannel.Whitelists = strings.Join(config.Whitelists, ",")
} }
if config.AuthPass { if config.AuthPass {
@@ -637,6 +638,9 @@ func assignLongChannels(q *q.Query, userId int32, count int, config ChannelCreat
ProxyHost: edge.Host, ProxyHost: edge.Host,
ProxyPort: edge.ProxyPort, ProxyPort: edge.ProxyPort,
} }
if config.AuthIp {
channel.Whitelists = strings.Join(config.Whitelists, ",")
}
if config.AuthPass { if config.AuthPass {
username, password := genPassPair() username, password := genPassPair()
channel.Username = username channel.Username = username