package io.cattle.platform.iaas.api.auth.integration.azure; import io.cattle.platform.iaas.api.auth.SecurityConstants; import io.cattle.platform.iaas.api.auth.identity.Token; import io.cattle.platform.iaas.api.auth.integration.interfaces.TokenCreator; import io.cattle.platform.util.type.CollectionUtils; import io.github.ibuildthecloud.gdapi.exception.ClientVisibleException; import io.github.ibuildthecloud.gdapi.request.ApiRequest; import io.github.ibuildthecloud.gdapi.util.ResponseCodes; import java.util.Map; import javax.inject.Inject; import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; public class AzureTokenCreator extends AzureConfigurable implements TokenCreator { @Inject AzureTokenUtil azureTokenUtils; @Inject AzureRESTClient azureClient; public Token getAzureToken(String accessToken) { if (!isConfigured()) { throw new ClientVisibleException(ResponseCodes.SERVICE_UNAVAILABLE, AzureConstants.CONFIG, "No Azure Client id found.", null); } return azureTokenUtils.createToken(azureClient.getIdentities(accessToken), null); } @Override public Token getToken(ApiRequest request) { Map<String, Object> requestBody = CollectionUtils.toMap(request.getRequestObject()); String code = ObjectUtils.toString(requestBody.get(SecurityConstants.CODE)); String accessToken = azureClient.getAccessToken(code); if (StringUtils.isBlank(accessToken)){ throw new ClientVisibleException(ResponseCodes.INTERNAL_SERVER_ERROR, getName(), "Failed to get accessToken.", null); } request.setAttribute(AzureConstants.AZURE_ACCESS_TOKEN, accessToken); return getAzureToken(accessToken); } @Override public void reset() { } @Override public String getName() { return AzureConstants.TOKEN_CREATOR; } @Override public Token getCurrentToken() { return azureTokenUtils.retrieveCurrentToken(); } }