Skip to content

Commit c0d16de

Browse files
authored
Merge pull request #101 from tubbynl/develop-100-ApiEnvironmentType
#100 moved pinnedKey to ApiEnvironmentType
2 parents aa4736b + 71ed9b7 commit c0d16de

File tree

5 files changed

+64
-48
lines changed

5 files changed

+64
-48
lines changed

src/main/java/com/bunq/sdk/context/ApiContext.java

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,21 +5,18 @@
55
import com.bunq.sdk.model.core.DeviceServerInternal;
66
import com.bunq.sdk.model.core.Installation;
77
import com.bunq.sdk.model.core.SessionServer;
8-
import com.bunq.sdk.model.generated.endpoint.DeviceServer;
98
import com.bunq.sdk.model.generated.endpoint.Session;
109
import com.bunq.sdk.security.SecurityUtils;
1110
import com.google.gson.Gson;
1211
import com.google.gson.annotations.Expose;
1312
import com.google.gson.annotations.SerializedName;
13+
import org.apache.commons.io.FileUtils;
1414
import java.io.File;
1515
import java.io.IOException;
1616
import java.security.KeyPair;
1717
import java.util.ArrayList;
1818
import java.util.Date;
19-
import java.util.HashMap;
2019
import java.util.List;
21-
import java.util.Map;
22-
import org.apache.commons.io.FileUtils;
2320

2421
/**
2522
* The context to make the API calls in. Consists of:
@@ -228,7 +225,7 @@ public boolean ensureSessionActive() {
228225

229226
public boolean isSessionActive() {
230227
return sessionContext != null &&
231-
getTimeToSessionExpiryInSeconds() < TIME_TO_SESSION_EXPIRY_MINIMUM_SECONDS;
228+
getTimeToSessionExpiryInSeconds() > TIME_TO_SESSION_EXPIRY_MINIMUM_SECONDS;
232229
}
233230

234231
private long getTimeToSessionExpiryInSeconds() {

src/main/java/com/bunq/sdk/context/ApiEnvironmentType.java

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,18 +5,28 @@
55
*/
66
public enum ApiEnvironmentType {
77

8-
PRODUCTION("api.bunq.com", "v1"),
9-
SANDBOX("public-api.sandbox.bunq.com", "v1");
8+
PRODUCTION(
9+
"api.bunq.com",
10+
"v1",
11+
"sha256/nI/T/sDfioCBHB5mVppDPyLi2HXYanwk2arpZuHLOu0="
12+
),
13+
SANDBOX(
14+
"public-api.sandbox.bunq.com",
15+
"v1",
16+
"sha256/GhNvDokiMyXzhGft+xXWFGchUmmh8R5dQEnO4xu81NY="
17+
);
1018

1119
/**
1220
* Base URI of each given environment.
1321
*/
14-
private String baseUri;
15-
private String apiVersion;
22+
private final String baseUri;
23+
private final String apiVersion;
24+
private final String pinnedKey;
1625

17-
ApiEnvironmentType(String baseUri, String apiVersion) {
26+
ApiEnvironmentType(String baseUri, String apiVersion, String pinnedKey) {
1827
this.baseUri = baseUri;
1928
this.apiVersion = apiVersion;
29+
this.pinnedKey = pinnedKey;
2030
}
2131

2232
/**
@@ -30,4 +40,8 @@ public String getApiVersion() {
3040
return this.apiVersion;
3141
}
3242

33-
}
43+
public String getPinnedKey() {
44+
return pinnedKey;
45+
}
46+
47+
}

src/main/java/com/bunq/sdk/http/ApiClient.java

Lines changed: 18 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.bunq.sdk.http;
22

33
import com.bunq.sdk.context.ApiContext;
4+
import com.bunq.sdk.context.ApiEnvironmentType;
45
import com.bunq.sdk.context.BunqContext;
56
import com.bunq.sdk.context.InstallationContext;
67
import com.bunq.sdk.exception.ApiException;
@@ -46,8 +47,10 @@ public class ApiClient {
4647
/**
4748
* Error constants.
4849
*/
49-
private static final String ERROR_AMI_ENVIRONMENT_NOT_EXPECTED = "ApiEnvironment type \"%s\" is unexpected";
50-
private static final String ERROR_COULD_NOT_DETERMINE_RESPONSE_ID = "Could not determine response id.";
50+
private static final String ERROR_COULD_NOT_DETERMINE_PINNED_KEY =
51+
"Could not determine pinned key.";
52+
private static final String ERROR_COULD_NOT_DETERMINE_RESPONSE_ID =
53+
"Could not determine response id.";
5154

5255
/**
5356
* Endpoints not requiring active session for the request to succeed.
@@ -97,12 +100,6 @@ public class ApiClient {
97100
public static final String GEOLOCATION_ZERO = "0 0 0 0 000";
98101
private static final String SCHEME_HTTPS = "https";
99102

100-
/**
101-
* Pinned keys.
102-
*/
103-
private static final String PINNED_KEY_SANDBOX = "sha256/GhNvDokiMyXzhGft+xXWFGchUmmh8R5dQEnO4xu81NY=";
104-
private static final String PINNED_KEY_PRODUCTION = "sha256/nI/T/sDfioCBHB5mVppDPyLi2HXYanwk2arpZuHLOu0=";
105-
106103
/**
107104
* Time out constants.
108105
*/
@@ -134,7 +131,9 @@ private OkHttpClient buildOkHttpClient() {
134131
OkHttpClient.Builder clientBuilder;
135132

136133
clientBuilder = new OkHttpClient().newBuilder()
137-
.certificatePinner(determineCertificateToPin())
134+
.certificatePinner(
135+
determineCertificateToPin(this.apiContext.getEnvironmentType())
136+
)
138137
.connectTimeout(TIMEOUT_SECONDS, TimeUnit.SECONDS)
139138
.readTimeout(TIMEOUT_SECONDS, TimeUnit.SECONDS)
140139
.writeTimeout(TIMEOUT_SECONDS, TimeUnit.SECONDS);
@@ -156,24 +155,16 @@ private void setProxyIfNeeded(OkHttpClient.Builder httpClientBuilder) {
156155
}
157156
}
158157

159-
/**
160-
*/
161-
private CertificatePinner determineCertificateToPin() {
162-
CertificatePinner.Builder certificateBuilder = new CertificatePinner.Builder();
163-
164-
switch (apiContext.getEnvironmentType()) {
165-
case PRODUCTION:
166-
return certificateBuilder.add(
167-
apiContext.getBaseUri(), PINNED_KEY_PRODUCTION
168-
).build();
169-
case SANDBOX:
170-
return certificateBuilder.add(
171-
apiContext.getBaseUri(), PINNED_KEY_SANDBOX
172-
).build();
173-
default:
174-
throw new BunqException(
175-
String.format(ERROR_AMI_ENVIRONMENT_NOT_EXPECTED, apiContext.getEnvironmentType().toString())
176-
);
158+
private static CertificatePinner determineCertificateToPin(ApiEnvironmentType environmentType) {
159+
if (environmentType != null && environmentType.getPinnedKey() != null) {
160+
return new CertificatePinner.Builder()
161+
.add(
162+
environmentType.getBaseUri(),
163+
environmentType.getPinnedKey()
164+
)
165+
.build();
166+
} else {
167+
throw new BunqException(ERROR_COULD_NOT_DETERMINE_PINNED_KEY);
177168
}
178169
}
179170

src/test/java/com/bunq/sdk/http/PaginationScenarioTest.java

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,15 @@
11
package com.bunq.sdk.http;
22

33
import com.bunq.sdk.BunqSdkTestBase;
4-
import com.bunq.sdk.Config;
5-
import com.bunq.sdk.context.ApiContext;
64
import com.bunq.sdk.json.BunqGsonBuilder;
75
import com.bunq.sdk.model.generated.endpoint.Payment;
6+
import com.bunq.sdk.model.generated.endpoint.PaymentBatch;
87
import com.bunq.sdk.model.generated.object.Amount;
9-
import com.bunq.sdk.model.generated.object.Pointer;
108
import com.google.gson.Gson;
119
import org.junit.Assert;
1210
import org.junit.Test;
1311

1412
import java.util.ArrayList;
15-
import java.util.HashMap;
1613
import java.util.List;
1714
import java.util.Map;
1815

@@ -42,9 +39,14 @@ public class PaginationScenarioTest extends BunqSdkTestBase {
4239
private static Gson gson = BunqGsonBuilder.buildDefault().create();
4340

4441
private static void EnsureEnoughPayments() {
45-
for (int i = NUMBER_ZERO; i < GetPaymentsMissingCount(); ++i) {
46-
CreatePayment();
42+
int missingPaymentCount = GetPaymentsMissingCount();
43+
List<Payment> allPayment = new ArrayList<>();
44+
45+
for (int i = NUMBER_ZERO; i < missingPaymentCount; ++i) {
46+
allPayment.add(createPayment());
4747
}
48+
49+
PaymentBatch.create(allPayment);
4850
}
4951

5052
private static int GetPaymentsMissingCount() {
@@ -62,8 +64,12 @@ private static BunqResponse<List<Payment>> ListPayments(Map<String, String> urlP
6264
return Payment.list(null, urlParams);
6365
}
6466

65-
private static void CreatePayment() {
66-
Payment.create(new Amount(PAYMENT_AMOUNT_EUR, PAYMENT_CURRENCY), getPointerBravo(), PAYMENT_DESCRIPTION);
67+
private static Payment createPayment() {
68+
return new Payment(
69+
new Amount(PAYMENT_AMOUNT_EUR, PAYMENT_CURRENCY),
70+
getPointerBravo(),
71+
PAYMENT_DESCRIPTION
72+
);
6773
}
6874

6975
@Test
@@ -87,4 +93,5 @@ public void apiScenarioPaymentListingWithPaginationTest() {
8793

8894
Assert.assertEquals(allPaymentExpectedSerialized, allPaymentActualSerialized);
8995
}
96+
9097
}

src/test/java/com/bunq/sdk/model/generated/endpoint/SessionTest.java

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import com.bunq.sdk.BunqSdkTestBase;
44
import com.bunq.sdk.context.BunqContext;
55
import com.bunq.sdk.context.SessionContext;
6+
import com.bunq.sdk.exception.ApiException;
67
import com.bunq.sdk.exception.BunqException;
78
import com.bunq.sdk.exception.ForbiddenException;
89
import org.junit.After;
@@ -30,9 +31,15 @@ public class SessionTest extends BunqSdkTestBase {
3031
public void deleteSessionTest() {
3132
SessionContext context = BunqContext.getApiContext().getSessionContext();
3233
Session.delete(SESSION_ID_DUMMY);
33-
User.list();
34+
ApiException bunqException = null;
3435

35-
Assert.assertNotEquals(context, BunqContext.getApiContext().getSessionContext());
36+
try {
37+
User.list();
38+
} catch (ForbiddenException exception) {
39+
bunqException = exception;
40+
}
41+
42+
Assert.assertNotNull(bunqException);
3643
}
3744

3845
/**

0 commit comments

Comments
 (0)