diff --git a/plugin/api/email/api.go b/plugin/api/email/api.go index 809de227..db1f8855 100644 --- a/plugin/api/email/api.go +++ b/plugin/api/email/api.go @@ -5,8 +5,13 @@ package email import ( + log "github.com/cihub/seelog" + "infini.sh/console/model" "infini.sh/console/plugin/api/email/common" "infini.sh/framework/core/api" + "infini.sh/framework/core/credential" + "infini.sh/framework/core/orm" + "infini.sh/framework/core/util" ) type EmailAPI struct { @@ -20,6 +25,46 @@ func InitAPI() { api.HandleAPIMethod(api.PUT, "/email/server/:email_server_id", email.updateEmailServer) api.HandleAPIMethod(api.DELETE, "/email/server/:email_server_id", email.deleteEmailServer) api.HandleAPIMethod(api.GET, "/email/server/_search", email.searchEmailServer) + + credential.RegisterChangeEvent(func(cred *credential.Credential) { + query := util.MapStr{ + "size": 1, + "query": util.MapStr{ + "bool": util.MapStr{ + "must": []util.MapStr{ + { + "term": util.MapStr{ + "credential_id": util.MapStr{ + "value": cred.ID, + }, + }, + }, + { + "term": util.MapStr{ + "enabled": util.MapStr{ + "value": true, + }, + }, + }, + }, + }, + }, + } + q := orm.Query{ + RawQuery: util.MustToJSONBytes(query), + } + err, result := orm.Search(model.EmailServer{}, &q) + if err != nil { + log.Error(err) + return + } + if len(result.Result) > 0 { + err = common.RefreshEmailServer() + if err != nil { + log.Error("refresh email server pipeline error: ", err) + } + } + }) } func InitEmailServer() error { diff --git a/plugin/api/email/common/pipeline.go b/plugin/api/email/common/pipeline.go index 1ea0aa08..9a85adf3 100644 --- a/plugin/api/email/common/pipeline.go +++ b/plugin/api/email/common/pipeline.go @@ -14,6 +14,7 @@ import ( "infini.sh/framework/core/util" "os" "path" + "time" ) const emailServerConfigFile = "send_email.yml" @@ -90,6 +91,7 @@ func GeneratePipelineConfig(servers []model.EmailServer) (string, error) { "host": srv.Host, "port": srv.Port, "tls": srv.TLS, + "refresh_timestamp": time.Now().UnixMilli(), }, "auth": util.MapStr{ "username": srv.Auth.Username,