mirror of
https://github.com/ngoduykhanh/wireguard-ui.git
synced 2025-04-20 20:03:39 +03:00
119 lines
4.1 KiB
Go
119 lines
4.1 KiB
Go
package util
|
|
|
|
import (
|
|
"net"
|
|
"strings"
|
|
|
|
"github.com/labstack/gommon/log"
|
|
)
|
|
|
|
// Runtime config
|
|
var (
|
|
DisableLogin bool
|
|
BindAddress string
|
|
SmtpHostname string
|
|
SmtpPort int
|
|
SmtpUsername string
|
|
SmtpPassword string
|
|
SmtpNoTLSCheck bool
|
|
SmtpEncryption string
|
|
SmtpAuthType string
|
|
SmtpHelo string
|
|
SendgridApiKey string
|
|
EmailFrom string
|
|
EmailFromName string
|
|
SessionSecret [64]byte
|
|
SessionMaxDuration int64
|
|
WgConfTemplate string
|
|
BasePath string
|
|
SubnetRanges map[string]([]*net.IPNet)
|
|
SubnetRangesOrder []string
|
|
)
|
|
|
|
const (
|
|
DefaultUsername = "admin"
|
|
DefaultPassword = "admin"
|
|
DefaultIsAdmin = true
|
|
DefaultServerAddress = "10.252.1.0/24"
|
|
DefaultServerPort = 51820
|
|
DefaultDNS = "1.1.1.1"
|
|
DefaultMTU = 1450
|
|
DefaultPersistentKeepalive = 15
|
|
DefaultFirewallMark = "0xca6c" // i.e. 51820
|
|
DefaultTable = "auto"
|
|
DefaultConfigFilePath = "/etc/wireguard/wg0.conf"
|
|
UsernameEnvVar = "WGUI_USERNAME"
|
|
PasswordEnvVar = "WGUI_PASSWORD"
|
|
PasswordFileEnvVar = "WGUI_PASSWORD_FILE"
|
|
PasswordHashEnvVar = "WGUI_PASSWORD_HASH"
|
|
PasswordHashFileEnvVar = "WGUI_PASSWORD_HASH_FILE"
|
|
FaviconFilePathEnvVar = "WGUI_FAVICON_FILE_PATH"
|
|
EndpointAddressEnvVar = "WGUI_ENDPOINT_ADDRESS"
|
|
DNSEnvVar = "WGUI_DNS"
|
|
MTUEnvVar = "WGUI_MTU"
|
|
PersistentKeepaliveEnvVar = "WGUI_PERSISTENT_KEEPALIVE"
|
|
FirewallMarkEnvVar = "WGUI_FIREWALL_MARK"
|
|
TableEnvVar = "WGUI_TABLE"
|
|
ConfigFilePathEnvVar = "WGUI_CONFIG_FILE_PATH"
|
|
LogLevel = "WGUI_LOG_LEVEL"
|
|
ServerAddressesEnvVar = "WGUI_SERVER_INTERFACE_ADDRESSES"
|
|
ServerListenPortEnvVar = "WGUI_SERVER_LISTEN_PORT"
|
|
ServerPostUpScriptEnvVar = "WGUI_SERVER_POST_UP_SCRIPT"
|
|
ServerPostDownScriptEnvVar = "WGUI_SERVER_POST_DOWN_SCRIPT"
|
|
DefaultClientAllowedIpsEnvVar = "WGUI_DEFAULT_CLIENT_ALLOWED_IPS"
|
|
DefaultClientExtraAllowedIpsEnvVar = "WGUI_DEFAULT_CLIENT_EXTRA_ALLOWED_IPS"
|
|
DefaultClientUseServerDNSEnvVar = "WGUI_DEFAULT_CLIENT_USE_SERVER_DNS"
|
|
DefaultClientEnableAfterCreationEnvVar = "WGUI_DEFAULT_CLIENT_ENABLE_AFTER_CREATION"
|
|
)
|
|
|
|
func ParseBasePath(basePath string) string {
|
|
if !strings.HasPrefix(basePath, "/") {
|
|
basePath = "/" + basePath
|
|
}
|
|
if strings.HasSuffix(basePath, "/") {
|
|
basePath = strings.TrimSuffix(basePath, "/")
|
|
}
|
|
return basePath
|
|
}
|
|
|
|
func ParseSubnetRanges(subnetRangesStr string) map[string]([]*net.IPNet) {
|
|
subnetRanges := map[string]([]*net.IPNet){}
|
|
if subnetRangesStr == "" {
|
|
return subnetRanges
|
|
}
|
|
cidrSet := map[string]bool{}
|
|
subnetRangesStr = strings.TrimSpace(subnetRangesStr)
|
|
subnetRangesStr = strings.Trim(subnetRangesStr, ";:,")
|
|
ranges := strings.Split(subnetRangesStr, ";")
|
|
for _, rng := range ranges {
|
|
rng = strings.TrimSpace(rng)
|
|
rngSpl := strings.Split(rng, ":")
|
|
if len(rngSpl) != 2 {
|
|
log.Warnf("Unable to parse subnet range: %v. Skipped.", rng)
|
|
continue
|
|
}
|
|
rngName := strings.TrimSpace(rngSpl[0])
|
|
subnetRanges[rngName] = make([]*net.IPNet, 0)
|
|
cidrs := strings.Split(rngSpl[1], ",")
|
|
for _, cidr := range cidrs {
|
|
cidr = strings.TrimSpace(cidr)
|
|
_, net, err := net.ParseCIDR(cidr)
|
|
if err != nil {
|
|
log.Warnf("[%v] Unable to parse CIDR: %v. Skipped.", rngName, cidr)
|
|
continue
|
|
}
|
|
if cidrSet[net.String()] {
|
|
log.Warnf("[%v] CIDR already exists: %v. Skipped.", rngName, net.String())
|
|
continue
|
|
}
|
|
cidrSet[net.String()] = true
|
|
subnetRanges[rngName] = append(subnetRanges[rngName], net)
|
|
}
|
|
if len(subnetRanges[rngName]) == 0 {
|
|
delete(subnetRanges, rngName)
|
|
} else {
|
|
SubnetRangesOrder = append(SubnetRangesOrder, rngName)
|
|
}
|
|
}
|
|
return subnetRanges
|
|
}
|