Skip to content

Commit 84c99a7

Browse files
- Fix test
- Track origin correctly - Improve error logging
1 parent 84a631c commit 84c99a7

File tree

3 files changed

+36
-7
lines changed

3 files changed

+36
-7
lines changed

Diff for: src/main/java/org/torusresearch/torusutils/TorusUtils.java

+24-4
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import com.google.gson.Gson;
44
import java8.util.concurrent.CompletableFuture;
5+
import okhttp3.internal.http2.Header;
56
import org.bouncycastle.jce.ECNamedCurveTable;
67
import org.bouncycastle.jce.provider.BouncyCastleProvider;
78
import org.bouncycastle.jce.spec.ECNamedCurveParameterSpec;
@@ -35,6 +36,7 @@ public class TorusUtils {
3536
private final BigInteger secp256k1N = new BigInteger("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141", 16);
3637
private final String metadataHost;
3738
private final String allowHost;
39+
private final String origin;
3840
ConcurrentHashMap<String, BigInteger> metadataCache = new ConcurrentHashMap<>();
3941
ConcurrentHashMap<String, ReentrantReadWriteLock> locks = new ConcurrentHashMap<>();
4042

@@ -46,9 +48,18 @@ public TorusUtils() {
4648
this("https://metadata.tor.us", "https://signer.tor.us/api/allow");
4749
}
4850

51+
public TorusUtils(String origin) {
52+
this("https://metadata.tor.us", "https://signer.tor.us/api/allow", origin);
53+
}
54+
4955
public TorusUtils(String metadataHost, String allowHost) {
56+
this(metadataHost, allowHost, "Custom");
57+
}
58+
59+
public TorusUtils(String metadataHost, String allowHost, String origin) {
5060
this.metadataHost = metadataHost;
5161
this.allowHost = allowHost;
62+
this.origin = origin;
5263
}
5364

5465
public static void setAPIKey(String apiKey) {
@@ -128,9 +139,10 @@ private void setupBouncyCastle() {
128139
Security.insertProviderAt(new BouncyCastleProvider(), 1);
129140
}
130141

131-
public CompletableFuture<RetrieveSharesResponse> retrieveShares(String[] endpoints, BigInteger[] indexes, String verifier, HashMap<String, Object> verifierParams, String idToken) throws TorusException {
142+
public CompletableFuture<RetrieveSharesResponse> retrieveShares(String[] endpoints, BigInteger[] indexes, String verifier,
143+
HashMap<String, Object> verifierParams, String idToken, HashMap<String, Object> extraParams) throws TorusException {
132144
try {
133-
APIUtils.get(this.allowHost, true).join();
145+
APIUtils.get(this.allowHost, new Header[]{new Header("Origin", this.origin)}, true).join();
134146
List<CompletableFuture<String>> promiseArr = new ArrayList<>();
135147
// generate temporary private and public key that is used to secure receive shares
136148
ECKeyPair tmpKey = Keys.createEcKeyPair();
@@ -156,7 +168,7 @@ public CompletableFuture<RetrieveSharesResponse> retrieveShares(String[] endpoin
156168
completableFuture.complete(completedRequests);
157169
return completableFuture;
158170
} else {
159-
throw new PredicateFailedException("insufficient responses");
171+
throw new PredicateFailedException("insufficient responses for commitments");
160172
}
161173
})
162174
.getCompletableFuture()
@@ -180,6 +192,9 @@ public CompletableFuture<RetrieveSharesResponse> retrieveShares(String[] endpoin
180192
verifierParams.put("idtoken", idToken);
181193
verifierParams.put("nodesignatures", nodeSignatures);
182194
verifierParams.put("verifieridentifier", verifier);
195+
if (extraParams != null) {
196+
verifierParams.putAll(extraParams);
197+
}
183198
List<HashMap<String, Object>> shareRequestItems = new ArrayList<HashMap<String, Object>>() {{
184199
add(verifierParams);
185200
}};
@@ -258,7 +273,7 @@ public CompletableFuture<RetrieveSharesResponse> retrieveShares(String[] endpoin
258273
new BigInteger(derivedPubKeyY, 16).compareTo(new BigInteger(thresholdPubKey.getY(), 16)) == 0
259274
) {
260275
privateKey = derivedPrivateKey;
261-
// ethAddress = "0x" + Hash.sha3(derivedECKeyPair.getPublicKey().toString(16)).substring(64 - 38);
276+
// ethAddress = "0x" + Hash.sha3(derivedECKeyPair.getPublicKey().toString(16)).substring(64 - 38);
262277
break;
263278
}
264279
}
@@ -289,6 +304,11 @@ public CompletableFuture<RetrieveSharesResponse> retrieveShares(String[] endpoin
289304
}
290305
}
291306

307+
public CompletableFuture<RetrieveSharesResponse> retrieveShares(String[] endpoints, BigInteger[] indexes, String verifier,
308+
HashMap<String, Object> verifierParams, String idToken) throws TorusException {
309+
return this.retrieveShares(endpoints, indexes, verifier, verifierParams, idToken, null);
310+
}
311+
292312
public CompletableFuture<BigInteger> getMetadata(MetadataPubKey data) {
293313
Gson gson = new Gson();
294314
String metadata = gson.toJson(data, MetadataPubKey.class);

Diff for: src/main/java/org/torusresearch/torusutils/helpers/Some.java

+10-1
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,23 @@
11
package org.torusresearch.torusutils.helpers;
22

3+
import com.google.gson.Gson;
34
import java8.util.concurrent.CompletableFuture;
45

56
import java.util.List;
67
import java.util.concurrent.atomic.AtomicBoolean;
78
import java.util.concurrent.atomic.AtomicInteger;
9+
import java.util.concurrent.atomic.AtomicReference;
810

911
public class Some<T> {
1012
private final AtomicInteger finishedCount = new AtomicInteger(0);
1113
private final String[] resultArr;
14+
private final String[] errorArr;
1215
private final CompletableFuture<T> completableFuture;
1316
private final AtomicBoolean resolved = new AtomicBoolean(false);
17+
private final AtomicReference<String> predicateError = new AtomicReference<>("");
1418
public Some(List<CompletableFuture<String>> promises, Predicate<T> predicate) {
1519
resultArr = new String[promises.size()];
20+
errorArr = new String[promises.size()];
1621
completableFuture = new CompletableFuture<>();
1722
for (int i = 0; i < promises.size(); i++) {
1823
int index = i;
@@ -26,14 +31,18 @@ public Some(List<CompletableFuture<String>> promises, Predicate<T> predicate) {
2631
resolved.set(true);
2732
completableFuture.complete(intermediateResult);
2833
} catch (Exception e) {
34+
predicateError.set(e.getMessage());
2935
// swallow exceptions due to threshold assumptions
3036
}
3137
return null;
3238
}).exceptionally(e -> {
39+
errorArr[index] = e.getMessage();
3340
// swallow exceptions due to threshold assumptions
3441
int count = finishedCount.incrementAndGet();
3542
if (count == promises.size()) {
36-
completableFuture.completeExceptionally(new Exception("Unable to resolve enough promises"));
43+
Gson gson = new Gson();
44+
completableFuture.completeExceptionally(new Exception("Unable to resolve enough promises errors: " + gson.toJson(resultArr) + ", responses: " +
45+
gson.toJson(errorArr) + ", predicate: " + predicateError.get()));
3746
}
3847
return null;
3948
});

Diff for: src/test/java/org/torusresearch/torusutilstest/TorusUtilsTest.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ public class TorusUtilsTest {
3939
static Algorithm algorithmRs;
4040

4141
static String TORUS_TEST_VERIFIER = "torus-test-health";
42-
static String TORUS_TEST_AGGREGATE_VERIFIER = "torus-test-aggregate-health";
42+
static String TORUS_TEST_AGGREGATE_VERIFIER = "torus-test-health-aggregate";
4343

4444
static String TORUS_TEST_EMAIL = "[email protected]";
4545

@@ -107,6 +107,6 @@ public void shouldAggregateLogin() throws ExecutionException, InterruptedExcepti
107107
}},
108108
hashedIdToken).get();
109109
System.out.println(retrieveSharesResponse.getEthAddress());
110-
assertNotNull(retrieveSharesResponse.getEthAddress());
110+
assertEquals("0x5a165d2Ed4976BD104caDE1b2948a93B72FA91D2", retrieveSharesResponse.getEthAddress());
111111
}
112112
}

0 commit comments

Comments
 (0)