|
4 | 4 | "bufio" |
5 | 5 | "encoding/json" |
6 | 6 | "fmt" |
| 7 | + "github.com/1Panel-dev/1Panel/agent/utils/nginx" |
| 8 | + "github.com/1Panel-dev/1Panel/agent/utils/nginx/parser" |
7 | 9 | "io" |
8 | 10 | "net/http" |
9 | 11 | "os" |
@@ -42,6 +44,9 @@ type INginxService interface { |
42 | 44 | Build(req request.NginxBuildReq) error |
43 | 45 | GetModules() (*response.NginxBuildConfig, error) |
44 | 46 | UpdateModule(req request.NginxModuleUpdate) error |
| 47 | + |
| 48 | + OperateDefaultHTTPs(req request.NginxOperateReq) error |
| 49 | + GetDefaultHttpsStatus() (*response.NginxConfigRes, error) |
45 | 50 | } |
46 | 51 |
|
47 | 52 | func NewINginxService() INginxService { |
@@ -348,3 +353,70 @@ func (n NginxService) UpdateModule(req request.NginxModuleUpdate) error { |
348 | 353 | } |
349 | 354 | return fileOp.SaveFileWithByte(moduleConfigPath, moduleByte, constant.DirPerm) |
350 | 355 | } |
| 356 | + |
| 357 | +func (n NginxService) OperateDefaultHTTPs(req request.NginxOperateReq) error { |
| 358 | + appInstall, err := getAppInstallByKey(constant.AppOpenresty) |
| 359 | + if err != nil { |
| 360 | + return err |
| 361 | + } |
| 362 | + websites, _ := websiteRepo.List() |
| 363 | + hasDefaultWebsite := false |
| 364 | + for _, website := range websites { |
| 365 | + if website.DefaultServer { |
| 366 | + hasDefaultWebsite = true |
| 367 | + break |
| 368 | + } |
| 369 | + } |
| 370 | + defaultConfigPath := path.Join(appInstall.GetPath(), "conf", "default", "00.default.conf") |
| 371 | + content, err := os.ReadFile(defaultConfigPath) |
| 372 | + if err != nil { |
| 373 | + return err |
| 374 | + } |
| 375 | + if req.Operate == "enable" { |
| 376 | + if err := handleSSLConfig(&appInstall, hasDefaultWebsite); err != nil { |
| 377 | + return err |
| 378 | + } |
| 379 | + } else if req.Operate == "disable" { |
| 380 | + defaultConfig, err := parser.NewStringParser(string(content)).Parse() |
| 381 | + if err != nil { |
| 382 | + return err |
| 383 | + } |
| 384 | + defaultConfig.FilePath = defaultConfigPath |
| 385 | + defaultServer := defaultConfig.FindServers()[0] |
| 386 | + defaultServer.RemoveListen(fmt.Sprintf("%d", appInstall.HttpsPort)) |
| 387 | + defaultServer.RemoveListen(fmt.Sprintf("[::]:%d", appInstall.HttpsPort)) |
| 388 | + defaultServer.RemoveDirective("include", []string{"/usr/local/openresty/nginx/conf/ssl/root_ssl.conf"}) |
| 389 | + defaultServer.RemoveDirective("http2", []string{"on"}) |
| 390 | + if err = nginx.WriteConfig(defaultConfig, nginx.IndentedStyle); err != nil { |
| 391 | + return err |
| 392 | + } |
| 393 | + } |
| 394 | + return nginxCheckAndReload(string(content), defaultConfigPath, appInstall.ContainerName) |
| 395 | +} |
| 396 | + |
| 397 | +func (n NginxService) GetDefaultHttpsStatus() (*response.NginxConfigRes, error) { |
| 398 | + appInstall, err := getAppInstallByKey(constant.AppOpenresty) |
| 399 | + if err != nil { |
| 400 | + return nil, err |
| 401 | + } |
| 402 | + defaultConfigPath := path.Join(appInstall.GetPath(), "conf", "default", "00.default.conf") |
| 403 | + content, err := os.ReadFile(defaultConfigPath) |
| 404 | + if err != nil { |
| 405 | + return nil, err |
| 406 | + } |
| 407 | + defaultConfig, err := parser.NewStringParser(string(content)).Parse() |
| 408 | + if err != nil { |
| 409 | + return nil, err |
| 410 | + } |
| 411 | + defaultConfig.FilePath = defaultConfigPath |
| 412 | + defaultServer := defaultConfig.FindServers()[0] |
| 413 | + res := &response.NginxConfigRes{} |
| 414 | + for _, directive := range defaultServer.GetDirectives() { |
| 415 | + if directive.GetName() == "include" && directive.GetParameters()[0] == "/usr/local/openresty/nginx/conf/ssl/root_ssl.conf" { |
| 416 | + return &response.NginxConfigRes{ |
| 417 | + Https: true, |
| 418 | + }, nil |
| 419 | + } |
| 420 | + } |
| 421 | + return res, nil |
| 422 | +} |
0 commit comments