Skip to content

Commit 8eea376

Browse files
authored
[ETCM-448] json rpc - status code (#836)
* fix status code * change strategy from status code * remove redundancy * change style * test improvement
1 parent 4383e29 commit 8eea376

File tree

2 files changed

+208
-38
lines changed

2 files changed

+208
-38
lines changed

src/main/scala/io/iohk/ethereum/jsonrpc/server/http/JsonRpcHttpServer.scala

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,9 @@ trait JsonRpcHttpServer extends Json4sSupport with RateLimit with Logger {
3636

3737
def corsAllowedOrigins: HttpOriginMatcher
3838

39+
lazy val jsonRpcErrorCodes: List[Int] =
40+
List(JsonRpcError.InvalidRequest.code, JsonRpcError.ParseError.code, JsonRpcError.InvalidParams().code)
41+
3942
val corsSettings = CorsSettings.defaultSettings
4043
.withAllowGenericHttpRequests(true)
4144
.withAllowedOrigins(corsAllowedOrigins)
@@ -70,12 +73,12 @@ trait JsonRpcHttpServer extends Json4sSupport with RateLimit with Logger {
7073
// As a temporary solution, it is being excluded from the Rate Limit.
7174
if (config.rateLimit.enabled && request.method != FaucetJsonRpcController.Status) {
7275
handleRateLimitedRequest(clientAddress, request)
73-
} else complete(jsonRpcController.handleRequest(request).runToFuture)
76+
} else complete(handleResponse(jsonRpcController.handleRequest(request)).runToFuture)
7477
}
7578

7679
def handleRateLimitedRequest(clientAddress: RemoteAddress, request: JsonRpcRequest): StandardRoute = {
7780
if (isBelowRateLimit(clientAddress))
78-
complete(jsonRpcController.handleRequest(request).runToFuture)
81+
complete(handleResponse(jsonRpcController.handleRequest(request)).runToFuture)
7982
else {
8083
log.warn(s"Request limit exceeded for ip ${clientAddress.toIP.getOrElse("unknown")}")
8184
complete(
@@ -84,6 +87,14 @@ trait JsonRpcHttpServer extends Json4sSupport with RateLimit with Logger {
8487
}
8588
}
8689

90+
private def handleResponse(f: Task[JsonRpcResponse]): Task[(StatusCode, JsonRpcResponse)] = f map { jsonRpcResponse =>
91+
jsonRpcResponse.error match {
92+
case Some(JsonRpcError(error, _, _)) if jsonRpcErrorCodes.contains(error) =>
93+
(StatusCodes.BadRequest, jsonRpcResponse)
94+
case _ => (StatusCodes.OK, jsonRpcResponse)
95+
}
96+
}
97+
8798
/**
8899
* Try to start JSON RPC server
89100
*/

0 commit comments

Comments
 (0)