You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

127 lines
3.6 KiB
Go

package service
import (
"context"
"fmt"
"github.com/1Panel-dev/1Panel/agent/app/dto/request"
"github.com/1Panel-dev/1Panel/agent/app/repo"
"github.com/1Panel-dev/1Panel/agent/app/task"
"github.com/1Panel-dev/1Panel/agent/constant"
"github.com/1Panel-dev/1Panel/agent/i18n"
"sort"
)
func (w WebsiteService) BatchOpWebsite(req request.BatchWebsiteOp) error {
websites, _ := websiteRepo.List(repo.WithByIDs(req.IDs))
opTask, err := task.NewTaskWithOps(i18n.GetMsgByKey("Status"), task.TaskBatch, task.TaskScopeWebsite, req.TaskID, 0)
if err != nil {
return err
}
sort.SliceStable(websites, func(i, j int) bool {
if websites[i].Type == constant.Subsite && websites[j].Type != constant.Subsite {
return true
}
if websites[i].Type != constant.Subsite && websites[j].Type == constant.Subsite {
return false
}
return false
})
opWebsiteTask := func(t *task.Task) error {
for _, web := range websites {
msg := fmt.Sprintf("%s %s", i18n.GetMsgByKey(req.Operate), web.PrimaryDomain)
switch req.Operate {
case constant.StopWeb, constant.StartWeb:
if err := opWebsite(&web, req.Operate); err != nil {
t.LogFailedWithErr(msg, err)
continue
}
_ = websiteRepo.Save(context.Background(), &web)
case "delete":
if err := w.DeleteWebsite(request.WebsiteDelete{
ID: web.ID,
}); err != nil {
t.LogFailedWithErr(msg, err)
continue
}
}
t.LogSuccess(msg)
}
return nil
}
opTask.AddSubTask("", opWebsiteTask, nil)
go func() {
_ = opTask.Execute()
}()
return nil
}
func (w WebsiteService) BatchSetGroup(req request.BatchWebsiteGroup) error {
websites, _ := websiteRepo.List(repo.WithByIDs(req.IDs))
for _, web := range websites {
web.WebsiteGroupID = req.GroupID
if err := websiteRepo.Save(context.Background(), &web); err != nil {
return err
}
}
return nil
}
func (w WebsiteService) BatchSetHttps(ctx context.Context, req request.BatchWebsiteHttps) error {
websites, _ := websiteRepo.List(repo.WithByIDs(req.IDs))
opTask, err := task.NewTaskWithOps(i18n.GetMsgByKey("SSL"), task.TaskBatch, task.TaskScopeWebsite, req.TaskID, 0)
if err != nil {
return err
}
websiteHttpsOp := request.WebsiteHTTPSOp{
Enable: true,
WebsiteSSLID: req.WebsiteSSLID,
Type: req.Type,
PrivateKey: req.PrivateKey,
Certificate: req.Certificate,
PrivateKeyPath: req.PrivateKeyPath,
CertificatePath: req.CertificatePath,
ImportType: req.ImportType,
HttpConfig: req.HttpConfig,
SSLProtocol: req.SSLProtocol,
Algorithm: req.Algorithm,
Hsts: req.Hsts,
HstsIncludeSubDomains: req.HstsIncludeSubDomains,
HttpsPorts: req.HttpsPorts,
Http3: req.Http3,
}
if req.Type == constant.SSLManual {
websiteSSL, err := getManualWebsiteSSL(websiteHttpsOp)
if err != nil {
return err
}
if err = websiteSSLRepo.Create(ctx, &websiteSSL); err != nil {
return err
}
websiteHttpsOp.Type = constant.SSLExisted
websiteHttpsOp.WebsiteSSLID = websiteSSL.ID
}
opWebsiteTask := func(t *task.Task) error {
for _, web := range websites {
if web.Type == constant.Stream {
continue
}
websiteHttpsOp.WebsiteID = web.ID
msg := fmt.Sprintf("%s [%s] %s", i18n.GetMsgByKey("Set"), web.PrimaryDomain, i18n.GetMsgByKey("SSL"))
if _, err := w.OpWebsiteHTTPS(ctx, websiteHttpsOp); err != nil {
t.LogFailedWithErr(msg, err)
continue
}
t.LogSuccess(msg)
}
return nil
}
opTask.AddSubTask("", opWebsiteTask, nil)
go func() {
_ = opTask.Execute()
}()
return nil
}