Skip to content
Snippets Groups Projects
Commit 6b964745 authored by Michael Simon's avatar Michael Simon
Browse files

ISSUE-192 add support for string lists with oidc

parent 630f0428
No related branches found
No related tags found
No related merge requests found
......@@ -13,6 +13,7 @@ import edu.kit.scc.webreg.dao.project.ProjectDao;
import edu.kit.scc.webreg.entity.attribute.AttributeReleaseEntity;
import edu.kit.scc.webreg.entity.attribute.ReleaseStatusType;
import edu.kit.scc.webreg.entity.attribute.value.PairwiseIdentifierValueEntity;
import edu.kit.scc.webreg.entity.attribute.value.StringListValueEntity;
import edu.kit.scc.webreg.entity.attribute.value.StringValueEntity;
import edu.kit.scc.webreg.entity.attribute.value.ValueEntity;
import edu.kit.scc.webreg.entity.identity.IdentityEntity;
......@@ -159,6 +160,9 @@ public class OidcOpScopeLoginProcessor extends AbstractOidcOpLoginProcessor {
else if (value instanceof StringValueEntity) {
claimsBuilder.claim(value.getAttribute().getName(), ((StringValueEntity) value).getValueString());
}
else if (value instanceof StringListValueEntity) {
claimsBuilder.claim(value.getAttribute().getName(), ((StringListValueEntity) value).getValueList());
}
}
UserInfo userInfo = new UserInfo(claimsBuilder.build());
......
......@@ -4,7 +4,9 @@ import static edu.kit.scc.webreg.dao.ops.RqlExpressions.and;
import static edu.kit.scc.webreg.dao.ops.RqlExpressions.equal;
import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.UUID;
......@@ -22,6 +24,7 @@ import edu.kit.scc.webreg.entity.attribute.OutgoingAttributeEntity;
import edu.kit.scc.webreg.entity.attribute.OutgoingAttributeEntity_;
import edu.kit.scc.webreg.entity.attribute.ReleaseStatusType;
import edu.kit.scc.webreg.entity.attribute.value.PairwiseIdentifierValueEntity;
import edu.kit.scc.webreg.entity.attribute.value.StringListValueEntity;
import edu.kit.scc.webreg.entity.attribute.value.StringValueEntity;
import edu.kit.scc.webreg.entity.attribute.value.ValueEntity;
import edu.kit.scc.webreg.entity.attribute.value.ValueEntity_;
......@@ -81,6 +84,7 @@ public class AttributeReleaseHandler {
changed |= resolveSingleStringValue(attributeRelease, "given_name", identity);
} else if (scope.equals("voperson")) {
changed |= resolveSingleStringValue(attributeRelease, "voperson_id", identity.getGeneratedLocalUsername());
changed |= resolveStringListValue(attributeRelease, "eduperson_entitlement", identity);
}
}
return changed;
......@@ -97,6 +101,31 @@ public class AttributeReleaseHandler {
attributeResolver.resolveSingleStringValue(identity, name));
}
private Boolean resolveStringListValue(AttributeReleaseEntity attributeRelease, String name,
IdentityEntity identity) {
return resolveStringListValue(attributeRelease, name, name, identity);
}
private Boolean resolveStringListValue(AttributeReleaseEntity attributeRelease, String name, String outgoingName,
IdentityEntity identity) {
return resolveStringListValue(attributeRelease, outgoingName,
attributeResolver.resolveStringListValue(identity, name));
}
private Boolean resolveStringListValue(AttributeReleaseEntity attributeRelease, String name, List<String> valueList) {
final OutgoingAttributeEntity attribute = findOrCreateOutgroingAttribute(name);
ValueEntity value = resolveValue(attributeRelease, attribute, StringListValueEntity.class);
// Null check, because with a new value it will be null
if (((StringListValueEntity) value).getValueList() != null
&& (new HashSet<>(((StringListValueEntity) value).getValueList())).equals(new HashSet<>(valueList)))
return false;
else {
((StringListValueEntity) value).setValueList(new ArrayList<>(valueList));
return true;
}
}
private Boolean resolveSingleStringValue(AttributeReleaseEntity attributeRelease, String name, String valueString) {
final OutgoingAttributeEntity attribute = findOrCreateOutgroingAttribute(name);
ValueEntity value = resolveValue(attributeRelease, attribute, StringValueEntity.class);
......
......@@ -3,6 +3,8 @@ package edu.kit.scc.webreg.service.identity;
import static edu.kit.scc.webreg.dao.ops.RqlExpressions.and;
import static edu.kit.scc.webreg.dao.ops.RqlExpressions.equal;
import java.util.List;
import edu.kit.scc.webreg.dao.jpa.attribute.LocalAttributeDao;
import edu.kit.scc.webreg.dao.jpa.attribute.LocalIdentityAttributeSetDao;
import edu.kit.scc.webreg.dao.jpa.attribute.ValueDao;
......@@ -10,6 +12,7 @@ import edu.kit.scc.webreg.entity.attribute.LocalAttributeEntity;
import edu.kit.scc.webreg.entity.attribute.LocalAttributeEntity_;
import edu.kit.scc.webreg.entity.attribute.LocalIdentityAttributeSetEntity;
import edu.kit.scc.webreg.entity.attribute.LocalIdentityAttributeSetEntity_;
import edu.kit.scc.webreg.entity.attribute.value.StringListValueEntity;
import edu.kit.scc.webreg.entity.attribute.value.StringValueEntity;
import edu.kit.scc.webreg.entity.attribute.value.ValueEntity;
import edu.kit.scc.webreg.entity.attribute.value.ValueEntity_;
......@@ -42,4 +45,10 @@ public class IdentityAttributeResolver {
equal(ValueEntity_.attribute, getAttribute(name))));
return (value instanceof StringValueEntity ? ((StringValueEntity) value).getValueString() : null);
}
public List<String> resolveStringListValue(IdentityEntity identity, String name) {
ValueEntity value = valueDao.find(and(equal(ValueEntity_.attributeSet, getAttributeSet(identity)),
equal(ValueEntity_.attribute, getAttribute(name))));
return (value instanceof StringListValueEntity ? ((StringListValueEntity) value).getValueList() : null);
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment