mirror of
https://github.com/1Panel-dev/1Panel.git
synced 2026-10-12 16:00:33 +00:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3d6a97e5a6 | ||
|
|
c2bb422b66 | ||
|
|
cdb0f8e85c | ||
|
|
31576138bf | ||
|
|
bb6d4635a1 | ||
|
|
22a61886c7 | ||
|
|
376ec86c57 | ||
|
|
57120d7fa8 | ||
|
|
8da5891490 | ||
|
|
6f3acd47e2 | ||
|
|
1519615ea3 | ||
|
|
26b47bae69 | ||
|
|
8a6ba5c007 | ||
|
|
73c594081b | ||
|
|
5d0a4c597b | ||
|
|
ab0e777501 | ||
|
|
ca38780da8 | ||
|
|
68347d79d6 | ||
|
|
e615f3d0fb | ||
|
|
21cdd05d24 | ||
|
|
2ad30db698 | ||
|
|
2076a8a8f3 | ||
|
|
3027ae4a50 | ||
|
|
facea38ab7 | ||
|
|
0243a4c255 | ||
|
|
1486bf3f69 | ||
|
|
ac2c20bd81 | ||
|
|
fcce6fec44 | ||
|
|
a6ab6d6aba | ||
|
|
cad50320eb | ||
|
|
0a6a1f11c7 | ||
|
|
fcb8a9c860 |
@@ -2,6 +2,7 @@ package v1
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
|
|
||||||
"github.com/1Panel-dev/1Panel/backend/app/dto"
|
"github.com/1Panel-dev/1Panel/backend/app/dto"
|
||||||
|
|
||||||
"github.com/1Panel-dev/1Panel/backend/app/api/v1/helper"
|
"github.com/1Panel-dev/1Panel/backend/app/api/v1/helper"
|
||||||
@@ -56,7 +57,7 @@ func (b *BaseApi) LoadDashboardBaseInfo(c *gin.Context) {
|
|||||||
// @Tags Dashboard
|
// @Tags Dashboard
|
||||||
// @Summary Load dashboard current info
|
// @Summary Load dashboard current info
|
||||||
// @Description 获取首页实时数据
|
// @Description 获取首页实时数据
|
||||||
// @Accept json、
|
// @Accept json
|
||||||
// @Param request body dto.DashboardReq true "request"
|
// @Param request body dto.DashboardReq true "request"
|
||||||
// @Success 200 {object} dto.DashboardCurrent
|
// @Success 200 {object} dto.DashboardCurrent
|
||||||
// @Security ApiKeyAuth
|
// @Security ApiKeyAuth
|
||||||
|
|||||||
@@ -62,7 +62,7 @@ func (b *BaseApi) CreateRuntime(c *gin.Context) {
|
|||||||
// @Success 200
|
// @Success 200
|
||||||
// @Security ApiKeyAuth
|
// @Security ApiKeyAuth
|
||||||
// @Router /runtimes/del [post]
|
// @Router /runtimes/del [post]
|
||||||
// @x-panel-log {"bodyKeys":["id"],"paramKeys":[],"BeforeFunctions":[],"formatZH":"删除网站 [name]","formatEN":"Delete website [name]"}
|
// @x-panel-log {"bodyKeys":["id"],"paramKeys":[],"BeforeFunctions":[],"formatZH":"删除运行环境 [name]","formatEN":"Delete runtime [name]"}
|
||||||
func (b *BaseApi) DeleteRuntime(c *gin.Context) {
|
func (b *BaseApi) DeleteRuntime(c *gin.Context) {
|
||||||
var req request.RuntimeDelete
|
var req request.RuntimeDelete
|
||||||
if err := helper.CheckBindAndValidate(&req, c); err != nil {
|
if err := helper.CheckBindAndValidate(&req, c); err != nil {
|
||||||
|
|||||||
@@ -1,20 +0,0 @@
|
|||||||
package dto
|
|
||||||
|
|
||||||
type CreateOrUpdateAlert struct {
|
|
||||||
AlertTitle string `json:"alertTitle"`
|
|
||||||
AlertType string `json:"alertType"`
|
|
||||||
AlertCount uint `json:"alertCount"`
|
|
||||||
EntryID uint `json:"entryID"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type AlertBase struct {
|
|
||||||
AlertType string `json:"alertType"`
|
|
||||||
EntryID uint `json:"entryID"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type PushAlert struct {
|
|
||||||
TaskName string `json:"taskName"`
|
|
||||||
AlertType string `json:"alertType"`
|
|
||||||
EntryID uint `json:"entryID"`
|
|
||||||
Param string `json:"param"`
|
|
||||||
}
|
|
||||||
@@ -33,7 +33,6 @@ type ClamInfo struct {
|
|||||||
LastHandleDate string `json:"lastHandleDate"`
|
LastHandleDate string `json:"lastHandleDate"`
|
||||||
Spec string `json:"spec"`
|
Spec string `json:"spec"`
|
||||||
Description string `json:"description"`
|
Description string `json:"description"`
|
||||||
AlertCount uint `json:"alertCount"`
|
|
||||||
}
|
}
|
||||||
|
|
||||||
type ClamLogSearch struct {
|
type ClamLogSearch struct {
|
||||||
@@ -72,8 +71,6 @@ type ClamCreate struct {
|
|||||||
InfectedDir string `json:"infectedDir"`
|
InfectedDir string `json:"infectedDir"`
|
||||||
Spec string `json:"spec"`
|
Spec string `json:"spec"`
|
||||||
Description string `json:"description"`
|
Description string `json:"description"`
|
||||||
AlertCount uint `json:"alertCount"`
|
|
||||||
AlertTitle string `json:"alertTitle"`
|
|
||||||
}
|
}
|
||||||
|
|
||||||
type ClamUpdate struct {
|
type ClamUpdate struct {
|
||||||
|
|||||||
@@ -218,7 +218,7 @@ type ComposeCreate struct {
|
|||||||
}
|
}
|
||||||
type ComposeOperation struct {
|
type ComposeOperation struct {
|
||||||
Name string `json:"name" validate:"required"`
|
Name string `json:"name" validate:"required"`
|
||||||
Path string `json:"path" validate:"required"`
|
Path string `json:"path"`
|
||||||
Operation string `json:"operation" validate:"required,oneof=up start stop down delete"`
|
Operation string `json:"operation" validate:"required,oneof=up start stop down delete"`
|
||||||
WithFile bool `json:"withFile"`
|
WithFile bool `json:"withFile"`
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -31,13 +31,10 @@ type CronjobCreate struct {
|
|||||||
DefaultDownload string `json:"defaultDownload"`
|
DefaultDownload string `json:"defaultDownload"`
|
||||||
RetainCopies int `json:"retainCopies" validate:"number,min=1"`
|
RetainCopies int `json:"retainCopies" validate:"number,min=1"`
|
||||||
Secret string `json:"secret"`
|
Secret string `json:"secret"`
|
||||||
AlertCount uint `json:"alertCount"`
|
|
||||||
AlertTitle string `json:"alertTitle"`
|
|
||||||
}
|
}
|
||||||
|
|
||||||
type CronjobUpdate struct {
|
type CronjobUpdate struct {
|
||||||
ID uint `json:"id" validate:"required"`
|
ID uint `json:"id" validate:"required"`
|
||||||
Type string `json:"type" validate:"required"`
|
|
||||||
Name string `json:"name" validate:"required"`
|
Name string `json:"name" validate:"required"`
|
||||||
Spec string `json:"spec" validate:"required"`
|
Spec string `json:"spec" validate:"required"`
|
||||||
|
|
||||||
@@ -56,8 +53,6 @@ type CronjobUpdate struct {
|
|||||||
DefaultDownload string `json:"defaultDownload"`
|
DefaultDownload string `json:"defaultDownload"`
|
||||||
RetainCopies int `json:"retainCopies" validate:"number,min=1"`
|
RetainCopies int `json:"retainCopies" validate:"number,min=1"`
|
||||||
Secret string `json:"secret"`
|
Secret string `json:"secret"`
|
||||||
AlertCount uint `json:"alertCount"`
|
|
||||||
AlertTitle string `json:"alertTitle"`
|
|
||||||
}
|
}
|
||||||
|
|
||||||
type CronjobUpdateStatus struct {
|
type CronjobUpdateStatus struct {
|
||||||
@@ -104,7 +99,6 @@ type CronjobInfo struct {
|
|||||||
LastRecordTime string `json:"lastRecordTime"`
|
LastRecordTime string `json:"lastRecordTime"`
|
||||||
Status string `json:"status"`
|
Status string `json:"status"`
|
||||||
Secret string `json:"secret"`
|
Secret string `json:"secret"`
|
||||||
AlertCount uint `json:"alertCount"`
|
|
||||||
}
|
}
|
||||||
|
|
||||||
type SearchRecord struct {
|
type SearchRecord struct {
|
||||||
|
|||||||
@@ -41,6 +41,7 @@ type WebsiteSSLApply struct {
|
|||||||
ID uint `json:"ID" validate:"required"`
|
ID uint `json:"ID" validate:"required"`
|
||||||
SkipDNSCheck bool `json:"skipDNSCheck"`
|
SkipDNSCheck bool `json:"skipDNSCheck"`
|
||||||
Nameservers []string `json:"nameservers"`
|
Nameservers []string `json:"nameservers"`
|
||||||
|
DisableLog bool `json:"disableLog"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type WebsiteAcmeAccountCreate struct {
|
type WebsiteAcmeAccountCreate struct {
|
||||||
|
|||||||
@@ -30,6 +30,7 @@ type SettingInfo struct {
|
|||||||
ServerPort string `json:"serverPort"`
|
ServerPort string `json:"serverPort"`
|
||||||
SSL string `json:"ssl"`
|
SSL string `json:"ssl"`
|
||||||
SSLType string `json:"sslType"`
|
SSLType string `json:"sslType"`
|
||||||
|
AutoRestart string `json:"autoRestart"`
|
||||||
BindDomain string `json:"bindDomain"`
|
BindDomain string `json:"bindDomain"`
|
||||||
AllowIPs string `json:"allowIPs"`
|
AllowIPs string `json:"allowIPs"`
|
||||||
SecurityEntrance string `json:"securityEntrance"`
|
SecurityEntrance string `json:"securityEntrance"`
|
||||||
@@ -79,6 +80,7 @@ type SSLUpdate struct {
|
|||||||
Cert string `json:"cert"`
|
Cert string `json:"cert"`
|
||||||
Key string `json:"key"`
|
Key string `json:"key"`
|
||||||
SSLID uint `json:"sslID"`
|
SSLID uint `json:"sslID"`
|
||||||
|
AutoRestart string `json:"autoRestart"`
|
||||||
}
|
}
|
||||||
type SSLInfo struct {
|
type SSLInfo struct {
|
||||||
Domain string `json:"domain"`
|
Domain string `json:"domain"`
|
||||||
@@ -147,7 +149,7 @@ type SnapshotInfo struct {
|
|||||||
DefaultDownload string `json:"defaultDownload"`
|
DefaultDownload string `json:"defaultDownload"`
|
||||||
Status string `json:"status"`
|
Status string `json:"status"`
|
||||||
Message string `json:"message"`
|
Message string `json:"message"`
|
||||||
CreatedAt time.Time `json:"createdAt"`
|
CreatedAt time.Time `json:"created_at"`
|
||||||
Version string `json:"version"`
|
Version string `json:"version"`
|
||||||
|
|
||||||
InterruptStep string `json:"interruptStep"`
|
InterruptStep string `json:"interruptStep"`
|
||||||
|
|||||||
@@ -1342,6 +1342,18 @@ func handleInstalled(appInstallList []model.AppInstall, updated bool, sync bool)
|
|||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
lastVersion := versions[0]
|
lastVersion := versions[0]
|
||||||
|
if app.Key == constant.AppMysql {
|
||||||
|
for _, version := range versions {
|
||||||
|
majorVersion := getMajorVersion(installed.Version)
|
||||||
|
if !strings.HasPrefix(version, majorVersion) {
|
||||||
|
continue
|
||||||
|
} else {
|
||||||
|
lastVersion = version
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if common.IsCrossVersion(installed.Version, lastVersion) {
|
if common.IsCrossVersion(installed.Version, lastVersion) {
|
||||||
installDTO.CanUpdate = app.CrossVersionUpdate
|
installDTO.CanUpdate = app.CrossVersionUpdate
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -8,7 +8,6 @@ import (
|
|||||||
"path"
|
"path"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"sort"
|
"sort"
|
||||||
"strconv"
|
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
@@ -21,7 +20,6 @@ import (
|
|||||||
"github.com/1Panel-dev/1Panel/backend/utils/common"
|
"github.com/1Panel-dev/1Panel/backend/utils/common"
|
||||||
"github.com/1Panel-dev/1Panel/backend/utils/systemctl"
|
"github.com/1Panel-dev/1Panel/backend/utils/systemctl"
|
||||||
"github.com/1Panel-dev/1Panel/backend/utils/xpack"
|
"github.com/1Panel-dev/1Panel/backend/utils/xpack"
|
||||||
"github.com/1Panel-dev/1Panel/backend/xpack/utils/alert"
|
|
||||||
"github.com/jinzhu/copier"
|
"github.com/jinzhu/copier"
|
||||||
"github.com/robfig/cron/v3"
|
"github.com/robfig/cron/v3"
|
||||||
|
|
||||||
@@ -156,16 +154,6 @@ func (c *ClamService) SearchWithPage(req dto.SearchClamWithPage) (int64, interfa
|
|||||||
}
|
}
|
||||||
datas[i].LastHandleDate = t1.Format(constant.DateTimeLayout)
|
datas[i].LastHandleDate = t1.Format(constant.DateTimeLayout)
|
||||||
}
|
}
|
||||||
alertBase := dto.AlertBase{
|
|
||||||
AlertType: "clams",
|
|
||||||
EntryID: datas[i].ID,
|
|
||||||
}
|
|
||||||
alertCount := xpack.GetAlert(alertBase)
|
|
||||||
if alertCount != 0 {
|
|
||||||
datas[i].AlertCount = alertCount
|
|
||||||
} else {
|
|
||||||
datas[i].AlertCount = 0
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return total, datas, err
|
return total, datas, err
|
||||||
}
|
}
|
||||||
@@ -192,19 +180,6 @@ func (c *ClamService) Create(req dto.ClamCreate) error {
|
|||||||
if err := clamRepo.Create(&clam); err != nil {
|
if err := clamRepo.Create(&clam); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if req.AlertCount != 0 {
|
|
||||||
createAlert := dto.CreateOrUpdateAlert{
|
|
||||||
AlertTitle: req.AlertTitle,
|
|
||||||
AlertCount: req.AlertCount,
|
|
||||||
AlertType: "clams",
|
|
||||||
EntryID: clam.ID,
|
|
||||||
}
|
|
||||||
err := xpack.CreateAlert(createAlert)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -250,16 +225,6 @@ func (c *ClamService) Update(req dto.ClamUpdate) error {
|
|||||||
if err := clamRepo.Update(req.ID, upMap); err != nil {
|
if err := clamRepo.Update(req.ID, upMap); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
updateAlert := dto.CreateOrUpdateAlert{
|
|
||||||
AlertTitle: req.AlertTitle,
|
|
||||||
AlertType: "clams",
|
|
||||||
AlertCount: req.AlertCount,
|
|
||||||
EntryID: clam.ID,
|
|
||||||
}
|
|
||||||
err := xpack.UpdateAlert(updateAlert)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -300,14 +265,6 @@ func (c *ClamService) Delete(req dto.ClamDelete) error {
|
|||||||
if err := clamRepo.Delete(commonRepo.WithByID(id)); err != nil {
|
if err := clamRepo.Delete(commonRepo.WithByID(id)); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
alertBase := dto.AlertBase{
|
|
||||||
AlertType: "clams",
|
|
||||||
EntryID: clam.ID,
|
|
||||||
}
|
|
||||||
err := xpack.DeleteAlert(alertBase)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
@@ -348,7 +305,6 @@ func (c *ClamService) HandleOnce(req dto.OperateByID) error {
|
|||||||
}
|
}
|
||||||
global.LOG.Debugf("clamdscan --fdpass %s %s -l %s", strategy, clam.Path, logFile)
|
global.LOG.Debugf("clamdscan --fdpass %s %s -l %s", strategy, clam.Path, logFile)
|
||||||
stdout, err := cmd.Execf("clamdscan --fdpass %s %s -l %s", strategy, clam.Path, logFile)
|
stdout, err := cmd.Execf("clamdscan --fdpass %s %s -l %s", strategy, clam.Path, logFile)
|
||||||
handleAlert(stdout, clam.Name, clam.ID)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
global.LOG.Errorf("clamdscan failed, stdout: %v, err: %v", stdout, err)
|
global.LOG.Errorf("clamdscan failed, stdout: %v, err: %v", stdout, err)
|
||||||
}
|
}
|
||||||
@@ -629,28 +585,3 @@ func (c *ClamService) loadLogPath(name string) string {
|
|||||||
|
|
||||||
return ""
|
return ""
|
||||||
}
|
}
|
||||||
|
|
||||||
func handleAlert(stdout, clamName string, clamId uint) {
|
|
||||||
if strings.Contains(stdout, "- SCAN SUMMARY -") {
|
|
||||||
lines := strings.Split(stdout, "\n")
|
|
||||||
for _, line := range lines {
|
|
||||||
if strings.HasPrefix(line, "Infected files:") {
|
|
||||||
var infectedFiles = 0
|
|
||||||
infectedFiles, _ = strconv.Atoi(strings.TrimPrefix(line, "Infected files:"))
|
|
||||||
if infectedFiles > 0 {
|
|
||||||
pushAlert := dto.PushAlert{
|
|
||||||
TaskName: clamName,
|
|
||||||
AlertType: "clams",
|
|
||||||
EntryID: clamId,
|
|
||||||
Param: strconv.Itoa(infectedFiles),
|
|
||||||
}
|
|
||||||
err := alert.PushAlert(pushAlert)
|
|
||||||
if err != nil {
|
|
||||||
global.LOG.Errorf("clamdscan push failed, err: %v", err)
|
|
||||||
}
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -252,6 +252,10 @@ func (u *ContainerService) CreateCompose(req dto.ComposeCreate) (string, error)
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (u *ContainerService) ComposeOperation(req dto.ComposeOperation) error {
|
func (u *ContainerService) ComposeOperation(req dto.ComposeOperation) error {
|
||||||
|
if len(req.Path) == 0 && req.Operation == "delete" {
|
||||||
|
_ = composeRepo.DeleteRecord(commonRepo.WithByName(req.Name))
|
||||||
|
return nil
|
||||||
|
}
|
||||||
if cmd.CheckIllegal(req.Path, req.Operation) {
|
if cmd.CheckIllegal(req.Path, req.Operation) {
|
||||||
return buserr.New(constant.ErrCmdIllegal)
|
return buserr.New(constant.ErrCmdIllegal)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,7 +13,6 @@ import (
|
|||||||
"github.com/1Panel-dev/1Panel/backend/app/model"
|
"github.com/1Panel-dev/1Panel/backend/app/model"
|
||||||
"github.com/1Panel-dev/1Panel/backend/constant"
|
"github.com/1Panel-dev/1Panel/backend/constant"
|
||||||
"github.com/1Panel-dev/1Panel/backend/global"
|
"github.com/1Panel-dev/1Panel/backend/global"
|
||||||
"github.com/1Panel-dev/1Panel/backend/utils/xpack"
|
|
||||||
"github.com/jinzhu/copier"
|
"github.com/jinzhu/copier"
|
||||||
"github.com/pkg/errors"
|
"github.com/pkg/errors"
|
||||||
"github.com/robfig/cron/v3"
|
"github.com/robfig/cron/v3"
|
||||||
@@ -54,16 +53,6 @@ func (u *CronjobService) SearchWithPage(search dto.PageCronjob) (int64, interfac
|
|||||||
} else {
|
} else {
|
||||||
item.LastRecordTime = "-"
|
item.LastRecordTime = "-"
|
||||||
}
|
}
|
||||||
alertBase := dto.AlertBase{
|
|
||||||
AlertType: cronjob.Type,
|
|
||||||
EntryID: cronjob.ID,
|
|
||||||
}
|
|
||||||
alertCount := xpack.GetAlert(alertBase)
|
|
||||||
if alertCount != 0 {
|
|
||||||
item.AlertCount = alertCount
|
|
||||||
} else {
|
|
||||||
item.AlertCount = 0
|
|
||||||
}
|
|
||||||
dtoCronjobs = append(dtoCronjobs, item)
|
dtoCronjobs = append(dtoCronjobs, item)
|
||||||
}
|
}
|
||||||
return total, dtoCronjobs, err
|
return total, dtoCronjobs, err
|
||||||
@@ -201,18 +190,6 @@ func (u *CronjobService) Create(cronjobDto dto.CronjobCreate) error {
|
|||||||
if err := cronjobRepo.Create(&cronjob); err != nil {
|
if err := cronjobRepo.Create(&cronjob); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if cronjobDto.AlertCount != 0 {
|
|
||||||
createAlert := dto.CreateOrUpdateAlert{
|
|
||||||
AlertTitle: cronjobDto.AlertTitle,
|
|
||||||
AlertCount: cronjobDto.AlertCount,
|
|
||||||
AlertType: cronjob.Type,
|
|
||||||
EntryID: cronjob.ID,
|
|
||||||
}
|
|
||||||
err := xpack.CreateAlert(createAlert)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -255,14 +232,6 @@ func (u *CronjobService) Delete(req dto.CronjobBatchDelete) error {
|
|||||||
if err := cronjobRepo.Delete(commonRepo.WithByID(id)); err != nil {
|
if err := cronjobRepo.Delete(commonRepo.WithByID(id)); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
alertBase := dto.AlertBase{
|
|
||||||
AlertType: cronjob.Type,
|
|
||||||
EntryID: cronjob.ID,
|
|
||||||
}
|
|
||||||
err := xpack.DeleteAlert(alertBase)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
@@ -312,21 +281,7 @@ func (u *CronjobService) Update(id uint, req dto.CronjobUpdate) error {
|
|||||||
upMap["default_download"] = req.DefaultDownload
|
upMap["default_download"] = req.DefaultDownload
|
||||||
upMap["retain_copies"] = req.RetainCopies
|
upMap["retain_copies"] = req.RetainCopies
|
||||||
upMap["secret"] = req.Secret
|
upMap["secret"] = req.Secret
|
||||||
err = cronjobRepo.Update(id, upMap)
|
return cronjobRepo.Update(id, upMap)
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
updateAlert := dto.CreateOrUpdateAlert{
|
|
||||||
AlertTitle: req.AlertTitle,
|
|
||||||
AlertType: cronModel.Type,
|
|
||||||
AlertCount: req.AlertCount,
|
|
||||||
EntryID: cronModel.ID,
|
|
||||||
}
|
|
||||||
err = xpack.UpdateAlert(updateAlert)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (u *CronjobService) UpdateStatus(id uint, status string) error {
|
func (u *CronjobService) UpdateStatus(id uint, status string) error {
|
||||||
@@ -338,7 +293,6 @@ func (u *CronjobService) UpdateStatus(id uint, status string) error {
|
|||||||
entryIDs string
|
entryIDs string
|
||||||
err error
|
err error
|
||||||
)
|
)
|
||||||
|
|
||||||
if status == constant.StatusEnable {
|
if status == constant.StatusEnable {
|
||||||
entryIDs, err = u.StartJob(&cronjob, false)
|
entryIDs, err = u.StartJob(&cronjob, false)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package service
|
package service
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"os"
|
"os"
|
||||||
"path"
|
"path"
|
||||||
@@ -30,6 +31,9 @@ func (u *CronjobService) handleApp(cronjob model.Cronjob, startTime time.Time) e
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
if len(appItems) == 0 {
|
||||||
|
return errors.New("no such app in database!")
|
||||||
|
}
|
||||||
apps = appItems
|
apps = appItems
|
||||||
}
|
}
|
||||||
accountMap, err := loadClientMap(cronjob.BackupAccounts)
|
accountMap, err := loadClientMap(cronjob.BackupAccounts)
|
||||||
@@ -65,6 +69,9 @@ func (u *CronjobService) handleApp(cronjob model.Cronjob, startTime time.Time) e
|
|||||||
|
|
||||||
func (u *CronjobService) handleWebsite(cronjob model.Cronjob, startTime time.Time) error {
|
func (u *CronjobService) handleWebsite(cronjob model.Cronjob, startTime time.Time) error {
|
||||||
webs := loadWebsForJob(cronjob)
|
webs := loadWebsForJob(cronjob)
|
||||||
|
if len(webs) == 0 {
|
||||||
|
return errors.New("no such website in database!")
|
||||||
|
}
|
||||||
accountMap, err := loadClientMap(cronjob.BackupAccounts)
|
accountMap, err := loadClientMap(cronjob.BackupAccounts)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
@@ -98,6 +105,9 @@ func (u *CronjobService) handleWebsite(cronjob model.Cronjob, startTime time.Tim
|
|||||||
|
|
||||||
func (u *CronjobService) handleDatabase(cronjob model.Cronjob, startTime time.Time) error {
|
func (u *CronjobService) handleDatabase(cronjob model.Cronjob, startTime time.Time) error {
|
||||||
dbs := loadDbsForJob(cronjob)
|
dbs := loadDbsForJob(cronjob)
|
||||||
|
if len(dbs) == 0 {
|
||||||
|
return errors.New("no such db in database!")
|
||||||
|
}
|
||||||
accountMap, err := loadClientMap(cronjob.BackupAccounts)
|
accountMap, err := loadClientMap(cronjob.BackupAccounts)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
|||||||
@@ -12,7 +12,6 @@ import (
|
|||||||
"github.com/1Panel-dev/1Panel/backend/buserr"
|
"github.com/1Panel-dev/1Panel/backend/buserr"
|
||||||
"github.com/1Panel-dev/1Panel/backend/i18n"
|
"github.com/1Panel-dev/1Panel/backend/i18n"
|
||||||
|
|
||||||
"github.com/1Panel-dev/1Panel/backend/app/dto"
|
|
||||||
"github.com/1Panel-dev/1Panel/backend/app/model"
|
"github.com/1Panel-dev/1Panel/backend/app/model"
|
||||||
"github.com/1Panel-dev/1Panel/backend/app/repo"
|
"github.com/1Panel-dev/1Panel/backend/app/repo"
|
||||||
"github.com/1Panel-dev/1Panel/backend/constant"
|
"github.com/1Panel-dev/1Panel/backend/constant"
|
||||||
@@ -21,12 +20,9 @@ import (
|
|||||||
"github.com/1Panel-dev/1Panel/backend/utils/cmd"
|
"github.com/1Panel-dev/1Panel/backend/utils/cmd"
|
||||||
"github.com/1Panel-dev/1Panel/backend/utils/files"
|
"github.com/1Panel-dev/1Panel/backend/utils/files"
|
||||||
"github.com/1Panel-dev/1Panel/backend/utils/ntp"
|
"github.com/1Panel-dev/1Panel/backend/utils/ntp"
|
||||||
"github.com/1Panel-dev/1Panel/backend/utils/xpack"
|
|
||||||
"github.com/pkg/errors"
|
"github.com/pkg/errors"
|
||||||
)
|
)
|
||||||
|
|
||||||
var alertTypes = map[string]bool{"app": true, "website": true, "database": true, "directory": true, "log": true, "snapshot": true}
|
|
||||||
|
|
||||||
func (u *CronjobService) HandleJob(cronjob *model.Cronjob) {
|
func (u *CronjobService) HandleJob(cronjob *model.Cronjob) {
|
||||||
var (
|
var (
|
||||||
message []byte
|
message []byte
|
||||||
@@ -94,7 +90,6 @@ func (u *CronjobService) HandleJob(cronjob *model.Cronjob) {
|
|||||||
record.Records, _ = mkdirAndWriteFile(cronjob, record.StartTime, message)
|
record.Records, _ = mkdirAndWriteFile(cronjob, record.StartTime, message)
|
||||||
}
|
}
|
||||||
cronjobRepo.EndRecords(record, constant.StatusFailed, err.Error(), record.Records)
|
cronjobRepo.EndRecords(record, constant.StatusFailed, err.Error(), record.Records)
|
||||||
handleCronJobAlert(cronjob)
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if len(message) != 0 {
|
if len(message) != 0 {
|
||||||
@@ -396,19 +391,3 @@ func (u *CronjobService) generateLogsPath(cronjob model.Cronjob, startTime time.
|
|||||||
func hasBackup(cronjobType string) bool {
|
func hasBackup(cronjobType string) bool {
|
||||||
return cronjobType == "app" || cronjobType == "database" || cronjobType == "website" || cronjobType == "directory" || cronjobType == "snapshot" || cronjobType == "log"
|
return cronjobType == "app" || cronjobType == "database" || cronjobType == "website" || cronjobType == "directory" || cronjobType == "snapshot" || cronjobType == "log"
|
||||||
}
|
}
|
||||||
|
|
||||||
func handleCronJobAlert(cronjob *model.Cronjob) {
|
|
||||||
if alertTypes[cronjob.Type] {
|
|
||||||
pushAlert := dto.PushAlert{
|
|
||||||
TaskName: cronjob.Name,
|
|
||||||
AlertType: cronjob.Type,
|
|
||||||
EntryID: cronjob.ID,
|
|
||||||
Param: cronjob.Type,
|
|
||||||
}
|
|
||||||
err := xpack.PushAlert(pushAlert)
|
|
||||||
if err != nil {
|
|
||||||
global.LOG.Errorf("cronjob alert push failed, err: %v", err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -201,9 +201,8 @@ func (u *DockerService) UpdateConf(req dto.SettingUpdate) error {
|
|||||||
}
|
}
|
||||||
if len(daemonMap) == 0 {
|
if len(daemonMap) == 0 {
|
||||||
_ = os.Remove(constant.DaemonJsonPath)
|
_ = os.Remove(constant.DaemonJsonPath)
|
||||||
stdout, err := cmd.Exec("systemctl restart docker")
|
if err := restartDocker(); err != nil {
|
||||||
if err != nil {
|
return err
|
||||||
return errors.New(string(stdout))
|
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
@@ -218,9 +217,8 @@ func (u *DockerService) UpdateConf(req dto.SettingUpdate) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
stdout, err := cmd.Exec("systemctl restart docker")
|
if err := restartDocker(); err != nil {
|
||||||
if err != nil {
|
return err
|
||||||
return errors.New(string(stdout))
|
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
@@ -268,9 +266,8 @@ func (u *DockerService) UpdateLogOption(req dto.LogOption) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
stdout, err := cmd.Exec("systemctl restart docker")
|
if err := restartDocker(); err != nil {
|
||||||
if err != nil {
|
return err
|
||||||
return errors.New(string(stdout))
|
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
@@ -312,9 +309,8 @@ func (u *DockerService) UpdateIpv6Option(req dto.Ipv6Option) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
stdout, err := cmd.Exec("systemctl restart docker")
|
if err := restartDocker(); err != nil {
|
||||||
if err != nil {
|
return err
|
||||||
return errors.New(string(stdout))
|
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
@@ -322,9 +318,8 @@ func (u *DockerService) UpdateIpv6Option(req dto.Ipv6Option) error {
|
|||||||
func (u *DockerService) UpdateConfByFile(req dto.DaemonJsonUpdateByFile) error {
|
func (u *DockerService) UpdateConfByFile(req dto.DaemonJsonUpdateByFile) error {
|
||||||
if len(req.File) == 0 {
|
if len(req.File) == 0 {
|
||||||
_ = os.Remove(constant.DaemonJsonPath)
|
_ = os.Remove(constant.DaemonJsonPath)
|
||||||
stdout, err := cmd.Exec("systemctl restart docker")
|
if err := restartDocker(); err != nil {
|
||||||
if err != nil {
|
return err
|
||||||
return errors.New(string(stdout))
|
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
@@ -345,9 +340,8 @@ func (u *DockerService) UpdateConfByFile(req dto.DaemonJsonUpdateByFile) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
stdout, err := cmd.Exec("systemctl restart docker")
|
if err := restartDocker(); err != nil {
|
||||||
if err != nil {
|
return err
|
||||||
return errors.New(string(stdout))
|
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
@@ -355,6 +349,10 @@ func (u *DockerService) UpdateConfByFile(req dto.DaemonJsonUpdateByFile) error {
|
|||||||
func (u *DockerService) OperateDocker(req dto.DockerOperation) error {
|
func (u *DockerService) OperateDocker(req dto.DockerOperation) error {
|
||||||
service := "docker"
|
service := "docker"
|
||||||
sudo := cmd.SudoHandleCmd()
|
sudo := cmd.SudoHandleCmd()
|
||||||
|
dockerCmd, err := getDockerRestartCommand()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
if req.Operation == "stop" {
|
if req.Operation == "stop" {
|
||||||
isSocketActive, _ := systemctl.IsActive("docker.socket")
|
isSocketActive, _ := systemctl.IsActive("docker.socket")
|
||||||
if isSocketActive {
|
if isSocketActive {
|
||||||
@@ -371,9 +369,9 @@ func (u *DockerService) OperateDocker(req dto.DockerOperation) error {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
stdout, err := cmd.Execf("systemctl %s %s ", req.Operation, service)
|
stdout, err := cmd.Execf("%s %s %s", dockerCmd, req.Operation, service)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errors.New(string(stdout))
|
return errors.New(stdout)
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
@@ -428,9 +426,39 @@ func changeLogOption(daemonMap map[string]interface{}, logMaxFile, logMaxSize st
|
|||||||
}
|
}
|
||||||
|
|
||||||
func validateDockerConfig() error {
|
func validateDockerConfig() error {
|
||||||
|
if !cmd.Which("dockerd") {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
stdout, err := cmd.Exec("dockerd --validate")
|
stdout, err := cmd.Exec("dockerd --validate")
|
||||||
|
if strings.Contains(stdout, "unknown flag: --validate") {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
if err != nil || (stdout != "" && strings.TrimSpace(stdout) != "configuration OK") {
|
if err != nil || (stdout != "" && strings.TrimSpace(stdout) != "configuration OK") {
|
||||||
return fmt.Errorf("Docker configuration validation failed, err: %v", stdout)
|
return fmt.Errorf("Docker configuration validation failed, err: %v", stdout)
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func getDockerRestartCommand() (string, error) {
|
||||||
|
stdout, err := cmd.Exec("which docker")
|
||||||
|
if err != nil {
|
||||||
|
return "", fmt.Errorf("failed to find docker: %v", err)
|
||||||
|
}
|
||||||
|
dockerPath := stdout
|
||||||
|
if strings.Contains(dockerPath, "snap") {
|
||||||
|
return "snap", nil
|
||||||
|
}
|
||||||
|
return "systemctl", nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func restartDocker() error {
|
||||||
|
restartCmd, err := getDockerRestartCommand()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
stdout, err := cmd.Execf("%s restart docker", restartCmd)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("failed to restart Docker: %s", stdout)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|||||||
@@ -179,6 +179,7 @@ func (u *FirewallService) OperateFirewall(operation string) error {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
needRestartDocker := false
|
||||||
switch operation {
|
switch operation {
|
||||||
case "start":
|
case "start":
|
||||||
if err := client.Start(); err != nil {
|
if err := client.Start(); err != nil {
|
||||||
@@ -188,26 +189,30 @@ func (u *FirewallService) OperateFirewall(operation string) error {
|
|||||||
_ = client.Stop()
|
_ = client.Stop()
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
_, _ = cmd.Exec("systemctl restart docker")
|
needRestartDocker = true
|
||||||
return nil
|
|
||||||
case "stop":
|
case "stop":
|
||||||
if err := client.Stop(); err != nil {
|
if err := client.Stop(); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
_, _ = cmd.Exec("systemctl restart docker")
|
needRestartDocker = true
|
||||||
return nil
|
|
||||||
case "restart":
|
case "restart":
|
||||||
if err := client.Restart(); err != nil {
|
if err := client.Restart(); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
_, _ = cmd.Exec("systemctl restart docker")
|
needRestartDocker = true
|
||||||
return nil
|
|
||||||
case "disablePing":
|
case "disablePing":
|
||||||
return u.updatePingStatus("0")
|
return u.updatePingStatus("0")
|
||||||
case "enablePing":
|
case "enablePing":
|
||||||
return u.updatePingStatus("1")
|
return u.updatePingStatus("1")
|
||||||
|
default:
|
||||||
|
return fmt.Errorf("not supported operation: %s", operation)
|
||||||
}
|
}
|
||||||
return fmt.Errorf("not support such operation: %s", operation)
|
if needRestartDocker {
|
||||||
|
if err := restartDocker(); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (u *FirewallService) OperatePortRule(req dto.PortRuleOperate, reload bool) error {
|
func (u *FirewallService) OperatePortRule(req dto.PortRuleOperate, reload bool) error {
|
||||||
|
|||||||
@@ -84,15 +84,16 @@ func (u *ImageRepoService) Create(req dto.ImageRepoCreate) error {
|
|||||||
if imageRepo.ID != 0 {
|
if imageRepo.ID != 0 {
|
||||||
return constant.ErrRecordExist
|
return constant.ErrRecordExist
|
||||||
}
|
}
|
||||||
|
|
||||||
if req.Protocol == "http" {
|
if req.Protocol == "http" {
|
||||||
_ = u.handleRegistries(req.DownloadUrl, "", "create")
|
if err := u.handleRegistries(req.DownloadUrl, "", "create"); err != nil {
|
||||||
|
return fmt.Errorf("create registry %s failed, err: %v", req.DownloadUrl, err)
|
||||||
|
}
|
||||||
if err := validateDockerConfig(); err != nil {
|
if err := validateDockerConfig(); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
if err := restartDocker(); err != nil {
|
||||||
stdout, err := cmd.Exec("systemctl restart docker")
|
return err
|
||||||
if err != nil {
|
|
||||||
return errors.New(string(stdout))
|
|
||||||
}
|
}
|
||||||
ticker := time.NewTicker(3 * time.Second)
|
ticker := time.NewTicker(3 * time.Second)
|
||||||
defer ticker.Stop()
|
defer ticker.Stop()
|
||||||
@@ -116,23 +117,18 @@ func (u *ImageRepoService) Create(req dto.ImageRepoCreate) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if req.Auth {
|
||||||
|
if err := u.CheckConn(req.DownloadUrl, req.Username, req.Password); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if err := copier.Copy(&imageRepo, &req); err != nil {
|
if err := copier.Copy(&imageRepo, &req); err != nil {
|
||||||
return errors.WithMessage(constant.ErrStructTransform, err.Error())
|
return errors.WithMessage(constant.ErrStructTransform, err.Error())
|
||||||
}
|
}
|
||||||
|
|
||||||
imageRepo.Status = constant.StatusSuccess
|
imageRepo.Status = constant.StatusSuccess
|
||||||
if req.Auth {
|
return imageRepoRepo.Create(&imageRepo)
|
||||||
if err := u.CheckConn(req.DownloadUrl, req.Username, req.Password); err != nil {
|
|
||||||
imageRepo.Status = constant.StatusFailed
|
|
||||||
imageRepo.Message = err.Error()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if err := imageRepoRepo.Create(&imageRepo); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (u *ImageRepoService) BatchDelete(req dto.ImageRepoDelete) error {
|
func (u *ImageRepoService) BatchDelete(req dto.ImageRepoDelete) error {
|
||||||
@@ -158,19 +154,37 @@ func (u *ImageRepoService) Update(req dto.ImageRepoUpdate) error {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if repo.DownloadUrl != req.DownloadUrl || (!repo.Auth && req.Auth) {
|
if repo.Protocol == "http" && req.Protocol == "https" {
|
||||||
_ = u.handleRegistries(req.DownloadUrl, repo.DownloadUrl, "update")
|
if err := u.handleRegistries("", repo.DownloadUrl, "delete"); err != nil {
|
||||||
|
return fmt.Errorf("delete registry %s failed, err: %v", repo.DownloadUrl, err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if repo.Protocol == "http" && req.Protocol == "http" {
|
||||||
|
if err := u.handleRegistries(req.DownloadUrl, repo.DownloadUrl, "update"); err != nil {
|
||||||
|
return fmt.Errorf("update registry %s => %s failed, err: %v", repo.DownloadUrl, req.DownloadUrl, err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if repo.Protocol == "https" && req.Protocol == "http" {
|
||||||
|
if err := u.handleRegistries(req.DownloadUrl, "", "create"); err != nil {
|
||||||
|
return fmt.Errorf("create registry %s failed, err: %v", req.DownloadUrl, err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if repo.Auth != req.Auth || repo.DownloadUrl != req.DownloadUrl {
|
||||||
if repo.Auth {
|
if repo.Auth {
|
||||||
_, _ = cmd.ExecWithCheck("docker", "logout", repo.DownloadUrl)
|
_, _ = cmd.ExecWithCheck("docker", "logout", repo.DownloadUrl)
|
||||||
}
|
}
|
||||||
|
if req.Auth {
|
||||||
|
if err := u.CheckConn(req.DownloadUrl, req.Username, req.Password); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if err := validateDockerConfig(); err != nil {
|
if err := validateDockerConfig(); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
if err := restartDocker(); err != nil {
|
||||||
stdout, err := cmd.Exec("systemctl restart docker")
|
return err
|
||||||
if err != nil {
|
|
||||||
return errors.New(string(stdout))
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
upMap := make(map[string]interface{})
|
upMap := make(map[string]interface{})
|
||||||
@@ -179,15 +193,8 @@ func (u *ImageRepoService) Update(req dto.ImageRepoUpdate) error {
|
|||||||
upMap["username"] = req.Username
|
upMap["username"] = req.Username
|
||||||
upMap["password"] = req.Password
|
upMap["password"] = req.Password
|
||||||
upMap["auth"] = req.Auth
|
upMap["auth"] = req.Auth
|
||||||
|
|
||||||
upMap["status"] = constant.StatusSuccess
|
upMap["status"] = constant.StatusSuccess
|
||||||
upMap["message"] = ""
|
upMap["message"] = ""
|
||||||
if req.Auth {
|
|
||||||
if err := u.CheckConn(req.DownloadUrl, req.Username, req.Password); err != nil {
|
|
||||||
upMap["status"] = constant.StatusFailed
|
|
||||||
upMap["message"] = err.Error()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return imageRepoRepo.Update(req.ID, upMap)
|
return imageRepoRepo.Update(req.ID, upMap)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -56,7 +56,7 @@ func (r *RuntimeService) Create(create request.RuntimeCreate) (*model.Runtime, e
|
|||||||
opts []repo.DBOption
|
opts []repo.DBOption
|
||||||
)
|
)
|
||||||
if create.Name != "" {
|
if create.Name != "" {
|
||||||
opts = append(opts, commonRepo.WithLikeName(create.Name))
|
opts = append(opts, commonRepo.WithByName(create.Name))
|
||||||
}
|
}
|
||||||
if create.Type != "" {
|
if create.Type != "" {
|
||||||
opts = append(opts, commonRepo.WithByType(create.Type))
|
opts = append(opts, commonRepo.WithByType(create.Type))
|
||||||
@@ -308,7 +308,7 @@ func (r *RuntimeService) Get(id uint) (*response.RuntimeDTO, error) {
|
|||||||
}
|
}
|
||||||
for k, v := range envs {
|
for k, v := range envs {
|
||||||
switch k {
|
switch k {
|
||||||
case "NODE_APP_PORT", "PANEL_APP_PORT_HTTP", "JAVA_APP_PORT", "GO_APP_PORT":
|
case "NODE_APP_PORT", "PANEL_APP_PORT_HTTP", "JAVA_APP_PORT", "GO_APP_PORT", "APP_PORT":
|
||||||
port, err := strconv.Atoi(v)
|
port, err := strconv.Atoi(v)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
@@ -495,6 +495,9 @@ func (r *RuntimeService) OperateRuntime(req request.RuntimeOperate) error {
|
|||||||
_ = runtimeRepo.Save(runtime)
|
_ = runtimeRepo.Save(runtime)
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
go func() {
|
||||||
|
_ = docker.CreateDefaultDockerNetwork()
|
||||||
|
}()
|
||||||
switch req.Operate {
|
switch req.Operate {
|
||||||
case constant.RuntimeUp:
|
case constant.RuntimeUp:
|
||||||
if err = runComposeCmdWithLog(req.Operate, runtime.GetComposePath(), runtime.GetLogPath()); err != nil {
|
if err = runComposeCmdWithLog(req.Operate, runtime.GetComposePath(), runtime.GetLogPath()); err != nil {
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package service
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"net/http"
|
"net/http"
|
||||||
@@ -218,7 +219,10 @@ func buildRuntime(runtime *model.Runtime, oldImageID string, rebuild bool) {
|
|||||||
_ = logFile.Close()
|
_ = logFile.Close()
|
||||||
}()
|
}()
|
||||||
|
|
||||||
cmd := exec.Command("docker-compose", "-f", composePath, "build")
|
ctx, cancel := context.WithTimeout(context.Background(), 1*time.Hour)
|
||||||
|
defer cancel()
|
||||||
|
|
||||||
|
cmd := exec.CommandContext(ctx, "docker-compose", "-f", composePath, "build")
|
||||||
multiWriterStdout := io.MultiWriter(os.Stdout, logFile)
|
multiWriterStdout := io.MultiWriter(os.Stdout, logFile)
|
||||||
cmd.Stdout = multiWriterStdout
|
cmd.Stdout = multiWriterStdout
|
||||||
var stderrBuf bytes.Buffer
|
var stderrBuf bytes.Buffer
|
||||||
@@ -228,7 +232,11 @@ func buildRuntime(runtime *model.Runtime, oldImageID string, rebuild bool) {
|
|||||||
err = cmd.Run()
|
err = cmd.Run()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
runtime.Status = constant.RuntimeError
|
runtime.Status = constant.RuntimeError
|
||||||
|
if errors.Is(ctx.Err(), context.DeadlineExceeded) {
|
||||||
|
runtime.Message = buserr.New(constant.ErrImageBuildErr).Error() + ":" + buserr.New("ErrCmdTimeout").Error()
|
||||||
|
} else {
|
||||||
runtime.Message = buserr.New(constant.ErrImageBuildErr).Error() + ":" + stderrBuf.String()
|
runtime.Message = buserr.New(constant.ErrImageBuildErr).Error() + ":" + stderrBuf.String()
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
runtime.Status = constant.RuntimeNormal
|
runtime.Status = constant.RuntimeNormal
|
||||||
runtime.Message = ""
|
runtime.Message = ""
|
||||||
|
|||||||
@@ -322,6 +322,9 @@ func (u *SettingService) UpdateSSL(c *gin.Context, req dto.SSLUpdate) error {
|
|||||||
if err := settingRepo.Update("SSL", req.SSL); err != nil {
|
if err := settingRepo.Update("SSL", req.SSL); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
if err := settingRepo.Update("AutoRestart", req.AutoRestart); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
sID, _ := c.Cookie(constant.SessionName)
|
sID, _ := c.Cookie(constant.SessionName)
|
||||||
c.SetCookie(constant.SessionName, sID, 0, "", "", true, true)
|
c.SetCookie(constant.SessionName, sID, 0, "", "", true, true)
|
||||||
|
|||||||
@@ -231,7 +231,9 @@ func recoverDaemonJson(src string, fileOp files.FileOp) error {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
_, _ = cmd.Exec("systemctl restart docker")
|
if err := restartDocker(); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -309,6 +309,10 @@ func (w WebsiteService) CreateWebsite(create request.WebsiteCreate) (err error)
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
if err = docker.CreateDefaultDockerNetwork(); err != nil {
|
||||||
|
err = buserr.WithDetail(constant.Err1PanelNetworkFailed, err.Error(), nil)
|
||||||
|
return
|
||||||
|
}
|
||||||
website.RuntimeID = runtime.ID
|
website.RuntimeID = runtime.ID
|
||||||
switch runtime.Type {
|
switch runtime.Type {
|
||||||
case constant.RuntimePHP:
|
case constant.RuntimePHP:
|
||||||
|
|||||||
@@ -181,6 +181,13 @@ func (w WebsiteSSLService) Create(create request.WebsiteSSLCreate) (request.Webs
|
|||||||
return create, nil
|
return create, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func printSSLLog(logger *log.Logger, msgKey string, params map[string]interface{}, disableLog bool) {
|
||||||
|
if disableLog {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
logger.Println(i18n.GetMsgWithMap(msgKey, params))
|
||||||
|
}
|
||||||
|
|
||||||
func (w WebsiteSSLService) ObtainSSL(apply request.WebsiteSSLApply) error {
|
func (w WebsiteSSLService) ObtainSSL(apply request.WebsiteSSLApply) error {
|
||||||
var (
|
var (
|
||||||
err error
|
err error
|
||||||
@@ -272,11 +279,13 @@ func (w WebsiteSSLService) ObtainSSL(apply request.WebsiteSSLApply) error {
|
|||||||
defer logFile.Close()
|
defer logFile.Close()
|
||||||
logger := log.New(logFile, "", log.LstdFlags)
|
logger := log.New(logFile, "", log.LstdFlags)
|
||||||
legoLogger.Logger = logger
|
legoLogger.Logger = logger
|
||||||
|
if !apply.DisableLog {
|
||||||
startMsg := i18n.GetMsgWithMap("ApplySSLStart", map[string]interface{}{"domain": strings.Join(domains, ","), "type": i18n.GetMsgByKey(websiteSSL.Provider)})
|
startMsg := i18n.GetMsgWithMap("ApplySSLStart", map[string]interface{}{"domain": strings.Join(domains, ","), "type": i18n.GetMsgByKey(websiteSSL.Provider)})
|
||||||
if websiteSSL.Provider == constant.DNSAccount {
|
if websiteSSL.Provider == constant.DNSAccount {
|
||||||
startMsg = startMsg + i18n.GetMsgWithMap("DNSAccountName", map[string]interface{}{"name": dnsAccount.Name, "type": dnsAccount.Type})
|
startMsg = startMsg + i18n.GetMsgWithMap("DNSAccountName", map[string]interface{}{"name": dnsAccount.Name, "type": dnsAccount.Type})
|
||||||
}
|
}
|
||||||
legoLogger.Logger.Println(startMsg)
|
legoLogger.Logger.Println(startMsg)
|
||||||
|
}
|
||||||
resource, err := client.ObtainSSL(domains, privateKey)
|
resource, err := client.ObtainSSL(domains, privateKey)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
handleError(websiteSSL, err)
|
handleError(websiteSSL, err)
|
||||||
@@ -296,7 +305,7 @@ func (w WebsiteSSLService) ObtainSSL(apply request.WebsiteSSLApply) error {
|
|||||||
websiteSSL.Type = cert.Issuer.CommonName
|
websiteSSL.Type = cert.Issuer.CommonName
|
||||||
websiteSSL.Organization = cert.Issuer.Organization[0]
|
websiteSSL.Organization = cert.Issuer.Organization[0]
|
||||||
websiteSSL.Status = constant.SSLReady
|
websiteSSL.Status = constant.SSLReady
|
||||||
legoLogger.Logger.Println(i18n.GetMsgWithMap("ApplySSLSuccess", map[string]interface{}{"domain": strings.Join(domains, ",")}))
|
printSSLLog(logger, "ApplySSLSuccess", map[string]interface{}{"domain": strings.Join(domains, ",")}, apply.DisableLog)
|
||||||
saveCertificateFile(websiteSSL, logger)
|
saveCertificateFile(websiteSSL, logger)
|
||||||
|
|
||||||
if websiteSSL.ExecShell {
|
if websiteSSL.ExecShell {
|
||||||
@@ -304,11 +313,11 @@ func (w WebsiteSSLService) ObtainSSL(apply request.WebsiteSSLApply) error {
|
|||||||
if websiteSSL.PushDir {
|
if websiteSSL.PushDir {
|
||||||
workDir = websiteSSL.Dir
|
workDir = websiteSSL.Dir
|
||||||
}
|
}
|
||||||
legoLogger.Logger.Println(i18n.GetMsgByKey("ExecShellStart"))
|
printSSLLog(logger, "ExecShellStart", nil, apply.DisableLog)
|
||||||
if err = cmd.ExecShellWithTimeOut(websiteSSL.Shell, workDir, logger, 30*time.Minute); err != nil {
|
if err = cmd.ExecShellWithTimeOut(websiteSSL.Shell, workDir, logger, 30*time.Minute); err != nil {
|
||||||
legoLogger.Logger.Println(i18n.GetMsgWithMap("ErrExecShell", map[string]interface{}{"err": err.Error()}))
|
printSSLLog(logger, "ErrExecShell", map[string]interface{}{"err": err.Error()}, apply.DisableLog)
|
||||||
} else {
|
} else {
|
||||||
legoLogger.Logger.Println(i18n.GetMsgByKey("ExecShellSuccess"))
|
printSSLLog(logger, "ExecShellSuccess", nil, apply.DisableLog)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -320,9 +329,9 @@ func (w WebsiteSSLService) ObtainSSL(apply request.WebsiteSSLApply) error {
|
|||||||
websites, _ := websiteRepo.GetBy(websiteRepo.WithWebsiteSSLID(websiteSSL.ID))
|
websites, _ := websiteRepo.GetBy(websiteRepo.WithWebsiteSSLID(websiteSSL.ID))
|
||||||
if len(websites) > 0 {
|
if len(websites) > 0 {
|
||||||
for _, website := range websites {
|
for _, website := range websites {
|
||||||
legoLogger.Logger.Println(i18n.GetMsgWithMap("ApplyWebSiteSSLLog", map[string]interface{}{"name": website.PrimaryDomain}))
|
printSSLLog(logger, "ApplyWebSiteSSLLog", map[string]interface{}{"name": website.PrimaryDomain}, apply.DisableLog)
|
||||||
if err := createPemFile(website, *websiteSSL); err != nil {
|
if err := createPemFile(website, *websiteSSL); err != nil {
|
||||||
legoLogger.Logger.Println(i18n.GetMsgWithMap("ErrUpdateWebsiteSSL", map[string]interface{}{"name": website.PrimaryDomain, "err": err.Error()}))
|
printSSLLog(logger, "ErrUpdateWebsiteSSL", map[string]interface{}{"name": website.PrimaryDomain, "err": err.Error()}, apply.DisableLog)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
nginxInstall, err := getAppInstallByKey(constant.AppOpenresty)
|
nginxInstall, err := getAppInstallByKey(constant.AppOpenresty)
|
||||||
@@ -330,10 +339,10 @@ func (w WebsiteSSLService) ObtainSSL(apply request.WebsiteSSLApply) error {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
if err := opNginx(nginxInstall.ContainerName, constant.NginxReload); err != nil {
|
if err := opNginx(nginxInstall.ContainerName, constant.NginxReload); err != nil {
|
||||||
legoLogger.Logger.Println(i18n.GetMsgByKey(constant.ErrSSLApply))
|
printSSLLog(logger, constant.ErrSSLApply, nil, apply.DisableLog)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
legoLogger.Logger.Println(i18n.GetMsgByKey("ApplyWebSiteSSLSuccess"))
|
printSSLLog(logger, "ApplyWebSiteSSLSuccess", nil, apply.DisableLog)
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,6 @@ package service
|
|||||||
import (
|
import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
"github.com/1Panel-dev/1Panel/backend/utils/xpack"
|
|
||||||
"log"
|
"log"
|
||||||
"os"
|
"os"
|
||||||
"path"
|
"path"
|
||||||
@@ -13,6 +12,8 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"github.com/1Panel-dev/1Panel/backend/utils/xpack"
|
||||||
|
|
||||||
"github.com/1Panel-dev/1Panel/backend/buserr"
|
"github.com/1Panel-dev/1Panel/backend/buserr"
|
||||||
"github.com/1Panel-dev/1Panel/backend/global"
|
"github.com/1Panel-dev/1Panel/backend/global"
|
||||||
"github.com/1Panel-dev/1Panel/backend/i18n"
|
"github.com/1Panel-dev/1Panel/backend/i18n"
|
||||||
@@ -1001,20 +1002,23 @@ func saveCertificateFile(websiteSSL *model.WebsiteSSL, logger *log.Logger) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func GetSystemSSL() (bool, uint) {
|
func GetSystemSSL() (bool, bool, uint) {
|
||||||
sslSetting, err := settingRepo.Get(settingRepo.WithByKey("SSL"))
|
sslSetting, err := settingRepo.Get(settingRepo.WithByKey("SSL"))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
global.LOG.Errorf("load service ssl from setting failed, err: %v", err)
|
global.LOG.Errorf("load service ssl from setting failed, err: %v", err)
|
||||||
return false, 0
|
return false, false, 0
|
||||||
}
|
}
|
||||||
if sslSetting.Value == "enable" {
|
if sslSetting.Value == "enable" {
|
||||||
sslID, _ := settingRepo.Get(settingRepo.WithByKey("SSLID"))
|
sslID, _ := settingRepo.Get(settingRepo.WithByKey("SSLID"))
|
||||||
idValue, _ := strconv.Atoi(sslID.Value)
|
idValue, _ := strconv.Atoi(sslID.Value)
|
||||||
if idValue > 0 {
|
if idValue <= 0 {
|
||||||
return true, uint(idValue)
|
return false, false, 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
auto, _ := settingRepo.Get(settingRepo.WithByKey("AutoRestart"))
|
||||||
|
return true, auto.Value == "enable", uint(idValue)
|
||||||
}
|
}
|
||||||
return false, 0
|
return false, false, 0
|
||||||
}
|
}
|
||||||
|
|
||||||
func UpdateSSLConfig(websiteSSL model.WebsiteSSL) error {
|
func UpdateSSLConfig(websiteSSL model.WebsiteSSL) error {
|
||||||
@@ -1033,7 +1037,7 @@ func UpdateSSLConfig(websiteSSL model.WebsiteSSL) error {
|
|||||||
return buserr.WithErr(constant.ErrSSLApply, err)
|
return buserr.WithErr(constant.ErrSSLApply, err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
enable, sslID := GetSystemSSL()
|
enable, auto, sslID := GetSystemSSL()
|
||||||
if enable && sslID == websiteSSL.ID {
|
if enable && sslID == websiteSSL.ID {
|
||||||
fileOp := files.NewFileOp()
|
fileOp := files.NewFileOp()
|
||||||
secretDir := path.Join(global.CONF.System.BaseDir, "1panel/secret")
|
secretDir := path.Join(global.CONF.System.BaseDir, "1panel/secret")
|
||||||
@@ -1045,6 +1049,9 @@ func UpdateSSLConfig(websiteSSL model.WebsiteSSL) error {
|
|||||||
global.LOG.Errorf("Failed to update the SSL certificate for 1Panel System domain [%s] , err:%s", websiteSSL.PrimaryDomain, err.Error())
|
global.LOG.Errorf("Failed to update the SSL certificate for 1Panel System domain [%s] , err:%s", websiteSSL.PrimaryDomain, err.Error())
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
if auto {
|
||||||
|
_, _ = cmd.Exec("systemctl restart 1panel.service")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ import (
|
|||||||
"github.com/1Panel-dev/1Panel/backend/app/service"
|
"github.com/1Panel-dev/1Panel/backend/app/service"
|
||||||
"github.com/1Panel-dev/1Panel/backend/constant"
|
"github.com/1Panel-dev/1Panel/backend/constant"
|
||||||
"github.com/1Panel-dev/1Panel/backend/global"
|
"github.com/1Panel-dev/1Panel/backend/global"
|
||||||
|
"github.com/1Panel-dev/1Panel/backend/utils/cmd"
|
||||||
"github.com/1Panel-dev/1Panel/backend/utils/common"
|
"github.com/1Panel-dev/1Panel/backend/utils/common"
|
||||||
"github.com/1Panel-dev/1Panel/backend/utils/files"
|
"github.com/1Panel-dev/1Panel/backend/utils/files"
|
||||||
)
|
)
|
||||||
@@ -22,7 +23,7 @@ func NewSSLJob() *ssl {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (ssl *ssl) Run() {
|
func (ssl *ssl) Run() {
|
||||||
systemSSLEnable, sslID := service.GetSystemSSL()
|
systemSSLEnable, auto, sslID := service.GetSystemSSL()
|
||||||
sslRepo := repo.NewISSLRepo()
|
sslRepo := repo.NewISSLRepo()
|
||||||
sslService := service.NewIWebsiteSSLService()
|
sslService := service.NewIWebsiteSSLService()
|
||||||
sslList, _ := sslRepo.List()
|
sslList, _ := sslRepo.List()
|
||||||
@@ -52,6 +53,7 @@ func (ssl *ssl) Run() {
|
|||||||
} else {
|
} else {
|
||||||
if err := sslService.ObtainSSL(request.WebsiteSSLApply{
|
if err := sslService.ObtainSSL(request.WebsiteSSLApply{
|
||||||
ID: s.ID,
|
ID: s.ID,
|
||||||
|
DisableLog: true,
|
||||||
}); err != nil {
|
}); err != nil {
|
||||||
global.LOG.Errorf("Failed to update the SSL certificate for the [%s] domain , err:%s", s.PrimaryDomain, err.Error())
|
global.LOG.Errorf("Failed to update the SSL certificate for the [%s] domain , err:%s", s.PrimaryDomain, err.Error())
|
||||||
continue
|
continue
|
||||||
@@ -69,6 +71,9 @@ func (ssl *ssl) Run() {
|
|||||||
global.LOG.Errorf("Failed to update the SSL certificate for 1Panel System domain [%s] , err:%s", s.PrimaryDomain, err.Error())
|
global.LOG.Errorf("Failed to update the SSL certificate for 1Panel System domain [%s] , err:%s", s.PrimaryDomain, err.Error())
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
if auto {
|
||||||
|
_, _ = cmd.Exec("systemctl restart 1panel.service")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
global.LOG.Infof("The SSL certificate for the [%s] domain has been successfully updated", s.PrimaryDomain)
|
global.LOG.Infof("The SSL certificate for the [%s] domain has been successfully updated", s.PrimaryDomain)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -178,6 +178,8 @@ func handleUserInfo(tags string, settingRepo repo.ISettingRepo) {
|
|||||||
if err := settingRepo.Update("SecurityEntrance", common.RandStrAndNum(10)); err != nil {
|
if err := settingRepo.Update("SecurityEntrance", common.RandStrAndNum(10)); err != nil {
|
||||||
global.LOG.Fatalf("init entrance before start failed, err: %v", err)
|
global.LOG.Fatalf("init entrance before start failed, err: %v", err)
|
||||||
}
|
}
|
||||||
|
sudo := cmd.SudoHandleCmd()
|
||||||
|
_, _ = cmd.Execf("%s sed -i '/CHANGE_USER_INFO=%v/d' /usr/local/bin/1pctl", sudo, global.CONF.System.ChangeUserInfo)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if strings.Contains(global.CONF.System.ChangeUserInfo, "username") {
|
if strings.Contains(global.CONF.System.ChangeUserInfo, "username") {
|
||||||
|
|||||||
@@ -95,6 +95,8 @@ func Init() {
|
|||||||
migrations.AddClamStatus,
|
migrations.AddClamStatus,
|
||||||
migrations.AddAlertMenu,
|
migrations.AddAlertMenu,
|
||||||
migrations.AddComposeColumn,
|
migrations.AddComposeColumn,
|
||||||
|
|
||||||
|
migrations.AddAutoRestart,
|
||||||
})
|
})
|
||||||
if err := m.Migrate(); err != nil {
|
if err := m.Migrate(); err != nil {
|
||||||
global.LOG.Error(err)
|
global.LOG.Error(err)
|
||||||
|
|||||||
@@ -324,3 +324,13 @@ var AddComposeColumn = &gormigrate.Migration{
|
|||||||
return nil
|
return nil
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var AddAutoRestart = &gormigrate.Migration{
|
||||||
|
ID: "20241021-add-auto-restart",
|
||||||
|
Migrate: func(tx *gorm.DB) error {
|
||||||
|
if err := tx.Create(&model.Setting{Key: "AutoRestart", Value: "enable"}).Error; err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|||||||
@@ -204,7 +204,7 @@ func SudoHandleCmd() string {
|
|||||||
|
|
||||||
func Which(name string) bool {
|
func Which(name string) bool {
|
||||||
stdout, err := Execf("which %s", name)
|
stdout, err := Execf("which %s", name)
|
||||||
if err != nil || (len(strings.ReplaceAll(stdout, "\n", "")) == 0 && strings.HasPrefix(stdout, "/")) {
|
if err != nil || (len(strings.ReplaceAll(stdout, "\n", "")) == 0) {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
return true
|
return true
|
||||||
|
|||||||
@@ -35,6 +35,7 @@ var repeatKeys = map[string]struct {
|
|||||||
"include": {},
|
"include": {},
|
||||||
"sub_filter": {},
|
"sub_filter": {},
|
||||||
"add_header": {},
|
"add_header": {},
|
||||||
|
"error_page": {},
|
||||||
}
|
}
|
||||||
|
|
||||||
func IsRepeatKey(key string) bool {
|
func IsRepeatKey(key string) bool {
|
||||||
|
|||||||
@@ -3,7 +3,6 @@ package ssl
|
|||||||
import (
|
import (
|
||||||
"crypto"
|
"crypto"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"github.com/1Panel-dev/1Panel/backend/utils/ssl/huaweicloud"
|
|
||||||
"os"
|
"os"
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
@@ -19,6 +18,7 @@ import (
|
|||||||
"github.com/go-acme/lego/v4/providers/dns/cloudflare"
|
"github.com/go-acme/lego/v4/providers/dns/cloudflare"
|
||||||
"github.com/go-acme/lego/v4/providers/dns/dnspod"
|
"github.com/go-acme/lego/v4/providers/dns/dnspod"
|
||||||
"github.com/go-acme/lego/v4/providers/dns/godaddy"
|
"github.com/go-acme/lego/v4/providers/dns/godaddy"
|
||||||
|
"github.com/go-acme/lego/v4/providers/dns/huaweicloud"
|
||||||
"github.com/go-acme/lego/v4/providers/dns/namecheap"
|
"github.com/go-acme/lego/v4/providers/dns/namecheap"
|
||||||
"github.com/go-acme/lego/v4/providers/dns/namedotcom"
|
"github.com/go-acme/lego/v4/providers/dns/namedotcom"
|
||||||
"github.com/go-acme/lego/v4/providers/dns/namesilo"
|
"github.com/go-acme/lego/v4/providers/dns/namesilo"
|
||||||
@@ -199,7 +199,7 @@ func (c *AcmeClient) UseDns(dnsType DnsType, params string, websiteSSL model.Web
|
|||||||
dns01.CondOption(len(nameservers) > 0,
|
dns01.CondOption(len(nameservers) > 0,
|
||||||
dns01.AddRecursiveNameservers(nameservers)),
|
dns01.AddRecursiveNameservers(nameservers)),
|
||||||
dns01.CondOption(websiteSSL.SkipDNS,
|
dns01.CondOption(websiteSSL.SkipDNS,
|
||||||
dns01.DisableCompletePropagationRequirement()),
|
dns01.DisableAuthoritativeNssPropagationRequirement()),
|
||||||
dns01.AddDNSTimeout(10*time.Minute),
|
dns01.AddDNSTimeout(10*time.Minute),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,288 +0,0 @@
|
|||||||
// Package huaweicloud implements a DNS provider for solving the DNS-01 challenge using Huawei Cloud.
|
|
||||||
package huaweicloud
|
|
||||||
|
|
||||||
import (
|
|
||||||
"errors"
|
|
||||||
"fmt"
|
|
||||||
"strconv"
|
|
||||||
"strings"
|
|
||||||
"sync"
|
|
||||||
"time"
|
|
||||||
|
|
||||||
"github.com/go-acme/lego/v4/challenge/dns01"
|
|
||||||
"github.com/go-acme/lego/v4/platform/config/env"
|
|
||||||
"github.com/go-acme/lego/v4/platform/wait"
|
|
||||||
hwauthbasic "github.com/huaweicloud/huaweicloud-sdk-go-v3/core/auth/basic"
|
|
||||||
hwconfig "github.com/huaweicloud/huaweicloud-sdk-go-v3/core/config"
|
|
||||||
hwdns "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/dns/v2"
|
|
||||||
hwmodel "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/dns/v2/model"
|
|
||||||
hwregion "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/dns/v2/region"
|
|
||||||
)
|
|
||||||
|
|
||||||
// Environment variables names.
|
|
||||||
const (
|
|
||||||
envNamespace = "HUAWEICLOUD_"
|
|
||||||
|
|
||||||
EnvAccessKeyID = envNamespace + "ACCESS_KEY_ID"
|
|
||||||
EnvSecretAccessKey = envNamespace + "SECRET_ACCESS_KEY"
|
|
||||||
EnvRegion = envNamespace + "REGION"
|
|
||||||
|
|
||||||
EnvTTL = envNamespace + "TTL"
|
|
||||||
EnvPropagationTimeout = envNamespace + "PROPAGATION_TIMEOUT"
|
|
||||||
EnvPollingInterval = envNamespace + "POLLING_INTERVAL"
|
|
||||||
EnvHTTPTimeout = envNamespace + "HTTP_TIMEOUT"
|
|
||||||
)
|
|
||||||
|
|
||||||
// Config is used to configure the creation of the DNSProvider.
|
|
||||||
type Config struct {
|
|
||||||
AccessKeyID string
|
|
||||||
SecretAccessKey string
|
|
||||||
Region string
|
|
||||||
|
|
||||||
PropagationTimeout time.Duration
|
|
||||||
PollingInterval time.Duration
|
|
||||||
TTL int32
|
|
||||||
HTTPTimeout time.Duration
|
|
||||||
}
|
|
||||||
|
|
||||||
// NewDefaultConfig returns a default configuration for the DNSProvider.
|
|
||||||
func NewDefaultConfig() *Config {
|
|
||||||
return &Config{
|
|
||||||
TTL: int32(env.GetOrDefaultInt(EnvTTL, 300)),
|
|
||||||
PropagationTimeout: env.GetOrDefaultSecond(EnvPropagationTimeout, dns01.DefaultPropagationTimeout),
|
|
||||||
PollingInterval: env.GetOrDefaultSecond(EnvPollingInterval, dns01.DefaultPollingInterval),
|
|
||||||
HTTPTimeout: env.GetOrDefaultSecond(EnvHTTPTimeout, 30*time.Second),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// DNSProvider implements the challenge.Provider interface.
|
|
||||||
type DNSProvider struct {
|
|
||||||
config *Config
|
|
||||||
client *hwdns.DnsClient
|
|
||||||
|
|
||||||
recordIDs map[string]string
|
|
||||||
recordIDsMu sync.Mutex
|
|
||||||
}
|
|
||||||
|
|
||||||
// NewDNSProvider returns a DNSProvider instance configured for Huawei Cloud.
|
|
||||||
// Credentials must be passed in the environment variables:
|
|
||||||
// HUAWEICLOUD_ACCESS_KEY_ID, HUAWEICLOUD_SECRET_ACCESS_KEY, and HUAWEICLOUD_REGION.
|
|
||||||
func NewDNSProvider() (*DNSProvider, error) {
|
|
||||||
values, err := env.Get(EnvAccessKeyID, EnvSecretAccessKey, EnvRegion)
|
|
||||||
if err != nil {
|
|
||||||
return nil, fmt.Errorf("huaweicloud: %w", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
config := NewDefaultConfig()
|
|
||||||
config.AccessKeyID = values[EnvAccessKeyID]
|
|
||||||
config.SecretAccessKey = values[EnvSecretAccessKey]
|
|
||||||
config.Region = values[EnvRegion]
|
|
||||||
|
|
||||||
return NewDNSProviderConfig(config)
|
|
||||||
}
|
|
||||||
|
|
||||||
// NewDNSProviderConfig return a DNSProvider instance configured for Huawei Cloud.
|
|
||||||
func NewDNSProviderConfig(config *Config) (*DNSProvider, error) {
|
|
||||||
if config == nil {
|
|
||||||
return nil, errors.New("huaweicloud: the configuration of the DNS provider is nil")
|
|
||||||
}
|
|
||||||
|
|
||||||
if config.AccessKeyID == "" || config.SecretAccessKey == "" || config.Region == "" {
|
|
||||||
return nil, errors.New("huaweicloud: credentials missing")
|
|
||||||
}
|
|
||||||
|
|
||||||
auth, err := hwauthbasic.NewCredentialsBuilder().
|
|
||||||
WithAk(config.AccessKeyID).
|
|
||||||
WithSk(config.SecretAccessKey).
|
|
||||||
SafeBuild()
|
|
||||||
if err != nil {
|
|
||||||
return nil, fmt.Errorf("huaweicloud: crendential build: %w", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
region, err := hwregion.SafeValueOf(config.Region)
|
|
||||||
if err != nil {
|
|
||||||
return nil, fmt.Errorf("huaweicloud: safe region: %w", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
client, err := hwdns.DnsClientBuilder().
|
|
||||||
WithHttpConfig(hwconfig.DefaultHttpConfig().WithTimeout(config.HTTPTimeout)).
|
|
||||||
WithRegion(region).
|
|
||||||
WithCredential(auth).
|
|
||||||
SafeBuild()
|
|
||||||
if err != nil {
|
|
||||||
return nil, fmt.Errorf("huaweicloud: client build: %w", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
return &DNSProvider{
|
|
||||||
config: config,
|
|
||||||
client: hwdns.NewDnsClient(client),
|
|
||||||
recordIDs: map[string]string{},
|
|
||||||
}, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// Present creates a TXT record using the specified parameters.
|
|
||||||
func (d *DNSProvider) Present(domain, token, keyAuth string) error {
|
|
||||||
info := dns01.GetChallengeInfo(domain, keyAuth)
|
|
||||||
|
|
||||||
authZone, err := dns01.FindZoneByFqdn(info.EffectiveFQDN)
|
|
||||||
if err != nil {
|
|
||||||
return fmt.Errorf("huaweicloud: could not find zone for domain %q: %w", domain, err)
|
|
||||||
}
|
|
||||||
|
|
||||||
zoneID, err := d.getZoneID(authZone)
|
|
||||||
if err != nil {
|
|
||||||
return fmt.Errorf("huaweicloud: %w", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
recordSetID, err := d.getOrCreateRecordSetID(domain, zoneID, info)
|
|
||||||
if err != nil {
|
|
||||||
return fmt.Errorf("huaweicloud: %w", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
d.recordIDsMu.Lock()
|
|
||||||
d.recordIDs[token] = recordSetID
|
|
||||||
d.recordIDsMu.Unlock()
|
|
||||||
|
|
||||||
err = wait.For("record set sync on "+domain, d.config.PropagationTimeout, d.config.PollingInterval, func() (bool, error) {
|
|
||||||
rs, errShow := d.client.ShowRecordSet(&hwmodel.ShowRecordSetRequest{
|
|
||||||
ZoneId: zoneID,
|
|
||||||
RecordsetId: recordSetID,
|
|
||||||
})
|
|
||||||
if errShow != nil {
|
|
||||||
return false, fmt.Errorf("show record set: %w", errShow)
|
|
||||||
}
|
|
||||||
|
|
||||||
return !strings.HasSuffix(deref(rs.Status), "PENDING_"), nil
|
|
||||||
})
|
|
||||||
if err != nil {
|
|
||||||
return fmt.Errorf("huaweicloud: %w", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// CleanUp removes the TXT record matching the specified parameters.
|
|
||||||
func (d *DNSProvider) CleanUp(domain, token, keyAuth string) error {
|
|
||||||
info := dns01.GetChallengeInfo(domain, keyAuth)
|
|
||||||
|
|
||||||
// gets the record's unique ID from when we created it
|
|
||||||
d.recordIDsMu.Lock()
|
|
||||||
recordID, ok := d.recordIDs[token]
|
|
||||||
d.recordIDsMu.Unlock()
|
|
||||||
if !ok {
|
|
||||||
return fmt.Errorf("huaweicloud: unknown record ID for '%s' '%s'", info.EffectiveFQDN, token)
|
|
||||||
}
|
|
||||||
|
|
||||||
authZone, err := dns01.FindZoneByFqdn(info.EffectiveFQDN)
|
|
||||||
if err != nil {
|
|
||||||
return fmt.Errorf("huaweicloud: could not find zone for domain %q: %w", domain, err)
|
|
||||||
}
|
|
||||||
|
|
||||||
zoneID, err := d.getZoneID(authZone)
|
|
||||||
if err != nil {
|
|
||||||
return fmt.Errorf("huaweicloud: %w", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
request := &hwmodel.DeleteRecordSetRequest{
|
|
||||||
ZoneId: zoneID,
|
|
||||||
RecordsetId: recordID,
|
|
||||||
}
|
|
||||||
|
|
||||||
_, err = d.client.DeleteRecordSet(request)
|
|
||||||
if err != nil {
|
|
||||||
return fmt.Errorf("huaweicloud: delete record: %w", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// Timeout returns the timeout and interval to use when checking for DNS propagation.
|
|
||||||
// Adjusting here to cope with spikes in propagation times.
|
|
||||||
func (d *DNSProvider) Timeout() (timeout, interval time.Duration) {
|
|
||||||
return d.config.PropagationTimeout, d.config.PollingInterval
|
|
||||||
}
|
|
||||||
|
|
||||||
func (d *DNSProvider) getOrCreateRecordSetID(domain, zoneID string, info dns01.ChallengeInfo) (string, error) {
|
|
||||||
records, err := d.client.ListRecordSetsByZone(&hwmodel.ListRecordSetsByZoneRequest{
|
|
||||||
ZoneId: zoneID,
|
|
||||||
Name: pointer(info.EffectiveFQDN),
|
|
||||||
})
|
|
||||||
if err != nil {
|
|
||||||
return "", fmt.Errorf("record list: unable to get record %s for zone %s: %w", info.EffectiveFQDN, domain, err)
|
|
||||||
}
|
|
||||||
|
|
||||||
var existingRecordSet *hwmodel.ListRecordSets
|
|
||||||
|
|
||||||
for _, record := range deref(records.Recordsets) {
|
|
||||||
if deref(record.Type) == "TXT" && deref(record.Name) == info.EffectiveFQDN {
|
|
||||||
existingRecordSet = &record
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
value := strconv.Quote(info.Value)
|
|
||||||
|
|
||||||
if existingRecordSet == nil {
|
|
||||||
request := &hwmodel.CreateRecordSetRequest{
|
|
||||||
ZoneId: zoneID,
|
|
||||||
Body: &hwmodel.CreateRecordSetRequestBody{
|
|
||||||
Name: info.EffectiveFQDN,
|
|
||||||
Description: pointer("Added TXT record for ACME dns-01 challenge using lego client"),
|
|
||||||
Type: "TXT",
|
|
||||||
Ttl: pointer(d.config.TTL),
|
|
||||||
Records: []string{value},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
resp, errCreate := d.client.CreateRecordSet(request)
|
|
||||||
if errCreate != nil {
|
|
||||||
return "", fmt.Errorf("create record set: %w", errCreate)
|
|
||||||
}
|
|
||||||
|
|
||||||
return deref(resp.Id), nil
|
|
||||||
}
|
|
||||||
|
|
||||||
updateRequest := &hwmodel.UpdateRecordSetRequest{
|
|
||||||
ZoneId: zoneID,
|
|
||||||
RecordsetId: deref(existingRecordSet.Id),
|
|
||||||
Body: &hwmodel.UpdateRecordSetReq{
|
|
||||||
Name: existingRecordSet.Name,
|
|
||||||
Description: existingRecordSet.Description,
|
|
||||||
Type: existingRecordSet.Type,
|
|
||||||
Ttl: existingRecordSet.Ttl,
|
|
||||||
Records: pointer(append(deref(existingRecordSet.Records), value)),
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
resp, err := d.client.UpdateRecordSet(updateRequest)
|
|
||||||
if err != nil {
|
|
||||||
return "", fmt.Errorf("update record set: %w", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
return deref(resp.Id), nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (d *DNSProvider) getZoneID(authZone string) (string, error) {
|
|
||||||
zones, err := d.client.ListPublicZones(&hwmodel.ListPublicZonesRequest{})
|
|
||||||
if err != nil {
|
|
||||||
return "", fmt.Errorf("unable to get zone: %w", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, zone := range deref(zones.Zones) {
|
|
||||||
if deref(zone.Name) == authZone {
|
|
||||||
return deref(zone.Id), nil
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return "", fmt.Errorf("zone %q not found", authZone)
|
|
||||||
}
|
|
||||||
|
|
||||||
func pointer[T any](v T) *T { return &v }
|
|
||||||
|
|
||||||
func deref[T any](v *T) T {
|
|
||||||
if v == nil {
|
|
||||||
var zero T
|
|
||||||
return zero
|
|
||||||
}
|
|
||||||
|
|
||||||
return *v
|
|
||||||
}
|
|
||||||
@@ -1,29 +0,0 @@
|
|||||||
Name = "Huawei Cloud"
|
|
||||||
Description = ''''''
|
|
||||||
URL = "https://huaweicloud.com"
|
|
||||||
Code = "huaweicloud"
|
|
||||||
Since = "v4.19"
|
|
||||||
|
|
||||||
Example = '''
|
|
||||||
HUAWEICLOUD_ACCESS_KEY_ID=your-access-key-id \
|
|
||||||
HUAWEICLOUD_SECRET_ACCESS_KEY=your-secret-access-key \
|
|
||||||
HUAWEICLOUD_REGION=cn-south-1 \
|
|
||||||
lego --email you@example.com --dns huaweicloud --domains my.example.org run
|
|
||||||
'''
|
|
||||||
|
|
||||||
[Configuration]
|
|
||||||
[Configuration.Credentials]
|
|
||||||
HUAWEICLOUD_ACCESS_KEY_ID = "Access key ID"
|
|
||||||
HUAWEICLOUD_SECRET_ACCESS_KEY = "Access Key secret"
|
|
||||||
HUAWEICLOUD_REGION = "Region"
|
|
||||||
|
|
||||||
[Configuration.Additional]
|
|
||||||
HUAWEICLOUD_POLLING_INTERVAL = "Time between DNS propagation check"
|
|
||||||
HUAWEICLOUD_PROPAGATION_TIMEOUT = "Maximum waiting time for DNS propagation"
|
|
||||||
HUAWEICLOUD_TTL = "The TTL of the TXT record used for the DNS challenge"
|
|
||||||
HUAWEICLOUD_HTTP_TIMEOUT = "API request timeout"
|
|
||||||
|
|
||||||
[Links]
|
|
||||||
API = "https://console-intl.huaweicloud.com/apiexplorer/#/openapi/DNS/doc?locale=en-us"
|
|
||||||
CN_API = "https://support.huaweicloud.com/api-dns/zh-cn_topic_0132421999.html"
|
|
||||||
GoClient = "https://github.com/huaweicloud/huaweicloud-sdk-go-v3"
|
|
||||||
@@ -1,183 +0,0 @@
|
|||||||
package huaweicloud
|
|
||||||
|
|
||||||
import (
|
|
||||||
"testing"
|
|
||||||
"time"
|
|
||||||
|
|
||||||
"github.com/go-acme/lego/v4/platform/tester"
|
|
||||||
hwregion "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/dns/v2/region"
|
|
||||||
"github.com/stretchr/testify/require"
|
|
||||||
)
|
|
||||||
|
|
||||||
const envDomain = envNamespace + "DOMAIN"
|
|
||||||
|
|
||||||
var envTest = tester.NewEnvTest(EnvAccessKeyID, EnvSecretAccessKey, EnvRegion).
|
|
||||||
WithDomain(envDomain)
|
|
||||||
|
|
||||||
func TestNewDNSProvider(t *testing.T) {
|
|
||||||
testCases := []struct {
|
|
||||||
desc string
|
|
||||||
envVars map[string]string
|
|
||||||
expected string
|
|
||||||
}{
|
|
||||||
{
|
|
||||||
desc: "success",
|
|
||||||
envVars: map[string]string{
|
|
||||||
EnvAccessKeyID: "123",
|
|
||||||
EnvSecretAccessKey: "456",
|
|
||||||
EnvRegion: hwregion.CN_EAST_2.Id,
|
|
||||||
},
|
|
||||||
// The "success" cannot be tested because there is an API call that require a valid authentication.
|
|
||||||
// Also, there is a bug during the error message creation:
|
|
||||||
// https://github.com/huaweicloud/huaweicloud-sdk-go-v3/pull/81
|
|
||||||
expected: "huaweicloud: client build: runtime error: invalid memory address or nil pointer dereference",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
desc: "missing credentials",
|
|
||||||
envVars: map[string]string{
|
|
||||||
EnvAccessKeyID: "",
|
|
||||||
EnvSecretAccessKey: "",
|
|
||||||
EnvRegion: "",
|
|
||||||
},
|
|
||||||
expected: "huaweicloud: some credentials information are missing: HUAWEICLOUD_ACCESS_KEY_ID,HUAWEICLOUD_SECRET_ACCESS_KEY,HUAWEICLOUD_REGION",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
desc: "missing access id",
|
|
||||||
envVars: map[string]string{
|
|
||||||
EnvAccessKeyID: "",
|
|
||||||
EnvSecretAccessKey: "456",
|
|
||||||
EnvRegion: hwregion.CN_EAST_2.Id,
|
|
||||||
},
|
|
||||||
expected: "huaweicloud: some credentials information are missing: HUAWEICLOUD_ACCESS_KEY_ID",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
desc: "missing secret key",
|
|
||||||
envVars: map[string]string{
|
|
||||||
EnvAccessKeyID: "123",
|
|
||||||
EnvSecretAccessKey: "",
|
|
||||||
EnvRegion: hwregion.CN_EAST_2.Id,
|
|
||||||
},
|
|
||||||
expected: "huaweicloud: some credentials information are missing: HUAWEICLOUD_SECRET_ACCESS_KEY",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
desc: "missing secret key",
|
|
||||||
envVars: map[string]string{
|
|
||||||
EnvAccessKeyID: "123",
|
|
||||||
EnvSecretAccessKey: "456",
|
|
||||||
EnvRegion: "",
|
|
||||||
},
|
|
||||||
expected: "huaweicloud: some credentials information are missing: HUAWEICLOUD_REGION",
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, test := range testCases {
|
|
||||||
t.Run(test.desc, func(t *testing.T) {
|
|
||||||
defer envTest.RestoreEnv()
|
|
||||||
envTest.ClearEnv()
|
|
||||||
|
|
||||||
envTest.Apply(test.envVars)
|
|
||||||
|
|
||||||
p, err := NewDNSProvider()
|
|
||||||
|
|
||||||
if test.expected == "" {
|
|
||||||
require.NoError(t, err)
|
|
||||||
require.NotNil(t, p)
|
|
||||||
require.NotNil(t, p.config)
|
|
||||||
require.NotNil(t, p.client)
|
|
||||||
} else {
|
|
||||||
require.EqualError(t, err, test.expected)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestNewDNSProviderConfig(t *testing.T) {
|
|
||||||
testCases := []struct {
|
|
||||||
desc string
|
|
||||||
accessKeyID string
|
|
||||||
secretAccessKey string
|
|
||||||
region string
|
|
||||||
expected string
|
|
||||||
}{
|
|
||||||
{
|
|
||||||
desc: "success",
|
|
||||||
accessKeyID: "123",
|
|
||||||
secretAccessKey: "456",
|
|
||||||
region: hwregion.CN_EAST_2.Id,
|
|
||||||
// The "success" cannot be tested because there is an API call that require a valid authentication.
|
|
||||||
// Also, there is a bug during the error message creation:
|
|
||||||
// https://github.com/huaweicloud/huaweicloud-sdk-go-v3/pull/81
|
|
||||||
expected: "huaweicloud: client build: runtime error: invalid memory address or nil pointer dereference",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
desc: "missing credentials",
|
|
||||||
expected: "huaweicloud: credentials missing",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
desc: "missing secret id",
|
|
||||||
secretAccessKey: "456",
|
|
||||||
region: hwregion.CN_EAST_2.Id,
|
|
||||||
expected: "huaweicloud: credentials missing",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
desc: "missing secret key",
|
|
||||||
accessKeyID: "123",
|
|
||||||
region: hwregion.CN_EAST_2.Id,
|
|
||||||
expected: "huaweicloud: credentials missing",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
desc: "missing region",
|
|
||||||
accessKeyID: "123",
|
|
||||||
secretAccessKey: "456",
|
|
||||||
expected: "huaweicloud: credentials missing",
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, test := range testCases {
|
|
||||||
t.Run(test.desc, func(t *testing.T) {
|
|
||||||
config := NewDefaultConfig()
|
|
||||||
config.AccessKeyID = test.accessKeyID
|
|
||||||
config.SecretAccessKey = test.secretAccessKey
|
|
||||||
config.Region = test.region
|
|
||||||
|
|
||||||
p, err := NewDNSProviderConfig(config)
|
|
||||||
|
|
||||||
if test.expected == "" {
|
|
||||||
require.NoError(t, err)
|
|
||||||
require.NotNil(t, p)
|
|
||||||
require.NotNil(t, p.config)
|
|
||||||
require.NotNil(t, p.client)
|
|
||||||
} else {
|
|
||||||
require.EqualError(t, err, test.expected)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestLivePresent(t *testing.T) {
|
|
||||||
if !envTest.IsLiveTest() {
|
|
||||||
t.Skip("skipping live test")
|
|
||||||
}
|
|
||||||
|
|
||||||
envTest.RestoreEnv()
|
|
||||||
provider, err := NewDNSProvider()
|
|
||||||
require.NoError(t, err)
|
|
||||||
|
|
||||||
err = provider.Present(envTest.GetDomain(), "", "123d==")
|
|
||||||
require.NoError(t, err)
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestLiveCleanUp(t *testing.T) {
|
|
||||||
if !envTest.IsLiveTest() {
|
|
||||||
t.Skip("skipping live test")
|
|
||||||
}
|
|
||||||
|
|
||||||
envTest.RestoreEnv()
|
|
||||||
provider, err := NewDNSProvider()
|
|
||||||
require.NoError(t, err)
|
|
||||||
|
|
||||||
time.Sleep(1 * time.Second)
|
|
||||||
|
|
||||||
err = provider.CleanUp(envTest.GetDomain(), "", "123d==")
|
|
||||||
require.NoError(t, err)
|
|
||||||
}
|
|
||||||
@@ -8,7 +8,6 @@ import (
|
|||||||
"net/http"
|
"net/http"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/1Panel-dev/1Panel/backend/app/dto"
|
|
||||||
"github.com/1Panel-dev/1Panel/backend/app/model"
|
"github.com/1Panel-dev/1Panel/backend/app/model"
|
||||||
"github.com/1Panel-dev/1Panel/backend/buserr"
|
"github.com/1Panel-dev/1Panel/backend/buserr"
|
||||||
"github.com/1Panel-dev/1Panel/backend/constant"
|
"github.com/1Panel-dev/1Panel/backend/constant"
|
||||||
@@ -40,23 +39,3 @@ func LoadXpuInfo() []interface{} {
|
|||||||
func StartClam(startClam model.Clam, isUpdate bool) (int, error) {
|
func StartClam(startClam model.Clam, isUpdate bool) (int, error) {
|
||||||
return 0, buserr.New(constant.ErrXpackNotFound)
|
return 0, buserr.New(constant.ErrXpackNotFound)
|
||||||
}
|
}
|
||||||
|
|
||||||
func CreateAlert(createAlert dto.CreateOrUpdateAlert) error {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func UpdateAlert(updateAlert dto.CreateOrUpdateAlert) error {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func DeleteAlert(alertBase dto.AlertBase) error {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func GetAlert(alertBase dto.AlertBase) uint {
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
func PushAlert(pushAlert dto.PushAlert) error {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ system:
|
|||||||
db_file: 1Panel.db
|
db_file: 1Panel.db
|
||||||
base_dir: /opt
|
base_dir: /opt
|
||||||
mode: dev
|
mode: dev
|
||||||
repo_url: https://resource.fit2cloud.com/1panel/package
|
repo_url: https://resource.fit2cloud.com/1panel/package/aliyun
|
||||||
app_repo: https://apps-assets.fit2cloud.com
|
app_repo: https://apps-assets.fit2cloud.com
|
||||||
is_demo: false
|
is_demo: false
|
||||||
port: 9999
|
port: 9999
|
||||||
|
|||||||
+192
-20
@@ -3872,8 +3872,8 @@ const docTemplate = `{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"/dashboard/current/:ioOption/:netOption": {
|
"/dashboard/current": {
|
||||||
"get": {
|
"post": {
|
||||||
"security": [
|
"security": [
|
||||||
{
|
{
|
||||||
"ApiKeyAuth": []
|
"ApiKeyAuth": []
|
||||||
@@ -3889,18 +3889,13 @@ const docTemplate = `{
|
|||||||
"summary": "Load dashboard current info",
|
"summary": "Load dashboard current info",
|
||||||
"parameters": [
|
"parameters": [
|
||||||
{
|
{
|
||||||
"type": "string",
|
|
||||||
"description": "request",
|
"description": "request",
|
||||||
"name": "ioOption",
|
"name": "request",
|
||||||
"in": "path",
|
"in": "body",
|
||||||
"required": true
|
"required": true,
|
||||||
},
|
"schema": {
|
||||||
{
|
"$ref": "#/definitions/dto.DashboardReq"
|
||||||
"type": "string",
|
}
|
||||||
"description": "request",
|
|
||||||
"name": "netOption",
|
|
||||||
"in": "path",
|
|
||||||
"required": true
|
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"responses": {
|
"responses": {
|
||||||
@@ -9130,8 +9125,8 @@ const docTemplate = `{
|
|||||||
"bodyKeys": [
|
"bodyKeys": [
|
||||||
"id"
|
"id"
|
||||||
],
|
],
|
||||||
"formatEN": "Delete website [name]",
|
"formatEN": "Delete runtime [name]",
|
||||||
"formatZH": "删除网站 [name]",
|
"formatZH": "删除运行环境 [name]",
|
||||||
"paramKeys": []
|
"paramKeys": []
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -10808,7 +10803,7 @@ const docTemplate = `{
|
|||||||
"in": "body",
|
"in": "body",
|
||||||
"required": true,
|
"required": true,
|
||||||
"schema": {
|
"schema": {
|
||||||
"$ref": "#/definitions/dto.SearchWithPage"
|
"$ref": "#/definitions/dto.PageSnapshot"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
@@ -10822,6 +10817,39 @@ const docTemplate = `{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"/settings/snapshot/size": {
|
||||||
|
"post": {
|
||||||
|
"security": [
|
||||||
|
{
|
||||||
|
"ApiKeyAuth": []
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "获取系统快照大小",
|
||||||
|
"consumes": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"System Setting"
|
||||||
|
],
|
||||||
|
"summary": "Load system snapshot size",
|
||||||
|
"parameters": [
|
||||||
|
{
|
||||||
|
"description": "request",
|
||||||
|
"name": "request",
|
||||||
|
"in": "body",
|
||||||
|
"required": true,
|
||||||
|
"schema": {
|
||||||
|
"$ref": "#/definitions/dto.PageSnapshot"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"responses": {
|
||||||
|
"200": {
|
||||||
|
"description": "OK"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"/settings/snapshot/status": {
|
"/settings/snapshot/status": {
|
||||||
"post": {
|
"post": {
|
||||||
"security": [
|
"security": [
|
||||||
@@ -15591,6 +15619,12 @@ const docTemplate = `{
|
|||||||
"dto.ClamCreate": {
|
"dto.ClamCreate": {
|
||||||
"type": "object",
|
"type": "object",
|
||||||
"properties": {
|
"properties": {
|
||||||
|
"alertCount": {
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"alertTitle": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
"description": {
|
"description": {
|
||||||
"type": "string"
|
"type": "string"
|
||||||
},
|
},
|
||||||
@@ -15689,6 +15723,12 @@ const docTemplate = `{
|
|||||||
"dto.ClamUpdate": {
|
"dto.ClamUpdate": {
|
||||||
"type": "object",
|
"type": "object",
|
||||||
"properties": {
|
"properties": {
|
||||||
|
"alertCount": {
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"alertTitle": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
"description": {
|
"description": {
|
||||||
"type": "string"
|
"type": "string"
|
||||||
},
|
},
|
||||||
@@ -15805,6 +15845,9 @@ const docTemplate = `{
|
|||||||
"detailName": {
|
"detailName": {
|
||||||
"type": "string"
|
"type": "string"
|
||||||
},
|
},
|
||||||
|
"fileName": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
"name": {
|
"name": {
|
||||||
"type": "string"
|
"type": "string"
|
||||||
},
|
},
|
||||||
@@ -15876,6 +15919,12 @@ const docTemplate = `{
|
|||||||
"from"
|
"from"
|
||||||
],
|
],
|
||||||
"properties": {
|
"properties": {
|
||||||
|
"env": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
"file": {
|
"file": {
|
||||||
"type": "string"
|
"type": "string"
|
||||||
},
|
},
|
||||||
@@ -15902,8 +15951,7 @@ const docTemplate = `{
|
|||||||
"type": "object",
|
"type": "object",
|
||||||
"required": [
|
"required": [
|
||||||
"name",
|
"name",
|
||||||
"operation",
|
"operation"
|
||||||
"path"
|
|
||||||
],
|
],
|
||||||
"properties": {
|
"properties": {
|
||||||
"name": {
|
"name": {
|
||||||
@@ -15912,9 +15960,11 @@ const docTemplate = `{
|
|||||||
"operation": {
|
"operation": {
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"enum": [
|
"enum": [
|
||||||
|
"up",
|
||||||
"start",
|
"start",
|
||||||
"stop",
|
"stop",
|
||||||
"down"
|
"down",
|
||||||
|
"delete"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"path": {
|
"path": {
|
||||||
@@ -15987,6 +16037,12 @@ const docTemplate = `{
|
|||||||
"content": {
|
"content": {
|
||||||
"type": "string"
|
"type": "string"
|
||||||
},
|
},
|
||||||
|
"env": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
"name": {
|
"name": {
|
||||||
"type": "string"
|
"type": "string"
|
||||||
},
|
},
|
||||||
@@ -16162,6 +16218,7 @@ const docTemplate = `{
|
|||||||
"operation": {
|
"operation": {
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"enum": [
|
"enum": [
|
||||||
|
"up",
|
||||||
"start",
|
"start",
|
||||||
"stop",
|
"stop",
|
||||||
"restart",
|
"restart",
|
||||||
@@ -16309,6 +16366,12 @@ const docTemplate = `{
|
|||||||
"type"
|
"type"
|
||||||
],
|
],
|
||||||
"properties": {
|
"properties": {
|
||||||
|
"alertCount": {
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"alertTitle": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
"appID": {
|
"appID": {
|
||||||
"type": "string"
|
"type": "string"
|
||||||
},
|
},
|
||||||
@@ -16383,9 +16446,16 @@ const docTemplate = `{
|
|||||||
"required": [
|
"required": [
|
||||||
"id",
|
"id",
|
||||||
"name",
|
"name",
|
||||||
"spec"
|
"spec",
|
||||||
|
"type"
|
||||||
],
|
],
|
||||||
"properties": {
|
"properties": {
|
||||||
|
"alertCount": {
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"alertTitle": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
"appID": {
|
"appID": {
|
||||||
"type": "string"
|
"type": "string"
|
||||||
},
|
},
|
||||||
@@ -16432,6 +16502,9 @@ const docTemplate = `{
|
|||||||
"spec": {
|
"spec": {
|
||||||
"type": "string"
|
"type": "string"
|
||||||
},
|
},
|
||||||
|
"type": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
"url": {
|
"url": {
|
||||||
"type": "string"
|
"type": "string"
|
||||||
},
|
},
|
||||||
@@ -16557,6 +16630,9 @@ const docTemplate = `{
|
|||||||
"dto.DashboardBase": {
|
"dto.DashboardBase": {
|
||||||
"type": "object",
|
"type": "object",
|
||||||
"properties": {
|
"properties": {
|
||||||
|
"SystemProxy": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
"appInstalledNumber": {
|
"appInstalledNumber": {
|
||||||
"type": "integer"
|
"type": "integer"
|
||||||
},
|
},
|
||||||
@@ -16581,6 +16657,9 @@ const docTemplate = `{
|
|||||||
"hostname": {
|
"hostname": {
|
||||||
"type": "string"
|
"type": "string"
|
||||||
},
|
},
|
||||||
|
"ipv4Addr": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
"kernelArch": {
|
"kernelArch": {
|
||||||
"type": "string"
|
"type": "string"
|
||||||
},
|
},
|
||||||
@@ -16705,6 +16784,26 @@ const docTemplate = `{
|
|||||||
},
|
},
|
||||||
"uptime": {
|
"uptime": {
|
||||||
"type": "integer"
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"xpuData": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"$ref": "#/definitions/dto.XPUInfo"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"dto.DashboardReq": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"ioOption": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"netOption": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"scope": {
|
||||||
|
"type": "string"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -18608,6 +18707,41 @@ const docTemplate = `{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"dto.PageSnapshot": {
|
||||||
|
"type": "object",
|
||||||
|
"required": [
|
||||||
|
"order",
|
||||||
|
"orderBy",
|
||||||
|
"page",
|
||||||
|
"pageSize"
|
||||||
|
],
|
||||||
|
"properties": {
|
||||||
|
"info": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"order": {
|
||||||
|
"type": "string",
|
||||||
|
"enum": [
|
||||||
|
"null",
|
||||||
|
"ascending",
|
||||||
|
"descending"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"orderBy": {
|
||||||
|
"type": "string",
|
||||||
|
"enum": [
|
||||||
|
"name",
|
||||||
|
"created_at"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"page": {
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"pageSize": {
|
||||||
|
"type": "integer"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"dto.PasswordUpdate": {
|
"dto.PasswordUpdate": {
|
||||||
"type": "object",
|
"type": "object",
|
||||||
"required": [
|
"required": [
|
||||||
@@ -19273,6 +19407,9 @@ const docTemplate = `{
|
|||||||
"sslType"
|
"sslType"
|
||||||
],
|
],
|
||||||
"properties": {
|
"properties": {
|
||||||
|
"autoRestart": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
"cert": {
|
"cert": {
|
||||||
"type": "string"
|
"type": "string"
|
||||||
},
|
},
|
||||||
@@ -19501,6 +19638,9 @@ const docTemplate = `{
|
|||||||
"appStoreVersion": {
|
"appStoreVersion": {
|
||||||
"type": "string"
|
"type": "string"
|
||||||
},
|
},
|
||||||
|
"autoRestart": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
"bindAddress": {
|
"bindAddress": {
|
||||||
"type": "string"
|
"type": "string"
|
||||||
},
|
},
|
||||||
@@ -19925,6 +20065,32 @@ const docTemplate = `{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"dto.XPUInfo": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"deviceID": {
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"deviceName": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"memory": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"memoryUsed": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"memoryUtil": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"power": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"temperature": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"files.FileInfo": {
|
"files.FileInfo": {
|
||||||
"type": "object",
|
"type": "object",
|
||||||
"properties": {
|
"properties": {
|
||||||
@@ -22434,6 +22600,9 @@ const docTemplate = `{
|
|||||||
"proxyPass": {
|
"proxyPass": {
|
||||||
"type": "string"
|
"type": "string"
|
||||||
},
|
},
|
||||||
|
"proxySSLName": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
"replaces": {
|
"replaces": {
|
||||||
"type": "object",
|
"type": "object",
|
||||||
"additionalProperties": {
|
"additionalProperties": {
|
||||||
@@ -22476,6 +22645,9 @@ const docTemplate = `{
|
|||||||
"ID": {
|
"ID": {
|
||||||
"type": "integer"
|
"type": "integer"
|
||||||
},
|
},
|
||||||
|
"disableLog": {
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
"nameservers": {
|
"nameservers": {
|
||||||
"type": "array",
|
"type": "array",
|
||||||
"items": {
|
"items": {
|
||||||
|
|||||||
+192
-20
@@ -3866,8 +3866,8 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"/dashboard/current/:ioOption/:netOption": {
|
"/dashboard/current": {
|
||||||
"get": {
|
"post": {
|
||||||
"security": [
|
"security": [
|
||||||
{
|
{
|
||||||
"ApiKeyAuth": []
|
"ApiKeyAuth": []
|
||||||
@@ -3883,18 +3883,13 @@
|
|||||||
"summary": "Load dashboard current info",
|
"summary": "Load dashboard current info",
|
||||||
"parameters": [
|
"parameters": [
|
||||||
{
|
{
|
||||||
"type": "string",
|
|
||||||
"description": "request",
|
"description": "request",
|
||||||
"name": "ioOption",
|
"name": "request",
|
||||||
"in": "path",
|
"in": "body",
|
||||||
"required": true
|
"required": true,
|
||||||
},
|
"schema": {
|
||||||
{
|
"$ref": "#/definitions/dto.DashboardReq"
|
||||||
"type": "string",
|
}
|
||||||
"description": "request",
|
|
||||||
"name": "netOption",
|
|
||||||
"in": "path",
|
|
||||||
"required": true
|
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"responses": {
|
"responses": {
|
||||||
@@ -9124,8 +9119,8 @@
|
|||||||
"bodyKeys": [
|
"bodyKeys": [
|
||||||
"id"
|
"id"
|
||||||
],
|
],
|
||||||
"formatEN": "Delete website [name]",
|
"formatEN": "Delete runtime [name]",
|
||||||
"formatZH": "删除网站 [name]",
|
"formatZH": "删除运行环境 [name]",
|
||||||
"paramKeys": []
|
"paramKeys": []
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -10802,7 +10797,7 @@
|
|||||||
"in": "body",
|
"in": "body",
|
||||||
"required": true,
|
"required": true,
|
||||||
"schema": {
|
"schema": {
|
||||||
"$ref": "#/definitions/dto.SearchWithPage"
|
"$ref": "#/definitions/dto.PageSnapshot"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
@@ -10816,6 +10811,39 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"/settings/snapshot/size": {
|
||||||
|
"post": {
|
||||||
|
"security": [
|
||||||
|
{
|
||||||
|
"ApiKeyAuth": []
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "获取系统快照大小",
|
||||||
|
"consumes": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"System Setting"
|
||||||
|
],
|
||||||
|
"summary": "Load system snapshot size",
|
||||||
|
"parameters": [
|
||||||
|
{
|
||||||
|
"description": "request",
|
||||||
|
"name": "request",
|
||||||
|
"in": "body",
|
||||||
|
"required": true,
|
||||||
|
"schema": {
|
||||||
|
"$ref": "#/definitions/dto.PageSnapshot"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"responses": {
|
||||||
|
"200": {
|
||||||
|
"description": "OK"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"/settings/snapshot/status": {
|
"/settings/snapshot/status": {
|
||||||
"post": {
|
"post": {
|
||||||
"security": [
|
"security": [
|
||||||
@@ -15585,6 +15613,12 @@
|
|||||||
"dto.ClamCreate": {
|
"dto.ClamCreate": {
|
||||||
"type": "object",
|
"type": "object",
|
||||||
"properties": {
|
"properties": {
|
||||||
|
"alertCount": {
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"alertTitle": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
"description": {
|
"description": {
|
||||||
"type": "string"
|
"type": "string"
|
||||||
},
|
},
|
||||||
@@ -15683,6 +15717,12 @@
|
|||||||
"dto.ClamUpdate": {
|
"dto.ClamUpdate": {
|
||||||
"type": "object",
|
"type": "object",
|
||||||
"properties": {
|
"properties": {
|
||||||
|
"alertCount": {
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"alertTitle": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
"description": {
|
"description": {
|
||||||
"type": "string"
|
"type": "string"
|
||||||
},
|
},
|
||||||
@@ -15799,6 +15839,9 @@
|
|||||||
"detailName": {
|
"detailName": {
|
||||||
"type": "string"
|
"type": "string"
|
||||||
},
|
},
|
||||||
|
"fileName": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
"name": {
|
"name": {
|
||||||
"type": "string"
|
"type": "string"
|
||||||
},
|
},
|
||||||
@@ -15870,6 +15913,12 @@
|
|||||||
"from"
|
"from"
|
||||||
],
|
],
|
||||||
"properties": {
|
"properties": {
|
||||||
|
"env": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
"file": {
|
"file": {
|
||||||
"type": "string"
|
"type": "string"
|
||||||
},
|
},
|
||||||
@@ -15896,8 +15945,7 @@
|
|||||||
"type": "object",
|
"type": "object",
|
||||||
"required": [
|
"required": [
|
||||||
"name",
|
"name",
|
||||||
"operation",
|
"operation"
|
||||||
"path"
|
|
||||||
],
|
],
|
||||||
"properties": {
|
"properties": {
|
||||||
"name": {
|
"name": {
|
||||||
@@ -15906,9 +15954,11 @@
|
|||||||
"operation": {
|
"operation": {
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"enum": [
|
"enum": [
|
||||||
|
"up",
|
||||||
"start",
|
"start",
|
||||||
"stop",
|
"stop",
|
||||||
"down"
|
"down",
|
||||||
|
"delete"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"path": {
|
"path": {
|
||||||
@@ -15981,6 +16031,12 @@
|
|||||||
"content": {
|
"content": {
|
||||||
"type": "string"
|
"type": "string"
|
||||||
},
|
},
|
||||||
|
"env": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
"name": {
|
"name": {
|
||||||
"type": "string"
|
"type": "string"
|
||||||
},
|
},
|
||||||
@@ -16156,6 +16212,7 @@
|
|||||||
"operation": {
|
"operation": {
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"enum": [
|
"enum": [
|
||||||
|
"up",
|
||||||
"start",
|
"start",
|
||||||
"stop",
|
"stop",
|
||||||
"restart",
|
"restart",
|
||||||
@@ -16303,6 +16360,12 @@
|
|||||||
"type"
|
"type"
|
||||||
],
|
],
|
||||||
"properties": {
|
"properties": {
|
||||||
|
"alertCount": {
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"alertTitle": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
"appID": {
|
"appID": {
|
||||||
"type": "string"
|
"type": "string"
|
||||||
},
|
},
|
||||||
@@ -16377,9 +16440,16 @@
|
|||||||
"required": [
|
"required": [
|
||||||
"id",
|
"id",
|
||||||
"name",
|
"name",
|
||||||
"spec"
|
"spec",
|
||||||
|
"type"
|
||||||
],
|
],
|
||||||
"properties": {
|
"properties": {
|
||||||
|
"alertCount": {
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"alertTitle": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
"appID": {
|
"appID": {
|
||||||
"type": "string"
|
"type": "string"
|
||||||
},
|
},
|
||||||
@@ -16426,6 +16496,9 @@
|
|||||||
"spec": {
|
"spec": {
|
||||||
"type": "string"
|
"type": "string"
|
||||||
},
|
},
|
||||||
|
"type": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
"url": {
|
"url": {
|
||||||
"type": "string"
|
"type": "string"
|
||||||
},
|
},
|
||||||
@@ -16551,6 +16624,9 @@
|
|||||||
"dto.DashboardBase": {
|
"dto.DashboardBase": {
|
||||||
"type": "object",
|
"type": "object",
|
||||||
"properties": {
|
"properties": {
|
||||||
|
"SystemProxy": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
"appInstalledNumber": {
|
"appInstalledNumber": {
|
||||||
"type": "integer"
|
"type": "integer"
|
||||||
},
|
},
|
||||||
@@ -16575,6 +16651,9 @@
|
|||||||
"hostname": {
|
"hostname": {
|
||||||
"type": "string"
|
"type": "string"
|
||||||
},
|
},
|
||||||
|
"ipv4Addr": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
"kernelArch": {
|
"kernelArch": {
|
||||||
"type": "string"
|
"type": "string"
|
||||||
},
|
},
|
||||||
@@ -16699,6 +16778,26 @@
|
|||||||
},
|
},
|
||||||
"uptime": {
|
"uptime": {
|
||||||
"type": "integer"
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"xpuData": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"$ref": "#/definitions/dto.XPUInfo"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"dto.DashboardReq": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"ioOption": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"netOption": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"scope": {
|
||||||
|
"type": "string"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -18602,6 +18701,41 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"dto.PageSnapshot": {
|
||||||
|
"type": "object",
|
||||||
|
"required": [
|
||||||
|
"order",
|
||||||
|
"orderBy",
|
||||||
|
"page",
|
||||||
|
"pageSize"
|
||||||
|
],
|
||||||
|
"properties": {
|
||||||
|
"info": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"order": {
|
||||||
|
"type": "string",
|
||||||
|
"enum": [
|
||||||
|
"null",
|
||||||
|
"ascending",
|
||||||
|
"descending"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"orderBy": {
|
||||||
|
"type": "string",
|
||||||
|
"enum": [
|
||||||
|
"name",
|
||||||
|
"created_at"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"page": {
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"pageSize": {
|
||||||
|
"type": "integer"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"dto.PasswordUpdate": {
|
"dto.PasswordUpdate": {
|
||||||
"type": "object",
|
"type": "object",
|
||||||
"required": [
|
"required": [
|
||||||
@@ -19267,6 +19401,9 @@
|
|||||||
"sslType"
|
"sslType"
|
||||||
],
|
],
|
||||||
"properties": {
|
"properties": {
|
||||||
|
"autoRestart": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
"cert": {
|
"cert": {
|
||||||
"type": "string"
|
"type": "string"
|
||||||
},
|
},
|
||||||
@@ -19495,6 +19632,9 @@
|
|||||||
"appStoreVersion": {
|
"appStoreVersion": {
|
||||||
"type": "string"
|
"type": "string"
|
||||||
},
|
},
|
||||||
|
"autoRestart": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
"bindAddress": {
|
"bindAddress": {
|
||||||
"type": "string"
|
"type": "string"
|
||||||
},
|
},
|
||||||
@@ -19919,6 +20059,32 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"dto.XPUInfo": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"deviceID": {
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"deviceName": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"memory": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"memoryUsed": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"memoryUtil": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"power": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"temperature": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"files.FileInfo": {
|
"files.FileInfo": {
|
||||||
"type": "object",
|
"type": "object",
|
||||||
"properties": {
|
"properties": {
|
||||||
@@ -22428,6 +22594,9 @@
|
|||||||
"proxyPass": {
|
"proxyPass": {
|
||||||
"type": "string"
|
"type": "string"
|
||||||
},
|
},
|
||||||
|
"proxySSLName": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
"replaces": {
|
"replaces": {
|
||||||
"type": "object",
|
"type": "object",
|
||||||
"additionalProperties": {
|
"additionalProperties": {
|
||||||
@@ -22470,6 +22639,9 @@
|
|||||||
"ID": {
|
"ID": {
|
||||||
"type": "integer"
|
"type": "integer"
|
||||||
},
|
},
|
||||||
|
"disableLog": {
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
"nameservers": {
|
"nameservers": {
|
||||||
"type": "array",
|
"type": "array",
|
||||||
"items": {
|
"items": {
|
||||||
|
|||||||
+128
-14
@@ -233,6 +233,10 @@ definitions:
|
|||||||
type: object
|
type: object
|
||||||
dto.ClamCreate:
|
dto.ClamCreate:
|
||||||
properties:
|
properties:
|
||||||
|
alertCount:
|
||||||
|
type: integer
|
||||||
|
alertTitle:
|
||||||
|
type: string
|
||||||
description:
|
description:
|
||||||
type: string
|
type: string
|
||||||
infectedDir:
|
infectedDir:
|
||||||
@@ -297,6 +301,10 @@ definitions:
|
|||||||
type: object
|
type: object
|
||||||
dto.ClamUpdate:
|
dto.ClamUpdate:
|
||||||
properties:
|
properties:
|
||||||
|
alertCount:
|
||||||
|
type: integer
|
||||||
|
alertTitle:
|
||||||
|
type: string
|
||||||
description:
|
description:
|
||||||
type: string
|
type: string
|
||||||
id:
|
id:
|
||||||
@@ -371,6 +379,8 @@ definitions:
|
|||||||
properties:
|
properties:
|
||||||
detailName:
|
detailName:
|
||||||
type: string
|
type: string
|
||||||
|
fileName:
|
||||||
|
type: string
|
||||||
name:
|
name:
|
||||||
type: string
|
type: string
|
||||||
secret:
|
secret:
|
||||||
@@ -424,6 +434,10 @@ definitions:
|
|||||||
type: object
|
type: object
|
||||||
dto.ComposeCreate:
|
dto.ComposeCreate:
|
||||||
properties:
|
properties:
|
||||||
|
env:
|
||||||
|
items:
|
||||||
|
type: string
|
||||||
|
type: array
|
||||||
file:
|
file:
|
||||||
type: string
|
type: string
|
||||||
from:
|
from:
|
||||||
@@ -447,9 +461,11 @@ definitions:
|
|||||||
type: string
|
type: string
|
||||||
operation:
|
operation:
|
||||||
enum:
|
enum:
|
||||||
|
- up
|
||||||
- start
|
- start
|
||||||
- stop
|
- stop
|
||||||
- down
|
- down
|
||||||
|
- delete
|
||||||
type: string
|
type: string
|
||||||
path:
|
path:
|
||||||
type: string
|
type: string
|
||||||
@@ -458,7 +474,6 @@ definitions:
|
|||||||
required:
|
required:
|
||||||
- name
|
- name
|
||||||
- operation
|
- operation
|
||||||
- path
|
|
||||||
type: object
|
type: object
|
||||||
dto.ComposeTemplateCreate:
|
dto.ComposeTemplateCreate:
|
||||||
properties:
|
properties:
|
||||||
@@ -497,6 +512,10 @@ definitions:
|
|||||||
properties:
|
properties:
|
||||||
content:
|
content:
|
||||||
type: string
|
type: string
|
||||||
|
env:
|
||||||
|
items:
|
||||||
|
type: string
|
||||||
|
type: array
|
||||||
name:
|
name:
|
||||||
type: string
|
type: string
|
||||||
path:
|
path:
|
||||||
@@ -614,6 +633,7 @@ definitions:
|
|||||||
type: array
|
type: array
|
||||||
operation:
|
operation:
|
||||||
enum:
|
enum:
|
||||||
|
- up
|
||||||
- start
|
- start
|
||||||
- stop
|
- stop
|
||||||
- restart
|
- restart
|
||||||
@@ -713,6 +733,10 @@ definitions:
|
|||||||
type: object
|
type: object
|
||||||
dto.CronjobCreate:
|
dto.CronjobCreate:
|
||||||
properties:
|
properties:
|
||||||
|
alertCount:
|
||||||
|
type: integer
|
||||||
|
alertTitle:
|
||||||
|
type: string
|
||||||
appID:
|
appID:
|
||||||
type: string
|
type: string
|
||||||
backupAccounts:
|
backupAccounts:
|
||||||
@@ -765,6 +789,10 @@ definitions:
|
|||||||
type: object
|
type: object
|
||||||
dto.CronjobUpdate:
|
dto.CronjobUpdate:
|
||||||
properties:
|
properties:
|
||||||
|
alertCount:
|
||||||
|
type: integer
|
||||||
|
alertTitle:
|
||||||
|
type: string
|
||||||
appID:
|
appID:
|
||||||
type: string
|
type: string
|
||||||
backupAccounts:
|
backupAccounts:
|
||||||
@@ -796,6 +824,8 @@ definitions:
|
|||||||
type: string
|
type: string
|
||||||
spec:
|
spec:
|
||||||
type: string
|
type: string
|
||||||
|
type:
|
||||||
|
type: string
|
||||||
url:
|
url:
|
||||||
type: string
|
type: string
|
||||||
website:
|
website:
|
||||||
@@ -804,6 +834,7 @@ definitions:
|
|||||||
- id
|
- id
|
||||||
- name
|
- name
|
||||||
- spec
|
- spec
|
||||||
|
- type
|
||||||
type: object
|
type: object
|
||||||
dto.CronjobUpdateStatus:
|
dto.CronjobUpdateStatus:
|
||||||
properties:
|
properties:
|
||||||
@@ -883,6 +914,8 @@ definitions:
|
|||||||
type: object
|
type: object
|
||||||
dto.DashboardBase:
|
dto.DashboardBase:
|
||||||
properties:
|
properties:
|
||||||
|
SystemProxy:
|
||||||
|
type: string
|
||||||
appInstalledNumber:
|
appInstalledNumber:
|
||||||
type: integer
|
type: integer
|
||||||
cpuCores:
|
cpuCores:
|
||||||
@@ -899,6 +932,8 @@ definitions:
|
|||||||
type: integer
|
type: integer
|
||||||
hostname:
|
hostname:
|
||||||
type: string
|
type: string
|
||||||
|
ipv4Addr:
|
||||||
|
type: string
|
||||||
kernelArch:
|
kernelArch:
|
||||||
type: string
|
type: string
|
||||||
kernelVersion:
|
kernelVersion:
|
||||||
@@ -982,6 +1017,19 @@ definitions:
|
|||||||
type: string
|
type: string
|
||||||
uptime:
|
uptime:
|
||||||
type: integer
|
type: integer
|
||||||
|
xpuData:
|
||||||
|
items:
|
||||||
|
$ref: '#/definitions/dto.XPUInfo'
|
||||||
|
type: array
|
||||||
|
type: object
|
||||||
|
dto.DashboardReq:
|
||||||
|
properties:
|
||||||
|
ioOption:
|
||||||
|
type: string
|
||||||
|
netOption:
|
||||||
|
type: string
|
||||||
|
scope:
|
||||||
|
type: string
|
||||||
type: object
|
type: object
|
||||||
dto.DatabaseCreate:
|
dto.DatabaseCreate:
|
||||||
properties:
|
properties:
|
||||||
@@ -2278,6 +2326,31 @@ definitions:
|
|||||||
total:
|
total:
|
||||||
type: integer
|
type: integer
|
||||||
type: object
|
type: object
|
||||||
|
dto.PageSnapshot:
|
||||||
|
properties:
|
||||||
|
info:
|
||||||
|
type: string
|
||||||
|
order:
|
||||||
|
enum:
|
||||||
|
- "null"
|
||||||
|
- ascending
|
||||||
|
- descending
|
||||||
|
type: string
|
||||||
|
orderBy:
|
||||||
|
enum:
|
||||||
|
- name
|
||||||
|
- created_at
|
||||||
|
type: string
|
||||||
|
page:
|
||||||
|
type: integer
|
||||||
|
pageSize:
|
||||||
|
type: integer
|
||||||
|
required:
|
||||||
|
- order
|
||||||
|
- orderBy
|
||||||
|
- page
|
||||||
|
- pageSize
|
||||||
|
type: object
|
||||||
dto.PasswordUpdate:
|
dto.PasswordUpdate:
|
||||||
properties:
|
properties:
|
||||||
newPassword:
|
newPassword:
|
||||||
@@ -2723,6 +2796,8 @@ definitions:
|
|||||||
type: object
|
type: object
|
||||||
dto.SSLUpdate:
|
dto.SSLUpdate:
|
||||||
properties:
|
properties:
|
||||||
|
autoRestart:
|
||||||
|
type: string
|
||||||
cert:
|
cert:
|
||||||
type: string
|
type: string
|
||||||
domain:
|
domain:
|
||||||
@@ -2882,6 +2957,8 @@ definitions:
|
|||||||
type: string
|
type: string
|
||||||
appStoreVersion:
|
appStoreVersion:
|
||||||
type: string
|
type: string
|
||||||
|
autoRestart:
|
||||||
|
type: string
|
||||||
bindAddress:
|
bindAddress:
|
||||||
type: string
|
type: string
|
||||||
bindDomain:
|
bindDomain:
|
||||||
@@ -3161,6 +3238,23 @@ definitions:
|
|||||||
type:
|
type:
|
||||||
type: string
|
type: string
|
||||||
type: object
|
type: object
|
||||||
|
dto.XPUInfo:
|
||||||
|
properties:
|
||||||
|
deviceID:
|
||||||
|
type: integer
|
||||||
|
deviceName:
|
||||||
|
type: string
|
||||||
|
memory:
|
||||||
|
type: string
|
||||||
|
memoryUsed:
|
||||||
|
type: string
|
||||||
|
memoryUtil:
|
||||||
|
type: string
|
||||||
|
power:
|
||||||
|
type: string
|
||||||
|
temperature:
|
||||||
|
type: string
|
||||||
|
type: object
|
||||||
files.FileInfo:
|
files.FileInfo:
|
||||||
properties:
|
properties:
|
||||||
content:
|
content:
|
||||||
@@ -4836,6 +4930,8 @@ definitions:
|
|||||||
type: string
|
type: string
|
||||||
proxyPass:
|
proxyPass:
|
||||||
type: string
|
type: string
|
||||||
|
proxySSLName:
|
||||||
|
type: string
|
||||||
replaces:
|
replaces:
|
||||||
additionalProperties:
|
additionalProperties:
|
||||||
type: string
|
type: string
|
||||||
@@ -4868,6 +4964,8 @@ definitions:
|
|||||||
properties:
|
properties:
|
||||||
ID:
|
ID:
|
||||||
type: integer
|
type: integer
|
||||||
|
disableLog:
|
||||||
|
type: boolean
|
||||||
nameservers:
|
nameservers:
|
||||||
items:
|
items:
|
||||||
type: string
|
type: string
|
||||||
@@ -7981,22 +8079,18 @@ paths:
|
|||||||
summary: Load os info
|
summary: Load os info
|
||||||
tags:
|
tags:
|
||||||
- Dashboard
|
- Dashboard
|
||||||
/dashboard/current/:ioOption/:netOption:
|
/dashboard/current:
|
||||||
get:
|
post:
|
||||||
consumes:
|
consumes:
|
||||||
- application/json
|
- application/json
|
||||||
description: 获取首页实时数据
|
description: 获取首页实时数据
|
||||||
parameters:
|
parameters:
|
||||||
- description: request
|
- description: request
|
||||||
in: path
|
in: body
|
||||||
name: ioOption
|
name: request
|
||||||
required: true
|
required: true
|
||||||
type: string
|
schema:
|
||||||
- description: request
|
$ref: '#/definitions/dto.DashboardReq'
|
||||||
in: path
|
|
||||||
name: netOption
|
|
||||||
required: true
|
|
||||||
type: string
|
|
||||||
responses:
|
responses:
|
||||||
"200":
|
"200":
|
||||||
description: OK
|
description: OK
|
||||||
@@ -11310,8 +11404,8 @@ paths:
|
|||||||
BeforeFunctions: []
|
BeforeFunctions: []
|
||||||
bodyKeys:
|
bodyKeys:
|
||||||
- id
|
- id
|
||||||
formatEN: Delete website [name]
|
formatEN: Delete runtime [name]
|
||||||
formatZH: 删除网站 [name]
|
formatZH: 删除运行环境 [name]
|
||||||
paramKeys: []
|
paramKeys: []
|
||||||
/runtimes/node/modules:
|
/runtimes/node/modules:
|
||||||
post:
|
post:
|
||||||
@@ -12368,7 +12462,7 @@ paths:
|
|||||||
name: request
|
name: request
|
||||||
required: true
|
required: true
|
||||||
schema:
|
schema:
|
||||||
$ref: '#/definitions/dto.SearchWithPage'
|
$ref: '#/definitions/dto.PageSnapshot'
|
||||||
responses:
|
responses:
|
||||||
"200":
|
"200":
|
||||||
description: OK
|
description: OK
|
||||||
@@ -12379,6 +12473,26 @@ paths:
|
|||||||
summary: Page system snapshot
|
summary: Page system snapshot
|
||||||
tags:
|
tags:
|
||||||
- System Setting
|
- System Setting
|
||||||
|
/settings/snapshot/size:
|
||||||
|
post:
|
||||||
|
consumes:
|
||||||
|
- application/json
|
||||||
|
description: 获取系统快照大小
|
||||||
|
parameters:
|
||||||
|
- description: request
|
||||||
|
in: body
|
||||||
|
name: request
|
||||||
|
required: true
|
||||||
|
schema:
|
||||||
|
$ref: '#/definitions/dto.PageSnapshot'
|
||||||
|
responses:
|
||||||
|
"200":
|
||||||
|
description: OK
|
||||||
|
security:
|
||||||
|
- ApiKeyAuth: []
|
||||||
|
summary: Load system snapshot size
|
||||||
|
tags:
|
||||||
|
- System Setting
|
||||||
/settings/snapshot/status:
|
/settings/snapshot/status:
|
||||||
post:
|
post:
|
||||||
consumes:
|
consumes:
|
||||||
|
|||||||
@@ -30,9 +30,6 @@ export namespace Cronjob {
|
|||||||
retainCopies: number;
|
retainCopies: number;
|
||||||
status: string;
|
status: string;
|
||||||
secret: string;
|
secret: string;
|
||||||
hasAlert: boolean;
|
|
||||||
alertCount: number;
|
|
||||||
alertTitle: string;
|
|
||||||
}
|
}
|
||||||
export interface CronjobCreate {
|
export interface CronjobCreate {
|
||||||
name: string;
|
name: string;
|
||||||
|
|||||||
@@ -29,6 +29,7 @@ export namespace Setting {
|
|||||||
bindAddress: string;
|
bindAddress: string;
|
||||||
ssl: string;
|
ssl: string;
|
||||||
sslType: string;
|
sslType: string;
|
||||||
|
autoRestart: string;
|
||||||
allowIPs: string;
|
allowIPs: string;
|
||||||
bindDomain: string;
|
bindDomain: string;
|
||||||
securityEntrance: string;
|
securityEntrance: string;
|
||||||
@@ -134,7 +135,7 @@ export namespace Setting {
|
|||||||
description: string;
|
description: string;
|
||||||
status: string;
|
status: string;
|
||||||
message: string;
|
message: string;
|
||||||
createdAt: DateTimeFormats;
|
created_at: DateTimeFormats;
|
||||||
version: string;
|
version: string;
|
||||||
interruptStep: string;
|
interruptStep: string;
|
||||||
recoverStatus: string;
|
recoverStatus: string;
|
||||||
|
|||||||
@@ -139,9 +139,6 @@ export namespace Toolbox {
|
|||||||
spec: string;
|
spec: string;
|
||||||
specObj: Cronjob.SpecObj;
|
specObj: Cronjob.SpecObj;
|
||||||
description: string;
|
description: string;
|
||||||
hasAlert: boolean;
|
|
||||||
alertCount: number;
|
|
||||||
alertTitle: string;
|
|
||||||
}
|
}
|
||||||
export interface ClamCreate {
|
export interface ClamCreate {
|
||||||
name: string;
|
name: string;
|
||||||
|
|||||||
@@ -43,7 +43,7 @@ export const containerRename = (params: Container.ContainerRename) => {
|
|||||||
return http.post(`/containers/rename`, params);
|
return http.post(`/containers/rename`, params);
|
||||||
};
|
};
|
||||||
export const containerOperator = (params: Container.ContainerOperate) => {
|
export const containerOperator = (params: Container.ContainerOperate) => {
|
||||||
return http.post(`/containers/operate`, params);
|
return http.post(`/containers/operate`, params, TimeoutEnum.T_60S);
|
||||||
};
|
};
|
||||||
export const containerPrune = (params: Container.ContainerPrune) => {
|
export const containerPrune = (params: Container.ContainerPrune) => {
|
||||||
return http.post<Container.ContainerPruneReport>(`/containers/prune`, params);
|
return http.post<Container.ContainerPruneReport>(`/containers/prune`, params);
|
||||||
|
|||||||
@@ -107,7 +107,7 @@
|
|||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { CheckAppInstalled, InstalledOp } from '@/api/modules/app';
|
import { CheckAppInstalled, InstalledOp } from '@/api/modules/app';
|
||||||
import router from '@/routers';
|
import router from '@/routers';
|
||||||
import { onMounted, reactive, ref, watch } from 'vue';
|
import { onMounted, reactive, ref } from 'vue';
|
||||||
import Status from '@/components/status/index.vue';
|
import Status from '@/components/status/index.vue';
|
||||||
import { ElMessageBox } from 'element-plus';
|
import { ElMessageBox } from 'element-plus';
|
||||||
import i18n from '@/lang';
|
import i18n from '@/lang';
|
||||||
@@ -125,21 +125,6 @@ const props = defineProps({
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
watch(
|
|
||||||
() => props.appKey,
|
|
||||||
(val) => {
|
|
||||||
key.value = val;
|
|
||||||
onCheck();
|
|
||||||
},
|
|
||||||
);
|
|
||||||
watch(
|
|
||||||
() => props.appName,
|
|
||||||
(val) => {
|
|
||||||
name.value = val;
|
|
||||||
onCheck();
|
|
||||||
},
|
|
||||||
);
|
|
||||||
|
|
||||||
let key = ref('');
|
let key = ref('');
|
||||||
let name = ref('');
|
let name = ref('');
|
||||||
|
|
||||||
@@ -250,4 +235,8 @@ onMounted(() => {
|
|||||||
name.value = props.appName;
|
name.value = props.appName;
|
||||||
onCheck();
|
onCheck();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
defineExpose({
|
||||||
|
onCheck,
|
||||||
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@@ -188,7 +188,7 @@ const closePage = () => {
|
|||||||
|
|
||||||
const openPage = () => {
|
const openPage = () => {
|
||||||
popoverVisible.value = true;
|
popoverVisible.value = true;
|
||||||
selectRow.value.path = props.path || '/';
|
selectRow.value.path = props.dir ? props.path || '/' : '';
|
||||||
rowName.value = '';
|
rowName.value = '';
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -216,7 +216,7 @@ const open = async (row: File.File) => {
|
|||||||
}
|
}
|
||||||
await search(req);
|
await search(req);
|
||||||
}
|
}
|
||||||
selectRow.value.path = req.path;
|
selectRow.value.path = props.dir ? req.path : '';
|
||||||
rowName.value = '';
|
rowName.value = '';
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -230,7 +230,7 @@ const jump = async (index: number) => {
|
|||||||
}
|
}
|
||||||
path = path || '/';
|
path = path || '/';
|
||||||
req.path = path;
|
req.path = path;
|
||||||
selectRow.value.path = req.path;
|
selectRow.value.path = props.dir ? req.path : '';
|
||||||
rowName.value = '';
|
rowName.value = '';
|
||||||
await search(req);
|
await search(req);
|
||||||
popoverVisible.value = true;
|
popoverVisible.value = true;
|
||||||
@@ -286,7 +286,7 @@ const cancelFolder = (row: any) => {
|
|||||||
data.value.shift();
|
data.value.shift();
|
||||||
row.isCreate = false;
|
row.isCreate = false;
|
||||||
disBtn.value = false;
|
disBtn.value = false;
|
||||||
selectRow.value.path = req.path;
|
selectRow.value.path = props.dir ? req.path : '';
|
||||||
rowName.value = '';
|
rowName.value = '';
|
||||||
newFolder.value = '';
|
newFolder.value = '';
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,119 +0,0 @@
|
|||||||
<template>
|
|
||||||
<div>
|
|
||||||
<el-dialog class="level-up-pro" v-model="open" :close-on-click-modal="false" @close="handleClose">
|
|
||||||
<div style="text-align: center" v-loading="loading">
|
|
||||||
<span class="text-3xl font-medium title">{{ $t('license.levelUpPro') }}</span>
|
|
||||||
<el-row type="flex" justify="center" class="mt-6">
|
|
||||||
<el-col :span="22">
|
|
||||||
<el-upload
|
|
||||||
action="#"
|
|
||||||
:auto-upload="false"
|
|
||||||
ref="uploadRef"
|
|
||||||
class="upload-demo"
|
|
||||||
drag
|
|
||||||
:limit="1"
|
|
||||||
:on-change="fileOnChange"
|
|
||||||
:on-exceed="handleExceed"
|
|
||||||
v-model:file-list="uploaderFiles"
|
|
||||||
>
|
|
||||||
<el-icon class="el-icon--upload"><upload-filled /></el-icon>
|
|
||||||
<div class="el-upload__text">
|
|
||||||
{{ $t('license.importHelper') }}
|
|
||||||
</div>
|
|
||||||
</el-upload>
|
|
||||||
</el-col>
|
|
||||||
</el-row>
|
|
||||||
<el-button
|
|
||||||
type="primary"
|
|
||||||
class="mt-3 w-52"
|
|
||||||
:disabled="loading || uploaderFiles.length == 0"
|
|
||||||
plain
|
|
||||||
@click="submit"
|
|
||||||
>
|
|
||||||
{{ $t('license.power') }}
|
|
||||||
</el-button>
|
|
||||||
<div class="mt-3 mb-5">
|
|
||||||
<el-button text type="primary" @click="toHalo">{{ $t('license.knowMorePro') }}</el-button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</el-dialog>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script setup lang="ts">
|
|
||||||
import i18n from '@/lang';
|
|
||||||
import { ref } from 'vue';
|
|
||||||
import { MsgSuccess } from '@/utils/message';
|
|
||||||
import { UploadFileData } from '@/api/modules/setting';
|
|
||||||
import { GlobalStore } from '@/store';
|
|
||||||
import { UploadFile, UploadFiles, UploadInstance, UploadProps, UploadRawFile, genFileId } from 'element-plus';
|
|
||||||
import { useTheme } from '@/hooks/use-theme';
|
|
||||||
import { getXpackSetting } from '@/utils/xpack';
|
|
||||||
const globalStore = GlobalStore();
|
|
||||||
|
|
||||||
const { switchTheme } = useTheme();
|
|
||||||
const loading = ref(false);
|
|
||||||
const open = ref(false);
|
|
||||||
const uploadRef = ref<UploadInstance>();
|
|
||||||
const uploaderFiles = ref<UploadFiles>([]);
|
|
||||||
|
|
||||||
const handleClose = () => {
|
|
||||||
open.value = false;
|
|
||||||
uploadRef.value!.clearFiles();
|
|
||||||
};
|
|
||||||
|
|
||||||
const fileOnChange = (_uploadFile: UploadFile, uploadFiles: UploadFiles) => {
|
|
||||||
uploaderFiles.value = uploadFiles;
|
|
||||||
};
|
|
||||||
|
|
||||||
const handleExceed: UploadProps['onExceed'] = (files) => {
|
|
||||||
uploadRef.value!.clearFiles();
|
|
||||||
const file = files[0] as UploadRawFile;
|
|
||||||
file.uid = genFileId();
|
|
||||||
uploadRef.value!.handleStart(file);
|
|
||||||
};
|
|
||||||
|
|
||||||
const toHalo = () => {
|
|
||||||
window.open('https://www.lxware.cn/1panel' + '', '_blank', 'noopener,noreferrer');
|
|
||||||
};
|
|
||||||
|
|
||||||
const submit = async () => {
|
|
||||||
if (uploaderFiles.value.length !== 1) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
const file = uploaderFiles.value[0];
|
|
||||||
const formData = new FormData();
|
|
||||||
formData.append('file', file.raw);
|
|
||||||
loading.value = true;
|
|
||||||
await UploadFileData(formData)
|
|
||||||
.then(async () => {
|
|
||||||
globalStore.isProductPro = true;
|
|
||||||
const xpackRes = await getXpackSetting();
|
|
||||||
if (xpackRes) {
|
|
||||||
globalStore.themeConfig.isGold = xpackRes.data.theme === 'dark-gold';
|
|
||||||
}
|
|
||||||
loading.value = false;
|
|
||||||
switchTheme();
|
|
||||||
uploadRef.value!.clearFiles();
|
|
||||||
uploaderFiles.value = [];
|
|
||||||
open.value = false;
|
|
||||||
MsgSuccess(i18n.global.t('commons.msg.operationSuccess'));
|
|
||||||
window.location.reload();
|
|
||||||
})
|
|
||||||
.catch(() => {
|
|
||||||
loading.value = false;
|
|
||||||
uploadRef.value!.clearFiles();
|
|
||||||
uploaderFiles.value = [];
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
const acceptParams = () => {
|
|
||||||
uploaderFiles.value = [];
|
|
||||||
uploadRef.value?.clearFiles();
|
|
||||||
open.value = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
defineExpose({
|
|
||||||
acceptParams,
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
@@ -4,6 +4,7 @@
|
|||||||
:destroy-on-close="true"
|
:destroy-on-close="true"
|
||||||
:close-on-click-modal="false"
|
:close-on-click-modal="false"
|
||||||
:close-on-press-escape="false"
|
:close-on-press-escape="false"
|
||||||
|
:before-close="handleClose"
|
||||||
:size="globalStore.isFullScreen ? '100%' : '50%'"
|
:size="globalStore.isFullScreen ? '100%' : '50%'"
|
||||||
>
|
>
|
||||||
<template #header>
|
<template #header>
|
||||||
@@ -21,10 +22,10 @@
|
|||||||
</el-drawer>
|
</el-drawer>
|
||||||
</template>
|
</template>
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { computed, ref } from 'vue';
|
import { computed, ref, watch } from 'vue';
|
||||||
import LogFile from '@/components/log-file/index.vue';
|
import LogFile from '@/components/log-file/index.vue';
|
||||||
import { GlobalStore } from '@/store';
|
|
||||||
import screenfull from 'screenfull';
|
import screenfull from 'screenfull';
|
||||||
|
import { GlobalStore } from '@/store';
|
||||||
import i18n from '@/lang';
|
import i18n from '@/lang';
|
||||||
|
|
||||||
const globalStore = GlobalStore();
|
const globalStore = GlobalStore();
|
||||||
@@ -45,19 +46,22 @@ const open = ref(false);
|
|||||||
const config = ref();
|
const config = ref();
|
||||||
const em = defineEmits(['close']);
|
const em = defineEmits(['close']);
|
||||||
|
|
||||||
const handleClose = (search: boolean) => {
|
const handleClose = () => {
|
||||||
open.value = false;
|
open.value = false;
|
||||||
em('close', search);
|
em('close', false);
|
||||||
|
globalStore.isFullScreen = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
watch(open, (val) => {
|
||||||
|
if (screenfull.isEnabled && !val && !mobile.value) screenfull.exit();
|
||||||
|
});
|
||||||
|
|
||||||
function toggleFullscreen() {
|
function toggleFullscreen() {
|
||||||
if (screenfull.isEnabled) {
|
globalStore.isFullScreen = !globalStore.isFullScreen;
|
||||||
screenfull.toggle();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const loadTooltip = () => {
|
const loadTooltip = () => {
|
||||||
return i18n.global.t('commons.button.' + (screenfull.isFullscreen ? 'quitFullscreen' : 'fullscreen'));
|
return i18n.global.t('commons.button.' + (globalStore.isFullScreen ? 'quitFullscreen' : 'fullscreen'));
|
||||||
};
|
};
|
||||||
|
|
||||||
const acceptParams = (props: LogProps) => {
|
const acceptParams = (props: LogProps) => {
|
||||||
|
|||||||
@@ -290,7 +290,7 @@ defineExpose({ changeTail, onDownload, clearLog });
|
|||||||
overflow-y: auto;
|
overflow-y: auto;
|
||||||
overflow-x: auto;
|
overflow-x: auto;
|
||||||
position: relative;
|
position: relative;
|
||||||
background-color: #121212;
|
background-color: #1e1e1e;
|
||||||
margin-top: 10px;
|
margin-top: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -307,4 +307,10 @@ defineExpose({ changeTail, onDownload, clearLog });
|
|||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.log-item span {
|
||||||
|
font-size: 14px;
|
||||||
|
font-weight: 300;
|
||||||
|
color: #cccccc;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@@ -16,11 +16,6 @@
|
|||||||
<el-divider v-if="!mobile" direction="vertical" />
|
<el-divider v-if="!mobile" direction="vertical" />
|
||||||
</div>
|
</div>
|
||||||
<div class="flex flex-wrap">
|
<div class="flex flex-wrap">
|
||||||
<el-button type="primary" link @click="toHalo">
|
|
||||||
<span class="font-normal">
|
|
||||||
{{ isProductPro ? $t('license.pro') : $t('license.community') }}
|
|
||||||
</span>
|
|
||||||
</el-button>
|
|
||||||
<span class="version" @click="copyText(version)">{{ version }}</span>
|
<span class="version" @click="copyText(version)">{{ version }}</span>
|
||||||
<el-badge is-dot style="margin-top: -3px" v-if="version !== 'Waiting' && globalStore.hasNewVersion">
|
<el-badge is-dot style="margin-top: -3px" v-if="version !== 'Waiting' && globalStore.hasNewVersion">
|
||||||
<el-button type="primary" link @click="onLoadUpgradeInfo">
|
<el-button type="primary" link @click="onLoadUpgradeInfo">
|
||||||
@@ -126,10 +121,6 @@ const handleClose = () => {
|
|||||||
drawerVisible.value = false;
|
drawerVisible.value = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
const toHalo = () => {
|
|
||||||
window.open('https://www.lxware.cn/1panel' + '', '_blank', 'noopener,noreferrer');
|
|
||||||
};
|
|
||||||
|
|
||||||
const toDoc = () => {
|
const toDoc = () => {
|
||||||
window.open('https://1panel.cn/docs/', '_blank', 'noopener,noreferrer');
|
window.open('https://1panel.cn/docs/', '_blank', 'noopener,noreferrer');
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -575,8 +575,13 @@ const message = {
|
|||||||
container: {
|
container: {
|
||||||
create: 'Create',
|
create: 'Create',
|
||||||
edit: 'Edit container',
|
edit: 'Edit container',
|
||||||
updateContainerHelper:
|
updateHelper1: 'Detected that this container comes from the app store. Please note the following two points:',
|
||||||
'Container editing requires rebuilding the container. Any data that has not been persisted will be lost. Do you want to continue?',
|
updateHelper2:
|
||||||
|
'1. The current modifications will not be synchronized to the installed applications in the app store.',
|
||||||
|
updateHelper3:
|
||||||
|
'2. If you modify the application on the installed page, the currently edited content will become invalid.',
|
||||||
|
updateHelper4:
|
||||||
|
'Editing the container requires rebuilding, and any non-persistent data will be lost. Do you want to continue?',
|
||||||
containerList: 'Container list',
|
containerList: 'Container list',
|
||||||
operatorHelper: '{0} will be performed on the following container, Do you want to continue?',
|
operatorHelper: '{0} will be performed on the following container, Do you want to continue?',
|
||||||
operatorAppHelper:
|
operatorAppHelper:
|
||||||
@@ -643,7 +648,7 @@ const message = {
|
|||||||
containerFromAppHelper:
|
containerFromAppHelper:
|
||||||
'Detected that this container originates from the app store. App operations may cause current edits to be invalidated.',
|
'Detected that this container originates from the app store. App operations may cause current edits to be invalidated.',
|
||||||
containerFromAppHelper1:
|
containerFromAppHelper1:
|
||||||
'Click the `Settings` button in the installed applications list to enter the editing page and modify the container name.',
|
'Click the [Param] button in the installed applications list to enter the editing page and modify the container name.',
|
||||||
command: 'Command',
|
command: 'Command',
|
||||||
console: 'Console Interaction',
|
console: 'Console Interaction',
|
||||||
tty: 'TTY (-t)',
|
tty: 'TTY (-t)',
|
||||||
@@ -731,6 +736,8 @@ const message = {
|
|||||||
urlWarning: 'The URL prefix does not need to include http:// or https://. Please modify.',
|
urlWarning: 'The URL prefix does not need to include http:// or https://. Please modify.',
|
||||||
|
|
||||||
network: 'Network',
|
network: 'Network',
|
||||||
|
networkHelper:
|
||||||
|
'Deleting the 1panel-network container network will affect the normal use of some applications and runtime environments. Do you want to continue?',
|
||||||
createNetwork: 'Create',
|
createNetwork: 'Create',
|
||||||
networkName: 'Name',
|
networkName: 'Name',
|
||||||
driver: 'Driver',
|
driver: 'Driver',
|
||||||
@@ -1094,7 +1101,6 @@ const message = {
|
|||||||
clam: {
|
clam: {
|
||||||
clam: 'Virus Scan',
|
clam: 'Virus Scan',
|
||||||
cron: 'Scheduled scan',
|
cron: 'Scheduled scan',
|
||||||
cronHelper: 'Professional version supports scheduled scan feature',
|
|
||||||
specErr: 'Execution schedule format error, please check and retry!',
|
specErr: 'Execution schedule format error, please check and retry!',
|
||||||
disableMsg:
|
disableMsg:
|
||||||
'Stopping scheduled execution will prevent this scan task from running automatically. Do you want to continue?',
|
'Stopping scheduled execution will prevent this scan task from running automatically. Do you want to continue?',
|
||||||
@@ -1518,8 +1524,11 @@ const message = {
|
|||||||
bindDomain: 'Bind Domain',
|
bindDomain: 'Bind Domain',
|
||||||
unBindDomain: 'Unbind domain',
|
unBindDomain: 'Unbind domain',
|
||||||
panelSSL: 'Panel SSL',
|
panelSSL: 'Panel SSL',
|
||||||
panelSSLHelper:
|
sslAutoRestart: 'Restart 1Panel service after certificate auto-renewal',
|
||||||
'After the automatic renewal of the panel SSL, you need to manually restart the 1Panel service for the changes to take effect.',
|
sslChangeHelper1:
|
||||||
|
'Currently, automatic restart of 1Panel service is not selected. The certificate auto-renewal will not take effect immediately and will still require a manual restart of 1Panel.',
|
||||||
|
sslChangeHelper2:
|
||||||
|
'The 1Panel service will automatically restart after setting the panel SSL. Do you want to continue?',
|
||||||
unBindDomainHelper:
|
unBindDomainHelper:
|
||||||
'The action of unbinding a domain name may cause system insecurity. Do you want to continue?',
|
'The action of unbinding a domain name may cause system insecurity. Do you want to continue?',
|
||||||
bindDomainHelper:
|
bindDomainHelper:
|
||||||
@@ -1655,49 +1664,6 @@ const message = {
|
|||||||
compressPassword: 'Compression Password',
|
compressPassword: 'Compression Password',
|
||||||
backupRecoverMessage: 'Please enter the compression or decompression password (leave blank to not set)',
|
backupRecoverMessage: 'Please enter the compression or decompression password (leave blank to not set)',
|
||||||
},
|
},
|
||||||
license: {
|
|
||||||
community: 'Community Edition: ',
|
|
||||||
community2: 'Community Edition',
|
|
||||||
pro: 'Professional Edition: ',
|
|
||||||
trial: 'Trial Edition',
|
|
||||||
office: 'Official Edition',
|
|
||||||
trialInfo: 'Version',
|
|
||||||
authorizationId: 'Subscription Authorization ID',
|
|
||||||
authorizedUser: 'Authorized User',
|
|
||||||
expiresAt: 'Expiry Date',
|
|
||||||
productName: 'Product Name',
|
|
||||||
productStatus: 'Product Status',
|
|
||||||
Lost01: 'Lost * 1',
|
|
||||||
Lost02: 'Lost * 2',
|
|
||||||
Lost03: 'Lost',
|
|
||||||
Enable: 'Enabled',
|
|
||||||
Disable: 'Disabled',
|
|
||||||
lostHelper:
|
|
||||||
'The License needs to be periodically synchronized for availability. Please ensure normal external network access. After three losses of connection, the License binding will be released.',
|
|
||||||
quickUpdate: 'Quick Update',
|
|
||||||
import: 'Import',
|
|
||||||
power: 'Authorize',
|
|
||||||
unbind: 'Unbind License',
|
|
||||||
unbindHelper: 'All Pro related Settings will be cleared after unbinding. Do you want to continue? ',
|
|
||||||
importLicense: 'Import License',
|
|
||||||
importHelper: 'Please click or drag the license file here',
|
|
||||||
technicalAdvice: 'Technical Advice',
|
|
||||||
advice: 'Consultation',
|
|
||||||
indefinitePeriod: 'Indefinite Period',
|
|
||||||
levelUpPro: 'Upgrade to Professional Edition',
|
|
||||||
licenseSync: 'License Sync',
|
|
||||||
knowMorePro: 'Learn More',
|
|
||||||
closeAlert: 'The current page can be closed in the panel settings',
|
|
||||||
introduce: 'Feature Introduction',
|
|
||||||
waf: 'Upgrading to the professional version can provide features such as interception map, logs, block records, geographical location blocking, custom rules, custom interception pages, etc.',
|
|
||||||
tamper: 'Upgrading to the professional version can protect websites from unauthorized modifications or tampering.',
|
|
||||||
gpu: 'Upgrading to the professional version can help users visually monitor important parameters of GPU such as workload, temperature, memory usage in real time.',
|
|
||||||
setting:
|
|
||||||
'Upgrading to the professional version allows customization of panel logo, welcome message, and other information.',
|
|
||||||
monitor:
|
|
||||||
'Upgrade to the professional version to view the real-time status of the website, visitor trends, visitor sources, request logs and other information. ',
|
|
||||||
alert: 'Upgrade to the professional version to receive alarm information via SMS and view alarm logs, fully control various key events, and ensure worry-free system operation',
|
|
||||||
},
|
|
||||||
clean: {
|
clean: {
|
||||||
scan: 'Start Scanning',
|
scan: 'Start Scanning',
|
||||||
scanHelper: 'Easily tidy up junk files accumulated during 1Panel runtime',
|
scanHelper: 'Easily tidy up junk files accumulated during 1Panel runtime',
|
||||||
@@ -1918,7 +1884,7 @@ const message = {
|
|||||||
applySSL: 'Certificate Application',
|
applySSL: 'Certificate Application',
|
||||||
SSLList: 'Certificate List',
|
SSLList: 'Certificate List',
|
||||||
createDnsAccount: 'DNS Account',
|
createDnsAccount: 'DNS Account',
|
||||||
aliyun: 'Aliyun DNS',
|
aliyun: 'Aliyun',
|
||||||
manual: 'Manual parsing',
|
manual: 'Manual parsing',
|
||||||
key: 'Key',
|
key: 'Key',
|
||||||
check: 'View',
|
check: 'View',
|
||||||
|
|||||||
@@ -557,7 +557,10 @@ const message = {
|
|||||||
container: {
|
container: {
|
||||||
create: '創建容器',
|
create: '創建容器',
|
||||||
edit: '編輯容器',
|
edit: '編輯容器',
|
||||||
updateContainerHelper: '容器編輯需要重建容器,任何未持久化的數據將會丟失,是否繼續?',
|
updateHelper1: '檢測到該容器來源於應用商店,請注意以下兩點:',
|
||||||
|
updateHelper2: '1. 當前修改內容不會同步到應用商店的已安裝應用。',
|
||||||
|
updateHelper3: '2. 如果在已安裝頁面修改應用,當前編輯的部分內容將失效。',
|
||||||
|
updateHelper4: '編輯容器需要重建,任何未持久化的數據將丟失,是否繼續?',
|
||||||
containerList: '容器列表',
|
containerList: '容器列表',
|
||||||
operatorHelper: '將對以下容器進行 {0} 操作,是否繼續?',
|
operatorHelper: '將對以下容器進行 {0} 操作,是否繼續?',
|
||||||
operatorAppHelper:
|
operatorAppHelper:
|
||||||
@@ -619,7 +622,7 @@ const message = {
|
|||||||
inputIpv6: '請輸入 IPv6 地址',
|
inputIpv6: '請輸入 IPv6 地址',
|
||||||
|
|
||||||
containerFromAppHelper: '檢測到該容器來源於應用商店,應用操作可能會導致當前編輯失效',
|
containerFromAppHelper: '檢測到該容器來源於應用商店,應用操作可能會導致當前編輯失效',
|
||||||
containerFromAppHelper1: '在已安裝應用程式列表點擊 `參數` 按鈕,進入編輯頁面即可修改容器名稱。',
|
containerFromAppHelper1: '在已安裝應用程式列表點擊 [參數] 按鈕,進入編輯頁面即可修改容器名稱。',
|
||||||
command: '命令',
|
command: '命令',
|
||||||
console: '控製臺交互',
|
console: '控製臺交互',
|
||||||
tty: '偽終端 ( -t )',
|
tty: '偽終端 ( -t )',
|
||||||
@@ -707,6 +710,7 @@ const message = {
|
|||||||
urlWarning: '路徑前綴不需要添加 http:// 或 https://,請修改',
|
urlWarning: '路徑前綴不需要添加 http:// 或 https://,請修改',
|
||||||
|
|
||||||
network: '網絡',
|
network: '網絡',
|
||||||
|
networkHelper: '刪除 1panel-network 容器網絡將影響部分應用和運行環境的正常使用,是否繼續?',
|
||||||
createNetwork: '創建網絡',
|
createNetwork: '創建網絡',
|
||||||
networkName: '網絡名',
|
networkName: '網絡名',
|
||||||
driver: '模式',
|
driver: '模式',
|
||||||
@@ -1034,7 +1038,6 @@ const message = {
|
|||||||
clam: {
|
clam: {
|
||||||
clam: '病毒掃描',
|
clam: '病毒掃描',
|
||||||
cron: '定時掃描',
|
cron: '定時掃描',
|
||||||
cronHelper: '專業版支持定時掃描功能',
|
|
||||||
specErr: '執行周期格式錯誤,請檢查後重試!',
|
specErr: '執行周期格式錯誤,請檢查後重試!',
|
||||||
disableMsg: '停止定時執行會導致該掃描任務不再自動執行。是否繼續?',
|
disableMsg: '停止定時執行會導致該掃描任務不再自動執行。是否繼續?',
|
||||||
enableMsg: '啟用定時執行會讓該掃描任務定期自動執行。是否繼續?',
|
enableMsg: '啟用定時執行會讓該掃描任務定期自動執行。是否繼續?',
|
||||||
@@ -1308,8 +1311,8 @@ const message = {
|
|||||||
systemIP: '伺服器地址',
|
systemIP: '伺服器地址',
|
||||||
proxy: '代理伺服器',
|
proxy: '代理伺服器',
|
||||||
proxyHelper: '設置代理伺服器後,將在以下場景中生效:',
|
proxyHelper: '設置代理伺服器後,將在以下場景中生效:',
|
||||||
proxyHelper1: '應用商店的安裝包下載和同步(專業版功能)',
|
proxyHelper1: '應用商店的安裝包下載和同步',
|
||||||
proxyHelper2: '系統版本升級及獲取更新說明(專業版功能)',
|
proxyHelper2: '系統版本升級及獲取更新說明',
|
||||||
proxyHelper3: '系統許可證的驗證和同步',
|
proxyHelper3: '系統許可證的驗證和同步',
|
||||||
proxyType: '代理類型',
|
proxyType: '代理類型',
|
||||||
proxyUrl: '代理地址',
|
proxyUrl: '代理地址',
|
||||||
@@ -1468,7 +1471,9 @@ const message = {
|
|||||||
bindDomain: '域名綁定',
|
bindDomain: '域名綁定',
|
||||||
unBindDomain: '域名解綁',
|
unBindDomain: '域名解綁',
|
||||||
panelSSL: '面板 SSL',
|
panelSSL: '面板 SSL',
|
||||||
panelSSLHelper: '面板 SSL 自动续期后需要手动重启 1Panel 服务才可生效',
|
sslAutoRestart: '證書自動續期後重啟 1Panel 服務',
|
||||||
|
sslChangeHelper1: '當前未勾選自動重啟 1Panel 服務,證書自動續期後不會立即生效,仍需手動重啟 1Panel。',
|
||||||
|
sslChangeHelper2: '設置面板 SSL 後將自動重啟 1Panel 服務,是否繼續?',
|
||||||
unBindDomainHelper: '解除域名綁定可能造成系統不安全,是否繼續?',
|
unBindDomainHelper: '解除域名綁定可能造成系統不安全,是否繼續?',
|
||||||
bindDomainHelper: '設置域名綁定後,僅能通過設置中域名訪問 1Panel 服務',
|
bindDomainHelper: '設置域名綁定後,僅能通過設置中域名訪問 1Panel 服務',
|
||||||
bindDomainHelper1: '綁定域名為空時,則取消域名綁定',
|
bindDomainHelper1: '綁定域名為空時,則取消域名綁定',
|
||||||
@@ -1538,46 +1543,6 @@ const message = {
|
|||||||
compressPassword: '壓縮密碼',
|
compressPassword: '壓縮密碼',
|
||||||
backupRecoverMessage: '請輸入壓縮或解壓縮密碼(留空則不設定)',
|
backupRecoverMessage: '請輸入壓縮或解壓縮密碼(留空則不設定)',
|
||||||
},
|
},
|
||||||
license: {
|
|
||||||
community: '社區版:',
|
|
||||||
community2: '社區版',
|
|
||||||
pro: '專業版:',
|
|
||||||
trial: '試用版',
|
|
||||||
office: '正式版',
|
|
||||||
trialInfo: '版本',
|
|
||||||
authorizationId: '訂閱授權 ID',
|
|
||||||
authorizedUser: '被授權方',
|
|
||||||
expiresAt: '到期時間',
|
|
||||||
productName: '產品名稱',
|
|
||||||
productStatus: '產品狀態',
|
|
||||||
Lost01: '失聯 * 1',
|
|
||||||
Lost02: '失聯 * 2',
|
|
||||||
Lost03: '已失聯',
|
|
||||||
Enable: '已啟用',
|
|
||||||
Disable: '未啟用',
|
|
||||||
lostHelper: '許可證需要定時同步是否可用,請保證正常外網訪問,失聯三次後將解除許可證綁定',
|
|
||||||
quickUpdate: '快速更新',
|
|
||||||
import: '導入',
|
|
||||||
power: '授 權',
|
|
||||||
unbind: '解除綁定',
|
|
||||||
unbindHelper: '解除綁定後將清除所有專業版相關設置,是否繼續?',
|
|
||||||
importLicense: '導入許可證',
|
|
||||||
importHelper: '請點擊或拖動許可文件到此處',
|
|
||||||
technicalAdvice: '技術諮詢',
|
|
||||||
advice: '諮詢',
|
|
||||||
indefinitePeriod: '無限期',
|
|
||||||
levelUpPro: '升級專業版',
|
|
||||||
licenseSync: '許可證同步',
|
|
||||||
knowMorePro: '了解更多',
|
|
||||||
closeAlert: '當前頁面可在面板設置中關閉顯示',
|
|
||||||
introduce: '功能介紹',
|
|
||||||
waf: '升級專業版可以獲得攔截地圖、日誌、封鎖記錄、地理位置封禁、自定義規則、自定義攔截頁面等功能。',
|
|
||||||
tamper: '升級專業版可以保護網站免受未經授權的修改或篡改。',
|
|
||||||
gpu: '升級專業版可以幫助用戶實時直觀查看到 GPU 的工作負載、溫度、顯存等重要參數。',
|
|
||||||
setting: '升級專業版可以自定義面板 Logo、歡迎簡介等信息。',
|
|
||||||
monitor: '升級專業版可以查看網站的即時狀態、訪客趨勢、訪客來源、請求日誌等資訊。 ',
|
|
||||||
alert: '陞級專業版可通過簡訊接收告警資訊,並查看告警日誌,全面掌控各類關鍵事件,確保系統運行無憂。',
|
|
||||||
},
|
|
||||||
clean: {
|
clean: {
|
||||||
scan: '開始掃描',
|
scan: '開始掃描',
|
||||||
scanHelper: '輕鬆梳理 1Panel 運行期間積累的垃圾文件',
|
scanHelper: '輕鬆梳理 1Panel 運行期間積累的垃圾文件',
|
||||||
@@ -1781,7 +1746,7 @@ const message = {
|
|||||||
applySSL: '證書申請',
|
applySSL: '證書申請',
|
||||||
SSLList: '證書列表',
|
SSLList: '證書列表',
|
||||||
createDnsAccount: 'DNS賬戶',
|
createDnsAccount: 'DNS賬戶',
|
||||||
aliyun: '阿裏雲DNS',
|
aliyun: '阿裏雲',
|
||||||
manual: '手動解析',
|
manual: '手動解析',
|
||||||
key: '密鑰',
|
key: '密鑰',
|
||||||
check: '查看',
|
check: '查看',
|
||||||
|
|||||||
@@ -559,7 +559,10 @@ const message = {
|
|||||||
container: {
|
container: {
|
||||||
create: '创建容器',
|
create: '创建容器',
|
||||||
edit: '编辑容器',
|
edit: '编辑容器',
|
||||||
updateContainerHelper: '容器编辑需要重建容器,任何未持久化的数据将会丢失,是否继续?',
|
updateHelper1: '检测到该容器来源于应用商店,请注意以下两点:',
|
||||||
|
updateHelper2: '1. 当前修改内容不会同步到应用商店的已安装应用。',
|
||||||
|
updateHelper3: '2. 如果在已安装页面修改应用,当前编辑的部分内容将失效。',
|
||||||
|
updateHelper4: '编辑容器需要重建,任何未持久化的数据将丢失,是否继续?',
|
||||||
containerList: '容器列表',
|
containerList: '容器列表',
|
||||||
operatorHelper: '将对以下容器进行 {0} 操作,是否继续?',
|
operatorHelper: '将对以下容器进行 {0} 操作,是否继续?',
|
||||||
operatorAppHelper:
|
operatorAppHelper:
|
||||||
@@ -622,7 +625,7 @@ const message = {
|
|||||||
inputIpv6: '请输入 ipv6 地址',
|
inputIpv6: '请输入 ipv6 地址',
|
||||||
|
|
||||||
containerFromAppHelper: '检测到该容器来源于应用商店,应用操作可能会导致当前编辑失效',
|
containerFromAppHelper: '检测到该容器来源于应用商店,应用操作可能会导致当前编辑失效',
|
||||||
containerFromAppHelper1: '在已安装应用列表点击 `参数` 按钮,进入编辑页面即可修改容器名称。',
|
containerFromAppHelper1: '在应用商店的已安装页面,点击 [参数] 按钮,进入编辑页面修改容器名称。',
|
||||||
command: '命令',
|
command: '命令',
|
||||||
console: '控制台交互',
|
console: '控制台交互',
|
||||||
tty: '伪终端 ( -t )',
|
tty: '伪终端 ( -t )',
|
||||||
@@ -709,6 +712,7 @@ const message = {
|
|||||||
urlWarning: '路径前缀不需要添加 http:// 或 https://, 请修改',
|
urlWarning: '路径前缀不需要添加 http:// 或 https://, 请修改',
|
||||||
|
|
||||||
network: '网络',
|
network: '网络',
|
||||||
|
networkHelper: '删除 1panel-network 容器网络将影响部分应用和运行环境的正常使用,是否继续?',
|
||||||
createNetwork: '创建网络',
|
createNetwork: '创建网络',
|
||||||
networkName: '网络名',
|
networkName: '网络名',
|
||||||
driver: '模式',
|
driver: '模式',
|
||||||
@@ -1035,7 +1039,6 @@ const message = {
|
|||||||
clam: {
|
clam: {
|
||||||
clam: '病毒扫描',
|
clam: '病毒扫描',
|
||||||
cron: '定时扫描',
|
cron: '定时扫描',
|
||||||
cronHelper: '专业版支持定时扫描功能 ',
|
|
||||||
specErr: '执行周期格式错误,请检查后重试!',
|
specErr: '执行周期格式错误,请检查后重试!',
|
||||||
disableMsg: '停止定时执行会导致该扫描任务不再自动执行。是否继续?',
|
disableMsg: '停止定时执行会导致该扫描任务不再自动执行。是否继续?',
|
||||||
enableMsg: '启用定时执行会让该扫描任务定期自动执行。是否继续?',
|
enableMsg: '启用定时执行会让该扫描任务定期自动执行。是否继续?',
|
||||||
@@ -1310,8 +1313,8 @@ const message = {
|
|||||||
systemIP: '服务器地址',
|
systemIP: '服务器地址',
|
||||||
proxy: '代理服务器',
|
proxy: '代理服务器',
|
||||||
proxyHelper: '设置代理服务器后,将在以下场景中生效:',
|
proxyHelper: '设置代理服务器后,将在以下场景中生效:',
|
||||||
proxyHelper1: '应用商店的安装包下载和同步(专业版功能)',
|
proxyHelper1: '应用商店的安装包下载和同步',
|
||||||
proxyHelper2: '系统版本升级及获取更新说明(专业版功能)',
|
proxyHelper2: '系统版本升级及获取更新说明',
|
||||||
proxyHelper3: '系统许可证的验证和同步',
|
proxyHelper3: '系统许可证的验证和同步',
|
||||||
proxyType: '代理类型',
|
proxyType: '代理类型',
|
||||||
proxyUrl: '代理地址',
|
proxyUrl: '代理地址',
|
||||||
@@ -1470,7 +1473,9 @@ const message = {
|
|||||||
bindDomain: '域名绑定',
|
bindDomain: '域名绑定',
|
||||||
unBindDomain: '域名解绑',
|
unBindDomain: '域名解绑',
|
||||||
panelSSL: '面板 SSL',
|
panelSSL: '面板 SSL',
|
||||||
panelSSLHelper: '面板 SSL 自动续期后需要手动重启 1Panel 服务才可生效',
|
sslAutoRestart: '证书自动续期后重启 1Panel 服务',
|
||||||
|
sslChangeHelper1: '当前未勾选自动重启 1Panel 服务,证书自动续期后不会立即生效,仍需手动重启 1Panel。',
|
||||||
|
sslChangeHelper2: '设置面板 SSL 后将自动重启 1Panel 服务,是否继续?',
|
||||||
unBindDomainHelper: '解除域名绑定可能造成系统不安全,是否继续?',
|
unBindDomainHelper: '解除域名绑定可能造成系统不安全,是否继续?',
|
||||||
bindDomainHelper: '设置域名绑定后,仅能通过设置中域名访问 1Panel 服务',
|
bindDomainHelper: '设置域名绑定后,仅能通过设置中域名访问 1Panel 服务',
|
||||||
bindDomainHelper1: '绑定域名为空时,则取消域名绑定',
|
bindDomainHelper1: '绑定域名为空时,则取消域名绑定',
|
||||||
@@ -1494,7 +1499,6 @@ const message = {
|
|||||||
mfaInterval: '刷新时间(秒)',
|
mfaInterval: '刷新时间(秒)',
|
||||||
mfaTitleHelper: '用于区分不同 1Panel 主机,修改后请重新扫描或手动添加密钥信息!',
|
mfaTitleHelper: '用于区分不同 1Panel 主机,修改后请重新扫描或手动添加密钥信息!',
|
||||||
mfaIntervalHelper: '修改刷新时间后,请重新扫描或手动添加密钥信息!',
|
mfaIntervalHelper: '修改刷新时间后,请重新扫描或手动添加密钥信息!',
|
||||||
sslChangeHelper: 'https 设置修改需要重启服务,是否继续?',
|
|
||||||
sslDisable: '禁用',
|
sslDisable: '禁用',
|
||||||
sslDisableHelper: '禁用 https 服务,需要重启面板才能生效,是否继续?',
|
sslDisableHelper: '禁用 https 服务,需要重启面板才能生效,是否继续?',
|
||||||
noAuthSetting: '未认证设置',
|
noAuthSetting: '未认证设置',
|
||||||
@@ -1540,46 +1544,6 @@ const message = {
|
|||||||
compressPassword: '压缩密码',
|
compressPassword: '压缩密码',
|
||||||
backupRecoverMessage: '请输入压缩或解压缩密码(留空则不设置)',
|
backupRecoverMessage: '请输入压缩或解压缩密码(留空则不设置)',
|
||||||
},
|
},
|
||||||
license: {
|
|
||||||
community: '社区版:',
|
|
||||||
community2: '社区版',
|
|
||||||
pro: '专业版:',
|
|
||||||
trial: '试用版',
|
|
||||||
office: '正式版',
|
|
||||||
trialInfo: '版本',
|
|
||||||
authorizationId: '订阅授权 ID',
|
|
||||||
authorizedUser: '被授权方',
|
|
||||||
expiresAt: '到期时间',
|
|
||||||
productName: '产品名称',
|
|
||||||
productStatus: '产品状态',
|
|
||||||
Lost01: '失联 * 1',
|
|
||||||
Lost02: '失联 * 2',
|
|
||||||
Lost03: '已失联',
|
|
||||||
Enable: '已激活',
|
|
||||||
Disable: '未激活',
|
|
||||||
lostHelper: '许可证需要定时同步是否可用,请保证正常外网访问,失联三次后将解除许可证绑定',
|
|
||||||
quickUpdate: '快速更新',
|
|
||||||
import: '导入',
|
|
||||||
power: '授 权',
|
|
||||||
unbind: '解除绑定',
|
|
||||||
unbindHelper: '解除绑定后将清除所有专业版相关设置,是否继续?',
|
|
||||||
importLicense: '导入许可证',
|
|
||||||
importHelper: '请点击或拖动许可文件到此处',
|
|
||||||
technicalAdvice: '技术咨询',
|
|
||||||
advice: '咨询',
|
|
||||||
indefinitePeriod: '无限期',
|
|
||||||
levelUpPro: '升级专业版',
|
|
||||||
licenseSync: '许可证同步',
|
|
||||||
knowMorePro: '了解更多',
|
|
||||||
closeAlert: '当前页面可在面板设置中关闭显示',
|
|
||||||
introduce: '功能介绍',
|
|
||||||
waf: '升级专业版可以获得拦截地图、日志、封锁记录、地理位置封禁、自定义规则、自定义拦截页面等功能。',
|
|
||||||
tamper: '升级专业版可以保护网站免受未经授权的修改或篡改。',
|
|
||||||
gpu: '升级专业版可以帮助用户实时直观查看到 GPU 的工作负载、温度、显存等重要参数。',
|
|
||||||
setting: '升级专业版可以自定义面板 Logo、欢迎简介等信息。',
|
|
||||||
monitor: '升级专业版可以查看网站的实时状态、访客趋势、访客来源、请求日志等信息。',
|
|
||||||
alert: '升级专业版可通过短信接收告警信息,并查看告警日志,全面掌控各类关键事件,确保系统运行无忧。',
|
|
||||||
},
|
|
||||||
clean: {
|
clean: {
|
||||||
scan: '开始扫描',
|
scan: '开始扫描',
|
||||||
scanHelper: '轻松梳理 1Panel 运行期间积累的垃圾文件',
|
scanHelper: '轻松梳理 1Panel 运行期间积累的垃圾文件',
|
||||||
@@ -1783,7 +1747,7 @@ const message = {
|
|||||||
applySSL: '证书申请',
|
applySSL: '证书申请',
|
||||||
SSLList: '证书列表',
|
SSLList: '证书列表',
|
||||||
createDnsAccount: 'DNS账户',
|
createDnsAccount: 'DNS账户',
|
||||||
aliyun: '阿里云DNS',
|
aliyun: '阿里云',
|
||||||
manual: '手动解析',
|
manual: '手动解析',
|
||||||
key: '密钥',
|
key: '密钥',
|
||||||
check: '查看',
|
check: '查看',
|
||||||
|
|||||||
@@ -100,7 +100,7 @@ onMounted(() => {
|
|||||||
|
|
||||||
loadStatus();
|
loadStatus();
|
||||||
loadProductProFromDB();
|
loadProductProFromDB();
|
||||||
|
globalStore.isFullScreen = false;
|
||||||
const mqList = window.matchMedia('(prefers-color-scheme: dark)');
|
const mqList = window.matchMedia('(prefers-color-scheme: dark)');
|
||||||
if (mqList.addEventListener) {
|
if (mqList.addEventListener) {
|
||||||
mqList.addEventListener('change', () => {
|
mqList.addEventListener('change', () => {
|
||||||
|
|||||||
@@ -37,16 +37,6 @@ const settingRouter = {
|
|||||||
activeMenu: 'Setting',
|
activeMenu: 'Setting',
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
|
||||||
path: 'license',
|
|
||||||
name: 'License',
|
|
||||||
component: () => import('@/views/setting/license/index.vue'),
|
|
||||||
hidden: true,
|
|
||||||
meta: {
|
|
||||||
requiresAuth: true,
|
|
||||||
activeMenu: 'Setting',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
path: 'about',
|
path: 'about',
|
||||||
name: 'About',
|
name: 'About',
|
||||||
|
|||||||
@@ -64,7 +64,7 @@ const webSiteRouter = {
|
|||||||
hidden: true,
|
hidden: true,
|
||||||
component: () => import('@/views/website/runtime/java/index.vue'),
|
component: () => import('@/views/website/runtime/java/index.vue'),
|
||||||
meta: {
|
meta: {
|
||||||
activeMenu: '/websites/runtimes/java',
|
activeMenu: '/websites/runtimes/php',
|
||||||
requiresAuth: false,
|
requiresAuth: false,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
@@ -74,7 +74,7 @@ const webSiteRouter = {
|
|||||||
hidden: true,
|
hidden: true,
|
||||||
component: () => import('@/views/website/runtime/go/index.vue'),
|
component: () => import('@/views/website/runtime/go/index.vue'),
|
||||||
meta: {
|
meta: {
|
||||||
activeMenu: '/websites/runtimes/go',
|
activeMenu: '/websites/runtimes/php',
|
||||||
requiresAuth: false,
|
requiresAuth: false,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
@@ -84,7 +84,7 @@ const webSiteRouter = {
|
|||||||
hidden: true,
|
hidden: true,
|
||||||
component: () => import('@/views/website/runtime/python/index.vue'),
|
component: () => import('@/views/website/runtime/python/index.vue'),
|
||||||
meta: {
|
meta: {
|
||||||
activeMenu: '/websites/runtimes/python',
|
activeMenu: '/websites/runtimes/php',
|
||||||
requiresAuth: false,
|
requiresAuth: false,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -23,8 +23,3 @@ body,
|
|||||||
.el-switch--small,.is-checked .el-switch__core::after {
|
.el-switch--small,.is-checked .el-switch__core::after {
|
||||||
margin-left: 12px !important;
|
margin-left: 12px !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.el-alert__title {
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -94,7 +94,6 @@ import ComposeDetail from '@/views/container/compose/detail/index.vue';
|
|||||||
import { loadContainerLog, loadDockerStatus, searchCompose } from '@/api/modules/container';
|
import { loadContainerLog, loadDockerStatus, searchCompose } from '@/api/modules/container';
|
||||||
import i18n from '@/lang';
|
import i18n from '@/lang';
|
||||||
import { Container } from '@/api/interface/container';
|
import { Container } from '@/api/interface/container';
|
||||||
import { loadBaseDir } from '@/api/modules/setting';
|
|
||||||
import router from '@/routers';
|
import router from '@/routers';
|
||||||
|
|
||||||
const data = ref();
|
const data = ref();
|
||||||
@@ -102,7 +101,6 @@ const selects = ref<any>([]);
|
|||||||
const loading = ref(false);
|
const loading = ref(false);
|
||||||
|
|
||||||
const isOnDetail = ref(false);
|
const isOnDetail = ref(false);
|
||||||
const baseDir = ref();
|
|
||||||
|
|
||||||
const paginationConfig = reactive({
|
const paginationConfig = reactive({
|
||||||
cacheSizeKey: 'container-compose-page-size',
|
cacheSizeKey: 'container-compose-page-size',
|
||||||
@@ -133,12 +131,7 @@ const goSetting = async () => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const toComposeFolder = async (row: Container.ComposeInfo) => {
|
const toComposeFolder = async (row: Container.ComposeInfo) => {
|
||||||
router.push({ path: '/hosts/files', query: { path: baseDir.value + '/docker/compose/' + row.name } });
|
router.push({ path: '/hosts/files', query: { path: row.workdir } });
|
||||||
};
|
|
||||||
|
|
||||||
const loadPath = async () => {
|
|
||||||
const pathRes = await loadBaseDir();
|
|
||||||
baseDir.value = pathRes.data;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
const search = async () => {
|
const search = async () => {
|
||||||
@@ -230,7 +223,6 @@ const buttons = [
|
|||||||
},
|
},
|
||||||
];
|
];
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
loadPath();
|
|
||||||
loadStatus();
|
loadStatus();
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@@ -25,12 +25,6 @@
|
|||||||
>
|
>
|
||||||
<el-row type="flex" justify="center">
|
<el-row type="flex" justify="center">
|
||||||
<el-col :span="22">
|
<el-col :span="22">
|
||||||
<el-alert
|
|
||||||
v-if="dialogData.title === 'edit' && isFromApp(dialogData.rowData!)"
|
|
||||||
:title="$t('container.containerFromAppHelper')"
|
|
||||||
:closable="false"
|
|
||||||
type="error"
|
|
||||||
/>
|
|
||||||
<el-form-item class="mt-5" :label="$t('commons.table.name')" prop="name">
|
<el-form-item class="mt-5" :label="$t('commons.table.name')" prop="name">
|
||||||
<el-input
|
<el-input
|
||||||
:disabled="isFromApp(dialogData.rowData!)"
|
:disabled="isFromApp(dialogData.rowData!)"
|
||||||
@@ -296,13 +290,39 @@
|
|||||||
</span>
|
</span>
|
||||||
</template>
|
</template>
|
||||||
</el-drawer>
|
</el-drawer>
|
||||||
|
<el-dialog v-model="dialogVisible" width="30%" :title="$t('commons.button.edit')">
|
||||||
|
<div v-if="dialogData.title === 'edit' && isFromApp(dialogData.rowData!)" class="leading-6">
|
||||||
|
<div>
|
||||||
|
<span>{{ $t('container.updateHelper1') }}</span>
|
||||||
|
</div>
|
||||||
|
<br />
|
||||||
|
<div>
|
||||||
|
<span>{{ $t('container.updateHelper2') }}</span>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<span>{{ $t('container.updateHelper3') }}</span>
|
||||||
|
</div>
|
||||||
|
<br />
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<span>{{ $t('container.updateHelper4') }}</span>
|
||||||
|
</div>
|
||||||
|
<template #footer>
|
||||||
|
<el-button :disabled="loading" @click="dialogVisible = false">
|
||||||
|
{{ $t('commons.button.cancel') }}
|
||||||
|
</el-button>
|
||||||
|
<el-button :disabled="loading" type="primary" @click="submit()">
|
||||||
|
{{ $t('commons.button.confirm') }}
|
||||||
|
</el-button>
|
||||||
|
</template>
|
||||||
|
</el-dialog>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { reactive, ref } from 'vue';
|
import { reactive, ref } from 'vue';
|
||||||
import { Rules, checkFloatNumberRange, checkNumberRange } from '@/global/form-rules';
|
import { Rules, checkFloatNumberRange, checkNumberRange } from '@/global/form-rules';
|
||||||
import i18n from '@/lang';
|
import i18n from '@/lang';
|
||||||
import { ElForm, ElMessageBox } from 'element-plus';
|
import { ElForm } from 'element-plus';
|
||||||
import DrawerHeader from '@/components/drawer-header/index.vue';
|
import DrawerHeader from '@/components/drawer-header/index.vue';
|
||||||
import {
|
import {
|
||||||
listImage,
|
listImage,
|
||||||
@@ -327,6 +347,7 @@ interface DialogProps {
|
|||||||
|
|
||||||
const title = ref<string>('');
|
const title = ref<string>('');
|
||||||
const drawerVisible = ref(false);
|
const drawerVisible = ref(false);
|
||||||
|
const dialogVisible = ref(false);
|
||||||
|
|
||||||
const dialogData = ref<DialogProps>({
|
const dialogData = ref<DialogProps>({
|
||||||
title: '',
|
title: '',
|
||||||
@@ -386,6 +407,7 @@ const limits = ref<Container.ResourceLimit>({
|
|||||||
const handleClose = () => {
|
const handleClose = () => {
|
||||||
emit('search');
|
emit('search');
|
||||||
drawerVisible.value = false;
|
drawerVisible.value = false;
|
||||||
|
dialogVisible.value = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
const rules = reactive({
|
const rules = reactive({
|
||||||
@@ -448,6 +470,7 @@ const loadNetworkOptions = async () => {
|
|||||||
const res = await listNetwork();
|
const res = await listNetwork();
|
||||||
networks.value = res.data;
|
networks.value = res.data;
|
||||||
};
|
};
|
||||||
|
|
||||||
const onSubmit = async (formEl: FormInstance | undefined) => {
|
const onSubmit = async (formEl: FormInstance | undefined) => {
|
||||||
if (dialogData.value.rowData!.volumes.length !== 0) {
|
if (dialogData.value.rowData!.volumes.length !== 0) {
|
||||||
for (const item of dialogData.value.rowData!.volumes) {
|
for (const item of dialogData.value.rowData!.volumes) {
|
||||||
@@ -460,6 +483,12 @@ const onSubmit = async (formEl: FormInstance | undefined) => {
|
|||||||
if (!formEl) return;
|
if (!formEl) return;
|
||||||
formEl.validate(async (valid) => {
|
formEl.validate(async (valid) => {
|
||||||
if (!valid) return;
|
if (!valid) return;
|
||||||
|
dialogVisible.value = true;
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
const submit = async () => {
|
||||||
|
dialogVisible.value = false;
|
||||||
if (dialogData.value.rowData?.envStr) {
|
if (dialogData.value.rowData?.envStr) {
|
||||||
dialogData.value.rowData.env = dialogData.value.rowData!.envStr.split('\n');
|
dialogData.value.rowData.env = dialogData.value.rowData!.envStr.split('\n');
|
||||||
}
|
}
|
||||||
@@ -516,37 +545,25 @@ const onSubmit = async (formEl: FormInstance | undefined) => {
|
|||||||
MsgSuccess(i18n.global.t('commons.msg.operationSuccess'));
|
MsgSuccess(i18n.global.t('commons.msg.operationSuccess'));
|
||||||
emit('search');
|
emit('search');
|
||||||
drawerVisible.value = false;
|
drawerVisible.value = false;
|
||||||
|
dialogVisible.value = false;
|
||||||
})
|
})
|
||||||
.catch(() => {
|
.catch(() => {
|
||||||
loading.value = false;
|
loading.value = false;
|
||||||
});
|
});
|
||||||
} else {
|
return;
|
||||||
ElMessageBox.confirm(
|
}
|
||||||
i18n.global.t('container.updateContainerHelper'),
|
|
||||||
i18n.global.t('commons.button.edit'),
|
|
||||||
{
|
|
||||||
confirmButtonText: i18n.global.t('commons.button.confirm'),
|
|
||||||
cancelButtonText: i18n.global.t('commons.button.cancel'),
|
|
||||||
},
|
|
||||||
)
|
|
||||||
.then(async () => {
|
|
||||||
await updateContainer(dialogData.value.rowData!)
|
await updateContainer(dialogData.value.rowData!)
|
||||||
.then(() => {
|
.then(() => {
|
||||||
loading.value = false;
|
loading.value = false;
|
||||||
MsgSuccess(i18n.global.t('commons.msg.operationSuccess'));
|
MsgSuccess(i18n.global.t('commons.msg.operationSuccess'));
|
||||||
emit('search');
|
emit('search');
|
||||||
drawerVisible.value = false;
|
drawerVisible.value = false;
|
||||||
|
dialogVisible.value = false;
|
||||||
})
|
})
|
||||||
.catch(() => {
|
.catch(() => {
|
||||||
updateContainerID();
|
updateContainerID();
|
||||||
loading.value = false;
|
loading.value = false;
|
||||||
});
|
});
|
||||||
})
|
|
||||||
.catch(() => {
|
|
||||||
loading.value = false;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
};
|
};
|
||||||
|
|
||||||
const updateContainerID = async () => {
|
const updateContainerID = async () => {
|
||||||
|
|||||||
@@ -198,17 +198,26 @@ const search = async () => {
|
|||||||
|
|
||||||
const batchDelete = async (row: Container.NetworkInfo | null) => {
|
const batchDelete = async (row: Container.NetworkInfo | null) => {
|
||||||
let names: Array<string> = [];
|
let names: Array<string> = [];
|
||||||
|
let hasPanelNetwork;
|
||||||
if (row === null) {
|
if (row === null) {
|
||||||
selects.value.forEach((item: Container.NetworkInfo) => {
|
selects.value.forEach((item: Container.NetworkInfo) => {
|
||||||
|
if (item.name === '1panel-network') {
|
||||||
|
hasPanelNetwork = true;
|
||||||
|
}
|
||||||
names.push(item.name);
|
names.push(item.name);
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
|
if (row.name === '1panel-network') {
|
||||||
|
hasPanelNetwork = true;
|
||||||
|
}
|
||||||
names.push(row.name);
|
names.push(row.name);
|
||||||
}
|
}
|
||||||
opRef.value.acceptParams({
|
opRef.value.acceptParams({
|
||||||
title: i18n.global.t('commons.button.delete'),
|
title: i18n.global.t('commons.button.delete'),
|
||||||
names: names,
|
names: names,
|
||||||
msg: i18n.global.t('commons.msg.operatorHelper', [
|
msg: hasPanelNetwork
|
||||||
|
? i18n.global.t('container.networkHelper')
|
||||||
|
: i18n.global.t('commons.msg.operatorHelper', [
|
||||||
i18n.global.t('container.network'),
|
i18n.global.t('container.network'),
|
||||||
i18n.global.t('commons.button.delete'),
|
i18n.global.t('commons.button.delete'),
|
||||||
]),
|
]),
|
||||||
|
|||||||
@@ -336,31 +336,6 @@
|
|||||||
<el-input clearable v-model.trim="dialogData.rowData!.url" />
|
<el-input clearable v-model.trim="dialogData.rowData!.url" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|
||||||
<el-form-item prop="hasAlert" v-if="alertTypes.includes(dialogData.rowData!.type)">
|
|
||||||
<el-checkbox v-model="dialogData.rowData!.hasAlert" :label="$t('alert.isAlert')" />
|
|
||||||
<span class="input-help">{{ $t('alert.cronJobHelper') }}</span>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item
|
|
||||||
prop="alertCount"
|
|
||||||
v-if="dialogData.rowData!.hasAlert && isProductPro"
|
|
||||||
:label="$t('alert.alertCount')"
|
|
||||||
>
|
|
||||||
<el-input-number
|
|
||||||
style="width: 200px"
|
|
||||||
:min="1"
|
|
||||||
step-strictly
|
|
||||||
:step="1"
|
|
||||||
v-model.number="dialogData.rowData!.alertCount"
|
|
||||||
></el-input-number>
|
|
||||||
<span class="input-help">{{ $t('alert.alertCountHelper') }}</span>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item v-if="dialogData.rowData!.hasAlert && !isProductPro">
|
|
||||||
<span>{{ $t('alert.licenseHelper') }}</span>
|
|
||||||
<el-button link type="primary" @click="toUpload">
|
|
||||||
{{ $t('license.levelUpPro') }}
|
|
||||||
</el-button>
|
|
||||||
</el-form-item>
|
|
||||||
|
|
||||||
<el-form-item
|
<el-form-item
|
||||||
v-if="hasExclusionRules()"
|
v-if="hasExclusionRules()"
|
||||||
:label="$t('cronjob.exclusionRules')"
|
:label="$t('cronjob.exclusionRules')"
|
||||||
@@ -386,7 +361,6 @@
|
|||||||
</el-button>
|
</el-button>
|
||||||
</span>
|
</span>
|
||||||
</template>
|
</template>
|
||||||
<LicenseImport ref="licenseRef" />
|
|
||||||
</el-drawer>
|
</el-drawer>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
@@ -408,9 +382,6 @@ import { listContainer } from '@/api/modules/container';
|
|||||||
import { Database } from '@/api/interface/database';
|
import { Database } from '@/api/interface/database';
|
||||||
import { ListAppInstalled } from '@/api/modules/app';
|
import { ListAppInstalled } from '@/api/modules/app';
|
||||||
import { loadDefaultSpec, specOptions, transObjToSpec, transSpecToObj, weekOptions } from './../helper';
|
import { loadDefaultSpec, specOptions, transObjToSpec, transSpecToObj, weekOptions } from './../helper';
|
||||||
import { storeToRefs } from 'pinia';
|
|
||||||
import { GlobalStore } from '@/store';
|
|
||||||
import LicenseImport from '@/components/license-import/index.vue';
|
|
||||||
|
|
||||||
const router = useRouter();
|
const router = useRouter();
|
||||||
|
|
||||||
@@ -426,11 +397,6 @@ const dialogData = ref<DialogProps>({
|
|||||||
title: '',
|
title: '',
|
||||||
});
|
});
|
||||||
|
|
||||||
const globalStore = GlobalStore();
|
|
||||||
const licenseRef = ref();
|
|
||||||
const { isProductPro } = storeToRefs(globalStore);
|
|
||||||
const alertTypes = ['app', 'website', 'database', 'directory', 'log', 'snapshot'];
|
|
||||||
|
|
||||||
const acceptParams = (params: DialogProps): void => {
|
const acceptParams = (params: DialogProps): void => {
|
||||||
dialogData.value = params;
|
dialogData.value = params;
|
||||||
if (dialogData.value.rowData?.spec) {
|
if (dialogData.value.rowData?.spec) {
|
||||||
@@ -457,8 +423,6 @@ const acceptParams = (params: DialogProps): void => {
|
|||||||
if (dialogData.value.rowData.dbName) {
|
if (dialogData.value.rowData.dbName) {
|
||||||
dialogData.value.rowData.dbNameList = dialogData.value.rowData.dbName.split(',');
|
dialogData.value.rowData.dbNameList = dialogData.value.rowData.dbName.split(',');
|
||||||
}
|
}
|
||||||
dialogData.value.rowData.hasAlert = dialogData.value.rowData!.alertCount > 0;
|
|
||||||
dialogData.value.rowData!.alertCount = dialogData.value.rowData!.alertCount || 3;
|
|
||||||
dialogData.value.rowData!.command = dialogData.value.rowData!.command || 'sh';
|
dialogData.value.rowData!.command = dialogData.value.rowData!.command || 'sh';
|
||||||
dialogData.value.rowData!.isCustom =
|
dialogData.value.rowData!.isCustom =
|
||||||
dialogData.value.rowData!.command !== 'sh' &&
|
dialogData.value.rowData!.command !== 'sh' &&
|
||||||
@@ -596,18 +560,6 @@ const verifySpec = (rule: any, value: any, callback: any) => {
|
|||||||
callback();
|
callback();
|
||||||
};
|
};
|
||||||
|
|
||||||
function checkSendCount(rule: any, value: any, callback: any) {
|
|
||||||
if (value === '') {
|
|
||||||
callback();
|
|
||||||
}
|
|
||||||
const regex = /^(?:[1-9]|[12][0-9]|30)$/;
|
|
||||||
if (!regex.test(value)) {
|
|
||||||
return callback(new Error(i18n.global.t('commons.rule.numberRange', [1, 30])));
|
|
||||||
}
|
|
||||||
|
|
||||||
callback();
|
|
||||||
}
|
|
||||||
|
|
||||||
const rules = reactive({
|
const rules = reactive({
|
||||||
name: [Rules.requiredInput, Rules.noSpace],
|
name: [Rules.requiredInput, Rules.noSpace],
|
||||||
type: [Rules.requiredSelect],
|
type: [Rules.requiredSelect],
|
||||||
@@ -626,7 +578,6 @@ const rules = reactive({
|
|||||||
backupAccounts: [Rules.requiredSelect],
|
backupAccounts: [Rules.requiredSelect],
|
||||||
defaultDownload: [Rules.requiredSelect],
|
defaultDownload: [Rules.requiredSelect],
|
||||||
retainCopies: [Rules.number],
|
retainCopies: [Rules.number],
|
||||||
alertCount: [Rules.integerNumber, { validator: checkSendCount, trigger: 'blur' }],
|
|
||||||
});
|
});
|
||||||
|
|
||||||
type FormInstance = InstanceType<typeof ElForm>;
|
type FormInstance = InstanceType<typeof ElForm>;
|
||||||
@@ -805,17 +756,6 @@ const onSubmit = async (formEl: FormInstance | undefined) => {
|
|||||||
if (dialogData.value?.rowData?.exclusionRules) {
|
if (dialogData.value?.rowData?.exclusionRules) {
|
||||||
dialogData.value.rowData.exclusionRules = dialogData.value.rowData.exclusionRules.replaceAll('\n', ',');
|
dialogData.value.rowData.exclusionRules = dialogData.value.rowData.exclusionRules.replaceAll('\n', ',');
|
||||||
}
|
}
|
||||||
if (alertTypes.includes(dialogData.value.rowData.type)) {
|
|
||||||
dialogData.value.rowData.alertCount =
|
|
||||||
dialogData.value.rowData!.hasAlert && isProductPro.value ? dialogData.value.rowData.alertCount : 0;
|
|
||||||
dialogData.value.rowData.alertTitle =
|
|
||||||
dialogData.value.rowData!.hasAlert && isProductPro.value
|
|
||||||
? i18n.global.t('cronjob.alertTitle', [
|
|
||||||
i18n.global.t('cronjob.' + dialogData.value.rowData.type),
|
|
||||||
dialogData.value.rowData.name,
|
|
||||||
])
|
|
||||||
: '';
|
|
||||||
}
|
|
||||||
if (!dialogData.value.rowData) return;
|
if (!dialogData.value.rowData) return;
|
||||||
if (dialogData.value.title === 'create') {
|
if (dialogData.value.title === 'create') {
|
||||||
await addCronjob(dialogData.value.rowData);
|
await addCronjob(dialogData.value.rowData);
|
||||||
@@ -830,10 +770,6 @@ const onSubmit = async (formEl: FormInstance | undefined) => {
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
const toUpload = () => {
|
|
||||||
licenseRef.value.acceptParams();
|
|
||||||
};
|
|
||||||
|
|
||||||
defineExpose({
|
defineExpose({
|
||||||
acceptParams,
|
acceptParams,
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -21,6 +21,7 @@
|
|||||||
v-model:mask-show="maskShow"
|
v-model:mask-show="maskShow"
|
||||||
@setting="onSetting"
|
@setting="onSetting"
|
||||||
@is-exist="checkExist"
|
@is-exist="checkExist"
|
||||||
|
ref="appStatusRef"
|
||||||
></AppStatus>
|
></AppStatus>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
@@ -327,6 +328,8 @@ const dashboardName = ref();
|
|||||||
const dashboardKey = ref();
|
const dashboardKey = ref();
|
||||||
const dashboardVisible = ref(false);
|
const dashboardVisible = ref(false);
|
||||||
|
|
||||||
|
const appStatusRef = ref();
|
||||||
|
|
||||||
const dialogPortJumpRef = ref();
|
const dialogPortJumpRef = ref();
|
||||||
|
|
||||||
const data = ref();
|
const data = ref();
|
||||||
@@ -384,6 +387,9 @@ const onSetting = async () => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const changeDatabase = async () => {
|
const changeDatabase = async () => {
|
||||||
|
if (currentDB.value.from === 'local') {
|
||||||
|
appStatusRef.value.onCheck();
|
||||||
|
}
|
||||||
for (const item of dbOptionsLocal.value) {
|
for (const item of dbOptionsLocal.value) {
|
||||||
if (item.database == currentDBName.value) {
|
if (item.database == currentDBName.value) {
|
||||||
currentDB.value = item;
|
currentDB.value = item;
|
||||||
|
|||||||
@@ -19,6 +19,7 @@
|
|||||||
v-model:mask-show="maskShow"
|
v-model:mask-show="maskShow"
|
||||||
@setting="onSetting"
|
@setting="onSetting"
|
||||||
@is-exist="checkExist"
|
@is-exist="checkExist"
|
||||||
|
ref="appStatusRef"
|
||||||
></AppStatus>
|
></AppStatus>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
@@ -305,6 +306,7 @@ const postgresqlContainer = ref();
|
|||||||
const postgresqlStatus = ref();
|
const postgresqlStatus = ref();
|
||||||
const postgresqlVersion = ref();
|
const postgresqlVersion = ref();
|
||||||
|
|
||||||
|
const appStatusRef = ref();
|
||||||
const dialogRef = ref();
|
const dialogRef = ref();
|
||||||
const onOpenDialog = async () => {
|
const onOpenDialog = async () => {
|
||||||
let params = {
|
let params = {
|
||||||
@@ -348,6 +350,9 @@ const onSetting = async () => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const changeDatabase = async () => {
|
const changeDatabase = async () => {
|
||||||
|
if (currentDB.value.from === 'local') {
|
||||||
|
appStatusRef.value.onCheck();
|
||||||
|
}
|
||||||
for (const item of dbOptionsLocal.value) {
|
for (const item of dbOptionsLocal.value) {
|
||||||
if (item.database == currentDBName.value) {
|
if (item.database == currentDBName.value) {
|
||||||
currentDB.value = item;
|
currentDB.value = item;
|
||||||
|
|||||||
@@ -128,7 +128,7 @@ const onOpenDialog = async (
|
|||||||
rowData: Partial<Database.DatabaseInfo> = {
|
rowData: Partial<Database.DatabaseInfo> = {
|
||||||
name: '',
|
name: '',
|
||||||
type: 'postgresql',
|
type: 'postgresql',
|
||||||
version: '16.x',
|
version: '17.x',
|
||||||
address: '',
|
address: '',
|
||||||
port: 5432,
|
port: 5432,
|
||||||
username: '',
|
username: '',
|
||||||
|
|||||||
@@ -27,6 +27,7 @@
|
|||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item :label="$t('database.version')" prop="version">
|
<el-form-item :label="$t('database.version')" prop="version">
|
||||||
<el-radio-group v-model="dialogData.rowData!.version" @change="isOK = false">
|
<el-radio-group v-model="dialogData.rowData!.version" @change="isOK = false">
|
||||||
|
<el-radio label="17.x" value="17.x" />
|
||||||
<el-radio label="16.x" value="16.x" />
|
<el-radio label="16.x" value="16.x" />
|
||||||
<el-radio label="15.x" value="15.x" />
|
<el-radio label="15.x" value="15.x" />
|
||||||
<el-radio label="14.x" value="14.x" />
|
<el-radio label="14.x" value="14.x" />
|
||||||
|
|||||||
@@ -19,6 +19,7 @@
|
|||||||
@before="onBefore"
|
@before="onBefore"
|
||||||
@after="onAfter"
|
@after="onAfter"
|
||||||
@setting="onSetting"
|
@setting="onSetting"
|
||||||
|
ref="appStatusRef"
|
||||||
></AppStatus>
|
></AppStatus>
|
||||||
</template>
|
</template>
|
||||||
<template #search v-if="!isOnSetting && currentDB">
|
<template #search v-if="!isOnSetting && currentDB">
|
||||||
@@ -164,6 +165,7 @@ const redisIsExist = ref(false);
|
|||||||
const redisStatus = ref();
|
const redisStatus = ref();
|
||||||
const terminalShow = ref(false);
|
const terminalShow = ref(false);
|
||||||
|
|
||||||
|
const appStatusRef = ref();
|
||||||
const commandVisible = ref(false);
|
const commandVisible = ref(false);
|
||||||
|
|
||||||
const redisCliExist = ref();
|
const redisCliExist = ref();
|
||||||
@@ -220,6 +222,9 @@ const goRouter = async (target: string) => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const changeDatabase = async () => {
|
const changeDatabase = async () => {
|
||||||
|
if (currentDB.value.from === 'local') {
|
||||||
|
appStatusRef.value.onCheck();
|
||||||
|
}
|
||||||
for (const item of dbOptionsLocal.value) {
|
for (const item of dbOptionsLocal.value) {
|
||||||
if (item.database == currentDBName.value) {
|
if (item.database == currentDBName.value) {
|
||||||
currentDB.value = item;
|
currentDB.value = item;
|
||||||
|
|||||||
@@ -7,17 +7,7 @@
|
|||||||
path: '/',
|
path: '/',
|
||||||
},
|
},
|
||||||
]"
|
]"
|
||||||
>
|
/>
|
||||||
<template #route-button>
|
|
||||||
<div class="router-button">
|
|
||||||
<template v-if="!isProductPro">
|
|
||||||
<el-button link type="primary" @click="toUpload">
|
|
||||||
{{ $t('license.levelUpPro') }}
|
|
||||||
</el-button>
|
|
||||||
</template>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
</RouterButton>
|
|
||||||
|
|
||||||
<el-alert
|
<el-alert
|
||||||
v-if="!isSafety && globalStore.showEntranceWarn"
|
v-if="!isSafety && globalStore.showEntranceWarn"
|
||||||
@@ -259,8 +249,6 @@
|
|||||||
</CardWithHeader>
|
</CardWithHeader>
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
|
|
||||||
<LicenseImport ref="licenseRef" />
|
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
@@ -269,7 +257,6 @@ import { onMounted, onBeforeUnmount, ref, reactive } from 'vue';
|
|||||||
import Status from '@/views/home/status/index.vue';
|
import Status from '@/views/home/status/index.vue';
|
||||||
import App from '@/views/home/app/index.vue';
|
import App from '@/views/home/app/index.vue';
|
||||||
import VCharts from '@/components/v-charts/index.vue';
|
import VCharts from '@/components/v-charts/index.vue';
|
||||||
import LicenseImport from '@/components/license-import/index.vue';
|
|
||||||
import CardWithHeader from '@/components/card-with-header/index.vue';
|
import CardWithHeader from '@/components/card-with-header/index.vue';
|
||||||
import i18n from '@/lang';
|
import i18n from '@/lang';
|
||||||
import { Dashboard } from '@/api/interface/dashboard';
|
import { Dashboard } from '@/api/interface/dashboard';
|
||||||
@@ -303,9 +290,6 @@ const timeNetDatas = ref<Array<string>>([]);
|
|||||||
const ioOptions = ref();
|
const ioOptions = ref();
|
||||||
const netOptions = ref();
|
const netOptions = ref();
|
||||||
|
|
||||||
const licenseRef = ref();
|
|
||||||
const isProductPro = ref();
|
|
||||||
|
|
||||||
const searchInfo = reactive({
|
const searchInfo = reactive({
|
||||||
ioOption: 'all',
|
ioOption: 'all',
|
||||||
netOption: 'all',
|
netOption: 'all',
|
||||||
@@ -659,12 +643,7 @@ const onBlur = () => {
|
|||||||
isActive.value = false;
|
isActive.value = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
const toUpload = () => {
|
|
||||||
licenseRef.value.acceptParams();
|
|
||||||
};
|
|
||||||
|
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
isProductPro.value = globalStore.isProductPro;
|
|
||||||
window.addEventListener('focus', onFocus);
|
window.addEventListener('focus', onFocus);
|
||||||
window.addEventListener('blur', onBlur);
|
window.addEventListener('blur', onBlur);
|
||||||
loadSafeStatus();
|
loadSafeStatus();
|
||||||
|
|||||||
@@ -478,11 +478,10 @@ import {
|
|||||||
SearchFavorite,
|
SearchFavorite,
|
||||||
} from '@/api/modules/files';
|
} from '@/api/modules/files';
|
||||||
import { computeSize, copyText, dateFormat, downloadFile, getFileType, getIcon, getRandomStr } from '@/utils/util';
|
import { computeSize, copyText, dateFormat, downloadFile, getFileType, getIcon, getRandomStr } from '@/utils/util';
|
||||||
import { StarFilled, Star, Top, Right, Close } from '@element-plus/icons-vue';
|
|
||||||
import { File } from '@/api/interface/file';
|
import { File } from '@/api/interface/file';
|
||||||
import { Mimetypes, Languages } from '@/global/mimetype';
|
import { Mimetypes, Languages } from '@/global/mimetype';
|
||||||
import { useRouter } from 'vue-router';
|
import { useRouter } from 'vue-router';
|
||||||
import { Back, Refresh } from '@element-plus/icons-vue';
|
import { Back, Refresh, StarFilled, Star, Top, Right, Close } from '@element-plus/icons-vue';
|
||||||
import { MsgWarning } from '@/utils/message';
|
import { MsgWarning } from '@/utils/message';
|
||||||
import { useSearchable } from './hooks/searchable';
|
import { useSearchable } from './hooks/searchable';
|
||||||
import { ResultData } from '@/api/interface';
|
import { ResultData } from '@/api/interface';
|
||||||
@@ -612,7 +611,7 @@ const handleFilePatch = (command: string) => {
|
|||||||
openBatchRole(selects.value);
|
openBatchRole(selects.value);
|
||||||
break;
|
break;
|
||||||
case 'batchDelFiles':
|
case 'batchDelFiles':
|
||||||
openDetail(selects.value);
|
batchDelFiles();
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -27,10 +27,6 @@ const buttons = [
|
|||||||
label: i18n.global.t('setting.snapshot'),
|
label: i18n.global.t('setting.snapshot'),
|
||||||
path: '/settings/snapshot',
|
path: '/settings/snapshot',
|
||||||
},
|
},
|
||||||
{
|
|
||||||
label: i18n.global.t('setting.license'),
|
|
||||||
path: '/settings/license',
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
label: i18n.global.t('setting.about'),
|
label: i18n.global.t('setting.about'),
|
||||||
path: '/settings/about',
|
path: '/settings/about',
|
||||||
|
|||||||
@@ -1,261 +0,0 @@
|
|||||||
<template>
|
|
||||||
<div>
|
|
||||||
<LayoutContent v-loading="loading" :title="$t('setting.license')" :divider="true">
|
|
||||||
<template #main>
|
|
||||||
<el-row :gutter="20" class="mt-5; mb-10">
|
|
||||||
<el-col :xs="24" :sm="24" :md="15" :lg="15" :xl="15">
|
|
||||||
<div class="descriptions" v-if="hasLicense">
|
|
||||||
<el-descriptions :column="1" direction="horizontal" size="large" border>
|
|
||||||
<el-descriptions-item :label="$t('license.authorizationId')">
|
|
||||||
{{ license.licenseName || '-' }}
|
|
||||||
<el-button
|
|
||||||
type="primary"
|
|
||||||
class="ml-3"
|
|
||||||
plain
|
|
||||||
@click="onSync"
|
|
||||||
size="small"
|
|
||||||
v-if="showSync()"
|
|
||||||
>
|
|
||||||
{{ $t('commons.button.sync') }}
|
|
||||||
</el-button>
|
|
||||||
<el-button
|
|
||||||
v-if="!license.offline"
|
|
||||||
type="primary"
|
|
||||||
class="ml-3"
|
|
||||||
plain
|
|
||||||
@click="onUnBind()"
|
|
||||||
size="small"
|
|
||||||
>
|
|
||||||
{{ $t('license.unbind') }}
|
|
||||||
</el-button>
|
|
||||||
</el-descriptions-item>
|
|
||||||
<el-descriptions-item :label="$t('license.authorizedUser')">
|
|
||||||
{{ license.assigneeName || '-' }}
|
|
||||||
</el-descriptions-item>
|
|
||||||
<el-descriptions-item :label="$t('license.productName')">
|
|
||||||
{{ license.productName || '-' }}
|
|
||||||
</el-descriptions-item>
|
|
||||||
<el-descriptions-item :label="$t('license.trialInfo')">
|
|
||||||
{{ license.trial ? $t('license.trial') : $t('license.office') }}
|
|
||||||
</el-descriptions-item>
|
|
||||||
<el-descriptions-item :label="$t('license.expiresAt')">
|
|
||||||
{{ license.expiresAt || '-' }}
|
|
||||||
</el-descriptions-item>
|
|
||||||
<el-descriptions-item :label="$t('license.productStatus')">
|
|
||||||
<div v-if="license.status">
|
|
||||||
<el-tooltip
|
|
||||||
v-if="license.status.indexOf('Lost') !== -1"
|
|
||||||
:content="$t('license.lostHelper')"
|
|
||||||
>
|
|
||||||
<el-tag type="info">
|
|
||||||
{{ $t('license.' + license.status) }}
|
|
||||||
</el-tag>
|
|
||||||
</el-tooltip>
|
|
||||||
<el-tag v-else>{{ $t('license.' + license.status) }}</el-tag>
|
|
||||||
</div>
|
|
||||||
<span v-else>-</span>
|
|
||||||
</el-descriptions-item>
|
|
||||||
<el-descriptions-item class="descriptions" :label="$t('commons.table.message')">
|
|
||||||
{{ license.message }}
|
|
||||||
</el-descriptions-item>
|
|
||||||
</el-descriptions>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<CardWithHeader :header="$t('home.overview')" height="160px" v-if="!hasLicense">
|
|
||||||
<template #body>
|
|
||||||
<div class="h-app-card">
|
|
||||||
<el-row>
|
|
||||||
<el-col :span="6">
|
|
||||||
<span>{{ $t('setting.license') }}</span>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="6">
|
|
||||||
<span>{{ $t('license.community2') }}</span>
|
|
||||||
</el-col>
|
|
||||||
</el-row>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
</CardWithHeader>
|
|
||||||
</el-col>
|
|
||||||
|
|
||||||
<el-col :xs="24" :sm="24" :md="9" :lg="9" :xl="9">
|
|
||||||
<CardWithHeader :header="$t('license.quickUpdate')" height="160px">
|
|
||||||
<template #body>
|
|
||||||
<div class="h-app-card">
|
|
||||||
<el-row>
|
|
||||||
<el-col :span="15">
|
|
||||||
<div class="h-app-content">{{ $t('license.importLicense') }}:</div>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="5">
|
|
||||||
<el-button type="primary" plain round size="small" @click="toUpload">
|
|
||||||
{{ $t('license.import') }}
|
|
||||||
</el-button>
|
|
||||||
</el-col>
|
|
||||||
</el-row>
|
|
||||||
</div>
|
|
||||||
<div class="h-app-card">
|
|
||||||
<el-row>
|
|
||||||
<el-col :span="15">
|
|
||||||
<div class="h-app-content">{{ $t('license.technicalAdvice') }}:</div>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="5">
|
|
||||||
<el-button type="primary" plain round size="small" @click="toHalo()">
|
|
||||||
{{ $t('license.advice') }}
|
|
||||||
</el-button>
|
|
||||||
</el-col>
|
|
||||||
</el-row>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
</CardWithHeader>
|
|
||||||
</el-col>
|
|
||||||
</el-row>
|
|
||||||
</template>
|
|
||||||
</LayoutContent>
|
|
||||||
|
|
||||||
<LicenseImport ref="licenseRef" />
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script setup lang="ts">
|
|
||||||
import { ref, reactive, onMounted } from 'vue';
|
|
||||||
import { getLicense, syncLicense, unbindLicense } from '@/api/modules/setting';
|
|
||||||
import CardWithHeader from '@/components/card-with-header/index.vue';
|
|
||||||
import LicenseImport from '@/components/license-import/index.vue';
|
|
||||||
import i18n from '@/lang';
|
|
||||||
import { MsgSuccess } from '@/utils/message';
|
|
||||||
import { GlobalStore } from '@/store';
|
|
||||||
const loading = ref();
|
|
||||||
const licenseRef = ref();
|
|
||||||
const globalStore = GlobalStore();
|
|
||||||
const hasLicense = ref();
|
|
||||||
|
|
||||||
const license = reactive({
|
|
||||||
licenseName: '',
|
|
||||||
trial: true,
|
|
||||||
offline: true,
|
|
||||||
expiresAt: '',
|
|
||||||
assigneeName: '',
|
|
||||||
productName: '',
|
|
||||||
|
|
||||||
status: '',
|
|
||||||
message: '',
|
|
||||||
});
|
|
||||||
|
|
||||||
const toHalo = () => {
|
|
||||||
window.open('https://www.lxware.cn/1panel' + '', '_blank', 'noopener,noreferrer');
|
|
||||||
};
|
|
||||||
|
|
||||||
const onSync = async () => {
|
|
||||||
loading.value = true;
|
|
||||||
await syncLicense()
|
|
||||||
.then(() => {
|
|
||||||
loading.value = false;
|
|
||||||
MsgSuccess(i18n.global.t('commons.msg.operationSuccess'));
|
|
||||||
window.location.reload();
|
|
||||||
})
|
|
||||||
.catch(() => {
|
|
||||||
loading.value = false;
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
const onUnBind = async () => {
|
|
||||||
ElMessageBox.confirm(i18n.global.t('license.unbindHelper'), i18n.global.t('license.unbind'), {
|
|
||||||
confirmButtonText: i18n.global.t('commons.button.confirm'),
|
|
||||||
cancelButtonText: i18n.global.t('commons.button.cancel'),
|
|
||||||
type: 'info',
|
|
||||||
}).then(async () => {
|
|
||||||
loading.value = true;
|
|
||||||
await unbindLicense()
|
|
||||||
.then(() => {
|
|
||||||
loading.value = false;
|
|
||||||
globalStore.isProductPro = false;
|
|
||||||
globalStore.themeConfig.isGold = false;
|
|
||||||
MsgSuccess(i18n.global.t('commons.msg.operationSuccess'));
|
|
||||||
window.location.reload();
|
|
||||||
})
|
|
||||||
.catch(() => {
|
|
||||||
loading.value = false;
|
|
||||||
});
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
const timestampToDate = (timestamp: number) => {
|
|
||||||
const date = new Date(timestamp * 1000);
|
|
||||||
const y = date.getFullYear();
|
|
||||||
let m: string | number = date.getMonth() + 1;
|
|
||||||
m = m < 10 ? `0${String(m)}` : m;
|
|
||||||
let d: string | number = date.getDate();
|
|
||||||
d = d < 10 ? `0${String(d)}` : d;
|
|
||||||
let h: string | number = date.getHours();
|
|
||||||
h = h < 10 ? `0${String(h)}` : h;
|
|
||||||
let minute: string | number = date.getMinutes();
|
|
||||||
minute = minute < 10 ? `0${String(minute)}` : minute;
|
|
||||||
let second: string | number = date.getSeconds();
|
|
||||||
second = second < 10 ? `0${String(second)}` : second;
|
|
||||||
return `${y}-${m}-${d} ${h}:${minute}:${second}`;
|
|
||||||
};
|
|
||||||
|
|
||||||
const search = async () => {
|
|
||||||
loading.value = true;
|
|
||||||
await getLicense()
|
|
||||||
.then((res) => {
|
|
||||||
loading.value = false;
|
|
||||||
license.status = res.data.status;
|
|
||||||
globalStore.isProductPro =
|
|
||||||
res.data.status === 'Enable' || res.data.status === 'Lost01' || res.data.status === 'Lost02';
|
|
||||||
if (res.data.status === '') {
|
|
||||||
hasLicense.value = false;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
hasLicense.value = true;
|
|
||||||
if (globalStore.isProductPro) {
|
|
||||||
globalStore.productProExpires = Number(res.data.productPro);
|
|
||||||
globalStore.isTrial = res.data.trial;
|
|
||||||
}
|
|
||||||
license.licenseName = res.data.licenseName;
|
|
||||||
license.message = res.data.message;
|
|
||||||
license.assigneeName = res.data.assigneeName;
|
|
||||||
license.trial = res.data.trial;
|
|
||||||
license.offline = res.data.offline;
|
|
||||||
if (res.data.productPro) {
|
|
||||||
license.productName = 'product-1panel-pro';
|
|
||||||
license.expiresAt =
|
|
||||||
res.data.productPro === '0'
|
|
||||||
? i18n.global.t('license.indefinitePeriod')
|
|
||||||
: timestampToDate(Number(res.data.productPro));
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.catch(() => {
|
|
||||||
loading.value = false;
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
const showSync = () => {
|
|
||||||
return (license.status.indexOf('Lost') !== -1 || license.status === 'Disable') && !license.offline;
|
|
||||||
};
|
|
||||||
|
|
||||||
const toUpload = () => {
|
|
||||||
licenseRef.value.acceptParams();
|
|
||||||
};
|
|
||||||
|
|
||||||
onMounted(() => {
|
|
||||||
search();
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<style scoped lang="scss">
|
|
||||||
.h-app-card {
|
|
||||||
padding: 10px 15px;
|
|
||||||
margin-right: 10px;
|
|
||||||
line-height: 18px;
|
|
||||||
&:hover {
|
|
||||||
background-color: rgba(0, 94, 235, 0.03);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
:deep(.el-descriptions__content) {
|
|
||||||
max-width: 300px;
|
|
||||||
}
|
|
||||||
.descriptions {
|
|
||||||
word-break: break-all;
|
|
||||||
word-wrap: break-word;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
@@ -126,21 +126,6 @@
|
|||||||
</el-input>
|
</el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|
||||||
<el-form-item :label="$t('setting.developerMode')" prop="developerMode">
|
|
||||||
<el-radio-group
|
|
||||||
@change="onSave('DeveloperMode', form.developerMode)"
|
|
||||||
v-model="form.developerMode"
|
|
||||||
>
|
|
||||||
<el-radio-button value="enable">
|
|
||||||
<span>{{ $t('commons.button.enable') }}</span>
|
|
||||||
</el-radio-button>
|
|
||||||
<el-radio-button value="disable">
|
|
||||||
<span>{{ $t('commons.button.disable') }}</span>
|
|
||||||
</el-radio-button>
|
|
||||||
</el-radio-group>
|
|
||||||
<span class="input-help">{{ $t('setting.developerModeHelper') }}</span>
|
|
||||||
</el-form-item>
|
|
||||||
|
|
||||||
<el-form-item :label="$t('setting.advancedMenuHide')">
|
<el-form-item :label="$t('setting.advancedMenuHide')">
|
||||||
<el-input disabled v-model="form.proHideMenus">
|
<el-input disabled v-model="form.proHideMenus">
|
||||||
<template #append>
|
<template #append>
|
||||||
@@ -266,7 +251,6 @@ const search = async () => {
|
|||||||
form.defaultNetworkVal = res.data.defaultNetwork === 'all' ? i18n.t('commons.table.all') : res.data.defaultNetwork;
|
form.defaultNetworkVal = res.data.defaultNetwork === 'all' ? i18n.t('commons.table.all') : res.data.defaultNetwork;
|
||||||
form.proHideMenus = res.data.xpackHideMenu;
|
form.proHideMenus = res.data.xpackHideMenu;
|
||||||
form.hideMenuList = res.data.xpackHideMenu;
|
form.hideMenuList = res.data.xpackHideMenu;
|
||||||
form.developerMode = res.data.developerMode;
|
|
||||||
|
|
||||||
form.proxyUrl = res.data.proxyUrl;
|
form.proxyUrl = res.data.proxyUrl;
|
||||||
form.proxyType = res.data.proxyType;
|
form.proxyType = res.data.proxyType;
|
||||||
|
|||||||
@@ -19,7 +19,6 @@
|
|||||||
<ul style="margin-left: -20px">
|
<ul style="margin-left: -20px">
|
||||||
<li v-if="isProductPro">{{ $t('setting.proxyHelper1') }}</li>
|
<li v-if="isProductPro">{{ $t('setting.proxyHelper1') }}</li>
|
||||||
<li v-if="isProductPro">{{ $t('setting.proxyHelper2') }}</li>
|
<li v-if="isProductPro">{{ $t('setting.proxyHelper2') }}</li>
|
||||||
<li>{{ $t('setting.proxyHelper3') }}</li>
|
|
||||||
</ul>
|
</ul>
|
||||||
</template>
|
</template>
|
||||||
</el-alert>
|
</el-alert>
|
||||||
|
|||||||
@@ -114,7 +114,7 @@
|
|||||||
<div v-if="form.ssl === 'enable' && sslInfo">
|
<div v-if="form.ssl === 'enable' && sslInfo">
|
||||||
<el-tag>{{ $t('setting.domainOrIP') }} {{ sslInfo.domain }}</el-tag>
|
<el-tag>{{ $t('setting.domainOrIP') }} {{ sslInfo.domain }}</el-tag>
|
||||||
<el-tag style="margin-left: 5px">
|
<el-tag style="margin-left: 5px">
|
||||||
{{ $t('setting.timeOut') }} {{ sslInfo.timeout }}
|
{{ $t('setting.timeOut') }} {{ dateFormat('', '', sslInfo.timeout) }}
|
||||||
</el-tag>
|
</el-tag>
|
||||||
<div>
|
<div>
|
||||||
<el-button link type="primary" @click="handleSSL">
|
<el-button link type="primary" @click="handleSSL">
|
||||||
@@ -194,6 +194,7 @@ import TimeoutSetting from '@/views/setting/safe/timeout/index.vue';
|
|||||||
import EntranceSetting from '@/views/setting/safe/entrance/index.vue';
|
import EntranceSetting from '@/views/setting/safe/entrance/index.vue';
|
||||||
import DomainSetting from '@/views/setting/safe/domain/index.vue';
|
import DomainSetting from '@/views/setting/safe/domain/index.vue';
|
||||||
import AllowIPsSetting from '@/views/setting/safe/allowips/index.vue';
|
import AllowIPsSetting from '@/views/setting/safe/allowips/index.vue';
|
||||||
|
import { dateFormat } from '@/utils/util';
|
||||||
import { updateSetting, getSettingInfo, getSystemAvailable, updateSSL, loadSSLInfo } from '@/api/modules/setting';
|
import { updateSetting, getSettingInfo, getSystemAvailable, updateSSL, loadSSLInfo } from '@/api/modules/setting';
|
||||||
import i18n from '@/lang';
|
import i18n from '@/lang';
|
||||||
import { MsgSuccess } from '@/utils/message';
|
import { MsgSuccess } from '@/utils/message';
|
||||||
@@ -224,6 +225,7 @@ const form = reactive({
|
|||||||
bindAddress: '',
|
bindAddress: '',
|
||||||
ssl: 'disable',
|
ssl: 'disable',
|
||||||
sslType: 'self',
|
sslType: 'self',
|
||||||
|
autoRestart: 'disable',
|
||||||
securityEntrance: '',
|
securityEntrance: '',
|
||||||
expirationDays: 0,
|
expirationDays: 0,
|
||||||
expirationTime: '',
|
expirationTime: '',
|
||||||
@@ -248,6 +250,7 @@ const search = async () => {
|
|||||||
if (form.ssl === 'enable') {
|
if (form.ssl === 'enable') {
|
||||||
loadInfo();
|
loadInfo();
|
||||||
}
|
}
|
||||||
|
form.autoRestart = res.data.autoRestart;
|
||||||
form.securityEntrance = res.data.securityEntrance;
|
form.securityEntrance = res.data.securityEntrance;
|
||||||
form.expirationDays = Number(res.data.expirationDays);
|
form.expirationDays = Number(res.data.expirationDays);
|
||||||
form.expirationTime = res.data.expirationTime;
|
form.expirationTime = res.data.expirationTime;
|
||||||
@@ -327,6 +330,7 @@ const handleSSL = async () => {
|
|||||||
ssl: form.ssl,
|
ssl: form.ssl,
|
||||||
sslType: form.sslType,
|
sslType: form.sslType,
|
||||||
sslInfo: sslInfo.value,
|
sslInfo: sslInfo.value,
|
||||||
|
autoRestart: form.autoRestart,
|
||||||
};
|
};
|
||||||
sslRef.value!.acceptParams(params);
|
sslRef.value!.acceptParams(params);
|
||||||
return;
|
return;
|
||||||
|
|||||||
@@ -11,13 +11,6 @@
|
|||||||
<template #header>
|
<template #header>
|
||||||
<DrawerHeader :header="$t('setting.panelSSL')" :back="handleClose" />
|
<DrawerHeader :header="$t('setting.panelSSL')" :back="handleClose" />
|
||||||
</template>
|
</template>
|
||||||
<el-alert class="common-prompt" :closable="false" type="error">
|
|
||||||
<template #default>
|
|
||||||
<span>
|
|
||||||
<span>{{ $t('setting.panelSSLHelper') }}</span>
|
|
||||||
</span>
|
|
||||||
</template>
|
|
||||||
</el-alert>
|
|
||||||
<el-form ref="formRef" label-position="top" :model="form" :rules="rules" v-loading="loading">
|
<el-form ref="formRef" label-position="top" :model="form" :rules="rules" v-loading="loading">
|
||||||
<el-row type="flex" justify="center">
|
<el-row type="flex" justify="center">
|
||||||
<el-col :span="22">
|
<el-col :span="22">
|
||||||
@@ -40,7 +33,9 @@
|
|||||||
|
|
||||||
<el-form-item v-if="form.timeout">
|
<el-form-item v-if="form.timeout">
|
||||||
<el-tag>{{ $t('setting.domainOrIP') }} {{ form.domain }}</el-tag>
|
<el-tag>{{ $t('setting.domainOrIP') }} {{ form.domain }}</el-tag>
|
||||||
<el-tag style="margin-left: 5px">{{ $t('setting.timeOut') }} {{ form.timeout }}</el-tag>
|
<el-tag style="margin-left: 5px">
|
||||||
|
{{ $t('setting.timeOut') }} {{ dateFormat('', '', form.timeout) }}
|
||||||
|
</el-tag>
|
||||||
<el-button
|
<el-button
|
||||||
@click="onDownload"
|
@click="onDownload"
|
||||||
style="margin-left: 5px"
|
style="margin-left: 5px"
|
||||||
@@ -117,6 +112,14 @@
|
|||||||
</el-descriptions-item>
|
</el-descriptions-item>
|
||||||
</el-descriptions>
|
</el-descriptions>
|
||||||
</div>
|
</div>
|
||||||
|
<el-form-item v-if="form.sslType !== 'import'">
|
||||||
|
<el-checkbox true-value="enable" false-value="disable" v-model="form.autoRestart">
|
||||||
|
{{ $t('setting.sslAutoRestart') }}
|
||||||
|
</el-checkbox>
|
||||||
|
<span v-if="form.autoRestart === 'disable'" class="input-help">
|
||||||
|
{{ $t('setting.sslChangeHelper1') }}
|
||||||
|
</span>
|
||||||
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
</el-form>
|
</el-form>
|
||||||
@@ -133,7 +136,7 @@
|
|||||||
</template>
|
</template>
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { Website } from '@/api/interface/website';
|
import { Website } from '@/api/interface/website';
|
||||||
import { dateFormatSimple, getProvider } from '@/utils/util';
|
import { dateFormatSimple, dateFormat, getProvider } from '@/utils/util';
|
||||||
import { ListSSL } from '@/api/modules/website';
|
import { ListSSL } from '@/api/modules/website';
|
||||||
import { reactive, ref } from 'vue';
|
import { reactive, ref } from 'vue';
|
||||||
import i18n from '@/lang';
|
import i18n from '@/lang';
|
||||||
@@ -159,6 +162,7 @@ const form = reactive({
|
|||||||
key: '',
|
key: '',
|
||||||
rootPath: '',
|
rootPath: '',
|
||||||
timeout: '',
|
timeout: '',
|
||||||
|
autoRestart: 'disable',
|
||||||
});
|
});
|
||||||
|
|
||||||
const rules = reactive({
|
const rules = reactive({
|
||||||
@@ -175,6 +179,7 @@ const itemSSL = ref();
|
|||||||
interface DialogProps {
|
interface DialogProps {
|
||||||
sslType: string;
|
sslType: string;
|
||||||
sslInfo?: Setting.SSLInfo;
|
sslInfo?: Setting.SSLInfo;
|
||||||
|
autoRestart: string;
|
||||||
}
|
}
|
||||||
const acceptParams = async (params: DialogProps): Promise<void> => {
|
const acceptParams = async (params: DialogProps): Promise<void> => {
|
||||||
if (params.sslType.indexOf('-') !== -1) {
|
if (params.sslType.indexOf('-') !== -1) {
|
||||||
@@ -197,6 +202,7 @@ const acceptParams = async (params: DialogProps): Promise<void> => {
|
|||||||
} else {
|
} else {
|
||||||
loadSSLs();
|
loadSSLs();
|
||||||
}
|
}
|
||||||
|
form.autoRestart = params.autoRestart;
|
||||||
drawerVisible.value = true;
|
drawerVisible.value = true;
|
||||||
};
|
};
|
||||||
const emit = defineEmits<{ (e: 'search'): void }>();
|
const emit = defineEmits<{ (e: 'search'): void }>();
|
||||||
@@ -237,7 +243,10 @@ const onSaveSSL = async (formEl: FormInstance | undefined) => {
|
|||||||
if (!formEl) return;
|
if (!formEl) return;
|
||||||
formEl.validate(async (valid) => {
|
formEl.validate(async (valid) => {
|
||||||
if (!valid) return;
|
if (!valid) return;
|
||||||
ElMessageBox.confirm(i18n.global.t('setting.sslChangeHelper'), 'https', {
|
let msg = !form.autoRestart
|
||||||
|
? i18n.global.t('setting.sslChangeHelper1') + '\n\n\n' + 'qwdqwdqwd'
|
||||||
|
: i18n.global.t('setting.sslChangeHelper2');
|
||||||
|
ElMessageBox.confirm(msg, i18n.global.t('setting.panelSSL'), {
|
||||||
confirmButtonText: i18n.global.t('commons.button.confirm'),
|
confirmButtonText: i18n.global.t('commons.button.confirm'),
|
||||||
cancelButtonText: i18n.global.t('commons.button.cancel'),
|
cancelButtonText: i18n.global.t('commons.button.cancel'),
|
||||||
type: 'info',
|
type: 'info',
|
||||||
@@ -253,6 +262,7 @@ const onSaveSSL = async (formEl: FormInstance | undefined) => {
|
|||||||
sslID: form.sslID,
|
sslID: form.sslID,
|
||||||
cert: form.cert,
|
cert: form.cert,
|
||||||
key: form.key,
|
key: form.key,
|
||||||
|
autoRestart: form.autoRestart,
|
||||||
};
|
};
|
||||||
let href = window.location.href;
|
let href = window.location.href;
|
||||||
param.domain = href.split('//')[1].split(':')[0];
|
param.domain = href.split('//')[1].split(':')[0];
|
||||||
|
|||||||
@@ -110,7 +110,7 @@
|
|||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column
|
<el-table-column
|
||||||
prop="createdAt"
|
prop="created_at"
|
||||||
sortable
|
sortable
|
||||||
:label="$t('commons.table.date')"
|
:label="$t('commons.table.date')"
|
||||||
:formatter="dateFormat"
|
:formatter="dateFormat"
|
||||||
|
|||||||
@@ -53,12 +53,6 @@
|
|||||||
<el-form-item prop="hasSpec">
|
<el-form-item prop="hasSpec">
|
||||||
<el-checkbox v-model="dialogData.rowData!.hasSpec" :label="$t('toolbox.clam.cron')" />
|
<el-checkbox v-model="dialogData.rowData!.hasSpec" :label="$t('toolbox.clam.cron')" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item v-if="dialogData.rowData!.hasSpec && !isProductPro">
|
|
||||||
<span>{{ $t('toolbox.clam.cronHelper') }}</span>
|
|
||||||
<el-button link type="primary" @click="toUpload">
|
|
||||||
{{ $t('license.levelUpPro') }}
|
|
||||||
</el-button>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item prop="spec" v-if="dialogData.rowData!.hasSpec && isProductPro">
|
<el-form-item prop="spec" v-if="dialogData.rowData!.hasSpec && isProductPro">
|
||||||
<el-select
|
<el-select
|
||||||
class="specTypeClass"
|
class="specTypeClass"
|
||||||
@@ -121,30 +115,6 @@
|
|||||||
</template>
|
</template>
|
||||||
</el-input>
|
</el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item prop="hasAlert">
|
|
||||||
<el-checkbox v-model="dialogData.rowData!.hasAlert" :label="$t('alert.isAlert')" />
|
|
||||||
<span class="input-help">{{ $t('alert.clamHelper') }}</span>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item v-if="dialogData.rowData!.hasAlert && !isProductPro">
|
|
||||||
<span>{{ $t('toolbox.clam.alertHelper') }}</span>
|
|
||||||
<el-button link type="primary" @click="toUpload">
|
|
||||||
{{ $t('license.levelUpPro') }}
|
|
||||||
</el-button>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item
|
|
||||||
prop="alertCount"
|
|
||||||
v-if="dialogData.rowData!.hasAlert && isProductPro"
|
|
||||||
:label="$t('alert.alertCount')"
|
|
||||||
>
|
|
||||||
<el-input-number
|
|
||||||
style="width: 200px"
|
|
||||||
:min="1"
|
|
||||||
step-strictly
|
|
||||||
:step="1"
|
|
||||||
v-model.number="dialogData.rowData!.alertCount"
|
|
||||||
></el-input-number>
|
|
||||||
<span class="input-help">{{ $t('alert.alertCountHelper') }}</span>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item :label="$t('commons.table.description')" prop="description">
|
<el-form-item :label="$t('commons.table.description')" prop="description">
|
||||||
<el-input type="textarea" :rows="3" clearable v-model="dialogData.rowData!.description" />
|
<el-input type="textarea" :rows="3" clearable v-model="dialogData.rowData!.description" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
@@ -159,7 +129,6 @@
|
|||||||
</el-button>
|
</el-button>
|
||||||
</span>
|
</span>
|
||||||
</template>
|
</template>
|
||||||
<LicenseImport ref="licenseRef" />
|
|
||||||
</el-drawer>
|
</el-drawer>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
@@ -169,7 +138,6 @@ import { Rules } from '@/global/form-rules';
|
|||||||
import FileList from '@/components/file-list/index.vue';
|
import FileList from '@/components/file-list/index.vue';
|
||||||
import i18n from '@/lang';
|
import i18n from '@/lang';
|
||||||
import { ElForm } from 'element-plus';
|
import { ElForm } from 'element-plus';
|
||||||
import LicenseImport from '@/components/license-import/index.vue';
|
|
||||||
import DrawerHeader from '@/components/drawer-header/index.vue';
|
import DrawerHeader from '@/components/drawer-header/index.vue';
|
||||||
import { MsgError, MsgSuccess } from '@/utils/message';
|
import { MsgError, MsgSuccess } from '@/utils/message';
|
||||||
import { Toolbox } from '@/api/interface/toolbox';
|
import { Toolbox } from '@/api/interface/toolbox';
|
||||||
@@ -179,7 +147,6 @@ import { storeToRefs } from 'pinia';
|
|||||||
import { GlobalStore } from '@/store';
|
import { GlobalStore } from '@/store';
|
||||||
|
|
||||||
const globalStore = GlobalStore();
|
const globalStore = GlobalStore();
|
||||||
const licenseRef = ref();
|
|
||||||
const { isProductPro } = storeToRefs(globalStore);
|
const { isProductPro } = storeToRefs(globalStore);
|
||||||
interface DialogProps {
|
interface DialogProps {
|
||||||
title: string;
|
title: string;
|
||||||
@@ -208,8 +175,6 @@ const acceptParams = (params: DialogProps): void => {
|
|||||||
second: 30,
|
second: 30,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
dialogData.value.rowData.hasAlert = dialogData.value.rowData!.alertCount > 0;
|
|
||||||
dialogData.value.rowData!.alertCount = dialogData.value.rowData!.alertCount || 3;
|
|
||||||
title.value = i18n.global.t('commons.button.' + dialogData.value.title);
|
title.value = i18n.global.t('commons.button.' + dialogData.value.title);
|
||||||
drawerVisible.value = true;
|
drawerVisible.value = true;
|
||||||
};
|
};
|
||||||
@@ -303,19 +268,6 @@ const verifySpec = (rule: any, value: any, callback: any) => {
|
|||||||
}
|
}
|
||||||
callback();
|
callback();
|
||||||
};
|
};
|
||||||
|
|
||||||
function checkSendCount(rule: any, value: any, callback: any) {
|
|
||||||
if (value === '') {
|
|
||||||
callback();
|
|
||||||
}
|
|
||||||
const regex = /^(?:[1-9]|[12][0-9]|30)$/;
|
|
||||||
if (!regex.test(value)) {
|
|
||||||
return callback(new Error(i18n.global.t('commons.rule.numberRange', [1, 30])));
|
|
||||||
}
|
|
||||||
|
|
||||||
callback();
|
|
||||||
}
|
|
||||||
|
|
||||||
const rules = reactive({
|
const rules = reactive({
|
||||||
name: [Rules.simpleName],
|
name: [Rules.simpleName],
|
||||||
path: [Rules.requiredInput, Rules.noSpace],
|
path: [Rules.requiredInput, Rules.noSpace],
|
||||||
@@ -323,7 +275,6 @@ const rules = reactive({
|
|||||||
{ validator: verifySpec, trigger: 'blur', required: true },
|
{ validator: verifySpec, trigger: 'blur', required: true },
|
||||||
{ validator: verifySpec, trigger: 'change', required: true },
|
{ validator: verifySpec, trigger: 'change', required: true },
|
||||||
],
|
],
|
||||||
alertCount: [Rules.integerNumber, { validator: checkSendCount, trigger: 'blur' }],
|
|
||||||
});
|
});
|
||||||
|
|
||||||
type FormInstance = InstanceType<typeof ElForm>;
|
type FormInstance = InstanceType<typeof ElForm>;
|
||||||
@@ -347,10 +298,6 @@ const hasHour = (item: any) => {
|
|||||||
return item.specType !== 'perHour' && item.specType !== 'perNMinute' && item.specType !== 'perNSecond';
|
return item.specType !== 'perHour' && item.specType !== 'perNMinute' && item.specType !== 'perNSecond';
|
||||||
};
|
};
|
||||||
|
|
||||||
const toUpload = () => {
|
|
||||||
licenseRef.value.acceptParams();
|
|
||||||
};
|
|
||||||
|
|
||||||
const changeSpecType = () => {
|
const changeSpecType = () => {
|
||||||
let item = dialogData.value.rowData!.specObj;
|
let item = dialogData.value.rowData!.specObj;
|
||||||
switch (item.specType) {
|
switch (item.specType) {
|
||||||
@@ -393,16 +340,6 @@ const onSubmit = async (formEl: FormInstance | undefined) => {
|
|||||||
MsgError(i18n.global.t('cronjob.cronSpecHelper'));
|
MsgError(i18n.global.t('cronjob.cronSpecHelper'));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
dialogData.value.rowData.alertCount = dialogData.value.rowData!.hasAlert
|
|
||||||
? dialogData.value.rowData.alertCount
|
|
||||||
: 0;
|
|
||||||
dialogData.value.rowData.alertTitle = i18n.global.t('toolbox.clam.alertTitle', [
|
|
||||||
dialogData.value.rowData.name,
|
|
||||||
]);
|
|
||||||
} else {
|
|
||||||
dialogData.value.rowData.alertTitle = '';
|
|
||||||
dialogData.value.rowData.alertCount = 0;
|
|
||||||
dialogData.value.rowData.hasAlert = false;
|
|
||||||
}
|
}
|
||||||
dialogData.value.rowData.spec = spec;
|
dialogData.value.rowData.spec = spec;
|
||||||
|
|
||||||
|
|||||||
@@ -61,7 +61,7 @@
|
|||||||
import { Codemirror } from 'vue-codemirror';
|
import { Codemirror } from 'vue-codemirror';
|
||||||
import { javascript } from '@codemirror/lang-javascript';
|
import { javascript } from '@codemirror/lang-javascript';
|
||||||
import { oneDark } from '@codemirror/theme-one-dark';
|
import { oneDark } from '@codemirror/theme-one-dark';
|
||||||
import { computed, onUnmounted, reactive, ref, shallowRef } from 'vue';
|
import { computed, onUnmounted, reactive, ref, shallowRef, watch } from 'vue';
|
||||||
import { OperateSupervisorProcessFile } from '@/api/modules/host-tool';
|
import { OperateSupervisorProcessFile } from '@/api/modules/host-tool';
|
||||||
import i18n from '@/lang';
|
import i18n from '@/lang';
|
||||||
import { TabsPaneContext } from 'element-plus';
|
import { TabsPaneContext } from 'element-plus';
|
||||||
@@ -92,6 +92,10 @@ let timer: NodeJS.Timer | null = null;
|
|||||||
|
|
||||||
const em = defineEmits(['search']);
|
const em = defineEmits(['search']);
|
||||||
|
|
||||||
|
watch(open, (val) => {
|
||||||
|
if (screenfull.isEnabled && !val && !mobile.value) screenfull.exit();
|
||||||
|
});
|
||||||
|
|
||||||
const mobile = computed(() => {
|
const mobile = computed(() => {
|
||||||
return globalStore.isMobile();
|
return globalStore.isMobile();
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -76,16 +76,12 @@
|
|||||||
{{ $t('runtime.goDirHelper') }}
|
{{ $t('runtime.goDirHelper') }}
|
||||||
</span>
|
</span>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-row :gutter="20">
|
|
||||||
<el-col :span="18">
|
|
||||||
<el-form-item :label="$t('runtime.runScript')" prop="params.EXEC_SCRIPT">
|
<el-form-item :label="$t('runtime.runScript')" prop="params.EXEC_SCRIPT">
|
||||||
<el-input v-model="runtime.params['EXEC_SCRIPT']"></el-input>
|
<el-input v-model="runtime.params['EXEC_SCRIPT']"></el-input>
|
||||||
<span class="input-help">
|
<span class="input-help">
|
||||||
{{ $t('runtime.goHelper') }}
|
{{ $t('runtime.goHelper') }}
|
||||||
</span>
|
</span>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
|
||||||
</el-row>
|
|
||||||
<el-row :gutter="20">
|
<el-row :gutter="20">
|
||||||
<el-col :span="7">
|
<el-col :span="7">
|
||||||
<el-form-item :label="$t('runtime.appPort')" prop="params.GO_APP_PORT">
|
<el-form-item :label="$t('runtime.appPort')" prop="params.GO_APP_PORT">
|
||||||
|
|||||||
@@ -76,16 +76,12 @@
|
|||||||
{{ $t('runtime.javaDirHelper') }}
|
{{ $t('runtime.javaDirHelper') }}
|
||||||
</span>
|
</span>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-row :gutter="20">
|
|
||||||
<el-col :span="18">
|
|
||||||
<el-form-item :label="$t('runtime.runScript')" prop="params.EXEC_SCRIPT">
|
<el-form-item :label="$t('runtime.runScript')" prop="params.EXEC_SCRIPT">
|
||||||
<el-input v-model="runtime.params['EXEC_SCRIPT']"></el-input>
|
<el-input v-model="runtime.params['EXEC_SCRIPT']"></el-input>
|
||||||
<span class="input-help">
|
<span class="input-help">
|
||||||
{{ $t('runtime.javaScriptHelper') }}
|
{{ $t('runtime.javaScriptHelper') }}
|
||||||
</span>
|
</span>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
|
||||||
</el-row>
|
|
||||||
<el-row :gutter="20">
|
<el-row :gutter="20">
|
||||||
<el-col :span="7">
|
<el-col :span="7">
|
||||||
<el-form-item :label="$t('runtime.appPort')" prop="params.JAVA_APP_PORT">
|
<el-form-item :label="$t('runtime.appPort')" prop="params.JAVA_APP_PORT">
|
||||||
|
|||||||
@@ -73,16 +73,12 @@
|
|||||||
</template>
|
</template>
|
||||||
</el-input>
|
</el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-row :gutter="20">
|
|
||||||
<el-col :span="18">
|
|
||||||
<el-form-item :label="$t('runtime.runScript')" prop="params.EXEC_SCRIPT">
|
<el-form-item :label="$t('runtime.runScript')" prop="params.EXEC_SCRIPT">
|
||||||
<el-input v-model="runtime.params['EXEC_SCRIPT']"></el-input>
|
<el-input v-model="runtime.params['EXEC_SCRIPT']"></el-input>
|
||||||
<span class="input-help">
|
<span class="input-help">
|
||||||
{{ $t('runtime.pythonHelper') }}
|
{{ $t('runtime.pythonHelper') }}
|
||||||
</span>
|
</span>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
|
||||||
</el-row>
|
|
||||||
<el-row :gutter="20">
|
<el-row :gutter="20">
|
||||||
<el-col :span="7">
|
<el-col :span="7">
|
||||||
<el-form-item :label="$t('runtime.appPort')" prop="params.APP_PORT">
|
<el-form-item :label="$t('runtime.appPort')" prop="params.APP_PORT">
|
||||||
|
|||||||
@@ -158,7 +158,7 @@ const resetForm = () => {
|
|||||||
account.value = {
|
account.value = {
|
||||||
id: 0,
|
id: 0,
|
||||||
name: '',
|
name: '',
|
||||||
type: 'DnsPod',
|
type: 'AliYun',
|
||||||
authorization: {},
|
authorization: {},
|
||||||
};
|
};
|
||||||
accountForm.value?.resetFields();
|
accountForm.value?.resetFields();
|
||||||
|
|||||||
@@ -165,6 +165,7 @@
|
|||||||
<el-option label="Node.js" value="node"></el-option>
|
<el-option label="Node.js" value="node"></el-option>
|
||||||
<el-option label="Java" value="java"></el-option>
|
<el-option label="Java" value="java"></el-option>
|
||||||
<el-option label="Go" value="go"></el-option>
|
<el-option label="Go" value="go"></el-option>
|
||||||
|
<el-option label="Python" value="python"></el-option>
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ require (
|
|||||||
github.com/gin-contrib/gzip v0.0.6
|
github.com/gin-contrib/gzip v0.0.6
|
||||||
github.com/gin-gonic/gin v1.9.1
|
github.com/gin-gonic/gin v1.9.1
|
||||||
github.com/glebarez/sqlite v1.10.0
|
github.com/glebarez/sqlite v1.10.0
|
||||||
github.com/go-acme/lego/v4 v4.17.4
|
github.com/go-acme/lego/v4 v4.19.2
|
||||||
github.com/go-gormigrate/gormigrate/v2 v2.1.1
|
github.com/go-gormigrate/gormigrate/v2 v2.1.1
|
||||||
github.com/go-playground/validator/v10 v10.18.0
|
github.com/go-playground/validator/v10 v10.18.0
|
||||||
github.com/go-redis/redis v6.15.9+incompatible
|
github.com/go-redis/redis v6.15.9+incompatible
|
||||||
@@ -24,7 +24,6 @@ require (
|
|||||||
github.com/golang-jwt/jwt/v4 v4.5.0
|
github.com/golang-jwt/jwt/v4 v4.5.0
|
||||||
github.com/google/uuid v1.6.0
|
github.com/google/uuid v1.6.0
|
||||||
github.com/gorilla/websocket v1.5.1
|
github.com/gorilla/websocket v1.5.1
|
||||||
github.com/huaweicloud/huaweicloud-sdk-go-v3 v0.1.113
|
|
||||||
github.com/jackc/pgx/v5 v5.5.4
|
github.com/jackc/pgx/v5 v5.5.4
|
||||||
github.com/jinzhu/copier v0.4.0
|
github.com/jinzhu/copier v0.4.0
|
||||||
github.com/jinzhu/gorm v1.9.16
|
github.com/jinzhu/gorm v1.9.16
|
||||||
@@ -52,12 +51,12 @@ require (
|
|||||||
github.com/swaggo/swag v1.16.3
|
github.com/swaggo/swag v1.16.3
|
||||||
github.com/tencentyun/cos-go-sdk-v5 v0.7.46
|
github.com/tencentyun/cos-go-sdk-v5 v0.7.46
|
||||||
github.com/xlzd/gotp v0.1.0
|
github.com/xlzd/gotp v0.1.0
|
||||||
golang.org/x/crypto v0.24.0
|
golang.org/x/crypto v0.27.0
|
||||||
golang.org/x/net v0.26.0
|
golang.org/x/net v0.29.0
|
||||||
golang.org/x/oauth2 v0.21.0
|
golang.org/x/oauth2 v0.23.0
|
||||||
golang.org/x/sys v0.21.0
|
golang.org/x/sys v0.25.0
|
||||||
golang.org/x/term v0.21.0
|
golang.org/x/term v0.24.0
|
||||||
golang.org/x/text v0.16.0
|
golang.org/x/text v0.18.0
|
||||||
gopkg.in/ini.v1 v1.67.0
|
gopkg.in/ini.v1 v1.67.0
|
||||||
gopkg.in/yaml.v3 v3.0.1
|
gopkg.in/yaml.v3 v3.0.1
|
||||||
gorm.io/gorm v1.25.7
|
gorm.io/gorm v1.25.7
|
||||||
@@ -69,32 +68,32 @@ require (
|
|||||||
github.com/KyleBanks/depth v1.2.1 // indirect
|
github.com/KyleBanks/depth v1.2.1 // indirect
|
||||||
github.com/Microsoft/go-winio v0.6.1 // indirect
|
github.com/Microsoft/go-winio v0.6.1 // indirect
|
||||||
github.com/Microsoft/hcsshim v0.11.4 // indirect
|
github.com/Microsoft/hcsshim v0.11.4 // indirect
|
||||||
github.com/aliyun/alibaba-cloud-sdk-go v1.62.712 // indirect
|
github.com/aliyun/alibaba-cloud-sdk-go v1.63.15 // indirect
|
||||||
github.com/andybalholm/brotli v1.1.0 // indirect
|
github.com/andybalholm/brotli v1.1.0 // indirect
|
||||||
github.com/aws/aws-sdk-go-v2 v1.27.2 // indirect
|
github.com/aws/aws-sdk-go-v2 v1.30.5 // indirect
|
||||||
github.com/aws/aws-sdk-go-v2/config v1.27.18 // indirect
|
github.com/aws/aws-sdk-go-v2/config v1.27.33 // indirect
|
||||||
github.com/aws/aws-sdk-go-v2/credentials v1.17.18 // indirect
|
github.com/aws/aws-sdk-go-v2/credentials v1.17.32 // indirect
|
||||||
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.5 // indirect
|
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.13 // indirect
|
||||||
github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.9 // indirect
|
github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.17 // indirect
|
||||||
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.9 // indirect
|
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.17 // indirect
|
||||||
github.com/aws/aws-sdk-go-v2/internal/ini v1.8.0 // indirect
|
github.com/aws/aws-sdk-go-v2/internal/ini v1.8.1 // indirect
|
||||||
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.2 // indirect
|
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.4 // indirect
|
||||||
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.11 // indirect
|
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.19 // indirect
|
||||||
github.com/aws/aws-sdk-go-v2/service/sso v1.20.11 // indirect
|
github.com/aws/aws-sdk-go-v2/service/sso v1.22.7 // indirect
|
||||||
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.24.5 // indirect
|
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.26.7 // indirect
|
||||||
github.com/aws/aws-sdk-go-v2/service/sts v1.28.12 // indirect
|
github.com/aws/aws-sdk-go-v2/service/sts v1.30.7 // indirect
|
||||||
github.com/aws/smithy-go v1.20.2 // indirect
|
github.com/aws/smithy-go v1.20.4 // indirect
|
||||||
github.com/beorn7/perks v1.0.1 // indirect
|
github.com/beorn7/perks v1.0.1 // indirect
|
||||||
github.com/bodgit/plumbing v1.3.0 // indirect
|
github.com/bodgit/plumbing v1.3.0 // indirect
|
||||||
github.com/bodgit/sevenzip v1.5.0 // indirect
|
github.com/bodgit/sevenzip v1.5.0 // indirect
|
||||||
github.com/bodgit/windows v1.0.1 // indirect
|
github.com/bodgit/windows v1.0.1 // indirect
|
||||||
github.com/bytedance/sonic v1.11.0 // indirect
|
github.com/bytedance/sonic v1.11.0 // indirect
|
||||||
github.com/cenkalti/backoff/v4 v4.3.0 // indirect
|
github.com/cenkalti/backoff/v4 v4.3.0 // indirect
|
||||||
github.com/cespare/xxhash/v2 v2.2.0 // indirect
|
github.com/cespare/xxhash/v2 v2.3.0 // indirect
|
||||||
github.com/chenzhuoyu/base64x v0.0.0-20230717121745-296ad89f973d // indirect
|
github.com/chenzhuoyu/base64x v0.0.0-20230717121745-296ad89f973d // indirect
|
||||||
github.com/chenzhuoyu/iasm v0.9.1 // indirect
|
github.com/chenzhuoyu/iasm v0.9.1 // indirect
|
||||||
github.com/clbanning/mxj v1.8.5-0.20200714211355-ff02cfb8ea28 // indirect
|
github.com/clbanning/mxj v1.8.5-0.20200714211355-ff02cfb8ea28 // indirect
|
||||||
github.com/cloudflare/cloudflare-go v0.97.0 // indirect
|
github.com/cloudflare/cloudflare-go v0.104.0 // indirect
|
||||||
github.com/containerd/console v1.0.4 // indirect
|
github.com/containerd/console v1.0.4 // indirect
|
||||||
github.com/containerd/containerd v1.7.13 // indirect
|
github.com/containerd/containerd v1.7.13 // indirect
|
||||||
github.com/containerd/continuity v0.4.3 // indirect
|
github.com/containerd/continuity v0.4.3 // indirect
|
||||||
@@ -118,8 +117,8 @@ require (
|
|||||||
github.com/gabriel-vasile/mimetype v1.4.3 // indirect
|
github.com/gabriel-vasile/mimetype v1.4.3 // indirect
|
||||||
github.com/gin-contrib/sse v0.1.0 // indirect
|
github.com/gin-contrib/sse v0.1.0 // indirect
|
||||||
github.com/glebarez/go-sqlite v1.22.0 // indirect
|
github.com/glebarez/go-sqlite v1.22.0 // indirect
|
||||||
github.com/go-jose/go-jose/v4 v4.0.2 // indirect
|
github.com/go-jose/go-jose/v4 v4.0.4 // indirect
|
||||||
github.com/go-logr/logr v1.4.1 // indirect
|
github.com/go-logr/logr v1.4.2 // indirect
|
||||||
github.com/go-logr/stdr v1.2.2 // indirect
|
github.com/go-logr/stdr v1.2.2 // indirect
|
||||||
github.com/go-ole/go-ole v1.3.0 // indirect
|
github.com/go-ole/go-ole v1.3.0 // indirect
|
||||||
github.com/go-openapi/jsonpointer v0.20.2 // indirect
|
github.com/go-openapi/jsonpointer v0.20.2 // indirect
|
||||||
@@ -129,11 +128,11 @@ require (
|
|||||||
github.com/go-playground/locales v0.14.1 // indirect
|
github.com/go-playground/locales v0.14.1 // indirect
|
||||||
github.com/go-playground/universal-translator v0.18.1 // indirect
|
github.com/go-playground/universal-translator v0.18.1 // indirect
|
||||||
github.com/goccy/go-json v0.10.3 // indirect
|
github.com/goccy/go-json v0.10.3 // indirect
|
||||||
github.com/gofrs/flock v0.8.1 // indirect
|
github.com/gofrs/flock v0.12.1 // indirect
|
||||||
github.com/gogo/googleapis v1.4.1 // indirect
|
github.com/gogo/googleapis v1.4.1 // indirect
|
||||||
github.com/gogo/protobuf v1.3.2 // indirect
|
github.com/gogo/protobuf v1.3.2 // indirect
|
||||||
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 // indirect
|
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 // indirect
|
||||||
github.com/golang/glog v1.2.0 // indirect
|
github.com/golang/glog v1.2.1 // indirect
|
||||||
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
|
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
|
||||||
github.com/golang/protobuf v1.5.4 // indirect
|
github.com/golang/protobuf v1.5.4 // indirect
|
||||||
github.com/golang/snappy v0.0.4 // indirect
|
github.com/golang/snappy v0.0.4 // indirect
|
||||||
@@ -144,14 +143,13 @@ require (
|
|||||||
github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 // indirect
|
github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 // indirect
|
||||||
github.com/gorilla/mux v1.8.1 // indirect
|
github.com/gorilla/mux v1.8.1 // indirect
|
||||||
github.com/grpc-ecosystem/go-grpc-middleware v1.4.0 // indirect
|
github.com/grpc-ecosystem/go-grpc-middleware v1.4.0 // indirect
|
||||||
github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.1 // indirect
|
github.com/grpc-ecosystem/grpc-gateway/v2 v2.22.0 // indirect
|
||||||
github.com/h2non/filetype v1.1.3 // indirect
|
github.com/h2non/filetype v1.1.3 // indirect
|
||||||
github.com/hashicorp/errwrap v1.1.0 // indirect
|
github.com/hashicorp/errwrap v1.1.0 // indirect
|
||||||
github.com/hashicorp/go-cleanhttp v0.5.2 // indirect
|
|
||||||
github.com/hashicorp/go-multierror v1.1.1 // indirect
|
github.com/hashicorp/go-multierror v1.1.1 // indirect
|
||||||
github.com/hashicorp/go-retryablehttp v0.7.7 // indirect
|
|
||||||
github.com/hashicorp/go-version v1.6.0 // indirect
|
github.com/hashicorp/go-version v1.6.0 // indirect
|
||||||
github.com/hashicorp/hcl v1.0.0 // indirect
|
github.com/hashicorp/hcl v1.0.0 // indirect
|
||||||
|
github.com/huaweicloud/huaweicloud-sdk-go-v3 v0.1.114 // indirect
|
||||||
github.com/imdario/mergo v0.3.16 // indirect
|
github.com/imdario/mergo v0.3.16 // indirect
|
||||||
github.com/in-toto/in-toto-golang v0.9.0 // indirect
|
github.com/in-toto/in-toto-golang v0.9.0 // indirect
|
||||||
github.com/inconshreveable/mousetrap v1.1.0 // indirect
|
github.com/inconshreveable/mousetrap v1.1.0 // indirect
|
||||||
@@ -172,7 +170,7 @@ require (
|
|||||||
github.com/mailru/easyjson v0.7.7 // indirect
|
github.com/mailru/easyjson v0.7.7 // indirect
|
||||||
github.com/mattn/go-isatty v0.0.20 // indirect
|
github.com/mattn/go-isatty v0.0.20 // indirect
|
||||||
github.com/mattn/go-shellwords v1.0.12 // indirect
|
github.com/mattn/go-shellwords v1.0.12 // indirect
|
||||||
github.com/miekg/dns v1.1.59 // indirect
|
github.com/miekg/dns v1.1.62 // indirect
|
||||||
github.com/miekg/pkcs11 v1.1.1 // indirect
|
github.com/miekg/pkcs11 v1.1.1 // indirect
|
||||||
github.com/minio/md5-simd v1.1.2 // indirect
|
github.com/minio/md5-simd v1.1.2 // indirect
|
||||||
github.com/minio/sha256-simd v1.0.1 // indirect
|
github.com/minio/sha256-simd v1.0.1 // indirect
|
||||||
@@ -218,8 +216,8 @@ require (
|
|||||||
github.com/spf13/cast v1.6.0 // indirect
|
github.com/spf13/cast v1.6.0 // indirect
|
||||||
github.com/spf13/pflag v1.0.5 // indirect
|
github.com/spf13/pflag v1.0.5 // indirect
|
||||||
github.com/stretchr/testify v1.9.0 // indirect
|
github.com/stretchr/testify v1.9.0 // indirect
|
||||||
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.898 // indirect
|
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1002 // indirect
|
||||||
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dnspod v1.0.898 // indirect
|
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dnspod v1.0.1002 // indirect
|
||||||
github.com/therootcompany/xz v1.0.1 // indirect
|
github.com/therootcompany/xz v1.0.1 // indirect
|
||||||
github.com/theupdateframework/notary v0.7.0 // indirect
|
github.com/theupdateframework/notary v0.7.0 // indirect
|
||||||
github.com/tjfoc/gmsm v1.4.1 // indirect
|
github.com/tjfoc/gmsm v1.4.1 // indirect
|
||||||
@@ -239,29 +237,29 @@ require (
|
|||||||
go.opencensus.io v0.24.0 // indirect
|
go.opencensus.io v0.24.0 // indirect
|
||||||
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.48.0 // indirect
|
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.48.0 // indirect
|
||||||
go.opentelemetry.io/contrib/instrumentation/net/http/httptrace/otelhttptrace v0.48.0 // indirect
|
go.opentelemetry.io/contrib/instrumentation/net/http/httptrace/otelhttptrace v0.48.0 // indirect
|
||||||
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 // indirect
|
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.54.0 // indirect
|
||||||
go.opentelemetry.io/otel v1.24.0 // indirect
|
go.opentelemetry.io/otel v1.29.0 // indirect
|
||||||
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.23.1 // indirect
|
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.29.0 // indirect
|
||||||
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.23.1 // indirect
|
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.29.0 // indirect
|
||||||
go.opentelemetry.io/otel/metric v1.24.0 // indirect
|
go.opentelemetry.io/otel/metric v1.29.0 // indirect
|
||||||
go.opentelemetry.io/otel/sdk v1.23.1 // indirect
|
go.opentelemetry.io/otel/sdk v1.29.0 // indirect
|
||||||
go.opentelemetry.io/otel/trace v1.24.0 // indirect
|
go.opentelemetry.io/otel/trace v1.29.0 // indirect
|
||||||
go.opentelemetry.io/proto/otlp v1.1.0 // indirect
|
go.opentelemetry.io/proto/otlp v1.3.1 // indirect
|
||||||
go.uber.org/atomic v1.11.0 // indirect
|
go.uber.org/atomic v1.11.0 // indirect
|
||||||
go.uber.org/multierr v1.11.0 // indirect
|
go.uber.org/multierr v1.11.0 // indirect
|
||||||
go4.org v0.0.0-20230225012048-214862532bf5 // indirect
|
go4.org v0.0.0-20230225012048-214862532bf5 // indirect
|
||||||
golang.org/x/arch v0.7.0 // indirect
|
golang.org/x/arch v0.7.0 // indirect
|
||||||
golang.org/x/exp v0.0.0-20240213143201-ec583247a57a // indirect
|
golang.org/x/exp v0.0.0-20240213143201-ec583247a57a // indirect
|
||||||
golang.org/x/image v0.18.0 // indirect
|
golang.org/x/image v0.18.0 // indirect
|
||||||
golang.org/x/mod v0.18.0 // indirect
|
golang.org/x/mod v0.21.0 // indirect
|
||||||
golang.org/x/sync v0.7.0 // indirect
|
golang.org/x/sync v0.8.0 // indirect
|
||||||
golang.org/x/time v0.5.0 // indirect
|
golang.org/x/time v0.6.0 // indirect
|
||||||
golang.org/x/tools v0.22.0 // indirect
|
golang.org/x/tools v0.25.0 // indirect
|
||||||
google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de // indirect
|
google.golang.org/genproto v0.0.0-20240903143218-8af14fe29dc1 // indirect
|
||||||
google.golang.org/genproto/googleapis/api v0.0.0-20240311132316-a219d84964c2 // indirect
|
google.golang.org/genproto/googleapis/api v0.0.0-20240827150818-7e3bb234dfed // indirect
|
||||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20240318140521-94a12d6c2237 // indirect
|
google.golang.org/genproto/googleapis/rpc v0.0.0-20240903143218-8af14fe29dc1 // indirect
|
||||||
google.golang.org/grpc v1.63.1 // indirect
|
google.golang.org/grpc v1.66.1 // indirect
|
||||||
google.golang.org/protobuf v1.33.0 // indirect
|
google.golang.org/protobuf v1.34.2 // indirect
|
||||||
gopkg.in/inf.v0 v0.9.1 // indirect
|
gopkg.in/inf.v0 v0.9.1 // indirect
|
||||||
gopkg.in/yaml.v2 v2.4.0 // indirect
|
gopkg.in/yaml.v2 v2.4.0 // indirect
|
||||||
k8s.io/apimachinery v0.29.2 // indirect
|
k8s.io/apimachinery v0.29.2 // indirect
|
||||||
|
|||||||
@@ -13,16 +13,16 @@ cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKV
|
|||||||
cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs=
|
cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs=
|
||||||
cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc=
|
cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc=
|
||||||
cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY=
|
cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY=
|
||||||
cloud.google.com/go v0.112.0 h1:tpFCD7hpHFlQ8yPwT3x+QeXqc2T6+n6T+hmABHfDUSM=
|
cloud.google.com/go v0.115.1 h1:Jo0SM9cQnSkYfp44+v+NQXHpcHqlnRJk2qxh6yvxxxQ=
|
||||||
cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o=
|
cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o=
|
||||||
cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE=
|
cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE=
|
||||||
cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc=
|
cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc=
|
||||||
cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg=
|
cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg=
|
||||||
cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc=
|
cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc=
|
||||||
cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ=
|
cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ=
|
||||||
cloud.google.com/go/compute v1.24.0 h1:phWcR2eWzRJaL/kOiJwfFsPs4BaKq1j6vnpZrc1YlVg=
|
cloud.google.com/go/compute v1.28.0 h1:OPtBxMcheSS+DWfci803qvPly3d4w7Eu5ztKBcFfzwk=
|
||||||
cloud.google.com/go/compute/metadata v0.3.0 h1:Tz+eQXMEqDIKRsmY3cHTL6FVaynIjX2QxYC4trgAKZc=
|
cloud.google.com/go/compute/metadata v0.5.1 h1:NM6oZeZNlYjiwYje+sYFjEpP0Q0zCan1bmQW/KmIrGs=
|
||||||
cloud.google.com/go/compute/metadata v0.3.0/go.mod h1:zFmK7XCadkQkj6TtorcaGlCW1hT1fIilQDwofLpJ20k=
|
cloud.google.com/go/compute/metadata v0.5.1/go.mod h1:C66sj2AluDcIqakBq/M8lw8/ybHgOZqin2obFxa/E5k=
|
||||||
cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE=
|
cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE=
|
||||||
cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk=
|
cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk=
|
||||||
cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I=
|
cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I=
|
||||||
@@ -62,8 +62,8 @@ github.com/Shopify/logrus-bugsnag v0.0.0-20171204204709-577dee27f20d/go.mod h1:H
|
|||||||
github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw=
|
github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw=
|
||||||
github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
|
github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
|
||||||
github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
|
github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
|
||||||
github.com/aliyun/alibaba-cloud-sdk-go v1.62.712 h1:lM7JnA9dEdDFH9XOgRNQMDTQnOjlLkDTNA7c0aWTQ30=
|
github.com/aliyun/alibaba-cloud-sdk-go v1.63.15 h1:r2uwBUQhLhcPzaWz9tRJqc8MjYwHb+oF2+Q6467BF14=
|
||||||
github.com/aliyun/alibaba-cloud-sdk-go v1.62.712/go.mod h1:SOSDHfe1kX91v3W5QiBsWSLqeLxImobbMX1mxrFHsVQ=
|
github.com/aliyun/alibaba-cloud-sdk-go v1.63.15/go.mod h1:SOSDHfe1kX91v3W5QiBsWSLqeLxImobbMX1mxrFHsVQ=
|
||||||
github.com/aliyun/aliyun-oss-go-sdk v3.0.2+incompatible h1:8psS8a+wKfiLt1iVDX79F7Y6wUM49Lcha2FMXt4UM8g=
|
github.com/aliyun/aliyun-oss-go-sdk v3.0.2+incompatible h1:8psS8a+wKfiLt1iVDX79F7Y6wUM49Lcha2FMXt4UM8g=
|
||||||
github.com/aliyun/aliyun-oss-go-sdk v3.0.2+incompatible/go.mod h1:T/Aws4fEfogEE9v+HPhhw+CntffsBHJ8nXQCwKr0/g8=
|
github.com/aliyun/aliyun-oss-go-sdk v3.0.2+incompatible/go.mod h1:T/Aws4fEfogEE9v+HPhhw+CntffsBHJ8nXQCwKr0/g8=
|
||||||
github.com/anchore/go-struct-converter v0.0.0-20221118182256-c68fdcfa2092 h1:aM1rlcoLz8y5B2r4tTLMiVTrMtpfY0O8EScKJxaSaEc=
|
github.com/anchore/go-struct-converter v0.0.0-20221118182256-c68fdcfa2092 h1:aM1rlcoLz8y5B2r4tTLMiVTrMtpfY0O8EScKJxaSaEc=
|
||||||
@@ -73,32 +73,32 @@ github.com/andybalholm/brotli v1.1.0/go.mod h1:sms7XGricyQI9K10gOSf56VKKWS4oLer5
|
|||||||
github.com/andybalholm/cascadia v1.1.0/go.mod h1:GsXiBklL0woXo1j/WYWtSYYC4ouU9PqHO0sqidkEA4Y=
|
github.com/andybalholm/cascadia v1.1.0/go.mod h1:GsXiBklL0woXo1j/WYWtSYYC4ouU9PqHO0sqidkEA4Y=
|
||||||
github.com/aws/aws-sdk-go v1.50.20 h1:xfAnSDVf/azIWTVQXQODp89bubvCS85r70O3nuQ4dnE=
|
github.com/aws/aws-sdk-go v1.50.20 h1:xfAnSDVf/azIWTVQXQODp89bubvCS85r70O3nuQ4dnE=
|
||||||
github.com/aws/aws-sdk-go v1.50.20/go.mod h1:LF8svs817+Nz+DmiMQKTO3ubZ/6IaTpq3TjupRn3Eqk=
|
github.com/aws/aws-sdk-go v1.50.20/go.mod h1:LF8svs817+Nz+DmiMQKTO3ubZ/6IaTpq3TjupRn3Eqk=
|
||||||
github.com/aws/aws-sdk-go-v2 v1.27.2 h1:pLsTXqX93rimAOZG2FIYraDQstZaaGVVN4tNw65v0h8=
|
github.com/aws/aws-sdk-go-v2 v1.30.5 h1:mWSRTwQAb0aLE17dSzztCVJWI9+cRMgqebndjwDyK0g=
|
||||||
github.com/aws/aws-sdk-go-v2 v1.27.2/go.mod h1:ffIFB97e2yNsv4aTSGkqtHnppsIJzw7G7BReUZ3jCXM=
|
github.com/aws/aws-sdk-go-v2 v1.30.5/go.mod h1:CT+ZPWXbYrci8chcARI3OmI/qgd+f6WtuLOoaIA8PR0=
|
||||||
github.com/aws/aws-sdk-go-v2/config v1.27.18 h1:wFvAnwOKKe7QAyIxziwSKjmer9JBMH1vzIL6W+fYuKk=
|
github.com/aws/aws-sdk-go-v2/config v1.27.33 h1:Nof9o/MsmH4oa0s2q9a0k7tMz5x/Yj5k06lDODWz3BU=
|
||||||
github.com/aws/aws-sdk-go-v2/config v1.27.18/go.mod h1:0xz6cgdX55+kmppvPm2IaKzIXOheGJhAufacPJaXZ7c=
|
github.com/aws/aws-sdk-go-v2/config v1.27.33/go.mod h1:kEqdYzRb8dd8Sy2pOdEbExTTF5v7ozEXX0McgPE7xks=
|
||||||
github.com/aws/aws-sdk-go-v2/credentials v1.17.18 h1:D/ALDWqK4JdY3OFgA2thcPO1c9aYTT5STS/CvnkqY1c=
|
github.com/aws/aws-sdk-go-v2/credentials v1.17.32 h1:7Cxhp/BnT2RcGy4VisJ9miUPecY+lyE9I8JvcZofn9I=
|
||||||
github.com/aws/aws-sdk-go-v2/credentials v1.17.18/go.mod h1:JuitCWq+F5QGUrmMPsk945rop6bB57jdscu+Glozdnc=
|
github.com/aws/aws-sdk-go-v2/credentials v1.17.32/go.mod h1:P5/QMF3/DCHbXGEGkdbilXHsyTBX5D3HSwcrSc9p20I=
|
||||||
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.5 h1:dDgptDO9dxeFkXy+tEgVkzSClHZje/6JkPW5aZyEvrQ=
|
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.13 h1:pfQ2sqNpMVK6xz2RbqLEL0GH87JOwSxPV2rzm8Zsb74=
|
||||||
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.5/go.mod h1:gjvE2KBUgUQhcv89jqxrIxH9GaKs1JbZzWejj/DaHGA=
|
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.13/go.mod h1:NG7RXPUlqfsCLLFfi0+IpKN4sCB9D9fw/qTaSB+xRoU=
|
||||||
github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.9 h1:cy8ahBJuhtM8GTTSyOkfy6WVPV1IE+SS5/wfXUYuulw=
|
github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.17 h1:pI7Bzt0BJtYA0N/JEC6B8fJ4RBrEMi1LBrkMdFYNSnQ=
|
||||||
github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.9/go.mod h1:CZBXGLaJnEZI6EVNcPd7a6B5IC5cA/GkRWtu9fp3S6Y=
|
github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.17/go.mod h1:Dh5zzJYMtxfIjYW+/evjQ8uj2OyR/ve2KROHGHlSFqE=
|
||||||
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.9 h1:A4SYk07ef04+vxZToz9LWvAXl9LW0NClpPpMsi31cz0=
|
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.17 h1:Mqr/V5gvrhA2gvgnF42Zh5iMiQNcOYthFYwCyrnuWlc=
|
||||||
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.9/go.mod h1:5jJcHuwDagxN+ErjQ3PU3ocf6Ylc/p9x+BLO/+X4iXw=
|
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.17/go.mod h1:aLJpZlCmjE+V+KtN1q1uyZkfnUWpQGpbsn89XPKyzfU=
|
||||||
github.com/aws/aws-sdk-go-v2/internal/ini v1.8.0 h1:hT8rVHwugYE2lEfdFE0QWVo81lF7jMrYJVDWI+f+VxU=
|
github.com/aws/aws-sdk-go-v2/internal/ini v1.8.1 h1:VaRN3TlFdd6KxX1x3ILT5ynH6HvKgqdiXoTxAF4HQcQ=
|
||||||
github.com/aws/aws-sdk-go-v2/internal/ini v1.8.0/go.mod h1:8tu/lYfQfFe6IGnaOdrpVgEL2IrrDOf6/m9RQum4NkY=
|
github.com/aws/aws-sdk-go-v2/internal/ini v1.8.1/go.mod h1:FbtygfRFze9usAadmnGJNc8KsP346kEe+y2/oyhGAGc=
|
||||||
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.2 h1:Ji0DY1xUsUr3I8cHps0G+XM3WWU16lP6yG8qu1GAZAs=
|
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.4 h1:KypMCbLPPHEmf9DgMGw51jMj77VfGPAN2Kv4cfhlfgI=
|
||||||
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.2/go.mod h1:5CsjAbs3NlGQyZNFACh+zztPDI7fU6eW9QsxjfnuBKg=
|
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.4/go.mod h1:Vz1JQXliGcQktFTN/LN6uGppAIRoLBR2bMvIMP0gOjc=
|
||||||
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.11 h1:o4T+fKxA3gTMcluBNZZXE9DNaMkJuUL1O3mffCUjoJo=
|
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.19 h1:rfprUlsdzgl7ZL2KlXiUAoJnI/VxfHCvDFr2QDFj6u4=
|
||||||
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.11/go.mod h1:84oZdJ+VjuJKs9v1UTC9NaodRZRseOXCTgku+vQJWR8=
|
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.19/go.mod h1:SCWkEdRq8/7EK60NcvvQ6NXKuTcchAD4ROAsC37VEZE=
|
||||||
github.com/aws/aws-sdk-go-v2/service/sso v1.20.11 h1:gEYM2GSpr4YNWc6hCd5nod4+d4kd9vWIAWrmGuLdlMw=
|
github.com/aws/aws-sdk-go-v2/service/sso v1.22.7 h1:pIaGg+08llrP7Q5aiz9ICWbY8cqhTkyy+0SHvfzQpTc=
|
||||||
github.com/aws/aws-sdk-go-v2/service/sso v1.20.11/go.mod h1:gVvwPdPNYehHSP9Rs7q27U1EU+3Or2ZpXvzAYJNh63w=
|
github.com/aws/aws-sdk-go-v2/service/sso v1.22.7/go.mod h1:eEygMHnTKH/3kNp9Jr1n3PdejuSNcgwLe1dWgQtO0VQ=
|
||||||
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.24.5 h1:iXjh3uaH3vsVcnyZX7MqCoCfcyxIrVE9iOQruRaWPrQ=
|
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.26.7 h1:/Cfdu0XV3mONYKaOt1Gr0k1KvQzkzPyiKUdlWJqy+J4=
|
||||||
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.24.5/go.mod h1:5ZXesEuy/QcO0WUnt+4sDkxhdXRHTu2yG0uCSH8B6os=
|
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.26.7/go.mod h1:bCbAxKDqNvkHxRaIMnyVPXPo+OaPRwvmgzMxbz1VKSA=
|
||||||
github.com/aws/aws-sdk-go-v2/service/sts v1.28.12 h1:M/1u4HBpwLuMtjlxuI2y6HoVLzF5e2mfxHCg7ZVMYmk=
|
github.com/aws/aws-sdk-go-v2/service/sts v1.30.7 h1:NKTa1eqZYw8tiHSRGpP0VtTdub/8KNk8sDkNPFaOKDE=
|
||||||
github.com/aws/aws-sdk-go-v2/service/sts v1.28.12/go.mod h1:kcfd+eTdEi/40FIbLq4Hif3XMXnl5b/+t/KTfLt9xIk=
|
github.com/aws/aws-sdk-go-v2/service/sts v1.30.7/go.mod h1:NXi1dIAGteSaRLqYgarlhP/Ij0cFT+qmCwiJqWh/U5o=
|
||||||
github.com/aws/smithy-go v1.20.2 h1:tbp628ireGtzcHDDmLT/6ADHidqnwgF57XOXZe6tp4Q=
|
github.com/aws/smithy-go v1.20.4 h1:2HK1zBdPgRbjFOHlfeQZfpC4r72MOb9bZkiFwggKO+4=
|
||||||
github.com/aws/smithy-go v1.20.2/go.mod h1:krry+ya/rV9RDcV/Q16kpu6ypI4K2czasz0NC3qS14E=
|
github.com/aws/smithy-go v1.20.4/go.mod h1:irrKGvNn1InZwb2d7fkIRNucdfwR8R+Ts3wxYa/cJHg=
|
||||||
github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA=
|
github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA=
|
||||||
github.com/beorn7/perks v0.0.0-20150223135152-b965b613227f/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
|
github.com/beorn7/perks v0.0.0-20150223135152-b965b613227f/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
|
||||||
github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
|
github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
|
||||||
@@ -128,8 +128,8 @@ github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK3
|
|||||||
github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
|
github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
|
||||||
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
|
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
|
||||||
github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
|
github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
|
||||||
github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44=
|
github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
|
||||||
github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
|
github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
|
||||||
github.com/chenzhuoyu/base64x v0.0.0-20211019084208-fb5309c8db06/go.mod h1:DH46F32mSOjUmXrMHnKwZdA8wcEefY7UVqBKYGjpdQY=
|
github.com/chenzhuoyu/base64x v0.0.0-20211019084208-fb5309c8db06/go.mod h1:DH46F32mSOjUmXrMHnKwZdA8wcEefY7UVqBKYGjpdQY=
|
||||||
github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311/go.mod h1:b583jCggY9gE99b6G5LEC39OIiVsWj+R97kbl5odCEk=
|
github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311/go.mod h1:b583jCggY9gE99b6G5LEC39OIiVsWj+R97kbl5odCEk=
|
||||||
github.com/chenzhuoyu/base64x v0.0.0-20230717121745-296ad89f973d h1:77cEq6EriyTZ0g/qfRdp61a3Uu/AWrgIq2s0ClJV1g0=
|
github.com/chenzhuoyu/base64x v0.0.0-20230717121745-296ad89f973d h1:77cEq6EriyTZ0g/qfRdp61a3Uu/AWrgIq2s0ClJV1g0=
|
||||||
@@ -146,11 +146,11 @@ github.com/clbanning/mxj v1.8.5-0.20200714211355-ff02cfb8ea28/go.mod h1:BVjHeAH+
|
|||||||
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
|
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
|
||||||
github.com/cloudflare/cfssl v0.0.0-20180223231731-4e2dcbde5004 h1:lkAMpLVBDaj17e85keuznYcH5rqI438v41pKcBl4ZxQ=
|
github.com/cloudflare/cfssl v0.0.0-20180223231731-4e2dcbde5004 h1:lkAMpLVBDaj17e85keuznYcH5rqI438v41pKcBl4ZxQ=
|
||||||
github.com/cloudflare/cfssl v0.0.0-20180223231731-4e2dcbde5004/go.mod h1:yMWuSON2oQp+43nFtAV/uvKQIFpSPerB57DCt9t8sSA=
|
github.com/cloudflare/cfssl v0.0.0-20180223231731-4e2dcbde5004/go.mod h1:yMWuSON2oQp+43nFtAV/uvKQIFpSPerB57DCt9t8sSA=
|
||||||
github.com/cloudflare/cloudflare-go v0.97.0 h1:feZRGiRF1EbljnNIYdt8014FnOLtC3CCvgkLXu915ks=
|
github.com/cloudflare/cloudflare-go v0.104.0 h1:R/lB0dZupaZbOgibAH/BRrkFbZ6Acn/WsKg2iX2xXuY=
|
||||||
github.com/cloudflare/cloudflare-go v0.97.0/go.mod h1:JXRwuTfHpe5xFg8xytc2w0XC6LcrFsBVMS4WlVaiGg8=
|
github.com/cloudflare/cloudflare-go v0.104.0/go.mod h1:pfUQ4PIG4ISI0/Mmc21Bp86UnFU0ktmPf3iTgbSL+cM=
|
||||||
github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
|
github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
|
||||||
github.com/cncf/xds/go v0.0.0-20231128003011-0fa0005c9caa h1:jQCWAUqqlij9Pgj2i/PB79y4KOPYVyFYdROxgaCwdTQ=
|
github.com/cncf/xds/go v0.0.0-20240423153145-555b57ec207b h1:ga8SEFjZ60pxLcmhnThWgvH2wg8376yUJmPhEH4H3kw=
|
||||||
github.com/cncf/xds/go v0.0.0-20231128003011-0fa0005c9caa/go.mod h1:x/1Gn8zydmfq8dk6e9PdstVsDgu9RuyIIJqAaF//0IM=
|
github.com/cncf/xds/go v0.0.0-20240423153145-555b57ec207b/go.mod h1:W+zGtBO5Y1IgJhy4+A9GOqVhqLpfZi+vwmdNXUehLA8=
|
||||||
github.com/codahale/rfc6979 v0.0.0-20141003034818-6a90f24967eb h1:EDmT6Q9Zs+SbUoc7Ik9EfrFqcylYqgPZ9ANSbTAntnE=
|
github.com/codahale/rfc6979 v0.0.0-20141003034818-6a90f24967eb h1:EDmT6Q9Zs+SbUoc7Ik9EfrFqcylYqgPZ9ANSbTAntnE=
|
||||||
github.com/codahale/rfc6979 v0.0.0-20141003034818-6a90f24967eb/go.mod h1:ZjrT6AXHbDs86ZSdt/osfBi5qfexBrKUdONk989Wnk4=
|
github.com/codahale/rfc6979 v0.0.0-20141003034818-6a90f24967eb/go.mod h1:ZjrT6AXHbDs86ZSdt/osfBi5qfexBrKUdONk989Wnk4=
|
||||||
github.com/compose-spec/compose-go/v2 v2.0.2 h1:zhXMV7VWI00Su0LdKt8/sxeXxcjLWhmGmpEyw+ZYznI=
|
github.com/compose-spec/compose-go/v2 v2.0.2 h1:zhXMV7VWI00Su0LdKt8/sxeXxcjLWhmGmpEyw+ZYznI=
|
||||||
@@ -240,8 +240,6 @@ github.com/envoyproxy/protoc-gen-validate v1.0.4 h1:gVPz/FMfvh57HdSJQyvBtF00j8JU
|
|||||||
github.com/envoyproxy/protoc-gen-validate v1.0.4/go.mod h1:qys6tmnRsYrQqIhm2bvKZH4Blx/1gTIZ2UKVY1M+Yew=
|
github.com/envoyproxy/protoc-gen-validate v1.0.4/go.mod h1:qys6tmnRsYrQqIhm2bvKZH4Blx/1gTIZ2UKVY1M+Yew=
|
||||||
github.com/erikstmartin/go-testdb v0.0.0-20160219214506-8d10e4a1bae5 h1:Yzb9+7DPaBjB8zlTR87/ElzFsnQfuHnVUVqpZZIcV5Y=
|
github.com/erikstmartin/go-testdb v0.0.0-20160219214506-8d10e4a1bae5 h1:Yzb9+7DPaBjB8zlTR87/ElzFsnQfuHnVUVqpZZIcV5Y=
|
||||||
github.com/erikstmartin/go-testdb v0.0.0-20160219214506-8d10e4a1bae5/go.mod h1:a2zkGnVExMxdzMo3M0Hi/3sEU+cWnZpSni0O6/Yb/P0=
|
github.com/erikstmartin/go-testdb v0.0.0-20160219214506-8d10e4a1bae5/go.mod h1:a2zkGnVExMxdzMo3M0Hi/3sEU+cWnZpSni0O6/Yb/P0=
|
||||||
github.com/fatih/color v1.16.0 h1:zmkK9Ngbjj+K0yRhTVONQh1p/HknKYSlNT+vZCzyokM=
|
|
||||||
github.com/fatih/color v1.16.0/go.mod h1:fL2Sau1YI5c0pdGEVCbKQbLXB6edEj1ZgiY4NijnWvE=
|
|
||||||
github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg=
|
github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg=
|
||||||
github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
|
github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
|
||||||
github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k=
|
github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k=
|
||||||
@@ -265,23 +263,23 @@ github.com/glebarez/go-sqlite v1.22.0 h1:uAcMJhaA6r3LHMTFgP0SifzgXg46yJkgxqyuyec
|
|||||||
github.com/glebarez/go-sqlite v1.22.0/go.mod h1:PlBIdHe0+aUEFn+r2/uthrWq4FxbzugL0L8Li6yQJbc=
|
github.com/glebarez/go-sqlite v1.22.0/go.mod h1:PlBIdHe0+aUEFn+r2/uthrWq4FxbzugL0L8Li6yQJbc=
|
||||||
github.com/glebarez/sqlite v1.10.0 h1:u4gt8y7OND/cCei/NMHmfbLxF6xP2wgKcT/BJf2pYkc=
|
github.com/glebarez/sqlite v1.10.0 h1:u4gt8y7OND/cCei/NMHmfbLxF6xP2wgKcT/BJf2pYkc=
|
||||||
github.com/glebarez/sqlite v1.10.0/go.mod h1:IJ+lfSOmiekhQsFTJRx/lHtGYmCdtAiTaf5wI9u5uHA=
|
github.com/glebarez/sqlite v1.10.0/go.mod h1:IJ+lfSOmiekhQsFTJRx/lHtGYmCdtAiTaf5wI9u5uHA=
|
||||||
github.com/go-acme/lego/v4 v4.17.4 h1:h0nePd3ObP6o7kAkndtpTzCw8shOZuWckNYeUQwo36Q=
|
github.com/go-acme/lego/v4 v4.19.2 h1:Y8hrmMvWETdqzzkRly7m98xtPJJivWFsgWi8fcvZo+Y=
|
||||||
github.com/go-acme/lego/v4 v4.17.4/go.mod h1:dU94SvPNqimEeb7EVilGGSnS0nU1O5Exir0pQ4QFL4U=
|
github.com/go-acme/lego/v4 v4.19.2/go.mod h1:wtDe3dDkmV4/oI2nydpNXSJpvV10J9RCyZ6MbYxNtlQ=
|
||||||
github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU=
|
github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU=
|
||||||
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
|
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
|
||||||
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
|
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
|
||||||
github.com/go-gormigrate/gormigrate/v2 v2.1.1 h1:eGS0WTFRV30r103lU8JNXY27KbviRnqqIDobW3EV3iY=
|
github.com/go-gormigrate/gormigrate/v2 v2.1.1 h1:eGS0WTFRV30r103lU8JNXY27KbviRnqqIDobW3EV3iY=
|
||||||
github.com/go-gormigrate/gormigrate/v2 v2.1.1/go.mod h1:L7nJ620PFDKei9QOhJzqA8kRCk+E3UbV2f5gv+1ndLc=
|
github.com/go-gormigrate/gormigrate/v2 v2.1.1/go.mod h1:L7nJ620PFDKei9QOhJzqA8kRCk+E3UbV2f5gv+1ndLc=
|
||||||
github.com/go-jose/go-jose/v4 v4.0.2 h1:R3l3kkBds16bO7ZFAEEcofK0MkrAJt3jlJznWZG0nvk=
|
github.com/go-jose/go-jose/v4 v4.0.4 h1:VsjPI33J0SB9vQM6PLmNjoHqMQNGPiZ0rHL7Ni7Q6/E=
|
||||||
github.com/go-jose/go-jose/v4 v4.0.2/go.mod h1:WVf9LFMHh/QVrmqrOfqun0C45tMe3RoiKJMPvgWwLfY=
|
github.com/go-jose/go-jose/v4 v4.0.4/go.mod h1:NKb5HO1EZccyMpiZNbdUw/14tiXNyUJh188dfnMCAfc=
|
||||||
github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
|
github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
|
||||||
github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY=
|
github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY=
|
||||||
github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE=
|
github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE=
|
||||||
github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk=
|
github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk=
|
||||||
github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A=
|
github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A=
|
||||||
github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
|
github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
|
||||||
github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ=
|
github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY=
|
||||||
github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
|
github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
|
||||||
github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
|
github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
|
||||||
github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
|
github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
|
||||||
github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0=
|
github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0=
|
||||||
@@ -320,8 +318,8 @@ github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/me
|
|||||||
github.com/goccy/go-json v0.9.7/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I=
|
github.com/goccy/go-json v0.9.7/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I=
|
||||||
github.com/goccy/go-json v0.10.3 h1:KZ5WoDbxAIgm2HNbYckL0se1fHD6rz5j4ywS6ebzDqA=
|
github.com/goccy/go-json v0.10.3 h1:KZ5WoDbxAIgm2HNbYckL0se1fHD6rz5j4ywS6ebzDqA=
|
||||||
github.com/goccy/go-json v0.10.3/go.mod h1:oq7eo15ShAhp70Anwd5lgX2pLfOS3QCiwU/PULtXL6M=
|
github.com/goccy/go-json v0.10.3/go.mod h1:oq7eo15ShAhp70Anwd5lgX2pLfOS3QCiwU/PULtXL6M=
|
||||||
github.com/gofrs/flock v0.8.1 h1:+gYjHKf32LDeiEEFhQaotPbLuUXjY5ZqxKgXy7n59aw=
|
github.com/gofrs/flock v0.12.1 h1:MTLVXXHf8ekldpJk3AKicLij9MdwOWkZ+a/jHHZby9E=
|
||||||
github.com/gofrs/flock v0.8.1/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU=
|
github.com/gofrs/flock v0.12.1/go.mod h1:9zxTsyu5xtJ9DK+1tFZyibEV7y3uwDxPPfbxeeHCoD0=
|
||||||
github.com/gogo/googleapis v1.4.1 h1:1Yx4Myt7BxzvUr5ldGSbwYiZG6t9wGBZ+8/fX3Wvtq0=
|
github.com/gogo/googleapis v1.4.1 h1:1Yx4Myt7BxzvUr5ldGSbwYiZG6t9wGBZ+8/fX3Wvtq0=
|
||||||
github.com/gogo/googleapis v1.4.1/go.mod h1:2lpHqI5OcWCtVElxXnPt+s8oJvMpySlOyM6xDCrzib4=
|
github.com/gogo/googleapis v1.4.1/go.mod h1:2lpHqI5OcWCtVElxXnPt+s8oJvMpySlOyM6xDCrzib4=
|
||||||
github.com/gogo/protobuf v1.0.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
|
github.com/gogo/protobuf v1.0.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
|
||||||
@@ -338,8 +336,8 @@ github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe/go.mod h1:8vg3r2V
|
|||||||
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 h1:DACJavvAHhabrF08vX0COfcOBJRhZ8lUbR+ZWIs0Y5g=
|
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 h1:DACJavvAHhabrF08vX0COfcOBJRhZ8lUbR+ZWIs0Y5g=
|
||||||
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k=
|
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k=
|
||||||
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
|
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
|
||||||
github.com/golang/glog v1.2.0 h1:uCdmnmatrKCgMBlM4rMuJZWOkPDqdbZPnrMXDY4gI68=
|
github.com/golang/glog v1.2.1 h1:OptwRhECazUx5ix5TTWC3EZhsZEHWcYWY4FQHTIubm4=
|
||||||
github.com/golang/glog v1.2.0/go.mod h1:6AhwSGph0fcJtXVM/PEHPqZlFeoLxhs7/t5UDAwmO+w=
|
github.com/golang/glog v1.2.1/go.mod h1:6AhwSGph0fcJtXVM/PEHPqZlFeoLxhs7/t5UDAwmO+w=
|
||||||
github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
|
github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
|
||||||
github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
|
github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
|
||||||
github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
|
github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
|
||||||
@@ -428,8 +426,8 @@ github.com/gorilla/websocket v1.5.1 h1:gmztn0JnHVt9JZquRuzLw3g4wouNVzKL15iLr/zn/
|
|||||||
github.com/gorilla/websocket v1.5.1/go.mod h1:x3kM2JMyaluk02fnUJpQuwD2dCS5NDG2ZHL0uE0tcaY=
|
github.com/gorilla/websocket v1.5.1/go.mod h1:x3kM2JMyaluk02fnUJpQuwD2dCS5NDG2ZHL0uE0tcaY=
|
||||||
github.com/grpc-ecosystem/go-grpc-middleware v1.4.0 h1:UH//fgunKIs4JdUbpDl1VZCDaL56wXCB/5+wF6uHfaI=
|
github.com/grpc-ecosystem/go-grpc-middleware v1.4.0 h1:UH//fgunKIs4JdUbpDl1VZCDaL56wXCB/5+wF6uHfaI=
|
||||||
github.com/grpc-ecosystem/go-grpc-middleware v1.4.0/go.mod h1:g5qyo/la0ALbONm6Vbp88Yd8NsDy6rZz+RcrMPxvld8=
|
github.com/grpc-ecosystem/go-grpc-middleware v1.4.0/go.mod h1:g5qyo/la0ALbONm6Vbp88Yd8NsDy6rZz+RcrMPxvld8=
|
||||||
github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.1 h1:/c3QmbOGMGTOumP2iT/rCwB7b0QDGLKzqOmktBjT+Is=
|
github.com/grpc-ecosystem/grpc-gateway/v2 v2.22.0 h1:asbCHRVmodnJTuQ3qamDwqVOIjwqUPTYmYuemVOx+Ys=
|
||||||
github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.1/go.mod h1:5SN9VR2LTsRFsrEC6FHgRbTWrTHu6tqPeKxEQv15giM=
|
github.com/grpc-ecosystem/grpc-gateway/v2 v2.22.0/go.mod h1:ggCgvZ2r7uOoQjOyu2Y1NhHmEPPzzuhWgcza5M1Ji1I=
|
||||||
github.com/h2non/filetype v1.1.1/go.mod h1:319b3zT68BvV+WRj7cwy856M2ehB3HqNOt6sy1HndBY=
|
github.com/h2non/filetype v1.1.1/go.mod h1:319b3zT68BvV+WRj7cwy856M2ehB3HqNOt6sy1HndBY=
|
||||||
github.com/h2non/filetype v1.1.3 h1:FKkx9QbD7HR/zjK1Ia5XiBsq9zdLi5Kf3zGyFTAFkGg=
|
github.com/h2non/filetype v1.1.3 h1:FKkx9QbD7HR/zjK1Ia5XiBsq9zdLi5Kf3zGyFTAFkGg=
|
||||||
github.com/h2non/filetype v1.1.3/go.mod h1:319b3zT68BvV+WRj7cwy856M2ehB3HqNOt6sy1HndBY=
|
github.com/h2non/filetype v1.1.3/go.mod h1:319b3zT68BvV+WRj7cwy856M2ehB3HqNOt6sy1HndBY=
|
||||||
@@ -440,12 +438,8 @@ github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY
|
|||||||
github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
|
github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
|
||||||
github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ=
|
github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ=
|
||||||
github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48=
|
github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48=
|
||||||
github.com/hashicorp/go-hclog v1.6.3 h1:Qr2kF+eVWjTiYmU7Y31tYlP1h0q/X3Nl3tPGdaB11/k=
|
|
||||||
github.com/hashicorp/go-hclog v1.6.3/go.mod h1:W4Qnvbt70Wk/zYJryRzDRU/4r0kIg0PVHBcfoyhpF5M=
|
|
||||||
github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo=
|
github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo=
|
||||||
github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM=
|
github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM=
|
||||||
github.com/hashicorp/go-retryablehttp v0.7.7 h1:C8hUCYzor8PIfXHa4UrZkU4VvK8o9ISHxT2Q8+VepXU=
|
|
||||||
github.com/hashicorp/go-retryablehttp v0.7.7/go.mod h1:pkQpWZeYWskR+D1tR2O5OcBFOxfA7DoAO6xtkuQnHTk=
|
|
||||||
github.com/hashicorp/go-version v1.6.0 h1:feTTfFNnjP967rlCxM/I9g701jU+RN74YKx2mOkIeek=
|
github.com/hashicorp/go-version v1.6.0 h1:feTTfFNnjP967rlCxM/I9g701jU+RN74YKx2mOkIeek=
|
||||||
github.com/hashicorp/go-version v1.6.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA=
|
github.com/hashicorp/go-version v1.6.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA=
|
||||||
github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
|
github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
|
||||||
@@ -454,8 +448,8 @@ github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4=
|
|||||||
github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ=
|
github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ=
|
||||||
github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI=
|
github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI=
|
||||||
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
|
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
|
||||||
github.com/huaweicloud/huaweicloud-sdk-go-v3 v0.1.113 h1:odui9Ua0u1hPfpkutN/tGvtt0ms55I+gQqIdU8K1rlo=
|
github.com/huaweicloud/huaweicloud-sdk-go-v3 v0.1.114 h1:X3E16S6AUZsQKhJIQ5kNnylnp0GtSy2YhIbxfvDavtU=
|
||||||
github.com/huaweicloud/huaweicloud-sdk-go-v3 v0.1.113/go.mod h1:JWz2ujO9X3oU5wb6kXp+DpR2UuDj2SldDbX8T0FSuhI=
|
github.com/huaweicloud/huaweicloud-sdk-go-v3 v0.1.114/go.mod h1:JWz2ujO9X3oU5wb6kXp+DpR2UuDj2SldDbX8T0FSuhI=
|
||||||
github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
|
github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
|
||||||
github.com/imdario/mergo v0.3.16 h1:wwQJbIsHYGMUyLSPrEq1CT16AhnhNJQ51+4fdHUnCl4=
|
github.com/imdario/mergo v0.3.16 h1:wwQJbIsHYGMUyLSPrEq1CT16AhnhNJQ51+4fdHUnCl4=
|
||||||
github.com/imdario/mergo v0.3.16/go.mod h1:WBLT9ZmE3lPoWsEzCh9LPo3TiwVN+ZKEjmz+hD27ysY=
|
github.com/imdario/mergo v0.3.16/go.mod h1:WBLT9ZmE3lPoWsEzCh9LPo3TiwVN+ZKEjmz+hD27ysY=
|
||||||
@@ -543,8 +537,6 @@ github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0V
|
|||||||
github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0=
|
github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0=
|
||||||
github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0=
|
github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0=
|
||||||
github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc=
|
github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc=
|
||||||
github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA=
|
|
||||||
github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg=
|
|
||||||
github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94=
|
github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94=
|
||||||
github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
|
github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
|
||||||
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
|
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
|
||||||
@@ -557,8 +549,8 @@ github.com/mattn/go-sqlite3 v1.14.16/go.mod h1:2eHXhiwb8IkHr+BDWZGa96P6+rkvnG63S
|
|||||||
github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
|
github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
|
||||||
github.com/mholt/archiver/v4 v4.0.0-alpha.8 h1:tRGQuDVPh66WCOelqe6LIGh0gwmfwxUrSSDunscGsRM=
|
github.com/mholt/archiver/v4 v4.0.0-alpha.8 h1:tRGQuDVPh66WCOelqe6LIGh0gwmfwxUrSSDunscGsRM=
|
||||||
github.com/mholt/archiver/v4 v4.0.0-alpha.8/go.mod h1:5f7FUYGXdJWUjESffJaYR4R60VhnHxb2X3T1teMyv5A=
|
github.com/mholt/archiver/v4 v4.0.0-alpha.8/go.mod h1:5f7FUYGXdJWUjESffJaYR4R60VhnHxb2X3T1teMyv5A=
|
||||||
github.com/miekg/dns v1.1.59 h1:C9EXc/UToRwKLhK5wKU/I4QVsBUc8kE6MkHBkeypWZs=
|
github.com/miekg/dns v1.1.62 h1:cN8OuEF1/x5Rq6Np+h1epln8OiyPWV+lROx9LxcGgIQ=
|
||||||
github.com/miekg/dns v1.1.59/go.mod h1:nZpewl5p6IvctfgrckopVx2OlSEHPRO/U4SYkRklrEk=
|
github.com/miekg/dns v1.1.62/go.mod h1:mvDlcItzm+br7MToIKqkglaGhlFMHJ9DTNNWONWXbNQ=
|
||||||
github.com/miekg/pkcs11 v1.0.2/go.mod h1:XsNlhZGX73bx86s2hdc/FuaLm2CPZJemRLMA+WTFxgs=
|
github.com/miekg/pkcs11 v1.0.2/go.mod h1:XsNlhZGX73bx86s2hdc/FuaLm2CPZJemRLMA+WTFxgs=
|
||||||
github.com/miekg/pkcs11 v1.1.1 h1:Ugu9pdy6vAYku5DEpVWVFPYnzV+bxB+iRdbuFSu7TvU=
|
github.com/miekg/pkcs11 v1.1.1 h1:Ugu9pdy6vAYku5DEpVWVFPYnzV+bxB+iRdbuFSu7TvU=
|
||||||
github.com/miekg/pkcs11 v1.1.1/go.mod h1:XsNlhZGX73bx86s2hdc/FuaLm2CPZJemRLMA+WTFxgs=
|
github.com/miekg/pkcs11 v1.1.1/go.mod h1:XsNlhZGX73bx86s2hdc/FuaLm2CPZJemRLMA+WTFxgs=
|
||||||
@@ -699,8 +691,8 @@ github.com/robfig/cron/v3 v3.0.1/go.mod h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzG
|
|||||||
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
|
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
|
||||||
github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc=
|
github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc=
|
||||||
github.com/rogpeppe/go-internal v1.8.0/go.mod h1:WmiCO8CzOY8rg0OYDC4/i/2WRWAB6poM+XZ2dLUbcbE=
|
github.com/rogpeppe/go-internal v1.8.0/go.mod h1:WmiCO8CzOY8rg0OYDC4/i/2WRWAB6poM+XZ2dLUbcbE=
|
||||||
github.com/rogpeppe/go-internal v1.11.0 h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M=
|
github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8=
|
||||||
github.com/rogpeppe/go-internal v1.11.0/go.mod h1:ddIwULY96R17DhadqLgMfk9H9tvdUzkipdSkR5nkCZA=
|
github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4=
|
||||||
github.com/rs/xid v1.5.0 h1:mKX4bl4iPYJtEIxp6CYiUuLQ/8DYMoz0PUdtGgMFRVc=
|
github.com/rs/xid v1.5.0 h1:mKX4bl4iPYJtEIxp6CYiUuLQ/8DYMoz0PUdtGgMFRVc=
|
||||||
github.com/rs/xid v1.5.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg=
|
github.com/rs/xid v1.5.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg=
|
||||||
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
|
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
|
||||||
@@ -774,10 +766,10 @@ github.com/swaggo/gin-swagger v1.6.0/go.mod h1:BG00cCEy294xtVpyIAHG6+e2Qzj/xKlRd
|
|||||||
github.com/swaggo/swag v1.16.3 h1:PnCYjPCah8FK4I26l2F/KQ4yz3sILcVUN3cTlBFA9Pg=
|
github.com/swaggo/swag v1.16.3 h1:PnCYjPCah8FK4I26l2F/KQ4yz3sILcVUN3cTlBFA9Pg=
|
||||||
github.com/swaggo/swag v1.16.3/go.mod h1:DImHIuOFXKpMFAQjcC7FG4m3Dg4+QuUgUzJmKjI/gRk=
|
github.com/swaggo/swag v1.16.3/go.mod h1:DImHIuOFXKpMFAQjcC7FG4m3Dg4+QuUgUzJmKjI/gRk=
|
||||||
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.563/go.mod h1:7sCQWVkxcsR38nffDW057DRGk8mUjK1Ing/EFOK8s8Y=
|
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.563/go.mod h1:7sCQWVkxcsR38nffDW057DRGk8mUjK1Ing/EFOK8s8Y=
|
||||||
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.898 h1:ERwcXqhc94L9cFxtiI0pvt7IJtlHl/p/Jayl3mLw+ms=
|
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1002 h1:RE84sHFFx6t24DJvSnF9fS1DzBNv9OpctzHK3t7AY+I=
|
||||||
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.898/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
|
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1002/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
|
||||||
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dnspod v1.0.898 h1:LoYv5u+gUoFpU/AmIuTRG/2KiEkdm9gCC0dTvk8WITQ=
|
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dnspod v1.0.1002 h1:QwE0dRkAAbdf+eACnkNULgDn9ZKUJpPWRyXdqJolP5E=
|
||||||
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dnspod v1.0.898/go.mod h1:c1j6YQ+vCbeA8kJ59Im4UnMd1GxovlpPBDhGZoewfn8=
|
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dnspod v1.0.1002/go.mod h1:WdC0FYbqYhJwQ3kbqri6hVP5HAEp+rzX9FToItTAzUg=
|
||||||
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/kms v1.0.563/go.mod h1:uom4Nvi9W+Qkom0exYiJ9VWJjXwyxtPYTkKkaLMlfE0=
|
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/kms v1.0.563/go.mod h1:uom4Nvi9W+Qkom0exYiJ9VWJjXwyxtPYTkKkaLMlfE0=
|
||||||
github.com/tencentyun/cos-go-sdk-v5 v0.7.46 h1:IeTiMR8qZ7iQWhAGb1niw5vt0T1TfAwPeB8Gn/oTkuk=
|
github.com/tencentyun/cos-go-sdk-v5 v0.7.46 h1:IeTiMR8qZ7iQWhAGb1niw5vt0T1TfAwPeB8Gn/oTkuk=
|
||||||
github.com/tencentyun/cos-go-sdk-v5 v0.7.46/go.mod h1:DH9US8nB+AJXqwu/AMOrCFN1COv3dpytXuJWHgdg7kE=
|
github.com/tencentyun/cos-go-sdk-v5 v0.7.46/go.mod h1:DH9US8nB+AJXqwu/AMOrCFN1COv3dpytXuJWHgdg7kE=
|
||||||
@@ -848,22 +840,22 @@ go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.4
|
|||||||
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.48.0/go.mod h1:tIKj3DbO8N9Y2xo52og3irLsPI4GW02DSMtrVgNMgxg=
|
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.48.0/go.mod h1:tIKj3DbO8N9Y2xo52og3irLsPI4GW02DSMtrVgNMgxg=
|
||||||
go.opentelemetry.io/contrib/instrumentation/net/http/httptrace/otelhttptrace v0.48.0 h1:ZeW4++xt1VrFSdnd0pFXz0PkrjLb89/VPOUOyPDJG/g=
|
go.opentelemetry.io/contrib/instrumentation/net/http/httptrace/otelhttptrace v0.48.0 h1:ZeW4++xt1VrFSdnd0pFXz0PkrjLb89/VPOUOyPDJG/g=
|
||||||
go.opentelemetry.io/contrib/instrumentation/net/http/httptrace/otelhttptrace v0.48.0/go.mod h1:ZdzuQW6m/OEtOLWWJs+k5ddZXsUq9xs2vx+ZT9G9eJ0=
|
go.opentelemetry.io/contrib/instrumentation/net/http/httptrace/otelhttptrace v0.48.0/go.mod h1:ZdzuQW6m/OEtOLWWJs+k5ddZXsUq9xs2vx+ZT9G9eJ0=
|
||||||
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 h1:jq9TW8u3so/bN+JPT166wjOI6/vQPF6Xe7nMNIltagk=
|
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.54.0 h1:TT4fX+nBOA/+LUkobKGW1ydGcn+G3vRw9+g5HwCphpk=
|
||||||
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0/go.mod h1:p8pYQP+m5XfbZm9fxtSKAbM6oIllS7s2AfxrChvc7iw=
|
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.54.0/go.mod h1:L7UH0GbB0p47T4Rri3uHjbpCFYrVrwc1I25QhNPiGK8=
|
||||||
go.opentelemetry.io/otel v1.24.0 h1:0LAOdjNmQeSTzGBzduGe/rU4tZhMwL5rWgtp9Ku5Jfo=
|
go.opentelemetry.io/otel v1.29.0 h1:PdomN/Al4q/lN6iBJEN3AwPvUiHPMlt93c8bqTG5Llw=
|
||||||
go.opentelemetry.io/otel v1.24.0/go.mod h1:W7b9Ozg4nkF5tWI5zsXkaKKDjdVjpD4oAt9Qi/MArHo=
|
go.opentelemetry.io/otel v1.29.0/go.mod h1:N/WtXPs1CNCUEx+Agz5uouwCba+i+bJGFicT8SR4NP8=
|
||||||
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.23.1 h1:o8iWeVFa1BcLtVEV0LzrCxV2/55tB3xLxADr6Kyoey4=
|
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.29.0 h1:dIIDULZJpgdiHz5tXrTgKIMLkus6jEFa7x5SOKcyR7E=
|
||||||
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.23.1/go.mod h1:SEVfdK4IoBnbT2FXNM/k8yC08MrfbhWk3U4ljM8B3HE=
|
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.29.0/go.mod h1:jlRVBe7+Z1wyxFSUs48L6OBQZ5JwH2Hg/Vbl+t9rAgI=
|
||||||
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.23.1 h1:cfuy3bXmLJS7M1RZmAL6SuhGtKUp2KEsrm00OlAXkq4=
|
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.29.0 h1:JAv0Jwtl01UFiyWZEMiJZBiTlv5A50zNs8lsthXqIio=
|
||||||
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.23.1/go.mod h1:22jr92C6KwlwItJmQzfixzQM3oyyuYLCfHiMY+rpsPU=
|
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.29.0/go.mod h1:QNKLmUEAq2QUbPQUfvw4fmv0bgbK7UlOSFCnXyfvSNc=
|
||||||
go.opentelemetry.io/otel/metric v1.24.0 h1:6EhoGWWK28x1fbpA4tYTOWBkPefTDQnb8WSGXlc88kI=
|
go.opentelemetry.io/otel/metric v1.29.0 h1:vPf/HFWTNkPu1aYeIsc98l4ktOQaL6LeSoeV2g+8YLc=
|
||||||
go.opentelemetry.io/otel/metric v1.24.0/go.mod h1:VYhLe1rFfxuTXLgj4CBiyz+9WYBA8pNGJgDcSFRKBco=
|
go.opentelemetry.io/otel/metric v1.29.0/go.mod h1:auu/QWieFVWx+DmQOUMgj0F8LHWdgalxXqvp7BII/W8=
|
||||||
go.opentelemetry.io/otel/sdk v1.23.1 h1:O7JmZw0h76if63LQdsBMKQDWNb5oEcOThG9IrxscV+E=
|
go.opentelemetry.io/otel/sdk v1.29.0 h1:vkqKjk7gwhS8VaWb0POZKmIEDimRCMsopNYnriHyryo=
|
||||||
go.opentelemetry.io/otel/sdk v1.23.1/go.mod h1:LzdEVR5am1uKOOwfBWFef2DCi1nu3SA8XQxx2IerWFk=
|
go.opentelemetry.io/otel/sdk v1.29.0/go.mod h1:pM8Dx5WKnvxLCb+8lG1PRNIDxu9g9b9g59Qr7hfAAok=
|
||||||
go.opentelemetry.io/otel/trace v1.24.0 h1:CsKnnL4dUAr/0llH9FKuc698G04IrpWV0MQA/Y1YELI=
|
go.opentelemetry.io/otel/trace v1.29.0 h1:J/8ZNK4XgR7a21DZUAsbF8pZ5Jcw1VhACmnYt39JTi4=
|
||||||
go.opentelemetry.io/otel/trace v1.24.0/go.mod h1:HPc3Xr/cOApsBI154IU0OI0HJexz+aw5uPdbs3UCjNU=
|
go.opentelemetry.io/otel/trace v1.29.0/go.mod h1:eHl3w0sp3paPkYstJOmAimxhiFXPg+MMTlEh3nsQgWQ=
|
||||||
go.opentelemetry.io/proto/otlp v1.1.0 h1:2Di21piLrCqJ3U3eXGCTPHE9R8Nh+0uglSnOyxikMeI=
|
go.opentelemetry.io/proto/otlp v1.3.1 h1:TrMUixzpM0yuc/znrFTP9MMRh8trP93mkCiDVeXrui0=
|
||||||
go.opentelemetry.io/proto/otlp v1.1.0/go.mod h1:GpBHCBWiqvVLDqmHZsoMM3C5ySeKTC7ej/RNTae6MdY=
|
go.opentelemetry.io/proto/otlp v1.3.1/go.mod h1:0X1WI4de4ZsLrrJNLAQbFeLCm3T7yBkR0XqQ7niQU+8=
|
||||||
go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc=
|
go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc=
|
||||||
go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc=
|
go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc=
|
||||||
go.uber.org/atomic v1.11.0 h1:ZvwS0R+56ePWxUNi+Atn9dWONBPp/AUETXlHW0DxSjE=
|
go.uber.org/atomic v1.11.0 h1:ZvwS0R+56ePWxUNi+Atn9dWONBPp/AUETXlHW0DxSjE=
|
||||||
@@ -893,8 +885,8 @@ golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0
|
|||||||
golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw=
|
golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw=
|
||||||
golang.org/x/crypto v0.21.0/go.mod h1:0BP7YvVV9gBbVKyeTG0Gyn+gZm94bibOW5BjDEYAOMs=
|
golang.org/x/crypto v0.21.0/go.mod h1:0BP7YvVV9gBbVKyeTG0Gyn+gZm94bibOW5BjDEYAOMs=
|
||||||
golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v8=
|
golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v8=
|
||||||
golang.org/x/crypto v0.24.0 h1:mnl8DM0o513X8fdIkmyFE/5hTYxbwYOjDS/+rK6qpRI=
|
golang.org/x/crypto v0.27.0 h1:GXm2NjJrPaiv/h1tb2UH8QfgC/hOf/+z0p6PT8o1w7A=
|
||||||
golang.org/x/crypto v0.24.0/go.mod h1:Z1PMYSOR5nyMcyAVAIQSKCDwalqy85Aqn1x3Ws4L5DM=
|
golang.org/x/crypto v0.27.0/go.mod h1:1Xngt8kV6Dvbssa53Ziq6Eqn0HqbZi5Z6R0ZpwQzt70=
|
||||||
golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
||||||
golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
||||||
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
||||||
@@ -936,8 +928,8 @@ golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
|||||||
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
||||||
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
|
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
|
||||||
golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
|
golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
|
||||||
golang.org/x/mod v0.18.0 h1:5+9lSbEzPSdWkH32vYPBwEpX8KwDbM52Ud9xBUvNlb0=
|
golang.org/x/mod v0.21.0 h1:vvrHzRwRfVKSiLrG+d4FMl/Qi4ukBCE6kZlTUkDYRT0=
|
||||||
golang.org/x/mod v0.18.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
|
golang.org/x/mod v0.21.0/go.mod h1:6SkKJ3Xj0I0BrPOZoBy3bdMptDDU9oJrpohJ3eWZ1fY=
|
||||||
golang.org/x/net v0.23.0 h1:7EYJ93RZ9vYSZAIb2x3lnuvqO5zneoD6IvWjuhfxjTs=
|
golang.org/x/net v0.23.0 h1:7EYJ93RZ9vYSZAIb2x3lnuvqO5zneoD6IvWjuhfxjTs=
|
||||||
golang.org/x/net v0.23.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg=
|
golang.org/x/net v0.23.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg=
|
||||||
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
|
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
|
||||||
@@ -946,8 +938,8 @@ golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4Iltr
|
|||||||
golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
|
golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
|
||||||
golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
|
golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
|
||||||
golang.org/x/oauth2 v0.0.0-20210313182246-cd4f82c27b84/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
|
golang.org/x/oauth2 v0.0.0-20210313182246-cd4f82c27b84/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
|
||||||
golang.org/x/oauth2 v0.21.0 h1:tsimM75w1tF/uws5rbeHzIWxEqElMehnc+iW793zsZs=
|
golang.org/x/oauth2 v0.23.0 h1:PbgcYx2W7i4LvjJWEbf0ngHV6qJYr86PkAV3bXdLEbs=
|
||||||
golang.org/x/oauth2 v0.21.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI=
|
golang.org/x/oauth2 v0.23.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI=
|
||||||
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
@@ -959,8 +951,8 @@ golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJ
|
|||||||
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M=
|
golang.org/x/sync v0.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ=
|
||||||
golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
|
golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
|
||||||
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
@@ -1011,15 +1003,15 @@ golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
|||||||
golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
||||||
golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
||||||
golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
||||||
golang.org/x/sys v0.21.0 h1:rF+pYz3DAGSQAxAu1CbC7catZg4ebC4UIeIhKxBZvws=
|
golang.org/x/sys v0.25.0 h1:r+8e+loiHxRqhXVl6ML1nO3l1+oFoWbnlu2Ehimmi34=
|
||||||
golang.org/x/sys v0.21.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
golang.org/x/sys v0.25.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
||||||
golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
|
golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
|
||||||
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
||||||
golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
|
golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
|
||||||
golang.org/x/term v0.18.0/go.mod h1:ILwASektA3OnRv7amZ1xhE/KTR+u50pbXfZ03+6Nx58=
|
golang.org/x/term v0.18.0/go.mod h1:ILwASektA3OnRv7amZ1xhE/KTR+u50pbXfZ03+6Nx58=
|
||||||
golang.org/x/term v0.20.0/go.mod h1:8UkIAJTvZgivsXaD6/pH6U9ecQzZ45awqEOzuCvwpFY=
|
golang.org/x/term v0.20.0/go.mod h1:8UkIAJTvZgivsXaD6/pH6U9ecQzZ45awqEOzuCvwpFY=
|
||||||
golang.org/x/term v0.21.0 h1:WVXCp+/EBEHOj53Rvu+7KiT/iElMrO8ACK16SMZ3jaA=
|
golang.org/x/term v0.24.0 h1:Mh5cbb+Zk2hqqXNO7S1iTjEphVL+jb8ZWaqh/g+JWkM=
|
||||||
golang.org/x/term v0.21.0/go.mod h1:ooXLefLobQVslOqselCNF4SxFAaoS6KujMbsGzSDmX0=
|
golang.org/x/term v0.24.0/go.mod h1:lOBK/LVxemqiMij05LGJ0tzNr8xlmwBRJ81PX6wVLH8=
|
||||||
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||||
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||||
@@ -1033,13 +1025,13 @@ golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
|
|||||||
golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
|
golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
|
||||||
golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
|
golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
|
||||||
golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
|
golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
|
||||||
golang.org/x/text v0.16.0 h1:a94ExnEXNtEwYLGJSIUxnWoxoRz/ZcCsV63ROupILh4=
|
golang.org/x/text v0.18.0 h1:XvMDiNzPAl0jr17s6W9lcaIhGUfUORdGCNsuLmPG224=
|
||||||
golang.org/x/text v0.16.0/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI=
|
golang.org/x/text v0.18.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY=
|
||||||
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
||||||
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
||||||
golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
||||||
golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk=
|
golang.org/x/time v0.6.0 h1:eTDhh4ZXt5Qf0augr54TN6suAUudPcawVZeIAPU7D4U=
|
||||||
golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
|
golang.org/x/time v0.6.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
|
||||||
golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||||
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||||
golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||||
@@ -1087,8 +1079,8 @@ golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc
|
|||||||
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
|
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
|
||||||
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
|
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
|
||||||
golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=
|
golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=
|
||||||
golang.org/x/tools v0.22.0 h1:gqSGLZqv+AI9lIQzniJ0nZDRG5GBPsSi+DRNHWNz6yA=
|
golang.org/x/tools v0.25.0 h1:oFU9pkj/iJgs+0DT+VMHrx+oBKs/LJMV+Uvg78sl+fE=
|
||||||
golang.org/x/tools v0.22.0/go.mod h1:aCwcsjqvq7Yqt6TNyX7QMU2enbQ/Gt0bo6krSeEri+c=
|
golang.org/x/tools v0.25.0/go.mod h1:/vtpO8WL1N9cQC3FN5zPqb//fRXskFHbLKk4OW1Q7rg=
|
||||||
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||||
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||||
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||||
@@ -1149,12 +1141,12 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc
|
|||||||
google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
|
google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
|
||||||
google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
|
google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
|
||||||
google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
|
google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
|
||||||
google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de h1:F6qOa9AZTYJXOUEr4jDysRDLrm4PHePlge4v4TGAlxY=
|
google.golang.org/genproto v0.0.0-20240903143218-8af14fe29dc1 h1:BulPr26Jqjnd4eYDVe+YvyR7Yc2vJGkO5/0UxD0/jZU=
|
||||||
google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de/go.mod h1:VUhTRKeHn9wwcdrk73nvdC9gF178Tzhmt/qyaFcPLSo=
|
google.golang.org/genproto v0.0.0-20240903143218-8af14fe29dc1/go.mod h1:hL97c3SYopEHblzpxRL4lSs523++l8DYxGM1FQiYmb4=
|
||||||
google.golang.org/genproto/googleapis/api v0.0.0-20240311132316-a219d84964c2 h1:rIo7ocm2roD9DcFIX67Ym8icoGCKSARAiPljFhh5suQ=
|
google.golang.org/genproto/googleapis/api v0.0.0-20240827150818-7e3bb234dfed h1:3RgNmBoI9MZhsj3QxC+AP/qQhNwpCLOvYDYYsFrhFt0=
|
||||||
google.golang.org/genproto/googleapis/api v0.0.0-20240311132316-a219d84964c2/go.mod h1:O1cOfN1Cy6QEYr7VxtjOyP5AdAuR0aJ/MYZaaof623Y=
|
google.golang.org/genproto/googleapis/api v0.0.0-20240827150818-7e3bb234dfed/go.mod h1:OCdP9MfskevB/rbYvHTsXTtKC+3bHWajPdoKgjcYkfo=
|
||||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20240318140521-94a12d6c2237 h1:NnYq6UN9ReLM9/Y01KWNOWyI5xQ9kbIms5GGJVwS/Yc=
|
google.golang.org/genproto/googleapis/rpc v0.0.0-20240903143218-8af14fe29dc1 h1:pPJltXNxVzT4pK9yD8vR9X75DaWYYmLGMsEvBfFQZzQ=
|
||||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20240318140521-94a12d6c2237/go.mod h1:WtryC6hu0hhx87FDGxWCDptyssuo68sk10vYjF+T9fY=
|
google.golang.org/genproto/googleapis/rpc v0.0.0-20240903143218-8af14fe29dc1/go.mod h1:UqMtugtsSgubUsoxbuAoiCXvqvErP7Gf0so0mK9tHxU=
|
||||||
google.golang.org/grpc v1.0.5/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw=
|
google.golang.org/grpc v1.0.5/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw=
|
||||||
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
|
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
|
||||||
google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38=
|
google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38=
|
||||||
@@ -1169,8 +1161,8 @@ google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3Iji
|
|||||||
google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
|
google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
|
||||||
google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
|
google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
|
||||||
google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc=
|
google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc=
|
||||||
google.golang.org/grpc v1.63.1 h1:pNClQmvdlyNUiwFETOux/PYqfhmA7BrswEdGRnib1fA=
|
google.golang.org/grpc v1.66.1 h1:hO5qAXR19+/Z44hmvIM4dQFMSYX9XcWsByfoxutBpAM=
|
||||||
google.golang.org/grpc v1.63.1/go.mod h1:WAX/8DgncnokcFUldAxq7GeB5DXHDbMF+lLvDomNkRA=
|
google.golang.org/grpc v1.66.1/go.mod h1:s3/l6xSSCURdVfAnL+TqCNMyTDAGN6+lZeVxnZR128Y=
|
||||||
google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
|
google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
|
||||||
google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
|
google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
|
||||||
google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
|
google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
|
||||||
@@ -1184,8 +1176,8 @@ google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlba
|
|||||||
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
|
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
|
||||||
google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
|
google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
|
||||||
google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
|
google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
|
||||||
google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI=
|
google.golang.org/protobuf v1.34.2 h1:6xV6lTsCfpGD21XK49h7MhtcApnLqkfYgPcdHftf6hg=
|
||||||
google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
|
google.golang.org/protobuf v1.34.2/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWniOlNbLDw=
|
||||||
gopkg.in/airbrake/gobrake.v2 v2.0.9/go.mod h1:/h5ZAUhDkGaJfjzjKLSjv6zCL6O0LLBxU4K+aSYdM/U=
|
gopkg.in/airbrake/gobrake.v2 v2.0.9/go.mod h1:/h5ZAUhDkGaJfjzjKLSjv6zCL6O0LLBxU4K+aSYdM/U=
|
||||||
gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
|
gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
|
||||||
gopkg.in/cenkalti/backoff.v2 v2.2.1 h1:eJ9UAg01/HIHG987TwxvnzK2MgxXq97YY6rYDpY9aII=
|
gopkg.in/cenkalti/backoff.v2 v2.2.1 h1:eJ9UAg01/HIHG987TwxvnzK2MgxXq97YY6rYDpY9aII=
|
||||||
|
|||||||
Reference in New Issue
Block a user