Implemented more robust auth interceptor
This commit is contained in:
parent
23e422bdf8
commit
866d25fc4b
@ -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) {
|
||||
|
||||
}
|
||||
})
|
||||
|
||||
@ -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();
|
||||
}
|
||||
|
||||
|
||||
@ -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());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
@ -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);
|
||||
|
||||
}
|
||||
@ -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());
|
||||
}
|
||||
}
|
||||
@ -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();
|
||||
}
|
||||
}
|
||||
@ -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;
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
|
||||
@ -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);
|
||||
|
||||
}
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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;
|
||||
@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user