Removed Coinkite.com, and Blockchain.info wallets support,

This commit is contained in:
b00lean 2016-06-08 09:30:41 +02:00
parent d9e2eb63c8
commit 8870666b0e
6 changed files with 0 additions and 608 deletions

View File

@ -26,7 +26,6 @@ import com.generalbytes.batm.server.extensions.extra.bitcoin.sources.BitcoinAver
import com.generalbytes.batm.server.extensions.extra.bitcoin.sources.FixPriceRateSource;
import com.generalbytes.batm.server.extensions.extra.bitcoin.wallets.bitcoind.BATMBitcoindRPCWallet;
import com.generalbytes.batm.server.extensions.extra.bitcoin.wallets.bitcore.BitcoreWallet;
import com.generalbytes.batm.server.extensions.extra.bitcoin.wallets.coinkite.CoinkiteWallet;
import com.generalbytes.batm.server.extensions.watchlist.IWatchList;
import java.math.BigDecimal;
@ -107,14 +106,6 @@ public class BitcoinExtension implements IExtension{
String rpcURL = protocol +"://" + username +":" + password + "@" + hostname +":" + port;
return new BATMBitcoindRPCWallet(rpcURL,accountName);
}
}else if ("coinkite".equalsIgnoreCase(walletType)) {
String apikey = st.nextToken();
String apiSecret = st.nextToken();
String accountNumber ="0";
if (st.hasMoreTokens()) {
accountNumber = st.nextToken();
}
return new CoinkiteWallet(apikey,apiSecret,accountNumber);
}else if ("bitcore".equalsIgnoreCase(walletType)) { //bitcore:apiKey:proxyUrl
String apiKey = st.nextToken();
// the next token is a URL, so we can't use : as a delimiter

View File

@ -1,92 +0,0 @@
/*************************************************************************************
* Copyright (C) 2014-2016 GENERAL BYTES s.r.o. All rights reserved.
*
* This software may be distributed and modified under the terms of the GNU
* General Public License version 2 (GPL2) as published by the Free Software
* Foundation and appearing in the file GPL2.TXT included in the packaging of
* this file. Please note that GPL2 Section 2[b] requires that all works based
* on this software must also be made publicly available under the terms of
* the GPL2 ("Copyleft").
*
* Contact information
* -------------------
*
* GENERAL BYTES s.r.o.
* Web : http://www.generalbytes.com
*
************************************************************************************/
package com.generalbytes.batm.server.extensions.extra.bitcoin.wallets.coinkite;
public class AccountResponse {
private Account account;
public Account getAccount() {
return account;
}
public void setAccount(Account account) {
this.account = account;
}
public class Account {
private String CK_acct_type;
private String CK_refnum;
private String CK_type;
private String coin_type;
private String created_at;
private String name;
private String quick_deposit;
private Balance balance;
public String getCK_acct_type() {
return CK_acct_type;
}
public String getCK_refnum() {
return CK_refnum;
}
public String getCK_type() {
return CK_type;
}
public String getCoin_type() {
return coin_type;
}
public String getCreated_at() {
return created_at;
}
public String getName() {
return name;
}
public String getQuick_deposit() {
return quick_deposit;
}
public Balance getBalance() {
return balance;
}
public class Balance {
private String currency;
private String string;
public String getCurrency() {
return currency;
}
public String getString() {
return string;
}
}
}
}

View File

@ -1,78 +0,0 @@
/*************************************************************************************
* Copyright (C) 2014-2016 GENERAL BYTES s.r.o. All rights reserved.
*
* This software may be distributed and modified under the terms of the GNU
* General Public License version 2 (GPL2) as published by the Free Software
* Foundation and appearing in the file GPL2.TXT included in the packaging of
* this file. Please note that GPL2 Section 2[b] requires that all works based
* on this software must also be made publicly available under the terms of
* the GPL2 ("Copyleft").
*
* Contact information
* -------------------
*
* GENERAL BYTES s.r.o.
* Web : http://www.generalbytes.com
*
************************************************************************************/
package com.generalbytes.batm.server.extensions.extra.bitcoin.wallets.coinkite;
public class CoinkiteSendRequest {
private String memo;
private String amount;
private String account;
private String dest;
private String public_msg;
public CoinkiteSendRequest() {
}
public CoinkiteSendRequest(String memo, String amount, String accountId, String dest, String public_msg) {
this.memo = memo;
this.amount = amount;
this.account = accountId;
this.dest = dest;
this.public_msg = public_msg;
}
public String getMemo() {
return memo;
}
public void setMemo(String memo) {
this.memo = memo;
}
public String getAmount() {
return amount;
}
public void setAmount(String amount) {
this.amount = amount;
}
public String getAccount() {
return account;
}
public void setAccount(String account) {
this.account = account;
}
public String getDest() {
return dest;
}
public void setDest(String dest) {
this.dest = dest;
}
public String getPublic_msg() {
return public_msg;
}
public void setPublic_msg(String public_msg) {
this.public_msg = public_msg;
}
}

View File

@ -1,171 +0,0 @@
/*************************************************************************************
* Copyright (C) 2014-2016 GENERAL BYTES s.r.o. All rights reserved.
*
* This software may be distributed and modified under the terms of the GNU
* General Public License version 2 (GPL2) as published by the Free Software
* Foundation and appearing in the file GPL2.TXT included in the packaging of
* this file. Please note that GPL2 Section 2[b] requires that all works based
* on this software must also be made publicly available under the terms of
* the GPL2 ("Copyleft").
*
* Contact information
* -------------------
*
* GENERAL BYTES s.r.o.
* Web : http://www.generalbytes.com
*
************************************************************************************/
package com.generalbytes.batm.server.extensions.extra.bitcoin.wallets.coinkite;
import com.fasterxml.jackson.annotation.JsonProperty;
public class CoinkiteSendResponse {
private SendArguments args;
private String next_step;
private Result result;
public String getNext_step() {
return next_step;
}
public void setNext_step(String next_step) {
this.next_step = next_step;
}
public Result getResult() {
return result;
}
public void setResult(Result result) {
this.result = result;
}
public SendArguments getArgs() {
return args;
}
public void setArgs(SendArguments args) {
this.args = args;
}
public class SendArguments {
}
public class Result {
@JsonProperty("CK_refnum")
private String CK_refnum;
@JsonProperty("CK_req_type")
private String CK_req_type;
private String account;
private String coin_type;
private String created_at;
private String desc;
private String destination;
private String detail_page;
private boolean include_pin;
private boolean is_completed;
private String memo;
private String send_authcode;
public String getCK_refnum() {
return CK_refnum;
}
public void setCK_refnum(String CK_refnum) {
this.CK_refnum = CK_refnum;
}
public String getCK_req_type() {
return CK_req_type;
}
public void setCK_req_type(String CK_req_type) {
this.CK_req_type = CK_req_type;
}
public String getAccount() {
return account;
}
public void setAccount(String account) {
this.account = account;
}
public String getCoin_type() {
return coin_type;
}
public void setCoin_type(String coin_type) {
this.coin_type = coin_type;
}
public String getCreated_at() {
return created_at;
}
public void setCreated_at(String created_at) {
this.created_at = created_at;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
public String getDestination() {
return destination;
}
public void setDestination(String destination) {
this.destination = destination;
}
public String getDetail_page() {
return detail_page;
}
public void setDetail_page(String detail_page) {
this.detail_page = detail_page;
}
public boolean isInclude_pin() {
return include_pin;
}
public void setInclude_pin(boolean include_pin) {
this.include_pin = include_pin;
}
public boolean isIs_completed() {
return is_completed;
}
public void setIs_completed(boolean is_completed) {
this.is_completed = is_completed;
}
public String getMemo() {
return memo;
}
public void setMemo(String memo) {
this.memo = memo;
}
public String getSend_authcode() {
return send_authcode;
}
public void setSend_authcode(String send_authcode) {
this.send_authcode = send_authcode;
}
}
}

View File

@ -1,214 +0,0 @@
/*************************************************************************************
* Copyright (C) 2014-2016 GENERAL BYTES s.r.o. All rights reserved.
*
* This software may be distributed and modified under the terms of the GNU
* General Public License version 2 (GPL2) as published by the Free Software
* Foundation and appearing in the file GPL2.TXT included in the packaging of
* this file. Please note that GPL2 Section 2[b] requires that all works based
* on this software must also be made publicly available under the terms of
* the GPL2 ("Copyleft").
*
* Contact information
* -------------------
*
* GENERAL BYTES s.r.o.
* Web : http://www.generalbytes.com
*
************************************************************************************/
package com.generalbytes.batm.server.extensions.extra.bitcoin.wallets.coinkite;
import com.generalbytes.batm.server.extensions.ICurrencies;
import com.generalbytes.batm.server.extensions.IWallet;
import si.mazi.rescu.RestProxyFactory;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.math.BigDecimal;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashSet;
import java.util.Set;
import java.util.TimeZone;
public class CoinkiteWallet implements IWallet{
private static final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS");
public static final int CALL_PERIOD_MINIMUM = 4100; //Coinkite cannot be called more often than once in 2 seconds
private String apiKey;
private String apiSecret;
private String accountId;
private ICoinkiteAPI api;
public static volatile long lastCall = -1;
static {
TimeZone tz = TimeZone.getTimeZone("UTC");
sdf.setTimeZone(tz);
}
public CoinkiteWallet(String apiKey, String apiSecret, String accountId) {
this.apiKey = apiKey;
this.apiSecret = apiSecret;
if (accountId == null) {
accountId = "0";
}
accountId = accountId.replace("#","");
accountId = Integer.parseInt(accountId) +"";
this.accountId = accountId;
api =RestProxyFactory.createProxy(ICoinkiteAPI.class, "https://api.coinkite.com");
}
@Override
public Set<String> getCryptoCurrencies() {
Set<String> result = new HashSet<String>();
result.add(ICurrencies.BTC);
result.add(ICurrencies.LTC);
return result;
}
@Override
public String getPreferredCryptoCurrency() {
return ICurrencies.BTC;
}
@Override
public String getCryptoAddress(String cryptoCurrency) {
if (!(ICurrencies.LTC.equalsIgnoreCase(cryptoCurrency) || ICurrencies.BTC.equalsIgnoreCase(cryptoCurrency))) {
return null;
}
waitForPossibleCall();
String timestamp = getTimestamp();
String sign = sign("/v1/account/"+accountId, timestamp, apiSecret);
AccountResponse accountResponse = api.getAccount(apiKey, sign, timestamp, accountId);
lastCall = System.currentTimeMillis();
if (accountResponse != null && accountResponse.getAccount() != null) {
if ( accountResponse.getAccount().getQuick_deposit() !=null && accountResponse.getAccount().getCoin_type().equalsIgnoreCase(cryptoCurrency)) {
return accountResponse.getAccount().getQuick_deposit();
}
}
return null;
}
@Override
public BigDecimal getCryptoBalance(String cryptoCurrency) {
if (!(ICurrencies.LTC.equalsIgnoreCase(cryptoCurrency) || ICurrencies.BTC.equalsIgnoreCase(cryptoCurrency))) {
return null;
}
waitForPossibleCall();
String timestamp = getTimestamp();
String sign = sign("/v1/account/"+accountId, timestamp, apiSecret);
AccountResponse accountResponse = api.getAccount(apiKey, sign, timestamp, accountId);
lastCall = System.currentTimeMillis();
if (accountResponse != null && accountResponse.getAccount() != null) {
if ( accountResponse.getAccount().getQuick_deposit() !=null && accountResponse.getAccount().getCoin_type().equalsIgnoreCase(cryptoCurrency)) {
if (accountResponse.getAccount().getBalance() != null && accountResponse.getAccount().getBalance().getCurrency().equalsIgnoreCase(cryptoCurrency)) {
return new BigDecimal(accountResponse.getAccount().getBalance().getString());
}
}
}
return null;
}
@Override
public String sendCoins(String destinationAddress, BigDecimal amount, String cryptoCurrency, String description) {
if (!(ICurrencies.LTC.equalsIgnoreCase(cryptoCurrency) || ICurrencies.BTC.equalsIgnoreCase(cryptoCurrency))) {
return null;
}
waitForPossibleCall();
String timestamp = getTimestamp();
String sign = sign("/v1/new/send", timestamp, apiSecret);
CoinkiteSendResponse response = api.send(apiKey, sign, timestamp, new CoinkiteSendRequest(description, amount.toPlainString(), accountId, destinationAddress, description));
lastCall = System.currentTimeMillis();
if (response != null) {
if (response.getResult() != null) {
String ck_refnum = response.getResult().getCK_refnum();
String send_authcode = response.getResult().getSend_authcode();
// System.out.println("ckref = " + ck_refnum);
// System.out.println("authcode = " + send_authcode);
timestamp = getTimestamp();
sign = sign("/v1/update/"+ ck_refnum +"/auth_send", timestamp, apiSecret);
waitForPossibleCall();
response = api.authSend(apiKey, sign, timestamp, ck_refnum, send_authcode);
lastCall = System.currentTimeMillis();
if (response != null ) {
if (response.getResult() != null) {
// System.out.println("ckref = " + ck_refnum);
return response.getResult().getCK_refnum();
}
}
}
}
return null;
}
private void waitForPossibleCall() {
long now = System.currentTimeMillis();
if (lastCall != -1) {
long diff = now - lastCall;
// System.out.println("diff = " + diff);
if (diff < CALL_PERIOD_MINIMUM) {
try {
long sleeping = CALL_PERIOD_MINIMUM - diff;
// System.out.println("sleeping = " + sleeping);
Thread.sleep(sleeping);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
lastCall = now;
return;
}
private static String sign(String data, String timestamp, String secret) {
if (timestamp == null) {
timestamp = getTimestamp();
}
try {
Mac sha256_HMAC = Mac.getInstance("HmacSHA256");
SecretKeySpec secret_key = new SecretKeySpec(secret.getBytes(), "HmacSHA256");
sha256_HMAC.init(secret_key);
byte[] result = sha256_HMAC.doFinal((data + "|" + timestamp).getBytes());
return bytesToHexString(result);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (InvalidKeyException e) {
e.printStackTrace();
}
return null;
}
private static String getTimestamp() {
return sdf.format(new Date());
}
public static String bytesToHexString(byte[] bytes) {
// http://stackoverflow.com/questions/332079
StringBuffer sb = new StringBuffer();
for (int i = 0; i < bytes.length; i++) {
String hex = Integer.toHexString(0xFF & bytes[i]);
if (hex.length() == 1) {
sb.append('0');
}
sb.append(hex);
}
return sb.toString();
}
}

View File

@ -1,44 +0,0 @@
/*************************************************************************************
* Copyright (C) 2014-2016 GENERAL BYTES s.r.o. All rights reserved.
*
* This software may be distributed and modified under the terms of the GNU
* General Public License version 2 (GPL2) as published by the Free Software
* Foundation and appearing in the file GPL2.TXT included in the packaging of
* this file. Please note that GPL2 Section 2[b] requires that all works based
* on this software must also be made publicly available under the terms of
* the GPL2 ("Copyleft").
*
* Contact information
* -------------------
*
* GENERAL BYTES s.r.o.
* Web : http://www.generalbytes.com
*
************************************************************************************/
package com.generalbytes.batm.server.extensions.extra.bitcoin.wallets.coinkite;
import javax.ws.rs.*;
import javax.ws.rs.core.MediaType;
@Path("/v1")
@Produces(MediaType.APPLICATION_JSON)
public interface ICoinkiteAPI {
@GET
@Path("/account/{accountId}")
AccountResponse getAccount(@HeaderParam("X-CK-Key") String apiKey, @HeaderParam("X-CK-Sign") String signature, @HeaderParam("X-CK-Timestamp") String timestamp, @PathParam("accountId") String accountId);
@GET
@Path("/my/self")
void getInfo(@HeaderParam("X-CK-Key") String apiKey, @HeaderParam("X-CK-Sign") String signature, @HeaderParam("X-CK-Timestamp") String timestamp);
@PUT
@Path("/new/send")
@Consumes(MediaType.APPLICATION_JSON)
CoinkiteSendResponse send(@HeaderParam("X-CK-Key") String apiKey, @HeaderParam("X-CK-Sign") String signature, @HeaderParam("X-CK-Timestamp") String timestamp, CoinkiteSendRequest request);
@PUT
@Path("/update/{refnum}/auth_send")
CoinkiteSendResponse authSend(@HeaderParam("X-CK-Key") String apiKey, @HeaderParam("X-CK-Sign") String signature, @HeaderParam("X-CK-Timestamp") String timestamp, @PathParam("refnum") String refnum, @QueryParam("authcode") String authcode);
}