Modified AuthIntercepter to correctly authenticate requests with parameters that are not oauth
This commit is contained in:
parent
939afd1d9a
commit
31002b6169
10
.idea/codeStyles/Project.xml
generated
10
.idea/codeStyles/Project.xml
generated
@ -1,18 +1,8 @@
|
|||||||
<component name="ProjectCodeStyleConfiguration">
|
<component name="ProjectCodeStyleConfiguration">
|
||||||
<code_scheme name="Project" version="173">
|
<code_scheme name="Project" version="173">
|
||||||
<AndroidXmlCodeStyleSettings>
|
|
||||||
<option name="USE_CUSTOM_SETTINGS" value="true" />
|
|
||||||
</AndroidXmlCodeStyleSettings>
|
|
||||||
<JetCodeStyleSettings>
|
<JetCodeStyleSettings>
|
||||||
<option name="CODE_STYLE_DEFAULTS" value="KOTLIN_OFFICIAL" />
|
<option name="CODE_STYLE_DEFAULTS" value="KOTLIN_OFFICIAL" />
|
||||||
</JetCodeStyleSettings>
|
</JetCodeStyleSettings>
|
||||||
<codeStyleSettings language="XML">
|
|
||||||
<indentOptions>
|
|
||||||
<option name="INDENT_SIZE" value="2" />
|
|
||||||
<option name="CONTINUATION_INDENT_SIZE" value="4" />
|
|
||||||
<option name="USE_TAB_CHARACTER" value="true" />
|
|
||||||
</indentOptions>
|
|
||||||
</codeStyleSettings>
|
|
||||||
<codeStyleSettings language="kotlin">
|
<codeStyleSettings language="kotlin">
|
||||||
<option name="CODE_STYLE_DEFAULTS" value="KOTLIN_OFFICIAL" />
|
<option name="CODE_STYLE_DEFAULTS" value="KOTLIN_OFFICIAL" />
|
||||||
</codeStyleSettings>
|
</codeStyleSettings>
|
||||||
|
|||||||
5
.idea/misc.xml
generated
5
.idea/misc.xml
generated
@ -1,5 +1,10 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<project version="4">
|
<project version="4">
|
||||||
|
<component name="CMakeSettings">
|
||||||
|
<configurations>
|
||||||
|
<configuration PROFILE_NAME="Debug" CONFIG_NAME="Debug" />
|
||||||
|
</configurations>
|
||||||
|
</component>
|
||||||
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" project-jdk-name="1.8" project-jdk-type="JavaSDK">
|
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" project-jdk-name="1.8" project-jdk-type="JavaSDK">
|
||||||
<output url="file://$PROJECT_DIR$/build/classes" />
|
<output url="file://$PROJECT_DIR$/build/classes" />
|
||||||
</component>
|
</component>
|
||||||
|
|||||||
2
.idea/vcs.xml
generated
2
.idea/vcs.xml
generated
@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<project version="4">
|
<project version="4">
|
||||||
<component name="VcsDirectoryMappings">
|
<component name="VcsDirectoryMappings">
|
||||||
<mapping directory="$PROJECT_DIR$" vcs="Git" />
|
<mapping directory="" vcs="Git" />
|
||||||
</component>
|
</component>
|
||||||
</project>
|
</project>
|
||||||
@ -12,7 +12,7 @@ open class BaseActivity : AppCompatActivity() {
|
|||||||
|
|
||||||
val woocommerce = Woocommerce.Builder()
|
val woocommerce = Woocommerce.Builder()
|
||||||
.setSiteUrl("http://157.230.131.179")
|
.setSiteUrl("http://157.230.131.179")
|
||||||
.setApiVersion(Woocommerce.API_V2)
|
.setApiVersion(Woocommerce.API_V3)
|
||||||
.setConsumerKey("ck_26c61abd7eeff238d87dc56585bf26cb2d1a1ec3")
|
.setConsumerKey("ck_26c61abd7eeff238d87dc56585bf26cb2d1a1ec3")
|
||||||
.setConsumerSecret("cs_062e8e3a7ae0ce08fdebc0c39f8f834d5e87598e")
|
.setConsumerSecret("cs_062e8e3a7ae0ce08fdebc0c39f8f834d5e87598e")
|
||||||
.build()
|
.build()
|
||||||
|
|||||||
@ -2,7 +2,9 @@ package me.gilo.wc.ui
|
|||||||
|
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.support.v7.widget.GridLayoutManager
|
import android.support.v7.widget.GridLayoutManager
|
||||||
|
import android.widget.Toast
|
||||||
import kotlinx.android.synthetic.main.activity_shop.*
|
import kotlinx.android.synthetic.main.activity_shop.*
|
||||||
|
import kotlinx.android.synthetic.main.content_coupon.*
|
||||||
import kotlinx.android.synthetic.main.content_shop.*
|
import kotlinx.android.synthetic.main.content_shop.*
|
||||||
import me.gilo.wc.R
|
import me.gilo.wc.R
|
||||||
import me.gilo.wc.adapter.ProductAdapter
|
import me.gilo.wc.adapter.ProductAdapter
|
||||||
@ -12,6 +14,7 @@ import retrofit2.Call
|
|||||||
import retrofit2.Callback
|
import retrofit2.Callback
|
||||||
import retrofit2.Response
|
import retrofit2.Response
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
import kotlin.collections.HashMap
|
||||||
|
|
||||||
class ShopActivity : BaseActivity() {
|
class ShopActivity : BaseActivity() {
|
||||||
|
|
||||||
@ -42,19 +45,27 @@ class ShopActivity : BaseActivity() {
|
|||||||
private fun products() {
|
private fun products() {
|
||||||
val woocommerce = Woocommerce.Builder()
|
val woocommerce = Woocommerce.Builder()
|
||||||
.setSiteUrl("http://157.230.131.179")
|
.setSiteUrl("http://157.230.131.179")
|
||||||
.setApiVersion(Woocommerce.API_V2)
|
.setApiVersion(Woocommerce.API_V3)
|
||||||
.setConsumerKey("ck_26c61abd7eeff238d87dc56585bf26cb2d1a1ec3")
|
.setConsumerKey("ck_26c61abd7eeff238d87dc56585bf26cb2d1a1ec3")
|
||||||
.setConsumerSecret("cs_062e8e3a7ae0ce08fdebc0c39f8f834d5e87598e")
|
.setConsumerSecret("cs_062e8e3a7ae0ce08fdebc0c39f8f834d5e87598e")
|
||||||
.build()
|
.build()
|
||||||
|
|
||||||
woocommerce.ProductRepository().products().enqueue(object : Callback<List<Product>> {
|
val filters = HashMap<String, String>()
|
||||||
|
filters["search"] = "ship"
|
||||||
|
|
||||||
|
woocommerce.ProductRepository().filter(filters).enqueue(object : Callback<List<Product>> {
|
||||||
override fun onResponse(call: Call<List<Product>>, response: Response<List<Product>>) {
|
override fun onResponse(call: Call<List<Product>>, response: Response<List<Product>>) {
|
||||||
|
|
||||||
|
if (response.isSuccessful) {
|
||||||
val productsResponse = response.body()
|
val productsResponse = response.body()
|
||||||
for (product in productsResponse!!) {
|
for (product in productsResponse!!) {
|
||||||
products.add(product)
|
products.add(product)
|
||||||
}
|
}
|
||||||
|
|
||||||
adapter.notifyDataSetChanged()
|
adapter.notifyDataSetChanged()
|
||||||
|
}else{
|
||||||
|
Toast.makeText(baseContext, "" + response.code() + " : " + response.message(), Toast.LENGTH_SHORT).show()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onFailure(call: Call<List<Product>>, t: Throwable) {
|
override fun onFailure(call: Call<List<Product>>, t: Throwable) {
|
||||||
|
|||||||
@ -12,6 +12,7 @@ public class Woocommerce {
|
|||||||
|
|
||||||
public static final ApiVersion API_V1 = ApiVersion.API_VERSION1;
|
public static final ApiVersion API_V1 = ApiVersion.API_VERSION1;
|
||||||
public static final ApiVersion API_V2 = ApiVersion.API_VERSION2;
|
public static final ApiVersion API_V2 = ApiVersion.API_VERSION2;
|
||||||
|
public static final ApiVersion API_V3 = ApiVersion.API_VERSION3;
|
||||||
|
|
||||||
final OrderNoteRepository orderNoteRepository;
|
final OrderNoteRepository orderNoteRepository;
|
||||||
final RefundRepository refundRepository;
|
final RefundRepository refundRepository;
|
||||||
|
|||||||
@ -1,6 +1,7 @@
|
|||||||
package me.gilo.woodroid.data.auth;
|
package me.gilo.woodroid.data.auth;
|
||||||
|
|
||||||
import android.util.Base64;
|
import android.util.Base64;
|
||||||
|
import android.util.Log;
|
||||||
import okhttp3.HttpUrl;
|
import okhttp3.HttpUrl;
|
||||||
import okhttp3.Interceptor;
|
import okhttp3.Interceptor;
|
||||||
import okhttp3.Request;
|
import okhttp3.Request;
|
||||||
@ -13,11 +14,11 @@ import javax.crypto.Mac;
|
|||||||
import javax.crypto.spec.SecretKeySpec;
|
import javax.crypto.spec.SecretKeySpec;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.UnsupportedEncodingException;
|
import java.io.UnsupportedEncodingException;
|
||||||
|
import java.net.URLDecoder;
|
||||||
import java.net.URLEncoder;
|
import java.net.URLEncoder;
|
||||||
import java.security.InvalidKeyException;
|
import java.security.InvalidKeyException;
|
||||||
import java.security.NoSuchAlgorithmException;
|
import java.security.NoSuchAlgorithmException;
|
||||||
import java.util.ArrayList;
|
import java.util.*;
|
||||||
import java.util.Collections;
|
|
||||||
|
|
||||||
public class AuthIntercepter implements Interceptor {
|
public class AuthIntercepter implements Interceptor {
|
||||||
|
|
||||||
@ -58,6 +59,31 @@ public class AuthIntercepter implements Interceptor {
|
|||||||
public ArrayList<NameValuePair> getOauthParams(Chain chain) {
|
public ArrayList<NameValuePair> getOauthParams(Chain chain) {
|
||||||
ArrayList<NameValuePair> params = new ArrayList<>();
|
ArrayList<NameValuePair> params = new ArrayList<>();
|
||||||
|
|
||||||
|
String request_url = chain.request().url().toString();
|
||||||
|
|
||||||
|
Iterator iterator = getQueryParams(request_url).entrySet().iterator();
|
||||||
|
while (iterator.hasNext()) {
|
||||||
|
Map.Entry pair = (Map.Entry)iterator.next();
|
||||||
|
|
||||||
|
String key = (String) pair.getKey();
|
||||||
|
List<String> values = (List<String>) pair.getValue();
|
||||||
|
String value = "";
|
||||||
|
|
||||||
|
//why there would be multiple values for single key is not so clear to me, will keep this here though
|
||||||
|
if (values.size() == 1){
|
||||||
|
value = values.get(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
params.add(new BasicNameValuePair(key, value));
|
||||||
|
|
||||||
|
iterator.remove();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (request_url.contains("?")){
|
||||||
|
int request_url_end = request_url.indexOf("?");
|
||||||
|
request_url = request_url.substring(0, request_url_end);
|
||||||
|
}
|
||||||
|
|
||||||
oauth_nonce = getOauth_nonce();
|
oauth_nonce = getOauth_nonce();
|
||||||
oauth_timestamp = getOauth_timestamp();
|
oauth_timestamp = getOauth_timestamp();
|
||||||
|
|
||||||
@ -68,7 +94,7 @@ public class AuthIntercepter implements Interceptor {
|
|||||||
|
|
||||||
Collections.sort(params, new AlphabeticSorter());
|
Collections.sort(params, new AlphabeticSorter());
|
||||||
String encodedParams = URLEncodedUtils.format(params, "utf-8");
|
String encodedParams = URLEncodedUtils.format(params, "utf-8");
|
||||||
oauth_signature = getOauth_signature(chain.request().method(), chain.request().url().toString(), consumerSecret, encodedParams );
|
oauth_signature = getOauth_signature(chain.request().method(), request_url, consumerSecret, encodedParams );
|
||||||
|
|
||||||
params.add(new BasicNameValuePair("oauth_signature", oauth_signature));
|
params.add(new BasicNameValuePair("oauth_signature", oauth_signature));
|
||||||
|
|
||||||
@ -115,4 +141,33 @@ public class AuthIntercepter implements Interceptor {
|
|||||||
long stamp = (long) (System.currentTimeMillis() / 1000D);
|
long stamp = (long) (System.currentTimeMillis() / 1000D);
|
||||||
return (new StringBuilder(String.valueOf(stamp))).toString();
|
return (new StringBuilder(String.valueOf(stamp))).toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static Map<String, List<String>> getQueryParams(String url) {
|
||||||
|
try {
|
||||||
|
Map<String, List<String>> params = new HashMap<String, List<String>>();
|
||||||
|
String[] urlParts = url.split("\\?");
|
||||||
|
if (urlParts.length > 1) {
|
||||||
|
String query = urlParts[1];
|
||||||
|
for (String param : query.split("&")) {
|
||||||
|
String[] pair = param.split("=");
|
||||||
|
String key = URLDecoder.decode(pair[0], "UTF-8");
|
||||||
|
String value = "";
|
||||||
|
if (pair.length > 1) {
|
||||||
|
value = URLDecoder.decode(pair[1], "UTF-8");
|
||||||
|
}
|
||||||
|
|
||||||
|
List<String> values = params.get(key);
|
||||||
|
if (values == null) {
|
||||||
|
values = new ArrayList<String>();
|
||||||
|
params.put(key, values);
|
||||||
|
}
|
||||||
|
values.add(value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return params;
|
||||||
|
} catch (UnsupportedEncodingException ex) {
|
||||||
|
throw new AssertionError(ex);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -6,6 +6,7 @@ import retrofit2.Call;
|
|||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
public class ProductRepository extends WooRepository {
|
public class ProductRepository extends WooRepository {
|
||||||
|
|
||||||
@ -29,6 +30,10 @@ public class ProductRepository extends WooRepository {
|
|||||||
return apiService.list();
|
return apiService.list();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Call<List<Product>> filter(Map<String, String> filters) {
|
||||||
|
return apiService.filter(filters);
|
||||||
|
}
|
||||||
|
|
||||||
public Call<Product> update(int id, Product product) {
|
public Call<Product> update(int id, Product product) {
|
||||||
return apiService.update(id, product);
|
return apiService.update(id, product);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -10,7 +10,7 @@ import java.util.concurrent.TimeUnit;
|
|||||||
|
|
||||||
public class WooRepository {
|
public class WooRepository {
|
||||||
|
|
||||||
//TODO Apply DI or single instance on this
|
//TODO ('Apply DI or single instance on this')
|
||||||
public Retrofit retrofit;
|
public Retrofit retrofit;
|
||||||
|
|
||||||
public WooRepository(String baseUrl, String consumerKey, String consumerSecret) {
|
public WooRepository(String baseUrl, String consumerKey, String consumerSecret) {
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user