From 48585ebe0d41024ef94db8d1d1f214df377df93f Mon Sep 17 00:00:00 2001 From: liukai Date: Tue, 12 Sep 2023 15:20:36 +0800 Subject: [PATCH 1/5] feat(Util): fix util --- .../src/main/java/org/tron/core/services/http/Util.java | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/framework/src/main/java/org/tron/core/services/http/Util.java b/framework/src/main/java/org/tron/core/services/http/Util.java index 186f77cf3e8..4770bd38d91 100644 --- a/framework/src/main/java/org/tron/core/services/http/Util.java +++ b/framework/src/main/java/org/tron/core/services/http/Util.java @@ -30,6 +30,7 @@ import org.apache.commons.lang3.StringUtils; import org.bouncycastle.util.encoders.Hex; import org.eclipse.jetty.http.HttpMethod; +import org.eclipse.jetty.http.MimeTypes; import org.eclipse.jetty.util.MultiMap; import org.eclipse.jetty.util.StringUtil; import org.eclipse.jetty.util.UrlEncoded; @@ -78,8 +79,6 @@ public class Util { public static final String FUNCTION_SELECTOR = "function_selector"; public static final String FUNCTION_PARAMETER = "parameter"; public static final String CALL_DATA = "data"; - public static final String APPLICATION_FORM_URLENCODED = "application/x-www-form-urlencoded"; - public static final String APPLICATION_JSON = "application/json"; public static String printTransactionFee(String transactionFee) { JSONObject jsonObject = new JSONObject(); @@ -535,7 +534,9 @@ private static String checkGetParam(HttpServletRequest request, String key) thro if (StringUtils.isBlank(contentType)) { return null; } - if (APPLICATION_JSON.toLowerCase().contains(contentType)) { + if (contentType.contains(MimeTypes.Type.APPLICATION_JSON.asString()) + || contentType.contains(MimeTypes.Type.APPLICATION_JSON_UTF_8.asString()) + || contentType.contains(MimeTypes.Type.APPLICATION_JSON_8859_1.asString())) { value = getRequestValue(request); if (StringUtils.isBlank(value)) { return null; @@ -545,7 +546,7 @@ private static String checkGetParam(HttpServletRequest request, String key) thro if (jsonObject != null) { return jsonObject.getString(key); } - } else if (APPLICATION_FORM_URLENCODED.toLowerCase().contains(contentType)) { + } else if (contentType.contains(MimeTypes.Type.FORM_ENCODED.asString())) { return request.getParameter(key); } else { return null; From be8f186a6d9629298f816d8ef10d39fa3457d9dd Mon Sep 17 00:00:00 2001 From: liukai Date: Wed, 13 Sep 2023 16:15:47 +0800 Subject: [PATCH 2/5] feat(Util): optimize judgment logic --- framework/src/main/java/org/tron/core/services/http/Util.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/framework/src/main/java/org/tron/core/services/http/Util.java b/framework/src/main/java/org/tron/core/services/http/Util.java index 4770bd38d91..b9637773e2a 100644 --- a/framework/src/main/java/org/tron/core/services/http/Util.java +++ b/framework/src/main/java/org/tron/core/services/http/Util.java @@ -534,9 +534,7 @@ private static String checkGetParam(HttpServletRequest request, String key) thro if (StringUtils.isBlank(contentType)) { return null; } - if (contentType.contains(MimeTypes.Type.APPLICATION_JSON.asString()) - || contentType.contains(MimeTypes.Type.APPLICATION_JSON_UTF_8.asString()) - || contentType.contains(MimeTypes.Type.APPLICATION_JSON_8859_1.asString())) { + if (contentType.contains(MimeTypes.Type.APPLICATION_JSON.asString())) { value = getRequestValue(request); if (StringUtils.isBlank(value)) { return null; From e6a5c68d1c1b526c32a2c146789d320d006ac274 Mon Sep 17 00:00:00 2001 From: liukai Date: Wed, 13 Sep 2023 18:41:23 +0800 Subject: [PATCH 3/5] test(case): add GetRewardServletTest and GetBrokerageServletTest test case --- .../http/GetBrokerageServletTest.java | 19 ++++++++++ .../services/http/GetRewardServletTest.java | 36 +++++++++++++++++-- 2 files changed, 53 insertions(+), 2 deletions(-) diff --git a/framework/src/test/java/org/tron/core/services/http/GetBrokerageServletTest.java b/framework/src/test/java/org/tron/core/services/http/GetBrokerageServletTest.java index 898108d0dcd..0880cb0c6c3 100644 --- a/framework/src/test/java/org/tron/core/services/http/GetBrokerageServletTest.java +++ b/framework/src/test/java/org/tron/core/services/http/GetBrokerageServletTest.java @@ -53,6 +53,25 @@ public void getBrokerageValueByJsonTest() { } } + + @Test + public void getBrokerageByJsonUTF8Test() { + int expect = 20; + String jsonParam = "{\"address\": \"27VZHn9PFZwNh7o2EporxmLkpe157iWZVkh\"}"; + MockHttpServletRequest request = createRequest("application/json; charset=utf-8"); + request.setContent(jsonParam.getBytes()); + MockHttpServletResponse response = new MockHttpServletResponse(); + getBrokerageServlet.doPost(request, response); + try { + String contentAsString = response.getContentAsString(); + JSONObject result = JSONObject.parseObject(contentAsString); + int brokerage = (int)result.get("brokerage"); + Assert.assertEquals(expect, brokerage); + } catch (UnsupportedEncodingException e) { + Assert.fail(e.getMessage()); + } + } + @Test public void getBrokerageValueTest() { int expect = 20; diff --git a/framework/src/test/java/org/tron/core/services/http/GetRewardServletTest.java b/framework/src/test/java/org/tron/core/services/http/GetRewardServletTest.java index 47e563f01f9..1c2499debb0 100644 --- a/framework/src/test/java/org/tron/core/services/http/GetRewardServletTest.java +++ b/framework/src/test/java/org/tron/core/services/http/GetRewardServletTest.java @@ -8,9 +8,11 @@ import java.io.UnsupportedEncodingException; import javax.annotation.Resource; +import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.junit.After; import org.junit.Assert; +import org.junit.Before; import org.junit.Test; import org.springframework.mock.web.MockHttpServletRequest; import org.springframework.mock.web.MockHttpServletResponse; @@ -22,6 +24,7 @@ import org.tron.core.service.MortgageService; import org.tron.core.store.DelegationStore; +@Slf4j public class GetRewardServletTest extends BaseTest { @Resource @@ -53,6 +56,7 @@ public MockHttpServletRequest createRequest(String contentType) { return request; } + @Before public void init() { manager.getDynamicPropertiesStore().saveChangeDelegation(1); byte[] sr = decodeFromBase58Check("27VZHn9PFZwNh7o2EporxmLkpe157iWZVkh"); @@ -60,9 +64,20 @@ public void init() { delegationStore.setWitnessVote(0, sr, 100000000); } + @After + public void destroy1() { + Args.clearParam(); + if (StringUtils.isNotEmpty(dbPath)) { + if (FileUtil.deleteDir(new File(dbPath))) { + logger.info("Release resources successful."); + } else { + logger.info("Release resources failure."); + } + } + } + @Test public void getRewardValueByJsonTest() { - init(); int expect = 138181; String jsonParam = "{\"address\": \"27VZHn9PFZwNh7o2EporxmLkpe157iWZVkh\"}"; MockHttpServletRequest request = createRequest("application/json"); @@ -79,9 +94,26 @@ public void getRewardValueByJsonTest() { } } + @Test + public void getRewardByJsonUTF8Test() { + int expect = 138181; + String jsonParam = "{\"address\": \"27VZHn9PFZwNh7o2EporxmLkpe157iWZVkh\"}"; + MockHttpServletRequest request = createRequest("application/json; charset=utf-8"); + MockHttpServletResponse response = new MockHttpServletResponse(); + request.setContent(jsonParam.getBytes()); + try { + getRewardServlet.doPost(request, response); + String contentAsString = response.getContentAsString(); + JSONObject result = JSONObject.parseObject(contentAsString); + int reward = (int)result.get("reward"); + Assert.assertEquals(expect, reward); + } catch (UnsupportedEncodingException e) { + Assert.fail(e.getMessage()); + } + } + @Test public void getRewardValueTest() { - init(); int expect = 138181; MockHttpServletRequest request = createRequest("application/x-www-form-urlencoded"); MockHttpServletResponse response = new MockHttpServletResponse(); From a241aa3a6cdc53521608c7e4bd78bd33458f1aa4 Mon Sep 17 00:00:00 2001 From: liukai Date: Wed, 13 Sep 2023 20:29:02 +0800 Subject: [PATCH 4/5] test(case): fix code --- .../core/services/http/GetRewardServletTest.java | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/framework/src/test/java/org/tron/core/services/http/GetRewardServletTest.java b/framework/src/test/java/org/tron/core/services/http/GetRewardServletTest.java index bd2072b5687..404e154a4c3 100644 --- a/framework/src/test/java/org/tron/core/services/http/GetRewardServletTest.java +++ b/framework/src/test/java/org/tron/core/services/http/GetRewardServletTest.java @@ -63,18 +63,6 @@ public void init() { delegationStore.setWitnessVote(0, sr, 100000000); } - @After - public void destroy1() { - Args.clearParam(); - if (StringUtils.isNotEmpty(dbPath)) { - if (FileUtil.deleteDir(new File(dbPath))) { - logger.info("Release resources successful."); - } else { - logger.info("Release resources failure."); - } - } - } - @Test public void getRewardValueByJsonTest() { int expect = 138181; From 54884dc6a08a2f22a050c7139e0f85ac3407178c Mon Sep 17 00:00:00 2001 From: liukai Date: Thu, 14 Sep 2023 15:55:01 +0800 Subject: [PATCH 5/5] feature(Util): remove 'content-type' judgment --- .../main/java/org/tron/core/services/http/Util.java | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/framework/src/main/java/org/tron/core/services/http/Util.java b/framework/src/main/java/org/tron/core/services/http/Util.java index b9637773e2a..6874ec875d0 100644 --- a/framework/src/main/java/org/tron/core/services/http/Util.java +++ b/framework/src/main/java/org/tron/core/services/http/Util.java @@ -524,7 +524,6 @@ public static byte[] getAddress(HttpServletRequest request) throws Exception { private static String checkGetParam(HttpServletRequest request, String key) throws Exception { String method = request.getMethod(); - String value = null; if (HttpMethod.GET.toString().toUpperCase().equalsIgnoreCase(method)) { return request.getParameter(key); @@ -534,8 +533,10 @@ private static String checkGetParam(HttpServletRequest request, String key) thro if (StringUtils.isBlank(contentType)) { return null; } - if (contentType.contains(MimeTypes.Type.APPLICATION_JSON.asString())) { - value = getRequestValue(request); + if (contentType.contains(MimeTypes.Type.FORM_ENCODED.asString())) { + return request.getParameter(key); + } else { + String value = getRequestValue(request); if (StringUtils.isBlank(value)) { return null; } @@ -544,13 +545,10 @@ private static String checkGetParam(HttpServletRequest request, String key) thro if (jsonObject != null) { return jsonObject.getString(key); } - } else if (contentType.contains(MimeTypes.Type.FORM_ENCODED.asString())) { - return request.getParameter(key); - } else { return null; } } - return value; + return null; } public static String getRequestValue(HttpServletRequest request) throws IOException {