* chore(deps): mod update * fix(scanner): do not attach tty because there is no need to enter ssh password * feat(windows): support Windows
		
			
				
	
	
		
			133 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			133 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
//go:build !windows
 | 
						|
 | 
						|
package config
 | 
						|
 | 
						|
import (
 | 
						|
	"errors"
 | 
						|
	"log/syslog"
 | 
						|
 | 
						|
	"github.com/asaskevich/govalidator"
 | 
						|
	"golang.org/x/xerrors"
 | 
						|
)
 | 
						|
 | 
						|
// SyslogConf is syslog config
 | 
						|
type SyslogConf struct {
 | 
						|
	Protocol string `json:"-"`
 | 
						|
	Host     string `valid:"host" json:"-"`
 | 
						|
	Port     string `valid:"port" json:"-"`
 | 
						|
	Severity string `json:"-"`
 | 
						|
	Facility string `json:"-"`
 | 
						|
	Tag      string `json:"-"`
 | 
						|
	Verbose  bool   `json:"-"`
 | 
						|
	Enabled  bool   `toml:"-" json:"-"`
 | 
						|
}
 | 
						|
 | 
						|
// Validate validates configuration
 | 
						|
func (c *SyslogConf) Validate() (errs []error) {
 | 
						|
	if !c.Enabled {
 | 
						|
		return nil
 | 
						|
	}
 | 
						|
	//  If protocol is empty, it will connect to the local syslog server.
 | 
						|
	if len(c.Protocol) > 0 && c.Protocol != "tcp" && c.Protocol != "udp" {
 | 
						|
		errs = append(errs, errors.New(`syslog.protocol must be "tcp" or "udp"`))
 | 
						|
	}
 | 
						|
 | 
						|
	// Default port: 514
 | 
						|
	if c.Port == "" {
 | 
						|
		c.Port = "514"
 | 
						|
	}
 | 
						|
 | 
						|
	if _, err := c.GetSeverity(); err != nil {
 | 
						|
		errs = append(errs, err)
 | 
						|
	}
 | 
						|
 | 
						|
	if _, err := c.GetFacility(); err != nil {
 | 
						|
		errs = append(errs, err)
 | 
						|
	}
 | 
						|
 | 
						|
	if _, err := govalidator.ValidateStruct(c); err != nil {
 | 
						|
		errs = append(errs, err)
 | 
						|
	}
 | 
						|
	return errs
 | 
						|
}
 | 
						|
 | 
						|
// GetSeverity gets severity
 | 
						|
func (c *SyslogConf) GetSeverity() (syslog.Priority, error) {
 | 
						|
	if c.Severity == "" {
 | 
						|
		return syslog.LOG_INFO, nil
 | 
						|
	}
 | 
						|
 | 
						|
	switch c.Severity {
 | 
						|
	case "emerg":
 | 
						|
		return syslog.LOG_EMERG, nil
 | 
						|
	case "alert":
 | 
						|
		return syslog.LOG_ALERT, nil
 | 
						|
	case "crit":
 | 
						|
		return syslog.LOG_CRIT, nil
 | 
						|
	case "err":
 | 
						|
		return syslog.LOG_ERR, nil
 | 
						|
	case "warning":
 | 
						|
		return syslog.LOG_WARNING, nil
 | 
						|
	case "notice":
 | 
						|
		return syslog.LOG_NOTICE, nil
 | 
						|
	case "info":
 | 
						|
		return syslog.LOG_INFO, nil
 | 
						|
	case "debug":
 | 
						|
		return syslog.LOG_DEBUG, nil
 | 
						|
	default:
 | 
						|
		return -1, xerrors.Errorf("Invalid severity: %s", c.Severity)
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
// GetFacility gets facility
 | 
						|
func (c *SyslogConf) GetFacility() (syslog.Priority, error) {
 | 
						|
	if c.Facility == "" {
 | 
						|
		return syslog.LOG_AUTH, nil
 | 
						|
	}
 | 
						|
 | 
						|
	switch c.Facility {
 | 
						|
	case "kern":
 | 
						|
		return syslog.LOG_KERN, nil
 | 
						|
	case "user":
 | 
						|
		return syslog.LOG_USER, nil
 | 
						|
	case "mail":
 | 
						|
		return syslog.LOG_MAIL, nil
 | 
						|
	case "daemon":
 | 
						|
		return syslog.LOG_DAEMON, nil
 | 
						|
	case "auth":
 | 
						|
		return syslog.LOG_AUTH, nil
 | 
						|
	case "syslog":
 | 
						|
		return syslog.LOG_SYSLOG, nil
 | 
						|
	case "lpr":
 | 
						|
		return syslog.LOG_LPR, nil
 | 
						|
	case "news":
 | 
						|
		return syslog.LOG_NEWS, nil
 | 
						|
	case "uucp":
 | 
						|
		return syslog.LOG_UUCP, nil
 | 
						|
	case "cron":
 | 
						|
		return syslog.LOG_CRON, nil
 | 
						|
	case "authpriv":
 | 
						|
		return syslog.LOG_AUTHPRIV, nil
 | 
						|
	case "ftp":
 | 
						|
		return syslog.LOG_FTP, nil
 | 
						|
	case "local0":
 | 
						|
		return syslog.LOG_LOCAL0, nil
 | 
						|
	case "local1":
 | 
						|
		return syslog.LOG_LOCAL1, nil
 | 
						|
	case "local2":
 | 
						|
		return syslog.LOG_LOCAL2, nil
 | 
						|
	case "local3":
 | 
						|
		return syslog.LOG_LOCAL3, nil
 | 
						|
	case "local4":
 | 
						|
		return syslog.LOG_LOCAL4, nil
 | 
						|
	case "local5":
 | 
						|
		return syslog.LOG_LOCAL5, nil
 | 
						|
	case "local6":
 | 
						|
		return syslog.LOG_LOCAL6, nil
 | 
						|
	case "local7":
 | 
						|
		return syslog.LOG_LOCAL7, nil
 | 
						|
	default:
 | 
						|
		return -1, xerrors.Errorf("Invalid facility: %s", c.Facility)
 | 
						|
	}
 | 
						|
}
 |