Commit bb20a782 authored by Brian Long's avatar Brian Long
Browse files

Merge branch 'develop' into develop-jersey

parents 053b7a36 f84279a1
Loading
Loading
Loading
Loading
+29 −3
Original line number Diff line number Diff line
@@ -48,6 +48,7 @@ public abstract class OAuthAuthorizationFilter implements AuthorizationFilter {
	private String accessToken;
	private long expiration;
	private String refreshToken;
	private Long refreshTokenExpiration;
	
	/**
	 * This constructor creates an OAuth-based authorization filter using the
@@ -99,8 +100,29 @@ public abstract class OAuthAuthorizationFilter implements AuthorizationFilter {
	 */
	@Override
	public void filter(ClientRequestContext requestContext) {
		if (this.accessToken == null || System.currentTimeMillis() > this.expiration)
		if (this.accessToken == null) {
		    this.requestToken();
		} else if (System.currentTimeMillis() >= this.expiration) {
            this.logger.trace("Access token expired; retrieving new one with refresh token");
            
		    if (this.refreshTokenExpiration != null && System.currentTimeMillis() >= this.refreshTokenExpiration.longValue()) {
                this.logger.debug("Refresh token expired; performing full authentication");
                this.refreshToken = null;
                this.requestToken();
		    } else {
    		    try {
    		        this.requestToken();
                } catch (WebApplicationException wae) {
                    if (wae.getResponse().getStatusInfo().getFamily() == Family.CLIENT_ERROR) {
                        this.logger.debug("Received OAuth response {} using refresh token; performing full authentication", wae.getResponse().getStatus());
                        this.refreshToken = null;
                        this.requestToken();
                    } else {
                        throw wae;
                    }
                }
		    }
		}
		
		requestContext.getHeaders().add(HttpHeaders.AUTHORIZATION, "Bearer " + this.accessToken);
	}
@@ -140,6 +162,8 @@ public abstract class OAuthAuthorizationFilter implements AuthorizationFilter {
                .build();
		WebTarget target = client.target(this.tokenUrl);
		
		long requestSendTime = System.currentTimeMillis();

		Response response = target.request().post(entity);
		
        this.logger.debug("Received OAuth response: {}", response.getStatus());
@@ -160,8 +184,10 @@ public abstract class OAuthAuthorizationFilter implements AuthorizationFilter {
		}
		
		this.accessToken = (String)responseMap.get("access_token");
		this.expiration = System.currentTimeMillis() + ((Number)responseMap.get("expires_in")).longValue() * 1000L;
		this.expiration = requestSendTime + ((Number)responseMap.get("expires_in")).longValue() * 1000L;
		this.refreshToken = (String)responseMap.get("refresh_token");
		if (responseMap.containsKey("refresh_token_expires_in"))
		    this.refreshTokenExpiration = requestSendTime + ((Number)responseMap.get("refresh_token_expires_in")).longValue() * 1000L;
	}
	
	protected Form createRefreshForm() {