|
@@ -17,6 +17,7 @@ package client
|
|
|
import (
|
|
|
"fmt"
|
|
|
"strconv"
|
|
|
+ "strings"
|
|
|
|
|
|
ini "github.com/vaughan0/go-ini"
|
|
|
)
|
|
@@ -29,6 +30,7 @@ var (
|
|
|
LogWay string = "console"
|
|
|
LogLevel string = "info"
|
|
|
LogMaxDays int64 = 3
|
|
|
+ PrivilegeKey string = ""
|
|
|
HeartBeatInterval int64 = 20
|
|
|
HeartBeatTimeout int64 = 90
|
|
|
)
|
|
@@ -75,12 +77,15 @@ func LoadConf(confFile string) (err error) {
|
|
|
LogMaxDays, _ = strconv.ParseInt(tmpStr, 10, 64)
|
|
|
}
|
|
|
|
|
|
+ tmpStr, ok = conf.Get("common", "privilege_key")
|
|
|
+ if ok {
|
|
|
+ PrivilegeKey = tmpStr
|
|
|
+ }
|
|
|
+
|
|
|
var authToken string
|
|
|
tmpStr, ok = conf.Get("common", "auth_token")
|
|
|
if ok {
|
|
|
authToken = tmpStr
|
|
|
- } else {
|
|
|
- return fmt.Errorf("auth_token not found")
|
|
|
}
|
|
|
|
|
|
// proxies
|
|
@@ -90,9 +95,6 @@ func LoadConf(confFile string) (err error) {
|
|
|
// name
|
|
|
proxyClient.Name = name
|
|
|
|
|
|
- // auth_token
|
|
|
- proxyClient.AuthToken = authToken
|
|
|
-
|
|
|
// local_ip
|
|
|
proxyClient.LocalIp, ok = section["local_ip"]
|
|
|
if !ok {
|
|
@@ -101,46 +103,101 @@ func LoadConf(confFile string) (err error) {
|
|
|
}
|
|
|
|
|
|
// local_port
|
|
|
- portStr, ok := section["local_port"]
|
|
|
+ tmpStr, ok = section["local_port"]
|
|
|
if ok {
|
|
|
- proxyClient.LocalPort, err = strconv.ParseInt(portStr, 10, 64)
|
|
|
+ proxyClient.LocalPort, err = strconv.ParseInt(tmpStr, 10, 64)
|
|
|
if err != nil {
|
|
|
- return fmt.Errorf("Parse ini file error: proxy [%s] local_port error", proxyClient.Name)
|
|
|
+ return fmt.Errorf("Parse conf error: proxy [%s] local_port error", proxyClient.Name)
|
|
|
}
|
|
|
} else {
|
|
|
- return fmt.Errorf("Parse ini file error: proxy [%s] local_port not found", proxyClient.Name)
|
|
|
+ return fmt.Errorf("Parse conf error: proxy [%s] local_port not found", proxyClient.Name)
|
|
|
}
|
|
|
|
|
|
// type
|
|
|
proxyClient.Type = "tcp"
|
|
|
- typeStr, ok := section["type"]
|
|
|
+ tmpStr, ok = section["type"]
|
|
|
if ok {
|
|
|
- if typeStr != "tcp" && typeStr != "http" && typeStr != "https" {
|
|
|
- return fmt.Errorf("Parse ini file error: proxy [%s] type error", proxyClient.Name)
|
|
|
+ if tmpStr != "tcp" && tmpStr != "http" && tmpStr != "https" {
|
|
|
+ return fmt.Errorf("Parse conf error: proxy [%s] type error", proxyClient.Name)
|
|
|
}
|
|
|
- proxyClient.Type = typeStr
|
|
|
+ proxyClient.Type = tmpStr
|
|
|
}
|
|
|
|
|
|
// use_encryption
|
|
|
proxyClient.UseEncryption = false
|
|
|
- useEncryptionStr, ok := section["use_encryption"]
|
|
|
- if ok && useEncryptionStr == "true" {
|
|
|
+ tmpStr, ok = section["use_encryption"]
|
|
|
+ if ok && tmpStr == "true" {
|
|
|
proxyClient.UseEncryption = true
|
|
|
}
|
|
|
|
|
|
// use_gzip
|
|
|
proxyClient.UseGzip = false
|
|
|
- useGzipStr, ok := section["use_gzip"]
|
|
|
- if ok && useGzipStr == "true" {
|
|
|
+ tmpStr, ok = section["use_gzip"]
|
|
|
+ if ok && tmpStr == "true" {
|
|
|
proxyClient.UseGzip = true
|
|
|
}
|
|
|
|
|
|
+ // privilege_mode
|
|
|
+ proxyClient.PrivilegeMode = false
|
|
|
+ tmpStr, ok = section["privilege_mode"]
|
|
|
+ if ok && tmpStr == "true" {
|
|
|
+ proxyClient.PrivilegeMode = true
|
|
|
+ }
|
|
|
+
|
|
|
+ // configures used in privilege mode
|
|
|
+ if proxyClient.PrivilegeMode == true {
|
|
|
+ // auth_token
|
|
|
+ proxyClient.AuthToken = PrivilegeKey
|
|
|
+
|
|
|
+ if proxyClient.Type == "tcp" {
|
|
|
+ // remote_port
|
|
|
+ tmpStr, ok = section["remote_port"]
|
|
|
+ if ok {
|
|
|
+ proxyClient.RemotePort, err = strconv.ParseInt(tmpStr, 10, 64)
|
|
|
+ if err != nil {
|
|
|
+ return fmt.Errorf("Parse conf error: proxy [%s] remote_port error", proxyClient.Name)
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ return fmt.Errorf("Parse conf error: proxy [%s] remote_port not found", proxyClient.Name)
|
|
|
+ }
|
|
|
+ } else if proxyClient.Type == "http" {
|
|
|
+ domainStr, ok := section["custom_domains"]
|
|
|
+ if ok {
|
|
|
+ proxyClient.CustomDomains = strings.Split(domainStr, ",")
|
|
|
+ if len(proxyClient.CustomDomains) == 0 {
|
|
|
+ return fmt.Errorf("Parse conf error: proxy [%s] custom_domains must be set when type equals http", proxyClient.Name)
|
|
|
+ }
|
|
|
+ for i, domain := range proxyClient.CustomDomains {
|
|
|
+ proxyClient.CustomDomains[i] = strings.ToLower(strings.TrimSpace(domain))
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ return fmt.Errorf("Parse conf error: proxy [%s] custom_domains must be set when type equals http", proxyClient.Name)
|
|
|
+ }
|
|
|
+ } else if proxyClient.Type == "https" {
|
|
|
+ domainStr, ok := section["custom_domains"]
|
|
|
+ if ok {
|
|
|
+ proxyClient.CustomDomains = strings.Split(domainStr, ",")
|
|
|
+ if len(proxyClient.CustomDomains) == 0 {
|
|
|
+ return fmt.Errorf("Parse conf error: proxy [%s] custom_domains must be set when type equals https", proxyClient.Name)
|
|
|
+ }
|
|
|
+ for i, domain := range proxyClient.CustomDomains {
|
|
|
+ proxyClient.CustomDomains[i] = strings.ToLower(strings.TrimSpace(domain))
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ return fmt.Errorf("Parse conf error: proxy [%s] custom_domains must be set when type equals http", proxyClient.Name)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else /* proxyClient.PrivilegeMode == false */ {
|
|
|
+ // authToken
|
|
|
+ proxyClient.AuthToken = authToken
|
|
|
+ }
|
|
|
+
|
|
|
ProxyClients[proxyClient.Name] = proxyClient
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if len(ProxyClients) == 0 {
|
|
|
- return fmt.Errorf("Parse ini file error: no proxy config found")
|
|
|
+ return fmt.Errorf("Parse conf error: no proxy config found")
|
|
|
}
|
|
|
|
|
|
return nil
|