(req request.StreamUpdate)
| 2416 | } |
| 2417 | |
| 2418 | func (w WebsiteService) UpdateStream(req request.StreamUpdate) error { |
| 2419 | if req.StreamConfig.StreamPorts == "" { |
| 2420 | return buserr.New("ErrTypePortRange") |
| 2421 | } |
| 2422 | website, err := websiteRepo.GetFirst(repo.WithByID(req.WebsiteID)) |
| 2423 | if err != nil { |
| 2424 | return err |
| 2425 | } |
| 2426 | nginxFull, err := getNginxFull(&website) |
| 2427 | if err != nil { |
| 2428 | return nil |
| 2429 | } |
| 2430 | website.StreamPorts = req.StreamConfig.StreamPorts |
| 2431 | ports := strings.Split(req.StreamConfig.StreamPorts, ",") |
| 2432 | for _, port := range ports { |
| 2433 | portNum, _ := strconv.Atoi(port) |
| 2434 | if err = checkWebsitePort(nginxFull.Install.HttpsPort, portNum, website.Type); err != nil { |
| 2435 | return err |
| 2436 | } |
| 2437 | } |
| 2438 | |
| 2439 | config := nginxFull.SiteConfig.Config |
| 2440 | servers := config.FindServers() |
| 2441 | if len(servers) == 0 { |
| 2442 | return errors.New("nginx config is not valid") |
| 2443 | } |
| 2444 | server := servers[0] |
| 2445 | server.Listens = []*components.ServerListen{} |
| 2446 | var params []string |
| 2447 | if req.UDP { |
| 2448 | params = []string{"udp"} |
| 2449 | } |
| 2450 | for _, port := range ports { |
| 2451 | server.UpdateListen(port, false, params...) |
| 2452 | if website.IPV6 { |
| 2453 | server.UpdateListen("[::]:"+port, false, params...) |
| 2454 | } |
| 2455 | } |
| 2456 | upstream := components.Upstream{ |
| 2457 | UpstreamName: website.Alias, |
| 2458 | } |
| 2459 | if req.Algorithm != "default" { |
| 2460 | upstream.UpdateDirective(req.Algorithm, []string{}) |
| 2461 | } |
| 2462 | upstream.UpstreamServers = parseUpstreamServers(req.Servers) |
| 2463 | for i, dir := range config.Block.Directives { |
| 2464 | if dir.GetName() == "upstream" && dir.GetParameters()[0] == website.Alias { |
| 2465 | config.Block.Directives[i] = &upstream |
| 2466 | } |
| 2467 | } |
| 2468 | |
| 2469 | if err := nginx.WriteConfig(config, nginx.IndentedStyle); err != nil { |
| 2470 | return err |
| 2471 | } |
| 2472 | if err = nginxCheckAndReload(nginxFull.SiteConfig.OldContent, config.FilePath, nginxFull.Install.ContainerName); err != nil { |
| 2473 | return err |
| 2474 | } |
| 2475 | website.StreamPorts = req.StreamConfig.StreamPorts |
nothing calls this directly
no test coverage detected