mirror of
https://github.com/acepanel/panel.git
synced 2026-02-04 04:22:33 +08:00
224 lines
5.0 KiB
Go
224 lines
5.0 KiB
Go
package nginx
|
|
|
|
import (
|
|
"fmt"
|
|
"slices"
|
|
"strings"
|
|
)
|
|
|
|
func (p *Parser) GetListen() ([][]string, error) {
|
|
directives, err := p.Find("server.listen")
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
var result [][]string
|
|
for _, dir := range directives {
|
|
result = append(result, p.parameters2Slices(dir.GetParameters()))
|
|
}
|
|
|
|
return result, nil
|
|
}
|
|
|
|
func (p *Parser) GetServerName() ([]string, error) {
|
|
directive, err := p.FindOne("server.server_name")
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return p.parameters2Slices(directive.GetParameters()), nil
|
|
}
|
|
|
|
func (p *Parser) GetIndex() ([]string, error) {
|
|
directive, err := p.FindOne("server.index")
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return p.parameters2Slices(directive.GetParameters()), nil
|
|
}
|
|
|
|
func (p *Parser) GetIndexWithComment() ([]string, []string, error) {
|
|
directive, err := p.FindOne("server.index")
|
|
if err != nil {
|
|
return nil, nil, err
|
|
}
|
|
|
|
return p.parameters2Slices(directive.GetParameters()), directive.GetComment(), nil
|
|
}
|
|
|
|
func (p *Parser) GetRoot() (string, error) {
|
|
directive, err := p.FindOne("server.root")
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
if len(p.parameters2Slices(directive.GetParameters())) == 0 {
|
|
return "", nil
|
|
}
|
|
|
|
return directive.GetParameters()[0].GetValue(), nil
|
|
}
|
|
|
|
func (p *Parser) GetRootWithComment() (string, []string, error) {
|
|
directive, err := p.FindOne("server.root")
|
|
if err != nil {
|
|
return "", nil, err
|
|
}
|
|
if len(p.parameters2Slices(directive.GetParameters())) == 0 {
|
|
return "", directive.GetComment(), nil
|
|
}
|
|
|
|
return directive.GetParameters()[0].GetValue(), directive.GetComment(), nil
|
|
}
|
|
|
|
func (p *Parser) GetIncludes() (includes []string, comments [][]string, err error) {
|
|
directives, err := p.Find("server.include")
|
|
if err != nil {
|
|
return nil, nil, err
|
|
}
|
|
|
|
for _, dir := range directives {
|
|
if len(dir.GetParameters()) != 1 {
|
|
return nil, nil, fmt.Errorf("invalid include directive, expected 1 parameter but got %d", len(dir.GetParameters()))
|
|
}
|
|
includes = append(includes, dir.GetParameters()[0].GetValue())
|
|
comments = append(comments, dir.GetComment())
|
|
}
|
|
|
|
return includes, comments, nil
|
|
}
|
|
|
|
func (p *Parser) GetPHP() int {
|
|
directives, err := p.Find("server.include")
|
|
if err != nil {
|
|
return 0
|
|
}
|
|
|
|
var result int
|
|
for _, dir := range directives {
|
|
if slices.ContainsFunc(p.parameters2Slices(dir.GetParameters()), func(s string) bool {
|
|
return strings.HasPrefix(s, "enable-php-") && strings.HasSuffix(s, ".conf")
|
|
}) {
|
|
_, _ = fmt.Sscanf(dir.GetParameters()[0].GetValue(), "enable-php-%d.conf", &result)
|
|
}
|
|
}
|
|
|
|
return result
|
|
}
|
|
|
|
func (p *Parser) GetHTTPS() bool {
|
|
directive, err := p.FindOne("server.ssl_certificate")
|
|
if err != nil {
|
|
return false
|
|
}
|
|
if len(p.parameters2Slices(directive.GetParameters())) == 0 {
|
|
return false
|
|
}
|
|
|
|
return true
|
|
}
|
|
|
|
func (p *Parser) GetHTTPSProtocols() []string {
|
|
directive, err := p.FindOne("server.ssl_protocols")
|
|
if err != nil {
|
|
return nil
|
|
}
|
|
|
|
return p.parameters2Slices(directive.GetParameters())
|
|
}
|
|
|
|
func (p *Parser) GetHTTPSCiphers() string {
|
|
directive, err := p.FindOne("server.ssl_ciphers")
|
|
if err != nil {
|
|
return ""
|
|
}
|
|
if len(p.parameters2Slices(directive.GetParameters())) == 0 {
|
|
return ""
|
|
}
|
|
|
|
return directive.GetParameters()[0].GetValue()
|
|
}
|
|
|
|
func (p *Parser) GetOCSP() bool {
|
|
directive, err := p.FindOne("server.ssl_stapling")
|
|
if err != nil {
|
|
return false
|
|
}
|
|
if len(p.parameters2Slices(directive.GetParameters())) == 0 {
|
|
return false
|
|
}
|
|
|
|
return directive.GetParameters()[0].GetValue() == "on"
|
|
}
|
|
|
|
func (p *Parser) GetHSTS() bool {
|
|
directives, err := p.Find("server.add_header")
|
|
if err != nil {
|
|
return false
|
|
}
|
|
|
|
for _, dir := range directives {
|
|
if slices.Contains(p.parameters2Slices(dir.GetParameters()), "Strict-Transport-Security") {
|
|
return true
|
|
}
|
|
}
|
|
|
|
return false
|
|
}
|
|
|
|
func (p *Parser) GetHTTPSRedirect() bool {
|
|
directives, err := p.Find("server.if")
|
|
if err != nil {
|
|
return false
|
|
}
|
|
|
|
for _, dir := range directives {
|
|
for _, dir2 := range dir.GetBlock().GetDirectives() {
|
|
if dir2.GetName() == "return" && slices.Contains(p.parameters2Slices(dir2.GetParameters()), "https://$host$request_uri") {
|
|
return true
|
|
}
|
|
}
|
|
}
|
|
|
|
return false
|
|
}
|
|
|
|
func (p *Parser) GetAltSvc() string {
|
|
directive, err := p.FindOne("server.add_header")
|
|
if err != nil {
|
|
return ""
|
|
}
|
|
|
|
for i, param := range p.parameters2Slices(directive.GetParameters()) {
|
|
if strings.HasPrefix(param, "Alt-Svc") && i+1 < len(p.parameters2Slices(directive.GetParameters())) {
|
|
return p.parameters2Slices(directive.GetParameters())[i+1]
|
|
}
|
|
}
|
|
|
|
return ""
|
|
}
|
|
|
|
func (p *Parser) GetAccessLog() (string, error) {
|
|
directive, err := p.FindOne("server.access_log")
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
if len(p.parameters2Slices(directive.GetParameters())) == 0 {
|
|
return "", nil
|
|
}
|
|
|
|
return directive.GetParameters()[0].GetValue(), nil
|
|
}
|
|
|
|
func (p *Parser) GetErrorLog() (string, error) {
|
|
directive, err := p.FindOne("server.error_log")
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
if len(p.parameters2Slices(directive.GetParameters())) == 0 {
|
|
return "", nil
|
|
}
|
|
|
|
return directive.GetParameters()[0].GetValue(), nil
|
|
}
|