package io.cattle.platform.iaas.api.auth.integration.external;
import io.cattle.platform.core.model.Account;
import io.cattle.platform.iaas.api.auth.AbstractTokenUtil;
import io.cattle.platform.object.util.DataAccessor;
import io.github.ibuildthecloud.gdapi.context.ApiContext;
import io.github.ibuildthecloud.gdapi.request.ApiRequest;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.lang3.StringUtils;
public class ExternalServiceTokenUtil extends AbstractTokenUtil {
@Override
protected String accessMode() {
return ServiceAuthConstants.ACCESS_MODE.get();
}
@Override
protected String accessToken() {
return ServiceAuthConstants.ACCESS_TOKEN;
}
@Override
protected void postAuthModification(Account account) {
ApiRequest request = ApiContext.getContext().getApiRequest();
String accessToken = (String) request.getAttribute(ServiceAuthConstants.ACCESS_TOKEN);
DataAccessor.fields(account).withKey(ServiceAuthConstants.ACCESS_TOKEN)
.set(accessToken);
getObjectManager().persist(account);
}
@Override
public String userType() {
return ServiceAuthConstants.USER_TYPE.get();
}
public String identitySeparator() {
return ServiceAuthConstants.IDENTITY_SEPARATOR.get();
}
@Override
public boolean createAccount() {
return true;
}
@Override
protected boolean isWhitelisted(List<String> idList) {
if (idList == null || idList.isEmpty()) {
return false;
}
List<String> whitelistedValues = fromSeparatedString(ServiceAuthConstants.ALLOWED_IDENTITIES.get(), identitySeparator());
for (String id : idList) {
for (String whiteId: whitelistedValues){
if (StringUtils.equals(id, whiteId)){
return true;
}
}
}
return false;
}
public List<String> fromSeparatedString(String identities, String identitySeparator) {
if (StringUtils.isEmpty(identities)) {
return new ArrayList<>();
}
List<String> strings = new ArrayList<>();
String[] splitted = identities.split(identitySeparator);
for (String aSplitted : splitted) {
String element = aSplitted.trim();
strings.add(element);
}
return strings;
}
@Override
public String tokenType() {
return "externaljwt";
}
@Override
public String getName() {
return "";
}
}