From 9ac5ae4968559d651369e1332eb3c38a40d1872e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=80=97=E5=AD=90?= Date: Sat, 26 Oct 2024 01:37:51 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20nginx=E8=A7=A3=E6=9E=90=E5=99=A8?= =?UTF-8?q?=E6=94=AF=E6=8C=81=E8=AE=BE=E7=BD=AEalt-svc?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/nginx/getter.go | 15 +++++++++++++++ pkg/nginx/parser_test.go | 11 +++++++++++ pkg/nginx/setter.go | 38 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 64 insertions(+) diff --git a/pkg/nginx/getter.go b/pkg/nginx/getter.go index 9bb8a704..7a00074b 100644 --- a/pkg/nginx/getter.go +++ b/pkg/nginx/getter.go @@ -183,6 +183,21 @@ func (p *Parser) GetHTTPSRedirect() bool { return false } +func (p *Parser) GetAltSvc() string { + directive, err := p.FindOne("server.add_header") + if err != nil { + return "" + } + + for i, param := range directive.GetParameters() { + if strings.HasPrefix(param, "Alt-Svc") && i+1 < len(directive.GetParameters()) { + return directive.GetParameters()[i+1] + } + } + + return "" +} + func (p *Parser) GetAccessLog() (string, error) { directive, err := p.FindOne("server.access_log") if err != nil { diff --git a/pkg/nginx/parser_test.go b/pkg/nginx/parser_test.go index 9cfefa43..988320df 100644 --- a/pkg/nginx/parser_test.go +++ b/pkg/nginx/parser_test.go @@ -198,6 +198,17 @@ func (s *NginxTestSuite) TestHTTPSRedirect() { s.False(parser.GetHTTPSRedirect()) } +func (s *NginxTestSuite) TestAltSvc() { + parser, err := NewParser() + s.NoError(err) + s.NoError(parser.SetHTTPS("/www/server/vhost/cert/default.pem", "/www/server/vhost/cert/default.key")) + s.Equal("", parser.GetAltSvc()) + s.NoError(parser.SetAltSvc(`'h3=":$server_port"; ma=2592000'`)) + s.Equal(`'h3=":$server_port"; ma=2592000'`, parser.GetAltSvc()) + s.NoError(parser.SetAltSvc("")) + s.Equal("", parser.GetAltSvc()) +} + func (s *NginxTestSuite) TestAccessLog() { parser, err := NewParser() s.NoError(err) diff --git a/pkg/nginx/setter.go b/pkg/nginx/setter.go index 6f12560f..097712ab 100644 --- a/pkg/nginx/setter.go +++ b/pkg/nginx/setter.go @@ -425,6 +425,44 @@ func (p *Parser) SetHTTPRedirect(httpRedirect bool) error { return p.Set("server", directives) } +func (p *Parser) SetAltSvc(altSvc string) error { + old, err := p.Find("server.add_header") + if err != nil { + return err + } + if err = p.Clear("server.add_header"); err != nil { + return err + } + + var directives []*config.Directive + var foundFlag bool + for _, dir := range old { + if slices.Contains(dir.GetParameters(), "Alt-Svc") { + foundFlag = true + directives = append(directives, &config.Directive{ + Name: dir.GetName(), + Parameters: []string{"Alt-Svc", altSvc}, + Comment: dir.GetComment(), + }) + } else { + directives = append(directives, &config.Directive{ + Name: dir.GetName(), + Parameters: dir.GetParameters(), + Comment: dir.GetComment(), + }) + } + } + + if !foundFlag && altSvc != "" { + directives = append(directives, &config.Directive{ + Name: "add_header", + Parameters: []string{"Alt-Svc", altSvc}, + }) + } + + return p.Set("server", directives) +} + func (p *Parser) SetAccessLog(accessLog string) error { if err := p.Clear("server.access_log"); err != nil { return err