Updated on 2026-08-14

This commit is contained in:
Tangem 2018-09-16 13:53:14 +03:00
parent 1c7abe647d
commit 5f3ff0f09f
7 changed files with 356 additions and 89 deletions

View file

@ -12,6 +12,7 @@ public class Server {
public static class Method {
public static final String VERIFY = URL_TANGEM + "verify";
public static final String VERIFY_AND_GET_ARTWORK = URL_TANGEM + "verify-and-get-artwork";
public static final String ARTWORK = URL_TANGEM + "artwork";
}
}

View file

@ -194,47 +194,47 @@ public class ServerApiHelper {
* HTTP
* Card verify
*/
private CardVerifyListener cardVerifyListener;
public interface CardVerifyListener {
void onCardVerify(CardVerifyResponse cardVerifyResponse);
}
public void setCardVerify(CardVerifyListener listener) {
cardVerifyListener = listener;
}
public void cardVerify(TangemCard card) {
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(Server.ApiTangem.URL_TANGEM)
.addConverterFactory(GsonConverterFactory.create())
.build();
TangemApi tangemApi = retrofit.create(TangemApi.class);
CardVerify[] requests = new CardVerify[1];
requests[0] = new CardVerify(Util.bytesToHex(card.getCID()), Util.bytesToHex(card.getCardPublicKey()));
CardVerifyBody cardVerifyBody = new CardVerifyBody(requests);
Call<CardVerifyResponse> call = tangemApi.getCardVerify(cardVerifyBody);
call.enqueue(new Callback<CardVerifyResponse>() {
@Override
public void onResponse(@NonNull Call<CardVerifyResponse> call, @NonNull Response<CardVerifyResponse> response) {
if (response.code() == 200) {
CardVerifyResponse cardVerifyResponse = response.body();
cardVerifyListener.onCardVerify(cardVerifyResponse);
Log.i(TAG, "cardVerify onResponse " + response.code());
} else
Log.e(TAG, "cardVerify onResponse " + response.code());
}
@Override
public void onFailure(@NonNull Call<CardVerifyResponse> call, @NonNull Throwable t) {
Log.e(TAG, "cardVerify onFailure " + t.getMessage());
}
});
}
// private CardVerifyListener cardVerifyListener;
//
// public interface CardVerifyListener {
// void onCardVerify(CardVerifyResponse cardVerifyResponse);
// }
//
// public void setCardVerify(CardVerifyListener listener) {
// cardVerifyListener = listener;
// }
//
// public void cardVerify(TangemCard card) {
// Retrofit retrofit = new Retrofit.Builder()
// .baseUrl(Server.ApiTangem.URL_TANGEM)
// .addConverterFactory(GsonConverterFactory.create())
// .build();
//
// TangemApi tangemApi = retrofit.create(TangemApi.class);
//
// CardVerify[] requests = new CardVerify[1];
// requests[0] = new CardVerify(Util.bytesToHex(card.getCID()), Util.bytesToHex(card.getCardPublicKey()));
//
// CardVerifyBody cardVerifyBody = new CardVerifyBody(requests);
//
// Call<CardVerifyResponse> call = tangemApi.getCardVerify(cardVerifyBody);
// call.enqueue(new Callback<CardVerifyResponse>() {
// @Override
// public void onResponse(@NonNull Call<CardVerifyResponse> call, @NonNull Response<CardVerifyResponse> response) {
// if (response.code() == 200) {
// CardVerifyResponse cardVerifyResponse = response.body();
// cardVerifyListener.onCardVerify(cardVerifyResponse);
// Log.i(TAG, "cardVerify onResponse " + response.code());
// } else
// Log.e(TAG, "cardVerify onResponse " + response.code());
// }
//
// @Override
// public void onFailure(@NonNull Call<CardVerifyResponse> call, @NonNull Throwable t) {
// Log.e(TAG, "cardVerify onFailure " + t.getMessage());
// }
// });
// }
/**
@ -259,8 +259,8 @@ public class ServerApiHelper {
TangemApi tangemApi = retrofit.create(TangemApi.class);
List<CardVerifyAndGetArtwork.Request.RequestItem> requests = new ArrayList<>();
requests.add(new CardVerifyAndGetArtwork.Request.RequestItem(Util.bytesToHex(card.getCID()), Util.bytesToHex(card.getCardPublicKey()),null));
List<CardVerifyAndGetArtwork.Request.Item> requests = new ArrayList<>();
requests.add(new CardVerifyAndGetArtwork.Request.Item(Util.bytesToHex(card.getCID()), Util.bytesToHex(card.getCardPublicKey())));
CardVerifyAndGetArtwork.Request requestBody = new CardVerifyAndGetArtwork.Request(requests);
@ -283,6 +283,62 @@ public class ServerApiHelper {
});
}
/**
* HTTP
* Last version request from GitHub
*/
private ArtworkListener artworkListener;
public interface ArtworkListener {
void onArtwork(InputStream inputStream);
}
public void setArtworkListener(ArtworkListener listener) {
artworkListener = listener;
}
public void requestArtwork() {
HttpLoggingInterceptor logging = new HttpLoggingInterceptor();
logging.setLevel(HttpLoggingInterceptor.Level.BODY);
OkHttpClient httpClient = new OkHttpClient.Builder().
addInterceptor(logging).
// addInterceptor(new AuthorizationInterceptor()).
build();
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(Server.ApiUpdateVersion.URL_UPDATE_VERSION)
.addConverterFactory(GsonConverterFactory.create())
.client(httpClient)
.build();
UpdateVersionApi updateVersionApi = retrofit.create(UpdateVersionApi.class);
Call<ResponseBody> call = updateVersionApi.getLastVersion();
call.enqueue(new Callback<ResponseBody>() {
@Override
public void onResponse(@NonNull Call<ResponseBody> call, @NonNull Response<ResponseBody> response) {
Log.i(TAG, "lastVersion onResponse " + response.code());
if (response.code() == 200) {
String stringResponse;
try {
stringResponse = response.body().string();
lastVersionListener.onLastVersion(stringResponse);
} catch (IOException e) {
e.printStackTrace();
}
}
}
@Override
public void onFailure(@NonNull Call<ResponseBody> call, @NonNull Throwable t) {
Log.e(TAG, "lastVersion onFailure " + t.getMessage());
}
});
}
/**
* HTTP

View file

@ -1,7 +1,7 @@
package com.tangem.data.network;
public class ServerURL {
public static final String API_TANGEM = "https://verify.tangem.com/";
public static final String API_TANGEM = "https://tangem-services.appspot.com"; //TODO: "https://verify.tangem.com/";
public static final String API_COINMARKETCAP = "https://api.coinmarketcap.com/";
public static final String API_INFURA = "https://mainnet.infura.io/";
public static final String API_ESTIMATEFEE = " https://estimatefee.com/";

View file

@ -4,10 +4,13 @@ import com.tangem.data.network.model.CardVerifyAndGetArtwork;
import com.tangem.data.network.model.CardVerifyBody;
import com.tangem.data.network.model.CardVerifyResponse;
import okhttp3.ResponseBody;
import retrofit2.Call;
import retrofit2.http.Body;
import retrofit2.http.GET;
import retrofit2.http.Headers;
import retrofit2.http.POST;
import retrofit2.http.Query;
public interface TangemApi {
@Headers("Content-Type: application/json")
@ -18,4 +21,8 @@ public interface TangemApi {
@POST(Server.ApiTangem.Method.VERIFY_AND_GET_ARTWORK)
Call<CardVerifyAndGetArtwork.Response> getCardVerifyAndGetArtwork(@Body CardVerifyAndGetArtwork.Request requestBody);
@GET(Server.ApiTangem.Method.ARTWORK)
Call<ResponseBody> getArtwork(@Query("artworkId") String artworkId, @Query("CID") String CID, @Query("publicKey") String publicKey);
}

View file

@ -1,52 +1,46 @@
package com.tangem.data.network.model
import com.google.gson.annotations.SerializedName
import android.os.Build
import java.text.SimpleDateFormat
import java.time.Instant
import java.time.LocalDateTime
import java.time.ZoneOffset
import java.time.format.DateTimeFormatter
import java.util.*
class CardVerifyAndGetArtwork
{
data class Request(
@SerializedName("requests")
var requests: List<RequestItem>? = null
) {
data class RequestItem(
@SerializedName("CID")
var CID: String = "",
@SerializedName("publicKey")
var publicKey: String = "",
@SerializedName("artwork")
var artwork: String = ""
)
}
data class Response(
@SerializedName("results")
var results: List<ResultItem>? = null
class CardVerifyAndGetArtwork {
data class Request(
var requests: List<Item>? = null
) {
data class ResultItem(
@SerializedName("error")
var error: String = "",
@SerializedName("CID")
data class Item(
var CID: String = "",
@SerializedName("passed")
var passed: Boolean = false,
@SerializedName("artwork")
var artwork: String = "",
@SerializedName("batch")
var batch: String = "",
@SerializedName("update_date")
var update_date: String = ""
var publicKey: String = ""
)
}
data class Response(
var results: List<Item>? = null
) {
data class Item(
var error: String = "",
var CID: String = "",
var passed: Boolean = false,
var batch: String = "",
var artworkId: String = "",
var artworkHash: String = "",
var update_date: String = ""
) {
fun getUpdateDate(): Instant? {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
return LocalDateTime.parse(update_date, DateTimeFormatter.ISO_LOCAL_DATE_TIME).toInstant(ZoneOffset.UTC)
}else{
return SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS", Locale.US).parse(update_date).toInstant()
}
}
}
}
}