diff --git a/internal/nodes/http_request.go b/internal/nodes/http_request.go index 3809b6d..4b5d0c7 100644 --- a/internal/nodes/http_request.go +++ b/internal/nodes/http_request.go @@ -170,9 +170,10 @@ func (this *HTTPRequest) Do() { // ACME // TODO 需要配置是否启用ACME检测 if strings.HasPrefix(this.rawURI, "/.well-known/acme-challenge/") { - this.doACME() - this.doEnd() - return + if this.doACME() { + this.doEnd() + return + } } } diff --git a/internal/nodes/http_request_acme.go b/internal/nodes/http_request_acme.go index 8e22535..75f8c06 100644 --- a/internal/nodes/http_request_acme.go +++ b/internal/nodes/http_request_acme.go @@ -4,34 +4,36 @@ import ( "github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb" "github.com/TeaOSLab/EdgeNode/internal/remotelogs" "github.com/TeaOSLab/EdgeNode/internal/rpc" - "net/http" "path/filepath" ) -func (this *HTTPRequest) doACME() { +func (this *HTTPRequest) doACME() (shouldStop bool) { // TODO 对请求进行校验,防止恶意攻击 - token := filepath.Base(this.RawReq.URL.Path) + var token = filepath.Base(this.RawReq.URL.Path) if token == "acme-challenge" || len(token) <= 32 { - this.writer.WriteHeader(http.StatusNotFound) - return + return false } rpcClient, err := rpc.SharedRPC() if err != nil { remotelogs.Error("RPC", "[ACME]rpc failed: "+err.Error()) - return + return false } keyResp, err := rpcClient.ACMEAuthenticationRPC().FindACMEAuthenticationKeyWithToken(rpcClient.Context(), &pb.FindACMEAuthenticationKeyWithTokenRequest{Token: token}) if err != nil { remotelogs.Error("RPC", "[ACME]read key for token failed: "+err.Error()) - return + return false } if len(keyResp.Key) == 0 { - this.writer.WriteHeader(http.StatusNotFound) - } else { - this.writer.Header().Set("Content-Type", "text/plain") - _, _ = this.writer.WriteString(keyResp.Key) + return false } + + this.tags = append(this.tags, "ACME") + + this.writer.Header().Set("Content-Type", "text/plain") + _, _ = this.writer.WriteString(keyResp.Key) + + return true }