From 866d25fc4b8ca3469f4b8239d4bbd273862c9241 Mon Sep 17 00:00:00 2001 From: Gilbert Kimutai Date: Thu, 14 Feb 2019 05:43:16 +0300 Subject: [PATCH] Implemented more robust auth interceptor --- .../main/java/me/gilo/wc/ui/ShopActivity.kt | 17 +- .../java/me/gilo/woodroid/Woocommerce.java | 6 +- .../me/gilo/woodroid/data/RestAdapter.java | 274 ------------------ .../me/gilo/woodroid/data/api/ProductAPI.java | 34 ++- .../woodroid/data/auth/AlphabeticSorter.java | 13 + .../woodroid/data/auth/AuthIntercepter.java | 118 ++++++++ .../data/callbacks/CategoriesCallback.java | 3 - .../gilo/woodroid/repo/CouponRepository.java | 2 +- .../woodroid/repo/CustomerRepository.java | 4 +- .../gilo/woodroid/repo/OrderRepository.java | 2 +- .../gilo/woodroid/repo/ProductRepository.java | 42 ++- .../me/gilo/woodroid/repo/WooRepository.java | 22 +- .../repo/order/OrderNoteRepository.java | 2 +- .../woodroid/repo/order/RefundRepository.java | 2 +- .../repo/product/AttributeRepository.java | 4 +- .../repo/product/AttributeTermRepository.java | 4 +- .../repo/product/CategoryRepository.java | 4 +- .../repo/product/ReviewRepository.java | 4 +- .../repo/product/ShippingClassRepository.java | 4 +- .../woodroid/repo/product/TagRepository.java | 4 +- .../repo/product/VariationRepository.java | 4 +- .../{dto => services}/CouponData.java | 3 +- .../woodroid/services/ProductService.java | 42 +++ 23 files changed, 245 insertions(+), 369 deletions(-) create mode 100644 woodroid/src/main/java/me/gilo/woodroid/data/auth/AlphabeticSorter.java create mode 100644 woodroid/src/main/java/me/gilo/woodroid/data/auth/AuthIntercepter.java rename woodroid/src/main/java/me/gilo/woodroid/{dto => services}/CouponData.java (93%) create mode 100644 woodroid/src/main/java/me/gilo/woodroid/services/ProductService.java diff --git a/app/src/main/java/me/gilo/wc/ui/ShopActivity.kt b/app/src/main/java/me/gilo/wc/ui/ShopActivity.kt index e0f8370..5c8eb17 100644 --- a/app/src/main/java/me/gilo/wc/ui/ShopActivity.kt +++ b/app/src/main/java/me/gilo/wc/ui/ShopActivity.kt @@ -1,24 +1,17 @@ package me.gilo.wc.ui import android.os.Bundle -import android.support.design.widget.Snackbar -import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.GridLayoutManager -import android.support.v7.widget.LinearLayoutManager -import kotlinx.android.synthetic.main.activity_main.* -import me.gilo.wc.R - import kotlinx.android.synthetic.main.activity_shop.* -import kotlinx.android.synthetic.main.content_menu.* import kotlinx.android.synthetic.main.content_shop.* -import me.gilo.wc.adapter.MenuAdapter +import me.gilo.wc.R import me.gilo.wc.adapter.ProductAdapter import me.gilo.woodroid.Woocommerce import me.gilo.woodroid.models.Product import retrofit2.Call import retrofit2.Callback import retrofit2.Response -import java.util.ArrayList +import java.util.* class ShopActivity : BaseActivity() { @@ -54,8 +47,8 @@ class ShopActivity : BaseActivity() { .setConsumerSecret("cs_062e8e3a7ae0ce08fdebc0c39f8f834d5e87598e") .build() - woocommerce.products.enqueue(object : Callback> { - override fun onResponse(call: Call>, response: Response>) { + woocommerce.products.enqueue(object : Callback> { + override fun onResponse(call: Call>, response: Response>) { val productsResponse = response.body() for (product in productsResponse!!) { products.add(product) @@ -64,7 +57,7 @@ class ShopActivity : BaseActivity() { adapter.notifyDataSetChanged() } - override fun onFailure(call: Call>, t: Throwable) { + override fun onFailure(call: Call>, t: Throwable) { } }) diff --git a/woodroid/src/main/java/me/gilo/woodroid/Woocommerce.java b/woodroid/src/main/java/me/gilo/woodroid/Woocommerce.java index 1fb3daa..e7a6aea 100644 --- a/woodroid/src/main/java/me/gilo/woodroid/Woocommerce.java +++ b/woodroid/src/main/java/me/gilo/woodroid/Woocommerce.java @@ -1,11 +1,11 @@ package me.gilo.woodroid; -import me.gilo.woodroid.dto.CouponData; import me.gilo.woodroid.models.Product; import me.gilo.woodroid.repo.ProductRepository; +import me.gilo.woodroid.services.CouponData; import retrofit2.Call; -import java.util.ArrayList; +import java.util.List; public class Woocommerce { @@ -68,7 +68,7 @@ public class Woocommerce { } - public Call> getProducts() { + public Call> getProducts() { return productRepository.products(); } diff --git a/woodroid/src/main/java/me/gilo/woodroid/data/RestAdapter.java b/woodroid/src/main/java/me/gilo/woodroid/data/RestAdapter.java index a26c67e..0c66f79 100644 --- a/woodroid/src/main/java/me/gilo/woodroid/data/RestAdapter.java +++ b/woodroid/src/main/java/me/gilo/woodroid/data/RestAdapter.java @@ -1,37 +1,8 @@ package me.gilo.woodroid.data; -import android.util.Base64; - -import me.gilo.woodroid.data.api.API; -import okhttp3.HttpUrl; -import okhttp3.Interceptor; -import okhttp3.OkHttpClient; -import okhttp3.Request; - import org.apache.http.NameValuePair; -import org.apache.http.client.utils.URLEncodedUtils; -import org.apache.http.message.BasicNameValuePair; -import java.io.UnsupportedEncodingException; -import java.net.MalformedURLException; -import java.net.URI; -import java.net.URL; -import java.net.URLEncoder; -import java.security.InvalidKeyException; -import java.security.NoSuchAlgorithmException; import java.util.ArrayList; -import java.util.Collections; -import java.util.Comparator; -import java.util.Iterator; -import java.util.Map; -import java.util.concurrent.TimeUnit; - -import javax.crypto.Mac; -import javax.crypto.spec.SecretKeySpec; - -import okhttp3.logging.HttpLoggingInterceptor; -import retrofit2.Retrofit; -import retrofit2.converter.gson.GsonConverterFactory; public class RestAdapter { @@ -51,252 +22,7 @@ public class RestAdapter { this.consumerSecret = consumerSecret; } - public API createAPI(final String endpoint) { - return createAPI(endpoint, null); - } - - public API createAPI(final String endpoint, Map query) { - - if (query != null) { - setParams(endpoint, query); - }else{ - setParams(endpoint); - } - - // Define the interceptor, add authentication headers - Interceptor interceptor = chain -> { - - HttpUrl.Builder builder = chain.request().url().newBuilder(); - for (NameValuePair entry : params) { - builder.addQueryParameter(entry.getName(), entry.getValue()); - } - - Request newRequest = chain.request() - .newBuilder() - .url(builder.build()) - .header("Accept", "application/json") - .build(); - - return chain.proceed(newRequest); - }; - - HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor(); - loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY); - - OkHttpClient client = new OkHttpClient.Builder() - .addInterceptor(interceptor) - .addInterceptor(loggingInterceptor) - .readTimeout(30, TimeUnit.SECONDS) - .writeTimeout(30, TimeUnit.SECONDS) - .connectTimeout(15, TimeUnit.SECONDS) - .build(); - - Retrofit retrofit = new Retrofit.Builder() - .baseUrl(baseUrl) - //.addCallAdapterFactory(RxJavaCallAdapterFactory.create()) - .addConverterFactory(GsonConverterFactory.create()) - .client(client) - .build(); - - return retrofit.create(API.class); - } - - public API createAPI(Class service, final String endpoint, Map query) { - - if (query != null) { - setParams(endpoint, query); - }else{ - setParams(endpoint); - } - - // Define the interceptor, add authentication headers - Interceptor interceptor = chain -> { - - HttpUrl.Builder builder = chain.request().url().newBuilder(); - for (NameValuePair entry : params) { - builder.addQueryParameter(entry.getName(), entry.getValue()); - } - - Request newRequest = chain.request() - .newBuilder() - .url(builder.build()) - .header("Accept", "application/json") - .build(); - - return chain.proceed(newRequest); - }; - - HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor(); - loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY); - - OkHttpClient client = new OkHttpClient.Builder() - .addInterceptor(interceptor) - .addInterceptor(loggingInterceptor) - .readTimeout(30, TimeUnit.SECONDS) - .writeTimeout(30, TimeUnit.SECONDS) - .connectTimeout(15, TimeUnit.SECONDS) - .build(); - - Retrofit retrofit = new Retrofit.Builder() - .baseUrl(baseUrl) - //.addCallAdapterFactory(RxJavaCallAdapterFactory.create()) - .addConverterFactory(GsonConverterFactory.create()) - .client(client) - .build(); - - return retrofit.create(API.class); - } - - public Interceptor getInterceptor(final String endpoint, Map query) { - - if (query != null) { - setParams(endpoint, query); - }else{ - setParams(endpoint); - } - - // Define the interceptor, add authentication headers - Interceptor interceptor = chain -> { - - chain.request().method(); - - HttpUrl.Builder builder = chain.request().url().newBuilder(); - for (NameValuePair entry : params) { - builder.addQueryParameter(entry.getName(), entry.getValue()); - } - - Request newRequest = chain.request() - .newBuilder() - .url(builder.build()) - .header("Accept", "application/json") - .build(); - - return chain.proceed(newRequest); - }; - return interceptor; - } - public ArrayList setParams(String endpoint) { - final String uri = baseUrl + endpoint; - - URI uri1 = URI.create(baseUrl + endpoint); - String urlString = ""; - try { - URL url = uri1.toURL(); - urlString = url.toString(); - } catch (MalformedURLException e) { - e.printStackTrace(); - } - - oauth_nonce = getOauth_nonce(); - oauth_timestamp = getOauth_timestamp(); - - params = new ArrayList<>(); - params.add(new BasicNameValuePair("oauth_consumer_key", consumerKey)); - params.add(new BasicNameValuePair("oauth_nonce", oauth_nonce)); - params.add(new BasicNameValuePair("oauth_timestamp", oauth_timestamp)); - params.add(new BasicNameValuePair("oauth_signature_method", oauth_signature_method)); - - Collections.sort(params, new SortParams()); - - String encodedParams = URLEncodedUtils.format(params, "utf-8"); - - String string_to_sign = ""; - try { - string_to_sign = (new StringBuilder("GET&")).append(URLEncoder.encode(uri, "utf-8")).append("&").append(URLEncoder.encode(encodedParams, "utf-8")).toString(); - } catch (UnsupportedEncodingException e) { - e.printStackTrace(); - } - - - try { - Mac mac = Mac.getInstance("HMAC-SHA1"); - String secret = consumerSecret + "&"; - - mac.init(new SecretKeySpec(secret.getBytes("utf-8"), "HMAC-SHA1")); - String signature = Base64.encodeToString(mac.doFinal(string_to_sign.getBytes("utf-8")), 0).trim(); - params.add(new BasicNameValuePair("oauth_signature", signature)); - } catch (NoSuchAlgorithmException | InvalidKeyException | UnsupportedEncodingException e) { - e.printStackTrace(); - } - - return params; - } - - public ArrayList setParams(String endpoint, Map query) { - final String uri = baseUrl + endpoint; - - URI uri1 = URI.create(baseUrl + endpoint); - String urlString = ""; - try { - URL url = uri1.toURL(); - urlString = url.toString(); - } catch (MalformedURLException e) { - e.printStackTrace(); - } - - oauth_nonce = getOauth_nonce(); - oauth_timestamp = getOauth_timestamp(); - - params = new ArrayList<>(); - - Iterator it = query.entrySet().iterator(); - while (it.hasNext()) { - Map.Entry pair = (Map.Entry)it.next(); - params.add(new BasicNameValuePair((String) pair.getKey(), (String) pair.getValue())); - - it.remove(); - } - - params.add(new BasicNameValuePair("oauth_consumer_key", consumerKey)); - params.add(new BasicNameValuePair("oauth_nonce", oauth_nonce)); - params.add(new BasicNameValuePair("oauth_timestamp", oauth_timestamp)); - params.add(new BasicNameValuePair("oauth_signature_method", oauth_signature_method)); - - Collections.sort(params, new SortParams()); - - String encodedParams = URLEncodedUtils.format(params, "utf-8"); - - String string_to_sign = ""; - try { - string_to_sign = (new StringBuilder("GET&")).append(URLEncoder.encode(uri, "utf-8")).append("&").append(URLEncoder.encode(encodedParams, "utf-8")).toString(); - } catch (UnsupportedEncodingException e) { - e.printStackTrace(); - } - - - try { - Mac mac = Mac.getInstance("HMAC-SHA1"); - String secret = consumerSecret; - //if (API.WP_API_VERSION.equals("3")) { - secret = consumerSecret + "&"; - //} - mac.init(new SecretKeySpec(secret.getBytes("utf-8"), "HMAC-SHA1")); - String signature = Base64.encodeToString(mac.doFinal(string_to_sign.getBytes("utf-8")), 0).trim(); - params.add(new BasicNameValuePair("oauth_signature", signature)); - } catch (NoSuchAlgorithmException | InvalidKeyException | UnsupportedEncodingException e) { - e.printStackTrace(); - } - - return params; - } - - public static String getOauth_nonce() { - return (new StringBuilder(String.valueOf(Math.random() * 100000000D))).toString(); - } - - public static String getOauth_timestamp() { - long stamp = (long) (System.currentTimeMillis() / 1000D); - return (new StringBuilder(String.valueOf(stamp))).toString(); - } - - static class SortParams implements Comparator { - - @Override - public int compare(NameValuePair nameValuePair1, NameValuePair nameValuePair2) { - return nameValuePair1.getName().compareTo(nameValuePair2.getName()); - } - } } diff --git a/woodroid/src/main/java/me/gilo/woodroid/data/api/ProductAPI.java b/woodroid/src/main/java/me/gilo/woodroid/data/api/ProductAPI.java index d3ae3d9..af1580a 100644 --- a/woodroid/src/main/java/me/gilo/woodroid/data/api/ProductAPI.java +++ b/woodroid/src/main/java/me/gilo/woodroid/data/api/ProductAPI.java @@ -1,14 +1,12 @@ package me.gilo.woodroid.data.api; -import me.gilo.woodroid.data.callbacks.*; -import me.gilo.woodroid.data.callbacks.Data; -import me.gilo.woodroid.models.*; +import me.gilo.woodroid.models.Product; import retrofit2.Call; import retrofit2.http.*; -import rx.Observable; import java.util.ArrayList; +import java.util.List; import java.util.Map; public interface ProductAPI { @@ -27,9 +25,33 @@ public interface ProductAPI { Call> search(@Query("search") String search); @GET("products") - Call> filter(@QueryMap Map filter); + Call> filter(@QueryMap Map filter); @GET("products/count") - Call> getProductsCount(); + Call> getProductsCount(); + + + @Headers("Content-Type: application/json") + @POST("products") + Call create(@Body Product body); + + @GET("products/{id}") + Call view(@Path("id") int id); + + @GET("products") + Call> list(); + + @Headers("Content-Type: application/json") + @PUT("products/{id}") + Call update(@Path("id") int id, @Body Product body); + + @DELETE("products/{id}") + Call delete(@Path("id") int id); + + @DELETE("products/{id}") + Call delete(@Path("id") int id, @Query("force") boolean force); + + @POST("products/batch") + Call batch(@Body Product body); } \ No newline at end of file diff --git a/woodroid/src/main/java/me/gilo/woodroid/data/auth/AlphabeticSorter.java b/woodroid/src/main/java/me/gilo/woodroid/data/auth/AlphabeticSorter.java new file mode 100644 index 0000000..4b08638 --- /dev/null +++ b/woodroid/src/main/java/me/gilo/woodroid/data/auth/AlphabeticSorter.java @@ -0,0 +1,13 @@ +package me.gilo.woodroid.data.auth; + +import org.apache.http.NameValuePair; + +import java.util.Comparator; + +public class AlphabeticSorter implements Comparator { + + @Override + public int compare(NameValuePair nameValuePair1, NameValuePair nameValuePair2) { + return nameValuePair1.getName().compareTo(nameValuePair2.getName()); + } +} \ No newline at end of file diff --git a/woodroid/src/main/java/me/gilo/woodroid/data/auth/AuthIntercepter.java b/woodroid/src/main/java/me/gilo/woodroid/data/auth/AuthIntercepter.java new file mode 100644 index 0000000..9d617f4 --- /dev/null +++ b/woodroid/src/main/java/me/gilo/woodroid/data/auth/AuthIntercepter.java @@ -0,0 +1,118 @@ +package me.gilo.woodroid.data.auth; + +import android.util.Base64; +import okhttp3.HttpUrl; +import okhttp3.Interceptor; +import okhttp3.Request; +import okhttp3.Response; +import org.apache.http.NameValuePair; +import org.apache.http.client.utils.URLEncodedUtils; +import org.apache.http.message.BasicNameValuePair; + +import javax.crypto.Mac; +import javax.crypto.spec.SecretKeySpec; +import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.net.URLEncoder; +import java.security.InvalidKeyException; +import java.security.NoSuchAlgorithmException; +import java.util.ArrayList; +import java.util.Collections; + +public class AuthIntercepter implements Interceptor { + + + static String oauth_nonce = ""; + static String oauth_timestamp = ""; + static String oauth_signature_method = "HMAC-SHA1"; + private String oauth_signature = ""; + + private String consumerKey; + private String consumerSecret; + + + public AuthIntercepter(String consumerKey, String consumerSecret) { + this.consumerKey = consumerKey; + this.consumerSecret = consumerSecret; + } + + + @Override + public Response intercept(Chain chain) throws IOException { + ArrayList params = getOauthParams(chain); + + HttpUrl.Builder builder = chain.request().url().newBuilder(); + for (NameValuePair entry : params) { + builder.addQueryParameter(entry.getName(), entry.getValue()); + } + + Request newRequest = chain.request() + .newBuilder() + .url(builder.build()) + .header("Accept", "application/json") + .build(); + + return chain.proceed(newRequest); + } + + public ArrayList getOauthParams(Chain chain) { + ArrayList params = new ArrayList<>(); + + oauth_nonce = getOauth_nonce(); + oauth_timestamp = getOauth_timestamp(); + + params.add(new BasicNameValuePair("oauth_consumer_key", consumerKey)); + params.add(new BasicNameValuePair("oauth_nonce", oauth_nonce)); + params.add(new BasicNameValuePair("oauth_timestamp", oauth_timestamp)); + params.add(new BasicNameValuePair("oauth_signature_method", oauth_signature_method)); + + Collections.sort(params, new AlphabeticSorter()); + String encodedParams = URLEncodedUtils.format(params, "utf-8"); + oauth_signature = getOauth_signature(chain.request().method(), chain.request().url().toString(), consumerSecret, encodedParams ); + + params.add(new BasicNameValuePair("oauth_signature", oauth_signature)); + + return params; + } + + public String getOauth_nonce() { + return (new StringBuilder(String.valueOf(Math.random() * 100000000D))).toString(); + } + + public String getStringToSign(String method, String url, String parameters) { + String string_to_sign = ""; + try { + string_to_sign = (new StringBuilder(method + "&")) + .append(URLEncoder.encode(url, "utf-8")).append("&") + .append(URLEncoder.encode(parameters, "utf-8")) + .toString(); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + + return string_to_sign; + } + + + public String getOauth_signature(String method, String url, String consumerSecret, String parameters) { + String signature = ""; + String string_to_sign = getStringToSign(method, url, parameters); + + try { + Mac mac = Mac.getInstance(oauth_signature_method); + String secret = consumerSecret + "&"; + mac.init(new SecretKeySpec(secret.getBytes("utf-8"), oauth_signature_method)); + signature = Base64.encodeToString(mac.doFinal(string_to_sign.getBytes("utf-8")), 0).trim(); + } catch (NoSuchAlgorithmException | InvalidKeyException | UnsupportedEncodingException e) { + e.printStackTrace(); + } + + return signature; + } + + + public String getOauth_timestamp() { + long stamp = (long) (System.currentTimeMillis() / 1000D); + return (new StringBuilder(String.valueOf(stamp))).toString(); + } +} diff --git a/woodroid/src/main/java/me/gilo/woodroid/data/callbacks/CategoriesCallback.java b/woodroid/src/main/java/me/gilo/woodroid/data/callbacks/CategoriesCallback.java index 6cc6dfa..eb87c28 100644 --- a/woodroid/src/main/java/me/gilo/woodroid/data/callbacks/CategoriesCallback.java +++ b/woodroid/src/main/java/me/gilo/woodroid/data/callbacks/CategoriesCallback.java @@ -8,9 +8,6 @@ import me.gilo.woodroid.models.Category; import java.util.ArrayList; -/** - * Created by Aron on 12/8/2015. - */ public class CategoriesCallback { @SerializedName("product_categories") ArrayList categories; diff --git a/woodroid/src/main/java/me/gilo/woodroid/repo/CouponRepository.java b/woodroid/src/main/java/me/gilo/woodroid/repo/CouponRepository.java index 0594018..874618a 100644 --- a/woodroid/src/main/java/me/gilo/woodroid/repo/CouponRepository.java +++ b/woodroid/src/main/java/me/gilo/woodroid/repo/CouponRepository.java @@ -11,7 +11,7 @@ public class CouponRepository extends WooRepository{ private final CouponAPI apiService; public CouponRepository(String baseUrl, String consumerKey, String consumerSecret) { - super("coupon", baseUrl, consumerKey, consumerSecret); + super( baseUrl, consumerKey, consumerSecret); apiService = retrofit.create(CouponAPI.class); } diff --git a/woodroid/src/main/java/me/gilo/woodroid/repo/CustomerRepository.java b/woodroid/src/main/java/me/gilo/woodroid/repo/CustomerRepository.java index afddf76..1d8606a 100644 --- a/woodroid/src/main/java/me/gilo/woodroid/repo/CustomerRepository.java +++ b/woodroid/src/main/java/me/gilo/woodroid/repo/CustomerRepository.java @@ -1,9 +1,7 @@ package me.gilo.woodroid.repo; import me.gilo.woodroid.data.api.CustomerAPI; -import me.gilo.woodroid.data.api.OrderAPI; import me.gilo.woodroid.models.Customer; -import me.gilo.woodroid.models.Order; import retrofit2.Call; import java.util.List; @@ -13,7 +11,7 @@ public class CustomerRepository extends WooRepository{ private final CustomerAPI apiService; public CustomerRepository(String baseUrl, String consumerKey, String consumerSecret) { - super("customers", baseUrl, consumerKey, consumerSecret); + super(baseUrl, consumerKey, consumerSecret); apiService = retrofit.create(CustomerAPI.class); } diff --git a/woodroid/src/main/java/me/gilo/woodroid/repo/OrderRepository.java b/woodroid/src/main/java/me/gilo/woodroid/repo/OrderRepository.java index 2474feb..3a63ced 100644 --- a/woodroid/src/main/java/me/gilo/woodroid/repo/OrderRepository.java +++ b/woodroid/src/main/java/me/gilo/woodroid/repo/OrderRepository.java @@ -17,7 +17,7 @@ public class OrderRepository extends WooRepository { RefundRepository refundRepository; public OrderRepository(String baseUrl, String consumerKey, String consumerSecret) { - super("orders", baseUrl, consumerKey, consumerSecret); + super(baseUrl, consumerKey, consumerSecret); apiService = retrofit.create(OrderAPI.class); orderNoteRepository = new OrderNoteRepository(baseUrl, consumerKey, consumerSecret); diff --git a/woodroid/src/main/java/me/gilo/woodroid/repo/ProductRepository.java b/woodroid/src/main/java/me/gilo/woodroid/repo/ProductRepository.java index 45c4f69..2838efb 100644 --- a/woodroid/src/main/java/me/gilo/woodroid/repo/ProductRepository.java +++ b/woodroid/src/main/java/me/gilo/woodroid/repo/ProductRepository.java @@ -1,53 +1,49 @@ package me.gilo.woodroid.repo; -import me.gilo.woodroid.data.api.API; import me.gilo.woodroid.data.api.ProductAPI; -import me.gilo.woodroid.data.api.ProductCategoryAPI; import me.gilo.woodroid.models.Product; -import me.gilo.woodroid.repo.WooRepository; import retrofit2.Call; -import java.util.ArrayList; import java.util.HashMap; +import java.util.List; public class ProductRepository extends WooRepository { private final ProductAPI apiService; public ProductRepository(String baseUrl, String consumerKey, String consumerSecret) { - super("products", baseUrl, consumerKey, consumerSecret); + super(baseUrl, consumerKey, consumerSecret); apiService = retrofit.create(ProductAPI.class); } - //TODO - public void create(Product product) { - + public Call create(Product product) { + return apiService.create(product); } - //TODO - public void update() { + public Call product(int id) { + return apiService.view(id); } - //TODO - public void delete() { - + public Call> products() { + return apiService.list(); } - public Call> products() { - API apiService = restAdapter.createAPI("products"); - return apiService.getProducts(); - + public Call update(int id, Product product) { + return apiService.update(id, product); } - public Call> products(HashMap filters) { - API apiService = restAdapter.createAPI("products", filters); + public Call delete(int id) { + return apiService.delete(id); + } + + public Call delete(int id, boolean force) { + return apiService.delete(id, force); + } + + public Call> products(HashMap filters) { return apiService.filter(filters); } - - - - } diff --git a/woodroid/src/main/java/me/gilo/woodroid/repo/WooRepository.java b/woodroid/src/main/java/me/gilo/woodroid/repo/WooRepository.java index df35986..c276dba 100644 --- a/woodroid/src/main/java/me/gilo/woodroid/repo/WooRepository.java +++ b/woodroid/src/main/java/me/gilo/woodroid/repo/WooRepository.java @@ -1,38 +1,24 @@ package me.gilo.woodroid.repo; -import me.gilo.woodroid.data.RestAdapter; -import me.gilo.woodroid.data.api.CouponAPI; -import me.gilo.woodroid.models.Coupon; +import me.gilo.woodroid.data.auth.AuthIntercepter; import okhttp3.OkHttpClient; import okhttp3.logging.HttpLoggingInterceptor; -import retrofit2.Call; import retrofit2.Retrofit; import retrofit2.converter.gson.GsonConverterFactory; -import java.util.List; import java.util.concurrent.TimeUnit; public class WooRepository { - private String baseUrl; - private String consumerKey; - private String consumerSecret; - - public RestAdapter restAdapter; + //TODO Apply DI or single instance on this public Retrofit retrofit; - public WooRepository(String method, String baseUrl, String consumerKey, String consumerSecret) { - this.baseUrl = baseUrl; - this.consumerKey = consumerKey; - this.consumerSecret = consumerSecret; - + public WooRepository(String baseUrl, String consumerKey, String consumerSecret) { HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor(); loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY); - restAdapter = new RestAdapter(baseUrl, consumerKey, consumerSecret); - OkHttpClient client = new OkHttpClient.Builder() - .addInterceptor(restAdapter.getInterceptor(method, null)) + .addInterceptor(new AuthIntercepter(consumerKey, consumerSecret)) .addInterceptor(loggingInterceptor) .readTimeout(30, TimeUnit.SECONDS) .writeTimeout(30, TimeUnit.SECONDS) diff --git a/woodroid/src/main/java/me/gilo/woodroid/repo/order/OrderNoteRepository.java b/woodroid/src/main/java/me/gilo/woodroid/repo/order/OrderNoteRepository.java index b657810..475e293 100644 --- a/woodroid/src/main/java/me/gilo/woodroid/repo/order/OrderNoteRepository.java +++ b/woodroid/src/main/java/me/gilo/woodroid/repo/order/OrderNoteRepository.java @@ -13,7 +13,7 @@ public class OrderNoteRepository extends WooRepository { private final OrderNoteAPI apiService; public OrderNoteRepository(String baseUrl, String consumerKey, String consumerSecret) { - super("orders", baseUrl, consumerKey, consumerSecret); + super(baseUrl, consumerKey, consumerSecret); apiService = retrofit.create(OrderNoteAPI.class); } diff --git a/woodroid/src/main/java/me/gilo/woodroid/repo/order/RefundRepository.java b/woodroid/src/main/java/me/gilo/woodroid/repo/order/RefundRepository.java index 587f19c..a4dff90 100644 --- a/woodroid/src/main/java/me/gilo/woodroid/repo/order/RefundRepository.java +++ b/woodroid/src/main/java/me/gilo/woodroid/repo/order/RefundRepository.java @@ -13,7 +13,7 @@ public class RefundRepository extends WooRepository { private final RefundAPI apiService; public RefundRepository(String baseUrl, String consumerKey, String consumerSecret) { - super("orders", baseUrl, consumerKey, consumerSecret); + super(baseUrl, consumerKey, consumerSecret); apiService = retrofit.create(RefundAPI.class); } diff --git a/woodroid/src/main/java/me/gilo/woodroid/repo/product/AttributeRepository.java b/woodroid/src/main/java/me/gilo/woodroid/repo/product/AttributeRepository.java index cb32ee8..6f59c1e 100644 --- a/woodroid/src/main/java/me/gilo/woodroid/repo/product/AttributeRepository.java +++ b/woodroid/src/main/java/me/gilo/woodroid/repo/product/AttributeRepository.java @@ -1,9 +1,7 @@ package me.gilo.woodroid.repo.product; import me.gilo.woodroid.data.api.ProductAttributeAPI; -import me.gilo.woodroid.data.api.ProductCategoryAPI; import me.gilo.woodroid.models.Attribute; -import me.gilo.woodroid.models.Category; import me.gilo.woodroid.repo.WooRepository; import retrofit2.Call; @@ -14,7 +12,7 @@ public class AttributeRepository extends WooRepository { private final ProductAttributeAPI apiService; public AttributeRepository(String baseUrl, String consumerKey, String consumerSecret) { - super("products/attributes", baseUrl, consumerKey, consumerSecret); + super(baseUrl, consumerKey, consumerSecret); apiService = retrofit.create(ProductAttributeAPI.class); } diff --git a/woodroid/src/main/java/me/gilo/woodroid/repo/product/AttributeTermRepository.java b/woodroid/src/main/java/me/gilo/woodroid/repo/product/AttributeTermRepository.java index 1417ac9..fdb3a6f 100644 --- a/woodroid/src/main/java/me/gilo/woodroid/repo/product/AttributeTermRepository.java +++ b/woodroid/src/main/java/me/gilo/woodroid/repo/product/AttributeTermRepository.java @@ -1,10 +1,8 @@ package me.gilo.woodroid.repo.product; import me.gilo.woodroid.data.api.ProductAttributeTermAPI; -import me.gilo.woodroid.data.api.ProductCategoryAPI; import me.gilo.woodroid.models.Attribute; import me.gilo.woodroid.models.AttributeTerm; -import me.gilo.woodroid.models.Category; import me.gilo.woodroid.repo.WooRepository; import retrofit2.Call; @@ -17,7 +15,7 @@ public class AttributeTermRepository extends WooRepository { Attribute attribute; public AttributeTermRepository(String baseUrl, String consumerKey, String consumerSecret, Attribute attribute) { - super("products/categories", baseUrl, consumerKey, consumerSecret); + super(baseUrl, consumerKey, consumerSecret); apiService = retrofit.create(ProductAttributeTermAPI.class); this.attribute = attribute; diff --git a/woodroid/src/main/java/me/gilo/woodroid/repo/product/CategoryRepository.java b/woodroid/src/main/java/me/gilo/woodroid/repo/product/CategoryRepository.java index 795c9dc..479d1e0 100644 --- a/woodroid/src/main/java/me/gilo/woodroid/repo/product/CategoryRepository.java +++ b/woodroid/src/main/java/me/gilo/woodroid/repo/product/CategoryRepository.java @@ -1,9 +1,7 @@ package me.gilo.woodroid.repo.product; -import me.gilo.woodroid.data.api.CustomerAPI; import me.gilo.woodroid.data.api.ProductCategoryAPI; import me.gilo.woodroid.models.Category; -import me.gilo.woodroid.models.Customer; import me.gilo.woodroid.repo.WooRepository; import retrofit2.Call; @@ -14,7 +12,7 @@ public class CategoryRepository extends WooRepository { private final ProductCategoryAPI apiService; public CategoryRepository(String baseUrl, String consumerKey, String consumerSecret) { - super("products/categories", baseUrl, consumerKey, consumerSecret); + super(baseUrl, consumerKey, consumerSecret); apiService = retrofit.create(ProductCategoryAPI.class); } diff --git a/woodroid/src/main/java/me/gilo/woodroid/repo/product/ReviewRepository.java b/woodroid/src/main/java/me/gilo/woodroid/repo/product/ReviewRepository.java index 4f957a8..00aa1a9 100644 --- a/woodroid/src/main/java/me/gilo/woodroid/repo/product/ReviewRepository.java +++ b/woodroid/src/main/java/me/gilo/woodroid/repo/product/ReviewRepository.java @@ -1,8 +1,6 @@ package me.gilo.woodroid.repo.product; -import me.gilo.woodroid.data.api.ProductCategoryAPI; import me.gilo.woodroid.data.api.ProductReviewAPI; -import me.gilo.woodroid.models.Category; import me.gilo.woodroid.models.ProductReview; import me.gilo.woodroid.repo.WooRepository; import retrofit2.Call; @@ -14,7 +12,7 @@ public class ReviewRepository extends WooRepository { private final ProductReviewAPI apiService; public ReviewRepository(String baseUrl, String consumerKey, String consumerSecret) { - super("products/reviews", baseUrl, consumerKey, consumerSecret); + super(baseUrl, consumerKey, consumerSecret); apiService = retrofit.create(ProductReviewAPI.class); } diff --git a/woodroid/src/main/java/me/gilo/woodroid/repo/product/ShippingClassRepository.java b/woodroid/src/main/java/me/gilo/woodroid/repo/product/ShippingClassRepository.java index ca2e4a4..c39582a 100644 --- a/woodroid/src/main/java/me/gilo/woodroid/repo/product/ShippingClassRepository.java +++ b/woodroid/src/main/java/me/gilo/woodroid/repo/product/ShippingClassRepository.java @@ -1,8 +1,6 @@ package me.gilo.woodroid.repo.product; -import me.gilo.woodroid.data.api.ProductCategoryAPI; import me.gilo.woodroid.data.api.ShippingClassAPI; -import me.gilo.woodroid.models.Category; import me.gilo.woodroid.models.ShippingClass; import me.gilo.woodroid.repo.WooRepository; import retrofit2.Call; @@ -14,7 +12,7 @@ public class ShippingClassRepository extends WooRepository { private final ShippingClassAPI apiService; public ShippingClassRepository(String baseUrl, String consumerKey, String consumerSecret) { - super("products/categories", baseUrl, consumerKey, consumerSecret); + super(baseUrl, consumerKey, consumerSecret); apiService = retrofit.create(ShippingClassAPI.class); } diff --git a/woodroid/src/main/java/me/gilo/woodroid/repo/product/TagRepository.java b/woodroid/src/main/java/me/gilo/woodroid/repo/product/TagRepository.java index 8bdb528..004d95d 100644 --- a/woodroid/src/main/java/me/gilo/woodroid/repo/product/TagRepository.java +++ b/woodroid/src/main/java/me/gilo/woodroid/repo/product/TagRepository.java @@ -1,8 +1,6 @@ package me.gilo.woodroid.repo.product; -import me.gilo.woodroid.data.api.ProductCategoryAPI; import me.gilo.woodroid.data.api.ProductTagAPI; -import me.gilo.woodroid.models.Category; import me.gilo.woodroid.models.Tag; import me.gilo.woodroid.repo.WooRepository; import retrofit2.Call; @@ -14,7 +12,7 @@ public class TagRepository extends WooRepository { private final ProductTagAPI apiService; public TagRepository(String baseUrl, String consumerKey, String consumerSecret) { - super("products/categories", baseUrl, consumerKey, consumerSecret); + super( baseUrl, consumerKey, consumerSecret); apiService = retrofit.create(ProductTagAPI.class); } diff --git a/woodroid/src/main/java/me/gilo/woodroid/repo/product/VariationRepository.java b/woodroid/src/main/java/me/gilo/woodroid/repo/product/VariationRepository.java index 6dad60f..b429277 100644 --- a/woodroid/src/main/java/me/gilo/woodroid/repo/product/VariationRepository.java +++ b/woodroid/src/main/java/me/gilo/woodroid/repo/product/VariationRepository.java @@ -1,8 +1,6 @@ package me.gilo.woodroid.repo.product; -import me.gilo.woodroid.data.api.ProductCategoryAPI; import me.gilo.woodroid.data.api.ProductVariationAPI; -import me.gilo.woodroid.models.Category; import me.gilo.woodroid.models.Product; import me.gilo.woodroid.models.Variation; import me.gilo.woodroid.repo.WooRepository; @@ -16,7 +14,7 @@ public class VariationRepository extends WooRepository { Product product; public VariationRepository(String baseUrl, String consumerKey, String consumerSecret, Product product) { - super("products/categories", baseUrl, consumerKey, consumerSecret); + super(baseUrl, consumerKey, consumerSecret); apiService = retrofit.create(ProductVariationAPI.class); this.product = product; diff --git a/woodroid/src/main/java/me/gilo/woodroid/dto/CouponData.java b/woodroid/src/main/java/me/gilo/woodroid/services/CouponData.java similarity index 93% rename from woodroid/src/main/java/me/gilo/woodroid/dto/CouponData.java rename to woodroid/src/main/java/me/gilo/woodroid/services/CouponData.java index d6de32b..ab1bcfd 100644 --- a/woodroid/src/main/java/me/gilo/woodroid/dto/CouponData.java +++ b/woodroid/src/main/java/me/gilo/woodroid/services/CouponData.java @@ -1,6 +1,5 @@ -package me.gilo.woodroid.dto; +package me.gilo.woodroid.services; -import me.gilo.woodroid.data.RestAdapter; import me.gilo.woodroid.models.Coupon; import me.gilo.woodroid.repo.CouponRepository; import retrofit2.Call; diff --git a/woodroid/src/main/java/me/gilo/woodroid/services/ProductService.java b/woodroid/src/main/java/me/gilo/woodroid/services/ProductService.java new file mode 100644 index 0000000..612776f --- /dev/null +++ b/woodroid/src/main/java/me/gilo/woodroid/services/ProductService.java @@ -0,0 +1,42 @@ +package me.gilo.woodroid.services; + +import me.gilo.woodroid.models.Product; +import me.gilo.woodroid.repo.ProductRepository; +import retrofit2.Call; + +import java.util.List; + +public class ProductService { + + final ProductRepository productRepository; + + public ProductService(String baseUrl, String consumerKey, String consumerSecret) { + productRepository = new ProductRepository(baseUrl, consumerKey, consumerSecret); + } + + public Call create(Product product) { + return productRepository.create(product); + } + + + public Call product(int id) { + return productRepository.product(id); + } + + public Call> products() { + return productRepository.products(); + } + + public Call update(int id, Product product) { + return productRepository.update(id, product); + } + + public Call delete(int id) { + return productRepository.delete(id); + } + + public Call delete(int id, boolean force) { + return productRepository.delete(id, force); + } + +}