mirror of
https://github.com/1Panel-dev/1Panel.git
synced 2024-11-11 09:45:43 +08:00
90 lines
2.3 KiB
Go
90 lines
2.3 KiB
Go
package service
|
|
|
|
import (
|
|
"github.com/1Panel-dev/1Panel/backend/app/dto"
|
|
"github.com/1Panel-dev/1Panel/backend/constant"
|
|
"github.com/1Panel-dev/1Panel/backend/utils/nginx"
|
|
"github.com/1Panel-dev/1Panel/backend/utils/nginx/components"
|
|
"github.com/1Panel-dev/1Panel/backend/utils/nginx/parser"
|
|
"os"
|
|
"path"
|
|
)
|
|
|
|
func getDefaultNginxConfig() (dto.NginxConfig, error) {
|
|
var nginxConfig dto.NginxConfig
|
|
|
|
nginxInstall, err := getAppInstallByKey("nginx")
|
|
if err != nil {
|
|
return nginxConfig, err
|
|
}
|
|
|
|
configPath := path.Join(constant.AppInstallDir, "nginx", nginxInstall.Name, "conf", "nginx.conf")
|
|
content, err := os.ReadFile(configPath)
|
|
if err != nil {
|
|
return nginxConfig, err
|
|
}
|
|
config := parser.NewStringParser(string(content)).Parse()
|
|
config.FilePath = configPath
|
|
nginxConfig.Config = config
|
|
nginxConfig.OldContent = string(content)
|
|
nginxConfig.ContainerName = nginxInstall.ContainerName
|
|
nginxConfig.FilePath = configPath
|
|
|
|
return nginxConfig, nil
|
|
}
|
|
|
|
func getHttpConfigByKeys(keys []string) ([]dto.NginxParam, error) {
|
|
nginxConfig, err := getDefaultNginxConfig()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
config := nginxConfig.Config
|
|
http := config.FindHttp()
|
|
|
|
var res []dto.NginxParam
|
|
for _, key := range keys {
|
|
dirs := http.FindDirectives(key)
|
|
for _, dir := range dirs {
|
|
nginxParam := dto.NginxParam{
|
|
Name: dir.GetName(),
|
|
Params: dir.GetParameters(),
|
|
}
|
|
if isRepeatKey(key) {
|
|
nginxParam.SecondKey = dir.GetParameters()[0]
|
|
}
|
|
res = append(res, nginxParam)
|
|
}
|
|
if len(dirs) == 0 {
|
|
nginxParam := dto.NginxParam{
|
|
Name: key,
|
|
Params: []string{},
|
|
}
|
|
res = append(res, nginxParam)
|
|
}
|
|
}
|
|
return res, nil
|
|
}
|
|
|
|
func updateHttpNginxConfig(params []dto.NginxParam) error {
|
|
nginxConfig, err := getDefaultNginxConfig()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
config := nginxConfig.Config
|
|
http := config.FindHttp()
|
|
for _, p := range params {
|
|
newDir := components.Directive{
|
|
Name: p.Name,
|
|
Parameters: p.Params,
|
|
}
|
|
if isRepeatKey(p.Name) {
|
|
http.UpdateDirectiveBySecondKey(p.Name, p.SecondKey, newDir)
|
|
} else {
|
|
http.UpdateDirectives(p.Name, newDir)
|
|
}
|
|
}
|
|
if err := nginx.WriteConfig(config, nginx.IndentedStyle); err != nil {
|
|
return err
|
|
}
|
|
return nginxCheckAndReload(nginxConfig.OldContent, nginxConfig.FilePath, nginxConfig.ContainerName)
|
|
}
|