FromFileTokenProvider.java
package org.entando.kubernetes.client.k8ssvc;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import lombok.Getter;
import org.entando.kubernetes.exception.EntandoComponentManagerException;
import org.springframework.security.access.AccessDeniedException;
import org.springframework.security.oauth2.client.resource.OAuth2ProtectedResourceDetails;
import org.springframework.security.oauth2.client.resource.UserApprovalRequiredException;
import org.springframework.security.oauth2.client.resource.UserRedirectRequiredException;
import org.springframework.security.oauth2.client.token.AccessTokenProvider;
import org.springframework.security.oauth2.client.token.AccessTokenRequest;
import org.springframework.security.oauth2.common.DefaultOAuth2AccessToken;
import org.springframework.security.oauth2.common.OAuth2AccessToken;
import org.springframework.security.oauth2.common.OAuth2RefreshToken;
public class FromFileTokenProvider implements AccessTokenProvider {
@Getter
private final Path tokenFileUri;
private OAuth2AccessToken oauth2AccessToken;
public FromFileTokenProvider(Path tokenFileUri) {
this.tokenFileUri = tokenFileUri;
this.oauth2AccessToken = this.readOAuth2AccessToken();
}
@Override
public OAuth2AccessToken obtainAccessToken(OAuth2ProtectedResourceDetails oauth2ProtectedResourceDetails,
AccessTokenRequest accessTokenRequest)
throws UserRedirectRequiredException, UserApprovalRequiredException, AccessDeniedException {
return this.oauth2AccessToken;
}
@Override
public boolean supportsResource(OAuth2ProtectedResourceDetails oauth2ProtectedResourceDetails) {
return true;
}
@Override
public OAuth2AccessToken refreshAccessToken(OAuth2ProtectedResourceDetails oauth2ProtectedResourceDetails,
OAuth2RefreshToken oauth2RefreshToken, AccessTokenRequest accessTokenRequest)
throws UserRedirectRequiredException {
this.oauth2AccessToken = this.readOAuth2AccessToken();
return this.oauth2AccessToken;
}
@Override
public boolean supportsRefresh(OAuth2ProtectedResourceDetails oauth2ProtectedResourceDetails) {
return true;
}
/**
* read the token from the set file.
* @return the OAuth2AccessToken built using the token read from the set file
*/
private OAuth2AccessToken readOAuth2AccessToken() {
try {
return new DefaultOAuth2AccessToken(Files.readString(this.getTokenFileUri()).trim());
} catch (IOException e) {
throw new EntandoComponentManagerException(String
.format("Issues retrieving service account token from %s", this.tokenFileUri), e);
}
}
}