fixed errors formatting
This commit is contained in:
parent
b229af9607
commit
cf65e85b93
@ -74,7 +74,6 @@ linters:
|
|||||||
- promlinter
|
- promlinter
|
||||||
- nestif
|
- nestif
|
||||||
- errorlint
|
- errorlint
|
||||||
# - ineffassign
|
|
||||||
- lll
|
- lll
|
||||||
- contextcheck
|
- contextcheck
|
||||||
- bodyclose
|
- bodyclose
|
||||||
|
|||||||
@ -17,6 +17,7 @@ package client
|
|||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"crypto/tls"
|
"crypto/tls"
|
||||||
|
"errors"
|
||||||
"io"
|
"io"
|
||||||
"net"
|
"net"
|
||||||
"runtime/debug"
|
"runtime/debug"
|
||||||
@ -287,7 +288,7 @@ func (ctl *Control) reader() {
|
|||||||
for {
|
for {
|
||||||
m, err := msg.ReadMsg(encReader)
|
m, err := msg.ReadMsg(encReader)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if err == io.EOF {
|
if errors.Is(err, io.EOF) {
|
||||||
xl.Debug("read from control connection EOF")
|
xl.Debug("read from control connection EOF")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|||||||
@ -355,12 +355,12 @@ func (sv *SUDPVisitor) Run() (err error) {
|
|||||||
|
|
||||||
addr, err := net.ResolveUDPAddr("udp", net.JoinHostPort(sv.cfg.BindAddr, strconv.Itoa(sv.cfg.BindPort)))
|
addr, err := net.ResolveUDPAddr("udp", net.JoinHostPort(sv.cfg.BindAddr, strconv.Itoa(sv.cfg.BindPort)))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("sudp ResolveUDPAddr error: %v", err)
|
return fmt.Errorf("sudp ResolveUDPAddr error: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
sv.udpConn, err = net.ListenUDP("udp", addr)
|
sv.udpConn, err = net.ListenUDP("udp", addr)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("listen udp port %s error: %v", addr.String(), err)
|
return fmt.Errorf("listen udp port %s error: %w", addr.String(), err)
|
||||||
}
|
}
|
||||||
|
|
||||||
sv.sendCh = make(chan *msg.UDPPacket, 1024)
|
sv.sendCh = make(chan *msg.UDPPacket, 1024)
|
||||||
@ -506,7 +506,7 @@ func (sv *SUDPVisitor) getNewVisitorConn() (net.Conn, error) {
|
|||||||
xl := xlog.FromContextSafe(sv.ctx)
|
xl := xlog.FromContextSafe(sv.ctx)
|
||||||
visitorConn, err := sv.ctl.connectServer()
|
visitorConn, err := sv.ctl.connectServer()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("frpc connect frps error: %v", err)
|
return nil, fmt.Errorf("frpc connect frps error: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
now := time.Now().Unix()
|
now := time.Now().Unix()
|
||||||
@ -519,14 +519,14 @@ func (sv *SUDPVisitor) getNewVisitorConn() (net.Conn, error) {
|
|||||||
}
|
}
|
||||||
err = msg.WriteMsg(visitorConn, newVisitorConnMsg)
|
err = msg.WriteMsg(visitorConn, newVisitorConnMsg)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("frpc send newVisitorConnMsg to frps error: %v", err)
|
return nil, fmt.Errorf("frpc send newVisitorConnMsg to frps error: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
var newVisitorConnRespMsg msg.NewVisitorConnResp
|
var newVisitorConnRespMsg msg.NewVisitorConnResp
|
||||||
visitorConn.SetReadDeadline(time.Now().Add(10 * time.Second))
|
visitorConn.SetReadDeadline(time.Now().Add(10 * time.Second))
|
||||||
err = msg.ReadMsgInto(visitorConn, &newVisitorConnRespMsg)
|
err = msg.ReadMsgInto(visitorConn, &newVisitorConnRespMsg)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("frpc read newVisitorConnRespMsg error: %v", err)
|
return nil, fmt.Errorf("frpc read newVisitorConnRespMsg error: %w", err)
|
||||||
}
|
}
|
||||||
visitorConn.SetReadDeadline(time.Time{})
|
visitorConn.SetReadDeadline(time.Time{})
|
||||||
|
|
||||||
@ -539,7 +539,7 @@ func (sv *SUDPVisitor) getNewVisitorConn() (net.Conn, error) {
|
|||||||
if sv.cfg.UseEncryption {
|
if sv.cfg.UseEncryption {
|
||||||
remote, err = frpIo.WithEncryption(remote, []byte(sv.cfg.Sk))
|
remote, err = frpIo.WithEncryption(remote, []byte(sv.cfg.Sk))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
xl.Error("create encryption stream error: %v", err)
|
xl.Error("create encryption stream error: %w", err)
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -135,14 +135,14 @@ func parseClientCommonCfgFromCmd() (cfg config.ClientCommonConf, err error) {
|
|||||||
|
|
||||||
ipStr, portStr, err := net.SplitHostPort(serverAddr)
|
ipStr, portStr, err := net.SplitHostPort(serverAddr)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
err = fmt.Errorf("invalid server_addr: %v", err)
|
err = fmt.Errorf("invalid server_addr: %w", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
cfg.ServerAddr = ipStr
|
cfg.ServerAddr = ipStr
|
||||||
cfg.ServerPort, err = strconv.Atoi(portStr)
|
cfg.ServerPort, err = strconv.Atoi(portStr)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
err = fmt.Errorf("invalid server_addr: %v", err)
|
err = fmt.Errorf("invalid server_addr: %w", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -160,7 +160,7 @@ func parseClientCommonCfgFromCmd() (cfg config.ClientCommonConf, err error) {
|
|||||||
|
|
||||||
cfg.Complete()
|
cfg.Complete()
|
||||||
if err = cfg.Validate(); err != nil {
|
if err = cfg.Validate(); err != nil {
|
||||||
err = fmt.Errorf("Parse config error: %v", err)
|
err = fmt.Errorf("Parse config error: %w", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
|
|||||||
@ -145,7 +145,7 @@ func parseServerCommonCfg(fileType int, source []byte) (cfg config.ServerCommonC
|
|||||||
cfg.Complete()
|
cfg.Complete()
|
||||||
err = cfg.Validate()
|
err = cfg.Validate()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
err = fmt.Errorf("Parse config error: %v", err)
|
err = fmt.Errorf("Parse config error: %w", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
@ -180,7 +180,7 @@ func parseServerCommonCfgFromCmd() (cfg config.ServerCommonConf, err error) {
|
|||||||
// e.g. 1000-2000,2001,2002,3000-4000
|
// e.g. 1000-2000,2001,2002,3000-4000
|
||||||
ports, errRet := util.ParseRangeNumbers(allowPorts)
|
ports, errRet := util.ParseRangeNumbers(allowPorts)
|
||||||
if errRet != nil {
|
if errRet != nil {
|
||||||
err = fmt.Errorf("Parse conf error: allow_ports: %v", errRet)
|
err = fmt.Errorf("Parse conf error: allow_ports: %w", errRet)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -116,7 +116,7 @@ func NewOidcAuthSetter(baseCfg BaseConfig, cfg OidcClientConfig) *OidcAuthProvid
|
|||||||
func (auth *OidcAuthProvider) generateAccessToken() (accessToken string, err error) {
|
func (auth *OidcAuthProvider) generateAccessToken() (accessToken string, err error) {
|
||||||
tokenObj, err := auth.tokenGenerator.Token(context.Background())
|
tokenObj, err := auth.tokenGenerator.Token(context.Background())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", fmt.Errorf("couldn't generate OIDC token for login: %v", err)
|
return "", fmt.Errorf("couldn't generate OIDC token for login: %w", err)
|
||||||
}
|
}
|
||||||
return tokenObj.AccessToken, nil
|
return tokenObj.AccessToken, nil
|
||||||
}
|
}
|
||||||
@ -171,7 +171,7 @@ func NewOidcAuthVerifier(baseCfg BaseConfig, cfg OidcServerConfig) *OidcAuthCons
|
|||||||
func (auth *OidcAuthConsumer) VerifyLogin(loginMsg *msg.Login) (err error) {
|
func (auth *OidcAuthConsumer) VerifyLogin(loginMsg *msg.Login) (err error) {
|
||||||
token, err := auth.verifier.Verify(context.Background(), loginMsg.PrivilegeKey)
|
token, err := auth.verifier.Verify(context.Background(), loginMsg.PrivilegeKey)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("invalid OIDC token in login: %v", err)
|
return fmt.Errorf("invalid OIDC token in login: %w", err)
|
||||||
}
|
}
|
||||||
auth.subjectFromLogin = token.Subject
|
auth.subjectFromLogin = token.Subject
|
||||||
return nil
|
return nil
|
||||||
@ -180,7 +180,7 @@ func (auth *OidcAuthConsumer) VerifyLogin(loginMsg *msg.Login) (err error) {
|
|||||||
func (auth *OidcAuthConsumer) verifyPostLoginToken(privilegeKey string) (err error) {
|
func (auth *OidcAuthConsumer) verifyPostLoginToken(privilegeKey string) (err error) {
|
||||||
token, err := auth.verifier.Verify(context.Background(), privilegeKey)
|
token, err := auth.verifier.Verify(context.Background(), privilegeKey)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("invalid OIDC token in ping: %v", err)
|
return fmt.Errorf("invalid OIDC token in ping: %w", err)
|
||||||
}
|
}
|
||||||
if token.Subject != auth.subjectFromLogin {
|
if token.Subject != auth.subjectFromLogin {
|
||||||
return fmt.Errorf("received different OIDC subject in login and ping. "+
|
return fmt.Errorf("received different OIDC subject in login and ping. "+
|
||||||
|
|||||||
@ -320,7 +320,7 @@ func LoadAllProxyConfsFromIni(
|
|||||||
for _, section := range rangeSections {
|
for _, section := range rangeSections {
|
||||||
err = renderRangeProxyTemplates(f, section)
|
err = renderRangeProxyTemplates(f, section)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, nil, fmt.Errorf("failed to render template for proxy %s: %v", section.Name(), err)
|
return nil, nil, fmt.Errorf("failed to render template for proxy %s: %w", section.Name(), err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -345,7 +345,7 @@ func LoadAllProxyConfsFromIni(
|
|||||||
case "server":
|
case "server":
|
||||||
newConf, newErr := NewProxyConfFromIni(prefix, name, section)
|
newConf, newErr := NewProxyConfFromIni(prefix, name, section)
|
||||||
if newErr != nil {
|
if newErr != nil {
|
||||||
return nil, nil, fmt.Errorf("failed to parse proxy %s, err: %v", name, newErr)
|
return nil, nil, fmt.Errorf("failed to parse proxy %s, err: %w", name, newErr)
|
||||||
}
|
}
|
||||||
proxyConfs[prefix+name] = newConf
|
proxyConfs[prefix+name] = newConf
|
||||||
case "visitor":
|
case "visitor":
|
||||||
|
|||||||
@ -42,7 +42,7 @@ func ParseClientConfig(filePath string) (
|
|||||||
}
|
}
|
||||||
cfg.Complete()
|
cfg.Complete()
|
||||||
if err = cfg.Validate(); err != nil {
|
if err = cfg.Validate(); err != nil {
|
||||||
err = fmt.Errorf("Parse config error: %v", err)
|
err = fmt.Errorf("Parse config error: %w", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -50,7 +50,7 @@ func ParseClientConfig(filePath string) (
|
|||||||
var buf []byte
|
var buf []byte
|
||||||
buf, err = getIncludeContents(cfg.IncludeConfigFiles)
|
buf, err = getIncludeContents(cfg.IncludeConfigFiles)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
err = fmt.Errorf("getIncludeContents error: %v", err)
|
err = fmt.Errorf("getIncludeContents error: %w", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
configBuffer.WriteString("\n")
|
configBuffer.WriteString("\n")
|
||||||
@ -88,7 +88,7 @@ func getIncludeContents(paths []string) ([]byte, error) {
|
|||||||
if matched, _ := filepath.Match(filepath.Join(absDir, filepath.Base(path)), absFile); matched {
|
if matched, _ := filepath.Match(filepath.Join(absDir, filepath.Base(path)), absFile); matched {
|
||||||
tmpContent, err := GetRenderedConfFromFile(absFile)
|
tmpContent, err := GetRenderedConfFromFile(absFile)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("render extra config %s error: %v", absFile, err)
|
return nil, fmt.Errorf("render extra config %s error: %w", absFile, err)
|
||||||
}
|
}
|
||||||
out.Write(tmpContent)
|
out.Write(tmpContent)
|
||||||
out.WriteString("\n")
|
out.WriteString("\n")
|
||||||
|
|||||||
@ -639,7 +639,7 @@ func (cfg *TCPMuxProxyConf) CheckForSvr(serverCfg ServerCommonConf) (err error)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if err = cfg.DomainConf.checkForSvr(serverCfg); err != nil {
|
if err = cfg.DomainConf.checkForSvr(serverCfg); err != nil {
|
||||||
err = fmt.Errorf("proxy [%s] domain conf check error: %v", cfg.ProxyName, err)
|
err = fmt.Errorf("proxy [%s] domain conf check error: %w", cfg.ProxyName, err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -788,7 +788,7 @@ func (cfg *HTTPProxyConf) CheckForSvr(serverCfg ServerCommonConf) (err error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if err = cfg.DomainConf.checkForSvr(serverCfg); err != nil {
|
if err = cfg.DomainConf.checkForSvr(serverCfg); err != nil {
|
||||||
err = fmt.Errorf("proxy [%s] domain conf check error: %v", cfg.ProxyName, err)
|
err = fmt.Errorf("proxy [%s] domain conf check error: %w", cfg.ProxyName, err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -860,7 +860,7 @@ func (cfg *HTTPSProxyConf) CheckForSvr(serverCfg ServerCommonConf) (err error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if err = cfg.DomainConf.checkForSvr(serverCfg); err != nil {
|
if err = cfg.DomainConf.checkForSvr(serverCfg); err != nil {
|
||||||
err = fmt.Errorf("proxy [%s] domain conf check error: %v", cfg.ProxyName, err)
|
err = fmt.Errorf("proxy [%s] domain conf check error: %w", cfg.ProxyName, err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -246,7 +246,7 @@ func UnmarshalServerConfFromIni(source interface{}) (ServerCommonConf, error) {
|
|||||||
if allowPortStr != "" {
|
if allowPortStr != "" {
|
||||||
allowPorts, err := util.ParseRangeNumbers(allowPortStr)
|
allowPorts, err := util.ParseRangeNumbers(allowPortStr)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return ServerCommonConf{}, fmt.Errorf("invalid allow_ports: %v", err)
|
return ServerCommonConf{}, fmt.Errorf("invalid allow_ports: %w", err)
|
||||||
}
|
}
|
||||||
for _, port := range allowPorts {
|
for _, port := range allowPorts {
|
||||||
common.AllowPorts[int(port)] = struct{}{}
|
common.AllowPorts[int(port)] = struct{}{}
|
||||||
|
|||||||
@ -17,6 +17,7 @@ package plugin
|
|||||||
import (
|
import (
|
||||||
"bufio"
|
"bufio"
|
||||||
"encoding/base64"
|
"encoding/base64"
|
||||||
|
"errors"
|
||||||
"io"
|
"io"
|
||||||
"net"
|
"net"
|
||||||
"net/http"
|
"net/http"
|
||||||
@ -126,7 +127,7 @@ func (hp *HTTPProxy) HTTPHandler(rw http.ResponseWriter, req *http.Request) {
|
|||||||
rw.WriteHeader(resp.StatusCode)
|
rw.WriteHeader(resp.StatusCode)
|
||||||
|
|
||||||
_, err = io.Copy(rw, resp.Body)
|
_, err = io.Copy(rw, resp.Body)
|
||||||
if err != nil && err != io.EOF {
|
if err != nil && errors.Is(err, io.EOF) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -98,7 +98,7 @@ func NewHTTPS2HTTPPlugin(params map[string]string) (Plugin, error) {
|
|||||||
|
|
||||||
tlsConfig, err := p.genTLSConfig()
|
tlsConfig, err := p.genTLSConfig()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("gen TLS config error: %v", err)
|
return nil, fmt.Errorf("gen TLS config error: %w", err)
|
||||||
}
|
}
|
||||||
ln := tls.NewListener(listener, tlsConfig)
|
ln := tls.NewListener(listener, tlsConfig)
|
||||||
|
|
||||||
|
|||||||
@ -103,7 +103,7 @@ func NewHTTPS2HTTPSPlugin(params map[string]string) (Plugin, error) {
|
|||||||
|
|
||||||
tlsConfig, err := p.genTLSConfig()
|
tlsConfig, err := p.genTLSConfig()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("gen TLS config error: %v", err)
|
return nil, fmt.Errorf("gen TLS config error: %w", err)
|
||||||
}
|
}
|
||||||
ln := tls.NewListener(listener, tlsConfig)
|
ln := tls.NewListener(listener, tlsConfig)
|
||||||
|
|
||||||
|
|||||||
@ -75,7 +75,7 @@ func ParseRangeNumbers(rangeStr string) (numbers []int64, err error) {
|
|||||||
// single number
|
// single number
|
||||||
singleNum, errRet := strconv.ParseInt(strings.TrimSpace(numArray[0]), 10, 64)
|
singleNum, errRet := strconv.ParseInt(strings.TrimSpace(numArray[0]), 10, 64)
|
||||||
if errRet != nil {
|
if errRet != nil {
|
||||||
err = fmt.Errorf("range number is invalid, %v", errRet)
|
err = fmt.Errorf("range number is invalid, %w", errRet)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
numbers = append(numbers, singleNum)
|
numbers = append(numbers, singleNum)
|
||||||
@ -83,12 +83,12 @@ func ParseRangeNumbers(rangeStr string) (numbers []int64, err error) {
|
|||||||
// range numbers
|
// range numbers
|
||||||
min, errRet := strconv.ParseInt(strings.TrimSpace(numArray[0]), 10, 64)
|
min, errRet := strconv.ParseInt(strings.TrimSpace(numArray[0]), 10, 64)
|
||||||
if errRet != nil {
|
if errRet != nil {
|
||||||
err = fmt.Errorf("range number is invalid, %v", errRet)
|
err = fmt.Errorf("range number is invalid, %w", errRet)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
max, errRet := strconv.ParseInt(strings.TrimSpace(numArray[1]), 10, 64)
|
max, errRet := strconv.ParseInt(strings.TrimSpace(numArray[1]), 10, 64)
|
||||||
if errRet != nil {
|
if errRet != nil {
|
||||||
err = fmt.Errorf("range number is invalid, %v", errRet)
|
err = fmt.Errorf("range number is invalid, %w", errRet)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if max < min {
|
if max < min {
|
||||||
|
|||||||
@ -146,7 +146,7 @@ func (rp *HTTPReverseProxy) CreateConnection(domain string, location string, rem
|
|||||||
return fn(remoteAddr)
|
return fn(remoteAddr)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return nil, fmt.Errorf("%v: %s %s", ErrNoDomain, domain, location)
|
return nil, fmt.Errorf("%w: %s %s", ErrNoDomain, domain, location)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (rp *HTTPReverseProxy) CheckAuth(domain, location, user, passwd string) bool {
|
func (rp *HTTPReverseProxy) CheckAuth(domain, location, user, passwd string) bool {
|
||||||
|
|||||||
@ -8,6 +8,7 @@ package vhost
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"log"
|
"log"
|
||||||
@ -456,7 +457,7 @@ func (p *ReverseProxy) copyBuffer(dst io.Writer, src io.Reader, buf []byte) (int
|
|||||||
var written int64
|
var written int64
|
||||||
for {
|
for {
|
||||||
nr, rerr := src.Read(buf)
|
nr, rerr := src.Read(buf)
|
||||||
if rerr != nil && rerr != io.EOF && rerr != context.Canceled {
|
if rerr != nil && !errors.Is(rerr, io.EOF) && !errors.Is(rerr, context.Canceled) {
|
||||||
p.logf("httputil: ReverseProxy read error during body copy: %v", rerr)
|
p.logf("httputil: ReverseProxy read error during body copy: %v", rerr)
|
||||||
}
|
}
|
||||||
if nr > 0 {
|
if nr > 0 {
|
||||||
@ -582,7 +583,7 @@ func (p *ReverseProxy) handleUpgradeResponse(rw http.ResponseWriter, req *http.R
|
|||||||
|
|
||||||
conn, brw, err := hj.Hijack()
|
conn, brw, err := hj.Hijack()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
p.getErrorHandler()(rw, req, fmt.Errorf("Hijack failed on protocol switch: %v", err))
|
p.getErrorHandler()(rw, req, fmt.Errorf("Hijack failed on protocol switch: %w", err))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
defer conn.Close()
|
defer conn.Close()
|
||||||
@ -592,11 +593,11 @@ func (p *ReverseProxy) handleUpgradeResponse(rw http.ResponseWriter, req *http.R
|
|||||||
res.Header = rw.Header()
|
res.Header = rw.Header()
|
||||||
res.Body = nil // so res.Write only writes the headers; we have res.Body in backConn above
|
res.Body = nil // so res.Write only writes the headers; we have res.Body in backConn above
|
||||||
if err := res.Write(brw); err != nil {
|
if err := res.Write(brw); err != nil {
|
||||||
p.getErrorHandler()(rw, req, fmt.Errorf("response write: %v", err))
|
p.getErrorHandler()(rw, req, fmt.Errorf("response write: %w", err))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if err := brw.Flush(); err != nil {
|
if err := brw.Flush(); err != nil {
|
||||||
p.getErrorHandler()(rw, req, fmt.Errorf("response flush: %v", err))
|
p.getErrorHandler()(rw, req, fmt.Errorf("response flush: %w", err))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
errc := make(chan error, 1)
|
errc := make(chan error, 1)
|
||||||
|
|||||||
@ -16,6 +16,7 @@ package server
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"net"
|
"net"
|
||||||
@ -25,7 +26,7 @@ import (
|
|||||||
|
|
||||||
"github.com/fatedier/golib/control/shutdown"
|
"github.com/fatedier/golib/control/shutdown"
|
||||||
"github.com/fatedier/golib/crypto"
|
"github.com/fatedier/golib/crypto"
|
||||||
"github.com/fatedier/golib/errors"
|
gErr "github.com/fatedier/golib/errors"
|
||||||
|
|
||||||
"github.com/fatedier/frp/pkg/auth"
|
"github.com/fatedier/frp/pkg/auth"
|
||||||
"github.com/fatedier/frp/pkg/config"
|
"github.com/fatedier/frp/pkg/config"
|
||||||
@ -248,7 +249,7 @@ func (ctl *Control) GetWorkConn() (workConn net.Conn, err error) {
|
|||||||
xl.Debug("get work connection from pool")
|
xl.Debug("get work connection from pool")
|
||||||
default:
|
default:
|
||||||
// no work connections available in the poll, send message to frpc to get more
|
// no work connections available in the poll, send message to frpc to get more
|
||||||
if err = errors.PanicToError(func() {
|
if err = gErr.PanicToError(func() {
|
||||||
ctl.sendCh <- &msg.ReqWorkConn{}
|
ctl.sendCh <- &msg.ReqWorkConn{}
|
||||||
}); err != nil {
|
}); err != nil {
|
||||||
return nil, fmt.Errorf("control is already closed")
|
return nil, fmt.Errorf("control is already closed")
|
||||||
@ -270,7 +271,7 @@ func (ctl *Control) GetWorkConn() (workConn net.Conn, err error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// When we get a work connection from pool, replace it with a new one.
|
// When we get a work connection from pool, replace it with a new one.
|
||||||
errors.PanicToError(func() {
|
gErr.PanicToError(func() {
|
||||||
ctl.sendCh <- &msg.ReqWorkConn{}
|
ctl.sendCh <- &msg.ReqWorkConn{}
|
||||||
})
|
})
|
||||||
return
|
return
|
||||||
@ -331,7 +332,7 @@ func (ctl *Control) reader() {
|
|||||||
for {
|
for {
|
||||||
m, err := msg.ReadMsg(encReader)
|
m, err := msg.ReadMsg(encReader)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if err == io.EOF {
|
if errors.Is(err, io.EOF) {
|
||||||
xl.Debug("control connection closed")
|
xl.Debug("control connection closed")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|||||||
@ -88,7 +88,10 @@ func (svr *Service) APIServerInfo(w http.ResponseWriter, r *http.Request) {
|
|||||||
ProxyTypeCounts: serverStats.ProxyTypeCounts,
|
ProxyTypeCounts: serverStats.ProxyTypeCounts,
|
||||||
}
|
}
|
||||||
|
|
||||||
buf, _ := json.Marshal(&svrResp)
|
buf, err := json.Marshal(&svrResp)
|
||||||
|
if err != nil {
|
||||||
|
log.Warn("marshal server information response: %w", err)
|
||||||
|
}
|
||||||
res.Msg = string(buf)
|
res.Msg = string(buf)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -61,7 +61,7 @@ func (pxy *UDPProxy) Run() (remoteAddr string, err error) {
|
|||||||
xl := pxy.xl
|
xl := pxy.xl
|
||||||
pxy.realPort, err = pxy.rc.UDPPortManager.Acquire(pxy.name, pxy.cfg.RemotePort)
|
pxy.realPort, err = pxy.rc.UDPPortManager.Acquire(pxy.name, pxy.cfg.RemotePort)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", fmt.Errorf("acquire port %d error: %v", pxy.cfg.RemotePort, err)
|
return "", fmt.Errorf("acquire port %d error: %w", pxy.cfg.RemotePort, err)
|
||||||
}
|
}
|
||||||
defer func() {
|
defer func() {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
@ -127,13 +127,13 @@ func NewService(cfg config.ServerCommonConf) (svr *Service, err error) {
|
|||||||
address := net.JoinHostPort(cfg.ProxyBindAddr, strconv.Itoa(cfg.TCPMuxHTTPConnectPort))
|
address := net.JoinHostPort(cfg.ProxyBindAddr, strconv.Itoa(cfg.TCPMuxHTTPConnectPort))
|
||||||
l, err = net.Listen("tcp", address)
|
l, err = net.Listen("tcp", address)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
err = fmt.Errorf("Create server listener error, %v", err)
|
err = fmt.Errorf("Create server listener error, %w", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
svr.rc.TCPMuxHTTPConnectMuxer, err = tcpmux.NewHTTPConnectTCPMuxer(l, vhostReadWriteTimeout)
|
svr.rc.TCPMuxHTTPConnectMuxer, err = tcpmux.NewHTTPConnectTCPMuxer(l, vhostReadWriteTimeout)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
err = fmt.Errorf("Create vhost tcpMuxer error, %v", err)
|
err = fmt.Errorf("Create vhost tcpMuxer error, %w", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
log.Info("tcpmux httpconnect multiplexer listen on %s", address)
|
log.Info("tcpmux httpconnect multiplexer listen on %s", address)
|
||||||
@ -181,7 +181,7 @@ func NewService(cfg config.ServerCommonConf) (svr *Service, err error) {
|
|||||||
address := net.JoinHostPort(cfg.BindAddr, strconv.Itoa(cfg.BindPort))
|
address := net.JoinHostPort(cfg.BindAddr, strconv.Itoa(cfg.BindPort))
|
||||||
ln, err := net.Listen("tcp", address)
|
ln, err := net.Listen("tcp", address)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
err = fmt.Errorf("Create server listener error, %v", err)
|
err = fmt.Errorf("Create server listener error, %w", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -197,7 +197,7 @@ func NewService(cfg config.ServerCommonConf) (svr *Service, err error) {
|
|||||||
address := net.JoinHostPort(cfg.BindAddr, strconv.Itoa(cfg.KCPBindPort))
|
address := net.JoinHostPort(cfg.BindAddr, strconv.Itoa(cfg.KCPBindPort))
|
||||||
svr.kcpListener, err = frpNet.ListenKcp(address)
|
svr.kcpListener, err = frpNet.ListenKcp(address)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
err = fmt.Errorf("Listen on kcp address udp %s error: %v", address, err)
|
err = fmt.Errorf("Listen on kcp address udp %s error: %w", address, err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
log.Info("frps kcp listen on udp %s", address)
|
log.Info("frps kcp listen on udp %s", address)
|
||||||
@ -228,7 +228,7 @@ func NewService(cfg config.ServerCommonConf) (svr *Service, err error) {
|
|||||||
} else {
|
} else {
|
||||||
l, err = net.Listen("tcp", address)
|
l, err = net.Listen("tcp", address)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
err = fmt.Errorf("Create vhost http listener error, %v", err)
|
err = fmt.Errorf("Create vhost http listener error, %w", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -245,7 +245,7 @@ func NewService(cfg config.ServerCommonConf) (svr *Service, err error) {
|
|||||||
address := net.JoinHostPort(cfg.ProxyBindAddr, strconv.Itoa(cfg.VhostHTTPSPort))
|
address := net.JoinHostPort(cfg.ProxyBindAddr, strconv.Itoa(cfg.VhostHTTPSPort))
|
||||||
l, err = net.Listen("tcp", address)
|
l, err = net.Listen("tcp", address)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
err = fmt.Errorf("Create server listener error, %v", err)
|
err = fmt.Errorf("Create server listener error, %w", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
log.Info("https service listen on %s", address)
|
log.Info("https service listen on %s", address)
|
||||||
@ -253,7 +253,7 @@ func NewService(cfg config.ServerCommonConf) (svr *Service, err error) {
|
|||||||
|
|
||||||
svr.rc.VhostHTTPSMuxer, err = vhost.NewHTTPSMuxer(l, vhostReadWriteTimeout)
|
svr.rc.VhostHTTPSMuxer, err = vhost.NewHTTPSMuxer(l, vhostReadWriteTimeout)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
err = fmt.Errorf("Create vhost httpsMuxer error, %v", err)
|
err = fmt.Errorf("Create vhost httpsMuxer error, %w", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -270,7 +270,7 @@ func NewService(cfg config.ServerCommonConf) (svr *Service, err error) {
|
|||||||
address := net.JoinHostPort(cfg.BindAddr, strconv.Itoa(cfg.BindUDPPort))
|
address := net.JoinHostPort(cfg.BindAddr, strconv.Itoa(cfg.BindUDPPort))
|
||||||
nc, err = nathole.NewController(address)
|
nc, err = nathole.NewController(address)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
err = fmt.Errorf("Create nat hole controller error, %v", err)
|
err = fmt.Errorf("Create nat hole controller error, %w", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
svr.rc.NatHoleController = nc
|
svr.rc.NatHoleController = nc
|
||||||
@ -286,7 +286,7 @@ func NewService(cfg config.ServerCommonConf) (svr *Service, err error) {
|
|||||||
address := net.JoinHostPort(cfg.DashboardAddr, strconv.Itoa(cfg.DashboardPort))
|
address := net.JoinHostPort(cfg.DashboardAddr, strconv.Itoa(cfg.DashboardPort))
|
||||||
err = svr.RunDashboardServer(address)
|
err = svr.RunDashboardServer(address)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
err = fmt.Errorf("Create dashboard web server error, %v", err)
|
err = fmt.Errorf("Create dashboard web server error, %w", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
log.Info("Dashboard listen on %s", address)
|
log.Info("Dashboard listen on %s", address)
|
||||||
|
|||||||
@ -72,7 +72,7 @@ func (vm *Manager) NewConn(name string, conn net.Conn, timestamp int64, signKey
|
|||||||
var rwc io.ReadWriteCloser = conn
|
var rwc io.ReadWriteCloser = conn
|
||||||
if useEncryption {
|
if useEncryption {
|
||||||
if rwc, err = frpIo.WithEncryption(rwc, []byte(sk)); err != nil {
|
if rwc, err = frpIo.WithEncryption(rwc, []byte(sk)); err != nil {
|
||||||
err = fmt.Errorf("create encryption connection failed: %v", err)
|
err = fmt.Errorf("create encryption connection failed: %w", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -43,10 +43,10 @@ func ValidateTestContext(t *TestContextType) error {
|
|||||||
return fmt.Errorf("frpc and frps binary path can't be empty")
|
return fmt.Errorf("frpc and frps binary path can't be empty")
|
||||||
}
|
}
|
||||||
if _, err := os.Stat(t.FRPClientPath); err != nil {
|
if _, err := os.Stat(t.FRPClientPath); err != nil {
|
||||||
return fmt.Errorf("load frpc-path error: %v", err)
|
return fmt.Errorf("load frpc-path error: %w", err)
|
||||||
}
|
}
|
||||||
if _, err := os.Stat(t.FRPServerPath); err != nil {
|
if _, err := os.Stat(t.FRPServerPath); err != nil {
|
||||||
return fmt.Errorf("load frps-path error: %v", err)
|
return fmt.Errorf("load frps-path error: %w", err)
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|||||||
@ -46,11 +46,11 @@ func (cp *SelfSignedCertGenerator) Generate(commonName string) (*Artifacts, erro
|
|||||||
if !valid {
|
if !valid {
|
||||||
signingKey, err = NewPrivateKey()
|
signingKey, err = NewPrivateKey()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("failed to create the CA private key: %v", err)
|
return nil, fmt.Errorf("failed to create the CA private key: %w", err)
|
||||||
}
|
}
|
||||||
signingCert, err = cert.NewSelfSignedCACert(cert.Config{CommonName: commonName}, signingKey)
|
signingCert, err = cert.NewSelfSignedCACert(cert.Config{CommonName: commonName}, signingKey)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("failed to create the CA cert: %v", err)
|
return nil, fmt.Errorf("failed to create the CA cert: %w", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -65,7 +65,7 @@ func (cp *SelfSignedCertGenerator) Generate(commonName string) (*Artifacts, erro
|
|||||||
|
|
||||||
key, err := NewPrivateKey()
|
key, err := NewPrivateKey()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("failed to create the private key: %v", err)
|
return nil, fmt.Errorf("failed to create the private key: %w", err)
|
||||||
}
|
}
|
||||||
signedCert, err := NewSignedCert(
|
signedCert, err := NewSignedCert(
|
||||||
cert.Config{
|
cert.Config{
|
||||||
@ -76,7 +76,7 @@ func (cp *SelfSignedCertGenerator) Generate(commonName string) (*Artifacts, erro
|
|||||||
key, signingCert, signingKey,
|
key, signingCert, signingKey,
|
||||||
)
|
)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("failed to create the cert: %v", err)
|
return nil, fmt.Errorf("failed to create the cert: %w", err)
|
||||||
}
|
}
|
||||||
return &Artifacts{
|
return &Artifacts{
|
||||||
Key: EncodePrivateKeyPEM(key),
|
Key: EncodePrivateKeyPEM(key),
|
||||||
|
|||||||
@ -144,7 +144,7 @@ func (r *Request) Do() (*Response, error) {
|
|||||||
}
|
}
|
||||||
proxyType, proxyAddress, auth, err := libdial.ParseProxyURL(r.proxyURL)
|
proxyType, proxyAddress, auth, err := libdial.ParseProxyURL(r.proxyURL)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("parse ProxyURL error: %v", err)
|
return nil, fmt.Errorf("parse ProxyURL error: %w", err)
|
||||||
}
|
}
|
||||||
conn, err = libdial.Dial(addr, libdial.WithProxy(proxyType, proxyAddress), libdial.WithProxyAuth(auth))
|
conn, err = libdial.Dial(addr, libdial.WithProxy(proxyType, proxyAddress), libdial.WithProxyAuth(auth))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -235,7 +235,7 @@ func (r *Request) sendHTTPRequest(method, urlstr string, host string, headers ma
|
|||||||
func (r *Request) sendRequestByConn(c net.Conn, content []byte) ([]byte, error) {
|
func (r *Request) sendRequestByConn(c net.Conn, content []byte) ([]byte, error) {
|
||||||
_, err := rpc.WriteBytes(c, content)
|
_, err := rpc.WriteBytes(c, content)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("write error: %v", err)
|
return nil, fmt.Errorf("write error: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
var reader io.Reader = c
|
var reader io.Reader = c
|
||||||
@ -245,7 +245,7 @@ func (r *Request) sendRequestByConn(c net.Conn, content []byte) ([]byte, error)
|
|||||||
|
|
||||||
buf, err := rpc.ReadBytes(reader)
|
buf, err := rpc.ReadBytes(reader)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("read error: %v", err)
|
return nil, fmt.Errorf("read error: %w", err)
|
||||||
}
|
}
|
||||||
return buf, nil
|
return buf, nil
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user