Skip to content

Commit

Permalink
4328 quiet cors errors (hyperledger#4335)
Browse files Browse the repository at this point in the history
* adds a failure handler to all routes that will log failure exceptions with their message only. stacks can be printed by turning debug on.

Signed-off-by: Justin Florentine <justin+github@florentine.us>
  • Loading branch information
jflo authored Sep 1, 2022
1 parent 86c3080 commit 2e08c5c
Show file tree
Hide file tree
Showing 4 changed files with 44 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
import org.hyperledger.besu.ethereum.api.jsonrpc.execution.TimedJsonRpcProcessor;
import org.hyperledger.besu.ethereum.api.jsonrpc.execution.TracedJsonRpcProcessor;
import org.hyperledger.besu.ethereum.api.jsonrpc.health.HealthService;
import org.hyperledger.besu.ethereum.api.jsonrpc.internal.exception.Logging403ErrorHandler;
import org.hyperledger.besu.ethereum.api.jsonrpc.internal.methods.JsonRpcMethod;
import org.hyperledger.besu.ethereum.api.tls.TlsClientAuthConfiguration;
import org.hyperledger.besu.ethereum.api.tls.TlsConfiguration;
Expand Down Expand Up @@ -298,7 +299,7 @@ private Router buildRouter() {

// Verify Host header to avoid rebind attack.
router.route().handler(checkAllowlistHostHeader());

router.errorHandler(403, new Logging403ErrorHandler());
router
.route()
.handler(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@
import org.hyperledger.besu.ethereum.api.jsonrpc.execution.TimedJsonRpcProcessor;
import org.hyperledger.besu.ethereum.api.jsonrpc.execution.TracedJsonRpcProcessor;
import org.hyperledger.besu.ethereum.api.jsonrpc.health.HealthService;
import org.hyperledger.besu.ethereum.api.jsonrpc.internal.exception.Logging403ErrorHandler;
import org.hyperledger.besu.ethereum.api.jsonrpc.internal.methods.JsonRpcMethod;
import org.hyperledger.besu.ethereum.api.jsonrpc.websocket.WebSocketConfiguration;
import org.hyperledger.besu.ethereum.api.jsonrpc.websocket.WebSocketMessageHandler;
Expand Down Expand Up @@ -402,7 +403,7 @@ private Router buildRouter() {

// Verify Host header to avoid rebind attack.
router.route().handler(denyRouteToBlockedHost());

router.errorHandler(403, new Logging403ErrorHandler());
router
.route()
.handler(
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
/*
* Copyright Hyperledger Besu Contributors.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
*
* SPDX-License-Identifier: Apache-2.0
*
*/

package org.hyperledger.besu.ethereum.api.jsonrpc.internal.exception;

import io.vertx.core.Handler;
import io.vertx.core.http.HttpServerResponse;
import io.vertx.ext.web.RoutingContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class Logging403ErrorHandler implements Handler<RoutingContext> {

private static final Logger LOG = LoggerFactory.getLogger(Logging403ErrorHandler.class);

@Override
public void handle(final RoutingContext event) {
LOG.error(event.failure().getMessage());
LOG.debug(event.failure().getMessage(), event.failure());
int statusCode = event.statusCode();

HttpServerResponse response = event.response();
response.setStatusCode(statusCode).end("Exception thrown handling RPC");
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
import org.hyperledger.besu.ethereum.api.jsonrpc.authentication.AuthenticationService;
import org.hyperledger.besu.ethereum.api.jsonrpc.authentication.AuthenticationUtils;
import org.hyperledger.besu.ethereum.api.jsonrpc.authentication.DefaultAuthenticationService;
import org.hyperledger.besu.ethereum.api.jsonrpc.internal.exception.Logging403ErrorHandler;
import org.hyperledger.besu.ethereum.api.jsonrpc.websocket.subscription.SubscriptionManager;
import org.hyperledger.besu.metrics.BesuMetricCategory;
import org.hyperledger.besu.plugin.services.MetricsSystem;
Expand Down Expand Up @@ -222,7 +223,7 @@ private Handler<HttpServerRequest> httpHandler() {
.produces(APPLICATION_JSON)
.handler(DefaultAuthenticationService::handleDisabledLogin);
}

router.errorHandler(403, new Logging403ErrorHandler());
router.route().handler(WebSocketService::handleHttpNotSupported);
return router;
}
Expand Down

0 comments on commit 2e08c5c

Please sign in to comment.