add auth parameter (#467)
This commit is contained in:
parent
990c7b56c3
commit
56e2ac3566
@ -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
|
||||||
|
8
http.go
8
http.go
@ -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()
|
||||||
|
Loading…
Reference in New Issue
Block a user