Skip to content

Commit 91e9ca7

Browse files
authored
Merge branch 'main' into track-data-streaming-bytes
2 parents 53952d1 + 50f5a61 commit 91e9ca7

File tree

3 files changed

+73
-66
lines changed

3 files changed

+73
-66
lines changed

src/main/java/com/box/sdk/BoxAPIConnection.java

Lines changed: 34 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -533,7 +533,12 @@ public String getAccessToken() {
533533
}
534534
}
535535

536-
return this.accessToken;
536+
this.refreshLock.readLock().lock();
537+
try {
538+
return this.accessToken;
539+
} finally {
540+
this.refreshLock.readLock().unlock();
541+
}
537542
}
538543

539544
/**
@@ -760,10 +765,13 @@ public boolean needsRefresh() {
760765
boolean needsRefresh;
761766

762767
this.refreshLock.readLock().lock();
763-
long now = System.currentTimeMillis();
764-
long tokenDuration = (now - this.lastRefresh);
765-
needsRefresh = (tokenDuration >= this.expires - REFRESH_EPSILON);
766-
this.refreshLock.readLock().unlock();
768+
try {
769+
long now = System.currentTimeMillis();
770+
long tokenDuration = (now - this.lastRefresh);
771+
needsRefresh = (tokenDuration >= this.expires - REFRESH_EPSILON);
772+
} finally {
773+
this.refreshLock.readLock().unlock();
774+
}
767775

768776
return needsRefresh;
769777
}
@@ -775,37 +783,32 @@ public boolean needsRefresh() {
775783
*/
776784
public void refresh() {
777785
this.refreshLock.writeLock().lock();
778-
779-
if (!this.canRefresh()) {
780-
this.refreshLock.writeLock().unlock();
781-
throw new IllegalStateException("The BoxAPIConnection cannot be refreshed because it doesn't have a "
782-
+ "refresh token.");
783-
}
784-
785-
URL url;
786786
try {
787-
url = new URL(getTokenURL());
788-
} catch (MalformedURLException e) {
789-
this.refreshLock.writeLock().unlock();
790-
assert false : "An invalid refresh URL indicates a bug in the SDK.";
791-
throw new RuntimeException("An invalid refresh URL indicates a bug in the SDK.", e);
792-
}
787+
if (!this.canRefresh()) {
788+
throw new IllegalStateException("The BoxAPIConnection cannot be refreshed because it doesn't have a "
789+
+ "refresh token.");
790+
}
793791

794-
BoxAPIRequest request = createTokenRequest(url);
792+
URL url;
793+
try {
794+
url = new URL(getTokenURL());
795+
} catch (MalformedURLException e) {
796+
assert false : "An invalid refresh URL indicates a bug in the SDK.";
797+
throw new RuntimeException("An invalid refresh URL indicates a bug in the SDK.", e);
798+
}
795799

796-
String json;
797-
try (BoxAPIResponse boxAPIResponse = request.send()) {
798-
BoxJSONResponse response = (BoxJSONResponse) boxAPIResponse;
799-
json = response.getJSON();
800-
} catch (BoxAPIException e) {
801-
this.refreshLock.writeLock().unlock();
802-
this.notifyError(e);
803-
throw e;
804-
}
800+
BoxAPIRequest request = createTokenRequest(url);
805801

806-
try {
807-
extractTokens(Json.parse(json).asObject());
802+
String json;
803+
try (BoxAPIResponse boxAPIResponse = request.send()) {
804+
BoxJSONResponse response = (BoxJSONResponse) boxAPIResponse;
805+
json = response.getJSON();
806+
} catch (BoxAPIException e) {
807+
this.notifyError(e);
808+
throw e;
809+
}
808810

811+
extractTokens(Json.parse(json).asObject());
809812
this.notifyRefresh();
810813
} finally {
811814
this.refreshLock.writeLock().unlock();

src/main/java/com/box/sdk/BoxAPIRequest.java

Lines changed: 35 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -585,54 +585,55 @@ private BoxAPIResponse trySend(ProgressListener listener) {
585585
}
586586
}
587587
}
588+
long start = System.currentTimeMillis();
589+
Request request = composeRequest(listener);
590+
Response response;
591+
if (this.followRedirects) {
592+
response = api.execute(request);
593+
} else {
594+
response = api.executeWithoutRedirect(request);
595+
}
596+
logDebug(format("[trySend] connection.connect() took %dms%n", (System.currentTimeMillis() - start)));
588597

589-
Request.Builder requestBuilder = new Request.Builder().url(getUrl());
598+
BoxAPIResponse result = BoxAPIResponse.toBoxResponse(response);
599+
this.logRequest();
600+
long getResponseStart = System.currentTimeMillis();
601+
logDebug(format(
602+
"[trySend] Get Response (read network) took %dms%n", System.currentTimeMillis() - getResponseStart
603+
));
604+
return result;
605+
}
590606

607+
private Request composeRequest(ProgressListener listener) {
608+
Request.Builder requestBuilder = new Request.Builder().url(getUrl());
591609
if (this.shouldAuthenticate) {
592610
requestBuilder.addHeader(HttpHeaders.AUTHORIZATION, "Bearer " + this.api.lockAccessToken());
593611
}
594-
requestBuilder.addHeader("User-Agent", this.api.getUserAgent());
595-
requestBuilder.addHeader("X-Box-UA", this.api.getBoxUAHeader());
596-
headers.forEach(h -> {
597-
requestBuilder.removeHeader(h.getKey());
598-
requestBuilder.addHeader(h.getKey(), h.getValue());
599-
});
600-
601-
if (this.api instanceof SharedLinkAPIConnection) {
602-
SharedLinkAPIConnection sharedItemAPI = (SharedLinkAPIConnection) this.api;
603-
String boxAPIValue = BoxSharedLink.getSharedLinkHeaderValue(
604-
sharedItemAPI.getSharedLink(),
605-
sharedItemAPI.getSharedLinkPassword()
606-
);
607-
requestBuilder.addHeader("BoxApi", boxAPIValue);
608-
}
609-
610612
try {
611-
long start = System.currentTimeMillis();
612-
writeMethodWithBody(requestBuilder, listener);
613-
Request request = requestBuilder.build();
614-
Response response;
615-
if (this.followRedirects) {
616-
response = api.execute(request);
617-
} else {
618-
response = api.executeWithoutRedirect(request);
613+
requestBuilder.addHeader("User-Agent", this.api.getUserAgent());
614+
requestBuilder.addHeader("X-Box-UA", this.api.getBoxUAHeader());
615+
headers.forEach(h -> {
616+
requestBuilder.removeHeader(h.getKey());
617+
requestBuilder.addHeader(h.getKey(), h.getValue());
618+
});
619+
620+
if (this.api instanceof SharedLinkAPIConnection) {
621+
SharedLinkAPIConnection sharedItemAPI = (SharedLinkAPIConnection) this.api;
622+
String boxAPIValue = BoxSharedLink.getSharedLinkHeaderValue(
623+
sharedItemAPI.getSharedLink(),
624+
sharedItemAPI.getSharedLinkPassword()
625+
);
626+
requestBuilder.addHeader("BoxApi", boxAPIValue);
619627
}
620-
logDebug(format("[trySend] connection.connect() took %dms%n", (System.currentTimeMillis() - start)));
621628

622-
BoxAPIResponse result = BoxAPIResponse.toBoxResponse(response);
623-
this.logRequest();
624-
long getResponseStart = System.currentTimeMillis();
625-
logDebug(format(
626-
"[trySend] Get Response (read network) took %dms%n", System.currentTimeMillis() - getResponseStart
627-
));
628-
return result;
629629

630+
writeMethodWithBody(requestBuilder, listener);
631+
return requestBuilder.build();
630632
} finally {
631633
if (this.shouldAuthenticate) {
632634
this.api.unlockAccessToken();
633635
}
634636
}
635-
636637
}
637638

638639
protected void writeMethodWithBody(Request.Builder requestBuilder, ProgressListener listener) {

src/main/java/com/box/sdk/BoxDeveloperEditionAPIConnection.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -446,7 +446,10 @@ private String getAccessTokenCacheKey() {
446446
this.entityType.toString(), this.entityID);
447447
}
448448

449-
private void tryRestoreUsingAccessTokenCache() {
449+
/**
450+
* Tries to restore the connection using the access token cache.
451+
*/
452+
public void tryRestoreUsingAccessTokenCache() {
450453
if (this.accessTokenCache == null) {
451454
//no cache specified so force authentication
452455
this.authenticate();

0 commit comments

Comments
 (0)