Implemented more robust auth interceptor

This commit is contained in:
Gilbert Kimutai 2019-02-14 05:43:16 +03:00
parent 23e422bdf8
commit 866d25fc4b
23 changed files with 245 additions and 369 deletions

View File

@ -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<ArrayList<Product>> {
override fun onResponse(call: Call<ArrayList<Product>>, response: Response<ArrayList<Product>>) {
woocommerce.products.enqueue(object : Callback<List<Product>> {
override fun onResponse(call: Call<List<Product>>, response: Response<List<Product>>) {
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<ArrayList<Product>>, t: Throwable) {
override fun onFailure(call: Call<List<Product>>, t: Throwable) {
}
})

View File

@ -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<ArrayList<Product>> getProducts() {
public Call<List<Product>> getProducts() {
return productRepository.products();
}

View File

@ -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<String, String> 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<API> service, final String endpoint, Map<String, String> 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<String, String> 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<NameValuePair> 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<NameValuePair> setParams(String endpoint, Map<String, String> 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<NameValuePair> {
@Override
public int compare(NameValuePair nameValuePair1, NameValuePair nameValuePair2) {
return nameValuePair1.getName().compareTo(nameValuePair2.getName());
}
}
}

View File

@ -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<ArrayList<Product>> search(@Query("search") String search);
@GET("products")
Call<ArrayList<Product>> filter(@QueryMap Map<String, String> filter);
Call<List<Product>> filter(@QueryMap Map<String, String> filter);
@GET("products/count")
Call<ArrayList<Product>> getProductsCount();
Call<List<Product>> getProductsCount();
@Headers("Content-Type: application/json")
@POST("products")
Call<Product> create(@Body Product body);
@GET("products/{id}")
Call<Product> view(@Path("id") int id);
@GET("products")
Call<List<Product>> list();
@Headers("Content-Type: application/json")
@PUT("products/{id}")
Call<Product> update(@Path("id") int id, @Body Product body);
@DELETE("products/{id}")
Call<Product> delete(@Path("id") int id);
@DELETE("products/{id}")
Call<Product> delete(@Path("id") int id, @Query("force") boolean force);
@POST("products/batch")
Call<String> batch(@Body Product body);
}

View File

@ -0,0 +1,13 @@
package me.gilo.woodroid.data.auth;
import org.apache.http.NameValuePair;
import java.util.Comparator;
public class AlphabeticSorter implements Comparator<NameValuePair> {
@Override
public int compare(NameValuePair nameValuePair1, NameValuePair nameValuePair2) {
return nameValuePair1.getName().compareTo(nameValuePair2.getName());
}
}

View File

@ -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<NameValuePair> 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<NameValuePair> getOauthParams(Chain chain) {
ArrayList<NameValuePair> 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();
}
}

View File

@ -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<Category> categories;

View File

@ -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);
}

View File

@ -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);
}

View File

@ -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);

View File

@ -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<Product> create(Product product) {
return apiService.create(product);
}
//TODO
public void update() {
public Call<Product> product(int id) {
return apiService.view(id);
}
//TODO
public void delete() {
public Call<List<Product>> products() {
return apiService.list();
}
public Call<ArrayList<Product>> products() {
API apiService = restAdapter.createAPI("products");
return apiService.getProducts();
public Call<Product> update(int id, Product product) {
return apiService.update(id, product);
}
public Call<ArrayList<Product>> products(HashMap<String, String> filters) {
API apiService = restAdapter.createAPI("products", filters);
public Call<Product> delete(int id) {
return apiService.delete(id);
}
public Call<Product> delete(int id, boolean force) {
return apiService.delete(id, force);
}
public Call<List<Product>> products(HashMap<String, String> filters) {
return apiService.filter(filters);
}
}

View File

@ -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)

View File

@ -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);
}

View File

@ -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);
}

View File

@ -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);
}

View File

@ -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;

View File

@ -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);
}

View File

@ -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);
}

View File

@ -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);
}

View File

@ -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);
}

View File

@ -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;

View File

@ -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;

View File

@ -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<Product> create(Product product) {
return productRepository.create(product);
}
public Call<Product> product(int id) {
return productRepository.product(id);
}
public Call<List<Product>> products() {
return productRepository.products();
}
public Call<Product> update(int id, Product product) {
return productRepository.update(id, product);
}
public Call<Product> delete(int id) {
return productRepository.delete(id);
}
public Call<Product> delete(int id, boolean force) {
return productRepository.delete(id, force);
}
}