mirror of
https://github.com/TeaOSLab/EdgeAdmin.git
synced 2025-11-04 05:00:25 +08:00
318 lines
8.6 KiB
Go
318 lines
8.6 KiB
Go
package instances
|
|
|
|
import (
|
|
"encoding/json"
|
|
"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils"
|
|
"github.com/TeaOSLab/EdgeCommon/pkg/langs/codes"
|
|
"github.com/TeaOSLab/EdgeCommon/pkg/monitorconfigs"
|
|
"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
|
|
"github.com/iwind/TeaGo/actions"
|
|
"github.com/iwind/TeaGo/maps"
|
|
)
|
|
|
|
type UpdateAction struct {
|
|
actionutils.ParentAction
|
|
}
|
|
|
|
func (this *UpdateAction) Init() {
|
|
this.Nav("", "", "update")
|
|
}
|
|
|
|
func (this *UpdateAction) RunGet(params struct {
|
|
InstanceId int64
|
|
}) {
|
|
instanceResp, err := this.RPC().MessageMediaInstanceRPC().FindEnabledMessageMediaInstance(this.AdminContext(), &pb.FindEnabledMessageMediaInstanceRequest{MessageMediaInstanceId: params.InstanceId})
|
|
if err != nil {
|
|
this.ErrorPage(err)
|
|
return
|
|
}
|
|
instance := instanceResp.MessageMediaInstance
|
|
if instance == nil || instance.MessageMedia == nil {
|
|
this.NotFound("messageMediaInstance", params.InstanceId)
|
|
return
|
|
}
|
|
|
|
mediaParams := maps.Map{}
|
|
if len(instance.ParamsJSON) > 0 {
|
|
err = json.Unmarshal(instance.ParamsJSON, &mediaParams)
|
|
if err != nil {
|
|
this.ErrorPage(err)
|
|
return
|
|
}
|
|
}
|
|
|
|
var rateConfig = &monitorconfigs.RateConfig{}
|
|
if len(instance.RateJSON) > 0 {
|
|
err = json.Unmarshal(instance.RateJSON, rateConfig)
|
|
if err != nil {
|
|
this.ErrorPage(err)
|
|
return
|
|
}
|
|
}
|
|
|
|
this.Data["instance"] = maps.Map{
|
|
"id": instance.Id,
|
|
"name": instance.Name,
|
|
"isOn": instance.IsOn,
|
|
"media": maps.Map{
|
|
"type": instance.MessageMedia.Type,
|
|
"name": instance.MessageMedia.Name,
|
|
},
|
|
"description": instance.Description,
|
|
"params": mediaParams,
|
|
"rate": rateConfig,
|
|
"hashLife": instance.HashLife,
|
|
}
|
|
|
|
this.Show()
|
|
}
|
|
|
|
func (this *UpdateAction) RunPost(params struct {
|
|
InstanceId int64
|
|
Name string
|
|
MediaType string
|
|
|
|
EmailSmtp string
|
|
EmailUsername string
|
|
EmailPassword string
|
|
EmailFrom string
|
|
|
|
WebHookURL string
|
|
WebHookMethod string
|
|
WebHookHeaderNames []string
|
|
WebHookHeaderValues []string
|
|
WebHookContentType string
|
|
WebHookParamNames []string
|
|
WebHookParamValues []string
|
|
WebHookBody string
|
|
|
|
ScriptType string
|
|
ScriptPath string
|
|
ScriptLang string
|
|
ScriptCode string
|
|
ScriptCwd string
|
|
ScriptEnvNames []string
|
|
ScriptEnvValues []string
|
|
|
|
DingTalkWebHookURL string
|
|
|
|
QyWeixinCorporateId string
|
|
QyWeixinAgentId string
|
|
QyWeixinAppSecret string
|
|
QyWeixinTextFormat string
|
|
|
|
QyWeixinRobotWebHookURL string
|
|
QyWeixinRobotTextFormat string
|
|
|
|
AliyunSmsSign string
|
|
AliyunSmsTemplateCode string
|
|
AliyunSmsTemplateVarNames []string
|
|
AliyunSmsTemplateVarValues []string
|
|
AliyunSmsAccessKeyId string
|
|
AliyunSmsAccessKeySecret string
|
|
|
|
TelegramToken string
|
|
|
|
GroupIds string
|
|
Description string
|
|
IsOn bool
|
|
|
|
RateMinutes int32
|
|
RateCount int32
|
|
|
|
HashLife int32
|
|
|
|
Must *actions.Must
|
|
CSRF *actionutils.CSRF
|
|
}) {
|
|
defer this.CreateLogInfo(codes.MessageMediaInstance_LogUpdateMessageMediaInstance, params.InstanceId)
|
|
|
|
params.Must.
|
|
Field("name", params.Name).
|
|
Require("请输入媒介名称").
|
|
Field("mediaType", params.MediaType).
|
|
Require("请选择媒介类型")
|
|
|
|
options := maps.Map{}
|
|
|
|
switch params.MediaType {
|
|
case "email":
|
|
params.Must.
|
|
Field("emailSmtp", params.EmailSmtp).
|
|
Require("请输入SMTP地址").
|
|
Field("emailUsername", params.EmailUsername).
|
|
Require("请输入邮箱账号").
|
|
Field("emailPassword", params.EmailPassword).
|
|
Require("请输入密码或授权码")
|
|
|
|
options["smtp"] = params.EmailSmtp
|
|
options["username"] = params.EmailUsername
|
|
options["password"] = params.EmailPassword
|
|
options["from"] = params.EmailFrom
|
|
case "webHook":
|
|
params.Must.
|
|
Field("webHookURL", params.WebHookURL).
|
|
Require("请输入URL地址").
|
|
Match("(?i)^(http|https)://", "URL地址必须以http或https开头").
|
|
Field("webHookMethod", params.WebHookMethod).
|
|
Require("请选择请求方法")
|
|
|
|
options["url"] = params.WebHookURL
|
|
options["method"] = params.WebHookMethod
|
|
options["contentType"] = params.WebHookContentType
|
|
|
|
headers := []maps.Map{}
|
|
if len(params.WebHookHeaderNames) > 0 {
|
|
for index, name := range params.WebHookHeaderNames {
|
|
if index < len(params.WebHookHeaderValues) {
|
|
headers = append(headers, maps.Map{
|
|
"name": name,
|
|
"value": params.WebHookHeaderValues[index],
|
|
})
|
|
}
|
|
}
|
|
}
|
|
options["headers"] = headers
|
|
|
|
if params.WebHookContentType == "params" {
|
|
webHookParams := []maps.Map{}
|
|
for index, name := range params.WebHookParamNames {
|
|
if index < len(params.WebHookParamValues) {
|
|
webHookParams = append(webHookParams, maps.Map{
|
|
"name": name,
|
|
"value": params.WebHookParamValues[index],
|
|
})
|
|
}
|
|
}
|
|
options["params"] = webHookParams
|
|
} else if params.WebHookContentType == "body" {
|
|
options["body"] = params.WebHookBody
|
|
}
|
|
case "script":
|
|
if params.ScriptType == "path" {
|
|
params.Must.
|
|
Field("scriptPath", params.ScriptPath).
|
|
Require("请输入脚本路径")
|
|
} else if params.ScriptType == "code" {
|
|
params.Must.
|
|
Field("scriptCode", params.ScriptCode).
|
|
Require("请输入脚本代码")
|
|
} else {
|
|
params.Must.
|
|
Field("scriptPath", params.ScriptPath).
|
|
Require("请输入脚本路径")
|
|
}
|
|
|
|
options["scriptType"] = params.ScriptType
|
|
options["path"] = params.ScriptPath
|
|
options["scriptLang"] = params.ScriptLang
|
|
options["script"] = params.ScriptCode
|
|
options["cwd"] = params.ScriptCwd
|
|
|
|
env := []maps.Map{}
|
|
for index, envName := range params.ScriptEnvNames {
|
|
if index < len(params.ScriptEnvValues) {
|
|
env = append(env, maps.Map{
|
|
"name": envName,
|
|
"value": params.ScriptEnvValues[index],
|
|
})
|
|
}
|
|
}
|
|
options["env"] = env
|
|
case "dingTalk":
|
|
params.Must.
|
|
Field("dingTalkWebHookURL", params.DingTalkWebHookURL).
|
|
Require("请输入Hook地址").
|
|
Match("^https:", "Hook地址必须以https://开头")
|
|
|
|
options["webHookURL"] = params.DingTalkWebHookURL
|
|
case "qyWeixin":
|
|
params.Must.
|
|
Field("qyWeixinCorporateId", params.QyWeixinCorporateId).
|
|
Require("请输入企业ID").
|
|
Field("qyWeixinAgentId", params.QyWeixinAgentId).
|
|
Require("请输入应用AgentId").
|
|
Field("qyWeixinSecret", params.QyWeixinAppSecret).
|
|
Require("请输入应用Secret")
|
|
|
|
options["corporateId"] = params.QyWeixinCorporateId
|
|
options["agentId"] = params.QyWeixinAgentId
|
|
options["appSecret"] = params.QyWeixinAppSecret
|
|
options["textFormat"] = params.QyWeixinTextFormat
|
|
case "qyWeixinRobot":
|
|
params.Must.
|
|
Field("qyWeixinRobotWebHookURL", params.QyWeixinRobotWebHookURL).
|
|
Require("请输入WebHook地址").
|
|
Match("^https:", "WebHook地址必须以https://开头")
|
|
|
|
options["webHookURL"] = params.QyWeixinRobotWebHookURL
|
|
options["textFormat"] = params.QyWeixinRobotTextFormat
|
|
case "aliyunSms":
|
|
params.Must.
|
|
Field("aliyunSmsSign", params.AliyunSmsSign).
|
|
Require("请输入签名名称").
|
|
Field("aliyunSmsTemplateCode", params.AliyunSmsTemplateCode).
|
|
Require("请输入模板CODE").
|
|
Field("aliyunSmsAccessKeyId", params.AliyunSmsAccessKeyId).
|
|
Require("请输入AccessKey ID").
|
|
Field("aliyunSmsAccessKeySecret", params.AliyunSmsAccessKeySecret).
|
|
Require("请输入AccessKey Secret")
|
|
|
|
options["sign"] = params.AliyunSmsSign
|
|
options["templateCode"] = params.AliyunSmsTemplateCode
|
|
options["accessKeyId"] = params.AliyunSmsAccessKeyId
|
|
options["accessKeySecret"] = params.AliyunSmsAccessKeySecret
|
|
|
|
variables := []maps.Map{}
|
|
for index, name := range params.AliyunSmsTemplateVarNames {
|
|
if index < len(params.AliyunSmsTemplateVarValues) {
|
|
variables = append(variables, maps.Map{
|
|
"name": name,
|
|
"value": params.AliyunSmsTemplateVarValues[index],
|
|
})
|
|
}
|
|
}
|
|
options["variables"] = variables
|
|
case "telegram":
|
|
params.Must.
|
|
Field("telegramToken", params.TelegramToken).
|
|
Require("请输入机器人Token")
|
|
options["token"] = params.TelegramToken
|
|
default:
|
|
this.Fail("错误的媒介类型")
|
|
}
|
|
|
|
optionsJSON, err := json.Marshal(options)
|
|
if err != nil {
|
|
this.ErrorPage(err)
|
|
return
|
|
}
|
|
|
|
var rateConfig = &monitorconfigs.RateConfig{
|
|
Minutes: params.RateMinutes,
|
|
Count: params.RateCount,
|
|
}
|
|
rateJSON, err := json.Marshal(rateConfig)
|
|
if err != nil {
|
|
this.ErrorPage(err)
|
|
return
|
|
}
|
|
|
|
_, err = this.RPC().MessageMediaInstanceRPC().UpdateMessageMediaInstance(this.AdminContext(), &pb.UpdateMessageMediaInstanceRequest{
|
|
MessageMediaInstanceId: params.InstanceId,
|
|
Name: params.Name,
|
|
MediaType: params.MediaType,
|
|
ParamsJSON: optionsJSON,
|
|
Description: params.Description,
|
|
RateJSON: rateJSON,
|
|
HashLife: params.HashLife,
|
|
IsOn: params.IsOn,
|
|
})
|
|
if err != nil {
|
|
this.ErrorPage(err)
|
|
return
|
|
}
|
|
|
|
this.Success()
|
|
}
|