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
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
|
|
}
|