mirror of
https://github.com/TeaOSLab/EdgeAPI.git
synced 2025-11-02 05:40:27 +08:00
源站增加所属反向代理字段,以便于快速查找源站对应的反向代理
This commit is contained in:
@@ -540,10 +540,26 @@ func (this *OriginDAO) ComposeOriginConfig(tx *dbs.Tx, originId int64, dataMap *
|
||||
|
||||
// CheckUserOrigin 检查源站权限
|
||||
func (this *OriginDAO) CheckUserOrigin(tx *dbs.Tx, userId int64, originId int64) error {
|
||||
reverseProxyId, err := SharedReverseProxyDAO.FindReverseProxyContainsOriginId(tx, originId)
|
||||
if originId <= 0 {
|
||||
return ErrNotFound
|
||||
}
|
||||
|
||||
// 快速查找
|
||||
reverseProxyId, err := this.Query(tx).
|
||||
Pk(originId).
|
||||
Result(OriginField_ReverseProxyId).
|
||||
FindInt64Col(0)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// 再次查找
|
||||
if reverseProxyId <= 0 {
|
||||
reverseProxyId, err = SharedReverseProxyDAO.FindReverseProxyContainsOriginId(tx, originId)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
if reverseProxyId == 0 {
|
||||
// 这里我们不允许源站没有被使用
|
||||
return ErrNotFound
|
||||
@@ -562,6 +578,18 @@ func (this *OriginDAO) ExistsOrigin(tx *dbs.Tx, originId int64) (bool, error) {
|
||||
Exist()
|
||||
}
|
||||
|
||||
// UpdateOriginReverseProxyId 设置源站所属反向代理ID
|
||||
func (this *OriginDAO) UpdateOriginReverseProxyId(tx *dbs.Tx, originId int64, reverseProxyId int64) error {
|
||||
if originId <= 0 || reverseProxyId <= 0 {
|
||||
return nil
|
||||
}
|
||||
|
||||
return this.Query(tx).
|
||||
Pk(originId).
|
||||
Set(OriginField_ReverseProxyId, reverseProxyId).
|
||||
UpdateQuickly()
|
||||
}
|
||||
|
||||
// NotifyUpdate 通知更新
|
||||
func (this *OriginDAO) NotifyUpdate(tx *dbs.Tx, originId int64) error {
|
||||
reverseProxyId, err := SharedReverseProxyDAO.FindReverseProxyContainsOriginId(tx, originId)
|
||||
|
||||
@@ -2,11 +2,45 @@ package models
|
||||
|
||||
import "github.com/iwind/TeaGo/dbs"
|
||||
|
||||
const (
|
||||
OriginField_Id dbs.FieldName = "id" // ID
|
||||
OriginField_AdminId dbs.FieldName = "adminId" // 管理员ID
|
||||
OriginField_UserId dbs.FieldName = "userId" // 用户ID
|
||||
OriginField_ReverseProxyId dbs.FieldName = "reverseProxyId" // 所属反向代理ID
|
||||
OriginField_IsOn dbs.FieldName = "isOn" // 是否启用
|
||||
OriginField_Name dbs.FieldName = "name" // 名称
|
||||
OriginField_Version dbs.FieldName = "version" // 版本
|
||||
OriginField_Addr dbs.FieldName = "addr" // 地址
|
||||
OriginField_Oss dbs.FieldName = "oss" // OSS配置
|
||||
OriginField_Description dbs.FieldName = "description" // 描述
|
||||
OriginField_Code dbs.FieldName = "code" // 代号
|
||||
OriginField_Weight dbs.FieldName = "weight" // 权重
|
||||
OriginField_ConnTimeout dbs.FieldName = "connTimeout" // 连接超时
|
||||
OriginField_ReadTimeout dbs.FieldName = "readTimeout" // 读超时
|
||||
OriginField_IdleTimeout dbs.FieldName = "idleTimeout" // 空闲连接超时
|
||||
OriginField_MaxFails dbs.FieldName = "maxFails" // 最多失败次数
|
||||
OriginField_MaxConns dbs.FieldName = "maxConns" // 最大并发连接数
|
||||
OriginField_MaxIdleConns dbs.FieldName = "maxIdleConns" // 最多空闲连接数
|
||||
OriginField_HttpRequestURI dbs.FieldName = "httpRequestURI" // 转发后的请求URI
|
||||
OriginField_HttpRequestHeader dbs.FieldName = "httpRequestHeader" // 请求Header配置
|
||||
OriginField_HttpResponseHeader dbs.FieldName = "httpResponseHeader" // 响应Header配置
|
||||
OriginField_Host dbs.FieldName = "host" // 自定义主机名
|
||||
OriginField_HealthCheck dbs.FieldName = "healthCheck" // 健康检查设置
|
||||
OriginField_Cert dbs.FieldName = "cert" // 证书设置
|
||||
OriginField_Ftp dbs.FieldName = "ftp" // FTP相关设置
|
||||
OriginField_CreatedAt dbs.FieldName = "createdAt" // 创建时间
|
||||
OriginField_Domains dbs.FieldName = "domains" // 所属域名
|
||||
OriginField_FollowPort dbs.FieldName = "followPort" // 端口跟随
|
||||
OriginField_State dbs.FieldName = "state" // 状态
|
||||
OriginField_Http2Enabled dbs.FieldName = "http2Enabled" // 是否支持HTTP/2
|
||||
)
|
||||
|
||||
// Origin 源站
|
||||
type Origin struct {
|
||||
Id uint32 `field:"id"` // ID
|
||||
AdminId uint32 `field:"adminId"` // 管理员ID
|
||||
UserId uint32 `field:"userId"` // 用户ID
|
||||
ReverseProxyId uint64 `field:"reverseProxyId"` // 所属反向代理ID
|
||||
IsOn bool `field:"isOn"` // 是否启用
|
||||
Name string `field:"name"` // 名称
|
||||
Version uint32 `field:"version"` // 版本
|
||||
@@ -39,6 +73,7 @@ type OriginOperator struct {
|
||||
Id any // ID
|
||||
AdminId any // 管理员ID
|
||||
UserId any // 用户ID
|
||||
ReverseProxyId any // 所属反向代理ID
|
||||
IsOn any // 是否启用
|
||||
Name any // 名称
|
||||
Version any // 版本
|
||||
|
||||
@@ -3,6 +3,7 @@ package models
|
||||
import (
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"fmt"
|
||||
"github.com/TeaOSLab/EdgeAPI/internal/utils"
|
||||
"github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs"
|
||||
"github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs/shared"
|
||||
@@ -213,7 +214,24 @@ func (this *ReverseProxyDAO) ComposeReverseProxyConfig(tx *dbs.Tx, reverseProxyI
|
||||
}
|
||||
|
||||
// CreateReverseProxy 创建反向代理
|
||||
func (this *ReverseProxyDAO) CreateReverseProxy(tx *dbs.Tx, adminId int64, userId int64, schedulingJSON []byte, primaryOriginsJSON []byte, backupOriginsJSON []byte) (int64, error) {
|
||||
func (this *ReverseProxyDAO) CreateReverseProxy(tx *dbs.Tx, adminId int64, userId int64, schedulingJSON []byte, primaryOriginRefsJSON []byte, backupOriginRefsJSON []byte) (int64, error) {
|
||||
// decode origins
|
||||
var primaryOriginRefs []*serverconfigs.OriginRef
|
||||
if len(primaryOriginRefsJSON) > 0 {
|
||||
err := json.Unmarshal(primaryOriginRefsJSON, &primaryOriginRefs)
|
||||
if err != nil {
|
||||
return 0, fmt.Errorf("decode 'primaryOriginRefs' failed: " + err.Error())
|
||||
}
|
||||
}
|
||||
|
||||
var backupOriginRefs []*serverconfigs.OriginRef
|
||||
if len(backupOriginRefsJSON) > 0 {
|
||||
err := json.Unmarshal(backupOriginRefsJSON, &backupOriginRefs)
|
||||
if err != nil {
|
||||
return 0, fmt.Errorf("decode 'backupOriginRefs' failed: " + err.Error())
|
||||
}
|
||||
}
|
||||
|
||||
var op = NewReverseProxyOperator()
|
||||
op.IsOn = true
|
||||
op.State = ReverseProxyStateEnabled
|
||||
@@ -233,18 +251,35 @@ func (this *ReverseProxyDAO) CreateReverseProxy(tx *dbs.Tx, adminId int64, userI
|
||||
if IsNotNull(schedulingJSON) {
|
||||
op.Scheduling = string(schedulingJSON)
|
||||
}
|
||||
if IsNotNull(primaryOriginsJSON) {
|
||||
op.PrimaryOrigins = string(primaryOriginsJSON)
|
||||
if IsNotNull(primaryOriginRefsJSON) {
|
||||
op.PrimaryOrigins = string(primaryOriginRefsJSON)
|
||||
}
|
||||
if IsNotNull(backupOriginsJSON) {
|
||||
op.BackupOrigins = string(backupOriginsJSON)
|
||||
if IsNotNull(backupOriginRefsJSON) {
|
||||
op.BackupOrigins = string(backupOriginRefsJSON)
|
||||
}
|
||||
err = this.Save(tx, op)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
|
||||
return types.Int64(op.Id), nil
|
||||
var reverseProxyId = types.Int64(op.Id)
|
||||
|
||||
// set 'reverseProxyId' of origins
|
||||
for _, originRef := range primaryOriginRefs {
|
||||
err = SharedOriginDAO.UpdateOriginReverseProxyId(tx, originRef.OriginId, reverseProxyId)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
}
|
||||
|
||||
for _, originRef := range backupOriginRefs {
|
||||
err = SharedOriginDAO.UpdateOriginReverseProxyId(tx, originRef.OriginId, reverseProxyId)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
}
|
||||
|
||||
return reverseProxyId, nil
|
||||
}
|
||||
|
||||
// CloneReverseProxy 复制反向代理
|
||||
@@ -376,14 +411,30 @@ func (this *ReverseProxyDAO) UpdateReverseProxyScheduling(tx *dbs.Tx, reversePro
|
||||
}
|
||||
|
||||
// UpdateReverseProxyPrimaryOrigins 修改主要源站
|
||||
func (this *ReverseProxyDAO) UpdateReverseProxyPrimaryOrigins(tx *dbs.Tx, reverseProxyId int64, originRefs []byte) error {
|
||||
func (this *ReverseProxyDAO) UpdateReverseProxyPrimaryOrigins(tx *dbs.Tx, reverseProxyId int64, originRefsJSON []byte) error {
|
||||
if reverseProxyId <= 0 {
|
||||
return errors.New("invalid reverseProxyId")
|
||||
}
|
||||
|
||||
// set 'reverseProxyId' of origins
|
||||
if len(originRefsJSON) > 0 {
|
||||
var originRefs []*serverconfigs.OriginRef
|
||||
err := json.Unmarshal(originRefsJSON, &originRefs)
|
||||
if err != nil {
|
||||
return fmt.Errorf("decode 'originRefs' failed: " + err.Error())
|
||||
}
|
||||
for _, originRef := range originRefs {
|
||||
err = SharedOriginDAO.UpdateOriginReverseProxyId(tx, originRef.OriginId, reverseProxyId)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var op = NewReverseProxyOperator()
|
||||
op.Id = reverseProxyId
|
||||
if len(originRefs) > 0 {
|
||||
op.PrimaryOrigins = originRefs
|
||||
if len(originRefsJSON) > 0 {
|
||||
op.PrimaryOrigins = originRefsJSON
|
||||
} else {
|
||||
op.PrimaryOrigins = "[]"
|
||||
}
|
||||
@@ -395,14 +446,30 @@ func (this *ReverseProxyDAO) UpdateReverseProxyPrimaryOrigins(tx *dbs.Tx, revers
|
||||
}
|
||||
|
||||
// UpdateReverseProxyBackupOrigins 修改备用源站
|
||||
func (this *ReverseProxyDAO) UpdateReverseProxyBackupOrigins(tx *dbs.Tx, reverseProxyId int64, origins []byte) error {
|
||||
func (this *ReverseProxyDAO) UpdateReverseProxyBackupOrigins(tx *dbs.Tx, reverseProxyId int64, originRefsJSON []byte) error {
|
||||
if reverseProxyId <= 0 {
|
||||
return errors.New("invalid reverseProxyId")
|
||||
}
|
||||
|
||||
// set 'reverseProxyId' of origins
|
||||
if len(originRefsJSON) > 0 {
|
||||
var originRefs []*serverconfigs.OriginRef
|
||||
err := json.Unmarshal(originRefsJSON, &originRefs)
|
||||
if err != nil {
|
||||
return fmt.Errorf("decode 'originRefs' failed: " + err.Error())
|
||||
}
|
||||
for _, originRef := range originRefs {
|
||||
err = SharedOriginDAO.UpdateOriginReverseProxyId(tx, originRef.OriginId, reverseProxyId)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var op = NewReverseProxyOperator()
|
||||
op.Id = reverseProxyId
|
||||
if len(origins) > 0 {
|
||||
op.BackupOrigins = origins
|
||||
if len(originRefsJSON) > 0 {
|
||||
op.BackupOrigins = originRefsJSON
|
||||
} else {
|
||||
op.BackupOrigins = "[]"
|
||||
}
|
||||
|
||||
@@ -122371,7 +122371,7 @@
|
||||
"name": "edgeOrigins",
|
||||
"engine": "InnoDB",
|
||||
"charset": "utf8mb4_general_ci",
|
||||
"definition": "CREATE TABLE `edgeOrigins` (\n `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID',\n `adminId` int(11) unsigned DEFAULT '0' COMMENT '管理员ID',\n `userId` int(11) unsigned DEFAULT '0' COMMENT '用户ID',\n `isOn` tinyint(1) unsigned DEFAULT '1' COMMENT '是否启用',\n `name` varchar(255) DEFAULT NULL COMMENT '名称',\n `version` int(11) unsigned DEFAULT '0' COMMENT '版本',\n `addr` json DEFAULT NULL COMMENT '地址',\n `oss` json DEFAULT NULL COMMENT 'OSS配置',\n `description` varchar(512) DEFAULT NULL COMMENT '描述',\n `code` varchar(255) DEFAULT NULL COMMENT '代号',\n `weight` int(11) unsigned DEFAULT '0' COMMENT '权重',\n `connTimeout` json DEFAULT NULL COMMENT '连接超时',\n `readTimeout` json DEFAULT NULL COMMENT '读超时',\n `idleTimeout` json DEFAULT NULL COMMENT '空闲连接超时',\n `maxFails` int(11) unsigned DEFAULT '0' COMMENT '最多失败次数',\n `maxConns` int(11) unsigned DEFAULT '0' COMMENT '最大并发连接数',\n `maxIdleConns` int(11) unsigned DEFAULT '0' COMMENT '最多空闲连接数',\n `httpRequestURI` varchar(1024) DEFAULT NULL COMMENT '转发后的请求URI',\n `httpRequestHeader` json DEFAULT NULL COMMENT '请求Header配置',\n `httpResponseHeader` json DEFAULT NULL COMMENT '响应Header配置',\n `host` varchar(255) DEFAULT NULL COMMENT '自定义主机名',\n `healthCheck` json DEFAULT NULL COMMENT '健康检查设置',\n `cert` json DEFAULT NULL COMMENT '证书设置',\n `ftp` json DEFAULT NULL COMMENT 'FTP相关设置',\n `createdAt` bigint(11) unsigned DEFAULT '0' COMMENT '创建时间',\n `domains` json DEFAULT NULL COMMENT '所属域名',\n `followPort` tinyint(1) unsigned DEFAULT '0' COMMENT '端口跟随',\n `state` tinyint(1) unsigned DEFAULT '1' COMMENT '状态',\n `http2Enabled` tinyint(1) unsigned DEFAULT '0' COMMENT '是否支持HTTP/2',\n PRIMARY KEY (`id`)\n) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='源站'",
|
||||
"definition": "CREATE TABLE `edgeOrigins` (\n `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID',\n `adminId` int(11) unsigned DEFAULT '0' COMMENT '管理员ID',\n `userId` int(11) unsigned DEFAULT '0' COMMENT '用户ID',\n `reverseProxyId` bigint(11) unsigned DEFAULT '0' COMMENT '所属反向代理ID',\n `isOn` tinyint(1) unsigned DEFAULT '1' COMMENT '是否启用',\n `name` varchar(255) DEFAULT NULL COMMENT '名称',\n `version` int(11) unsigned DEFAULT '0' COMMENT '版本',\n `addr` json DEFAULT NULL COMMENT '地址',\n `oss` json DEFAULT NULL COMMENT 'OSS配置',\n `description` varchar(512) DEFAULT NULL COMMENT '描述',\n `code` varchar(255) DEFAULT NULL COMMENT '代号',\n `weight` int(11) unsigned DEFAULT '0' COMMENT '权重',\n `connTimeout` json DEFAULT NULL COMMENT '连接超时',\n `readTimeout` json DEFAULT NULL COMMENT '读超时',\n `idleTimeout` json DEFAULT NULL COMMENT '空闲连接超时',\n `maxFails` int(11) unsigned DEFAULT '0' COMMENT '最多失败次数',\n `maxConns` int(11) unsigned DEFAULT '0' COMMENT '最大并发连接数',\n `maxIdleConns` int(11) unsigned DEFAULT '0' COMMENT '最多空闲连接数',\n `httpRequestURI` varchar(1024) DEFAULT NULL COMMENT '转发后的请求URI',\n `httpRequestHeader` json DEFAULT NULL COMMENT '请求Header配置',\n `httpResponseHeader` json DEFAULT NULL COMMENT '响应Header配置',\n `host` varchar(255) DEFAULT NULL COMMENT '自定义主机名',\n `healthCheck` json DEFAULT NULL COMMENT '健康检查设置',\n `cert` json DEFAULT NULL COMMENT '证书设置',\n `ftp` json DEFAULT NULL COMMENT 'FTP相关设置',\n `createdAt` bigint(11) unsigned DEFAULT '0' COMMENT '创建时间',\n `domains` json DEFAULT NULL COMMENT '所属域名',\n `followPort` tinyint(1) unsigned DEFAULT '0' COMMENT '端口跟随',\n `state` tinyint(1) unsigned DEFAULT '1' COMMENT '状态',\n `http2Enabled` tinyint(1) unsigned DEFAULT '0' COMMENT '是否支持HTTP/2',\n PRIMARY KEY (`id`)\n) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='源站'",
|
||||
"fields": [
|
||||
{
|
||||
"name": "id",
|
||||
@@ -122385,6 +122385,10 @@
|
||||
"name": "userId",
|
||||
"definition": "int(11) unsigned DEFAULT '0' COMMENT '用户ID'"
|
||||
},
|
||||
{
|
||||
"name": "reverseProxyId",
|
||||
"definition": "bigint(11) unsigned DEFAULT '0' COMMENT '所属反向代理ID'"
|
||||
},
|
||||
{
|
||||
"name": "isOn",
|
||||
"definition": "tinyint(1) unsigned DEFAULT '1' COMMENT '是否启用'"
|
||||
|
||||
Reference in New Issue
Block a user