From bb55de8e1b957cf839a8ef87fdfe94248fa6e780 Mon Sep 17 00:00:00 2001 From: Danny Morrow Date: Thu, 21 Dec 2017 14:52:33 -0500 Subject: [PATCH 1/5] Enable additional body types for POST authorization By overriding bodyFactory, it is now possible to send JSON objects in the body, rather than only "Content-Type: application/x-www-form-urlencoded" strings. Users can also set the correct headers to be sent - for example "Content-Type: application/json", and are able to override the "charset" header as well. --- .../pusher/client/util/HttpAuthorizer.java | 44 ++++++++++++------- 1 file changed, 27 insertions(+), 17 deletions(-) diff --git a/src/main/java/com/pusher/client/util/HttpAuthorizer.java b/src/main/java/com/pusher/client/util/HttpAuthorizer.java index bfee012c..53502c97 100644 --- a/src/main/java/com/pusher/client/util/HttpAuthorizer.java +++ b/src/main/java/com/pusher/client/util/HttpAuthorizer.java @@ -86,16 +86,11 @@ public void setQueryStringParameters(final HashMap queryStringPa public String authorize(final String channelName, final String socketId) throws AuthorizationFailureException { try { - final StringBuffer urlParameters = new StringBuffer(); - urlParameters.append("channel_name=").append(URLEncoder.encode(channelName, ENCODING_CHARACTER_SET)); - urlParameters.append("&socket_id=").append(URLEncoder.encode(socketId, ENCODING_CHARACTER_SET)); - - // Adding extra parameters supplied to be added to query string. - for (final String parameterName : mQueryStringParameters.keySet()) { - urlParameters.append("&").append(parameterName).append("="); - urlParameters.append(URLEncoder.encode(mQueryStringParameters.get(parameterName), - ENCODING_CHARACTER_SET)); - } + final String body = new bodyFactory(channelName, socketId); + + final HashMap defaultHeaders = new HashMap(); + defaultHeaders.put("Content-Type", "application/x-www-form-urlencoded"); + defaultHeaders.put("charset", ENCODING_CHARACTER_SET); HttpURLConnection connection; if (isSSL()) { @@ -108,14 +103,14 @@ public String authorize(final String channelName, final String socketId) throws connection.setDoInput(true); connection.setInstanceFollowRedirects(false); connection.setRequestMethod("POST"); - connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); - connection.setRequestProperty("charset", "utf-8"); - connection.setRequestProperty("Content-Length", - "" + Integer.toString(urlParameters.toString().getBytes().length)); // Add in the user defined headers - for (final String headerName : mHeaders.keySet()) { - final String headerValue = mHeaders.get(headerName); + defaultHeaders.putAll(mHeaders); + // Add in the Content-Length, so it can't be overwritten by mHeaders + defaultHeaders.put("Content-Length","" + Integer.toString(body.getBytes().length)); + + for (final String headerName : defaultHeaders.keySet()) { + final String headerValue = defaultHeaders.get(headerName); connection.setRequestProperty(headerName, headerValue); } @@ -123,7 +118,7 @@ public String authorize(final String channelName, final String socketId) throws // Send request final DataOutputStream wr = new DataOutputStream(connection.getOutputStream()); - wr.writeBytes(urlParameters.toString()); + wr.writeBytes(body); wr.flush(); wr.close(); @@ -149,4 +144,19 @@ public String authorize(final String channelName, final String socketId) throws throw new AuthorizationFailureException(e); } } + + @Override + private String bodyFactory(final String channelName, final String socketId) { + final StringBuffer urlParameters = new StringBuffer(); + urlParameters.append("channel_name=").append(URLEncoder.encode(channelName, ENCODING_CHARACTER_SET)); + urlParameters.append("&socket_id=").append(URLEncoder.encode(socketId, ENCODING_CHARACTER_SET)); + + // Adding extra parameters supplied to be added to query string. + for (final String parameterName : mQueryStringParameters.keySet()) { + urlParameters.append("&").append(parameterName).append("="); + urlParameters.append(URLEncoder.encode(mQueryStringParameters.get(parameterName), + ENCODING_CHARACTER_SET)); + } + return urlParameters.toString() + } } From 8eaaf3d696aad4cec19b04e58c80c47d2cfd6880 Mon Sep 17 00:00:00 2001 From: Danny Morrow Date: Thu, 21 Dec 2017 15:49:04 -0500 Subject: [PATCH 2/5] Missing ; --- src/main/java/com/pusher/client/util/HttpAuthorizer.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/pusher/client/util/HttpAuthorizer.java b/src/main/java/com/pusher/client/util/HttpAuthorizer.java index 53502c97..2e10c3c7 100644 --- a/src/main/java/com/pusher/client/util/HttpAuthorizer.java +++ b/src/main/java/com/pusher/client/util/HttpAuthorizer.java @@ -157,6 +157,6 @@ private String bodyFactory(final String channelName, final String socketId) { urlParameters.append(URLEncoder.encode(mQueryStringParameters.get(parameterName), ENCODING_CHARACTER_SET)); } - return urlParameters.toString() + return urlParameters.toString(); } } From 7039a06d03c3ef0365fbf33f972c08c2ed099448 Mon Sep 17 00:00:00 2001 From: Danny Morrow Date: Thu, 21 Dec 2017 15:50:33 -0500 Subject: [PATCH 3/5] remove typo --- src/main/java/com/pusher/client/util/HttpAuthorizer.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/pusher/client/util/HttpAuthorizer.java b/src/main/java/com/pusher/client/util/HttpAuthorizer.java index 2e10c3c7..8ec2835f 100644 --- a/src/main/java/com/pusher/client/util/HttpAuthorizer.java +++ b/src/main/java/com/pusher/client/util/HttpAuthorizer.java @@ -86,7 +86,7 @@ public void setQueryStringParameters(final HashMap queryStringPa public String authorize(final String channelName, final String socketId) throws AuthorizationFailureException { try { - final String body = new bodyFactory(channelName, socketId); + final String body = bodyFactory(channelName, socketId); final HashMap defaultHeaders = new HashMap(); defaultHeaders.put("Content-Type", "application/x-www-form-urlencoded"); From 5e630ad24ba542d3a8df74f88a42eecd9467ca46 Mon Sep 17 00:00:00 2001 From: Danny Morrow Date: Thu, 21 Dec 2017 15:53:59 -0500 Subject: [PATCH 4/5] switch bodyFactory to protected and remove @override --- src/main/java/com/pusher/client/util/HttpAuthorizer.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/java/com/pusher/client/util/HttpAuthorizer.java b/src/main/java/com/pusher/client/util/HttpAuthorizer.java index 8ec2835f..313efdf1 100644 --- a/src/main/java/com/pusher/client/util/HttpAuthorizer.java +++ b/src/main/java/com/pusher/client/util/HttpAuthorizer.java @@ -145,8 +145,7 @@ public String authorize(final String channelName, final String socketId) throws } } - @Override - private String bodyFactory(final String channelName, final String socketId) { + protected String bodyFactory(final String channelName, final String socketId) { final StringBuffer urlParameters = new StringBuffer(); urlParameters.append("channel_name=").append(URLEncoder.encode(channelName, ENCODING_CHARACTER_SET)); urlParameters.append("&socket_id=").append(URLEncoder.encode(socketId, ENCODING_CHARACTER_SET)); From c97935963266371a26fc8a3924b55650cb4b2cef Mon Sep 17 00:00:00 2001 From: Danny Morrow Date: Thu, 21 Dec 2017 16:11:09 -0500 Subject: [PATCH 5/5] bodyFactory throws Exception --- .../pusher/client/util/HttpAuthorizer.java | 26 +++++++++++-------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/src/main/java/com/pusher/client/util/HttpAuthorizer.java b/src/main/java/com/pusher/client/util/HttpAuthorizer.java index 313efdf1..ffb88852 100644 --- a/src/main/java/com/pusher/client/util/HttpAuthorizer.java +++ b/src/main/java/com/pusher/client/util/HttpAuthorizer.java @@ -145,17 +145,21 @@ public String authorize(final String channelName, final String socketId) throws } } - protected String bodyFactory(final String channelName, final String socketId) { - final StringBuffer urlParameters = new StringBuffer(); - urlParameters.append("channel_name=").append(URLEncoder.encode(channelName, ENCODING_CHARACTER_SET)); - urlParameters.append("&socket_id=").append(URLEncoder.encode(socketId, ENCODING_CHARACTER_SET)); - - // Adding extra parameters supplied to be added to query string. - for (final String parameterName : mQueryStringParameters.keySet()) { - urlParameters.append("&").append(parameterName).append("="); - urlParameters.append(URLEncoder.encode(mQueryStringParameters.get(parameterName), - ENCODING_CHARACTER_SET)); + protected String bodyFactory(final String channelName, final String socketId) throws Exception { + try { + final StringBuffer urlParameters = new StringBuffer(); + urlParameters.append("channel_name=").append(URLEncoder.encode(channelName, ENCODING_CHARACTER_SET)); + urlParameters.append("&socket_id=").append(URLEncoder.encode(socketId, ENCODING_CHARACTER_SET)); + + // Adding extra parameters supplied to be added to query string. + for (final String parameterName : mQueryStringParameters.keySet()) { + urlParameters.append("&").append(parameterName).append("="); + urlParameters.append(URLEncoder.encode(mQueryStringParameters.get(parameterName), + ENCODING_CHARACTER_SET)); + } + return urlParameters.toString(); + } catch (final Exception e) { + throw e; } - return urlParameters.toString(); } }