add auth parameter (#467)

This commit is contained in:
ginuerzh 2020-01-22 12:25:42 +08:00
parent 990c7b56c3
commit 56e2ac3566
2 changed files with 40 additions and 10 deletions

View File

@ -3,8 +3,10 @@ package main
import ( import (
"crypto/sha256" "crypto/sha256"
"crypto/tls" "crypto/tls"
"encoding/base64"
"fmt" "fmt"
"net" "net"
"net/url"
"os" "os"
"strings" "strings"
"time" "time"
@ -90,13 +92,29 @@ func parseChainNode(ns string) (nodes []gost.Node, err error) {
return return
} }
users, err := parseUsers(node.Get("secrets")) if auth := node.Get("auth"); auth != "" && node.User == nil {
if err != nil { c, err := base64.StdEncoding.DecodeString(auth)
return if err != nil {
return nil, err
}
cs := string(c)
s := strings.IndexByte(cs, ':')
if s < 0 {
node.User = url.User(cs)
} else {
node.User = url.UserPassword(cs[:s], cs[s+1:])
}
} }
if node.User == nil && len(users) > 0 { if node.User == nil {
node.User = users[0] users, err := parseUsers(node.Get("secrets"))
if err != nil {
return nil, err
}
if len(users) > 0 {
node.User = users[0]
}
} }
serverName, sport, _ := net.SplitHostPort(node.Addr) serverName, sport, _ := net.SplitHostPort(node.Addr)
if serverName == "" { if serverName == "" {
serverName = "localhost" // default server name serverName = "localhost" // default server name
@ -280,6 +298,20 @@ func (r *route) GenRouters() ([]router, error) {
if err != nil { if err != nil {
return nil, err return nil, err
} }
if auth := node.Get("auth"); auth != "" && node.User == nil {
c, err := base64.StdEncoding.DecodeString(auth)
if err != nil {
return nil, err
}
cs := string(c)
s := strings.IndexByte(cs, ':')
if s < 0 {
node.User = url.User(cs)
} else {
node.User = url.UserPassword(cs[:s], cs[s+1:])
}
}
authenticator, err := parseAuthenticator(node.Get("secrets")) authenticator, err := parseAuthenticator(node.Get("secrets"))
if err != nil { if err != nil {
return nil, err return nil, err

View File

@ -381,11 +381,9 @@ func (h *httpHandler) forwardRequest(conn net.Conn, req *http.Request, route *Ch
var userpass string var userpass string
if user := route.LastNode().User; user != nil { if user := route.LastNode().User; user != nil {
s := user.String() u := user.Username()
if _, set := user.Password(); !set { p, _ := user.Password()
s += ":" userpass = base64.StdEncoding.EncodeToString([]byte(u + ":" + p))
}
userpass = base64.StdEncoding.EncodeToString([]byte(s))
} }
cc, err := route.Conn() cc, err := route.Conn()