Coverage Summary for Class: JsonRpcMethodFilter (co.rsk.rpc)
Class |
Class, %
|
Method, %
|
Line, %
|
JsonRpcMethodFilter |
0%
(0/1)
|
0%
(0/3)
|
0%
(0/8)
|
1 /*
2 * This file is part of RskJ
3 * Copyright (C) 2017 RSK Labs Ltd.
4 *
5 * This program is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU Lesser General Public License as published by
7 * the Free Software Foundation, either version 3 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU Lesser General Public License for more details.
14 *
15 * You should have received a copy of the GNU Lesser General Public License
16 * along with this program. If not, see <http://www.gnu.org/licenses/>.
17 */
18
19 package co.rsk.rpc;
20
21 import com.fasterxml.jackson.databind.JsonNode;
22 import com.googlecode.jsonrpc4j.JsonRpcBasicServer;
23 import com.googlecode.jsonrpc4j.RequestInterceptor;
24
25 import java.io.IOException;
26 import java.util.List;
27
28 public class JsonRpcMethodFilter implements RequestInterceptor {
29
30 private List<ModuleDescription> modules;
31
32 /**
33 * This checks the JSON RPC invoked method against the received list of modules
34 *
35 * @see co.rsk.rpc.ModuleDescription#methodIsEnable
36 *
37 * @param modules list of configured modules
38 */
39 public JsonRpcMethodFilter(List<ModuleDescription> modules) {
40 this.modules = modules;
41 }
42
43 @Override
44 public void interceptRequest(JsonNode node) throws IOException {
45 if (node.hasNonNull(JsonRpcBasicServer.METHOD)) {
46 checkMethod(node.get(JsonRpcBasicServer.METHOD).asText());
47 }
48 }
49
50 private void checkMethod(String methodName) throws IOException {
51 for (ModuleDescription module: this.modules) {
52 if (module.methodIsEnable(methodName)) {
53 return;
54 }
55 }
56
57 throw new IOException("Method not supported: " + methodName);
58 }
59 }