Skip to content

Commit 6f22878

Browse files
authored
Merge pull request #4066 from bodnara/fixMfaEnforceModule
fix(core): enforce mfa modul - correctly retrieve mfa categories
2 parents f0d9024 + dafdc82 commit 6f22878

File tree

2 files changed

+25
-11
lines changed

2 files changed

+25
-11
lines changed

perun-core/src/main/java/cz/metacentrum/perun/core/impl/modules/attributes/urn_perun_user_attribute_def_def_mfaEnforceSettings.java

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,17 @@
44
import com.fasterxml.jackson.databind.JsonNode;
55
import com.fasterxml.jackson.databind.ObjectMapper;
66
import cz.metacentrum.perun.core.api.Attribute;
7+
import cz.metacentrum.perun.core.api.AttributesManager;
78
import cz.metacentrum.perun.core.api.User;
9+
import cz.metacentrum.perun.core.api.exceptions.AttributeNotExistsException;
810
import cz.metacentrum.perun.core.api.exceptions.WrongAttributeAssignmentException;
911
import cz.metacentrum.perun.core.api.exceptions.WrongAttributeValueException;
1012
import cz.metacentrum.perun.core.api.exceptions.WrongReferenceAttributeValueException;
1113
import cz.metacentrum.perun.core.impl.PerunSessionImpl;
1214
import cz.metacentrum.perun.core.implApi.modules.attributes.UserAttributesModuleAbstract;
1315
import cz.metacentrum.perun.core.implApi.modules.attributes.UserAttributesModuleImplApi;
16+
17+
import java.util.Collections;
1418
import java.util.HashSet;
1519
import java.util.Iterator;
1620
import java.util.Map;
@@ -142,11 +146,21 @@ public void checkAttributeSemantics(PerunSessionImpl perunSession, User user, At
142146
throw new WrongAttributeAssignmentException("Attribute " + attribute + "is incorrectly assigned.");
143147
}
144148

145-
Attribute mfaCategories = perunSession.getPerunBl().getAttributesManagerBl().getEntitylessAttributes(perunSession, "mfaCategories").get(0);
146-
String mfaSettingsValue = mfaCategories.valueAsString();
149+
150+
Attribute mfaCategory = null;
151+
try {
152+
Map<String, Attribute> mfaCategories = perunSession.getPerunBl().getAttributesManagerBl().getEntitylessAttributesWithKeys(perunSession, AttributesManager.NS_ENTITYLESS_ATTR_DEF + ":mfaCategories", Collections.singletonList("categories"));
153+
mfaCategory = mfaCategories.get("categories");
154+
} catch (AttributeNotExistsException e) {
155+
throw new WrongReferenceAttributeValueException("Attribute mfa categories does not exist.");
156+
}
157+
158+
if (mfaCategory == null) throw new WrongReferenceAttributeValueException("Attribute mfa categories does not have value for key categories.");
159+
160+
String mfaCategoryValue = mfaCategory.valueAsString();
147161
try {
148162
final ObjectMapper mapper = new ObjectMapper();
149-
JsonNode mfaCategoriesNode = mapper.readTree(mfaSettingsValue).get("categories");
163+
JsonNode mfaCategoriesNode = mapper.readTree(mfaCategoryValue);
150164

151165
// Iterate through categories and check that all included categories exist
152166
for (Iterator<Map.Entry<String, JsonNode>> catIt = mfaCategoriesNode.fields(); catIt.hasNext(); ) {
@@ -171,7 +185,7 @@ public void checkAttributeSemantics(PerunSessionImpl perunSession, User user, At
171185
throw new WrongReferenceAttributeValueException("Rps " + excludeRps + " do not exist inside included categories in mfaCategories attribute.");
172186
}
173187
} catch (JsonProcessingException e) {
174-
throw new WrongAttributeAssignmentException("Attribute " + mfaCategories + "is incorrectly assigned.");
188+
throw new WrongAttributeAssignmentException("Attribute " + mfaCategory + "is incorrectly assigned.");
175189
}
176190
}
177191

perun-core/src/test/java/cz/metacentrum/perun/core/impl/modules/attributes/urn_perun_user_attribute_def_def_mfaEnforceSettingsTest.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
import cz.metacentrum.perun.core.api.Attribute;
44
import cz.metacentrum.perun.core.api.User;
5+
import cz.metacentrum.perun.core.api.exceptions.AttributeNotExistsException;
6+
import cz.metacentrum.perun.core.api.exceptions.WrongAttributeAssignmentException;
57
import cz.metacentrum.perun.core.api.exceptions.WrongAttributeValueException;
68
import cz.metacentrum.perun.core.api.exceptions.WrongReferenceAttributeValueException;
79
import cz.metacentrum.perun.core.impl.PerunSessionImpl;
@@ -24,16 +26,15 @@ public class urn_perun_user_attribute_def_def_mfaEnforceSettingsTest {
2426
private static Attribute attributeToCheck;
2527

2628
@Before
27-
public void setUp() {
29+
public void setUp() throws WrongAttributeAssignmentException, AttributeNotExistsException {
2830
classInstance = new urn_perun_user_attribute_def_def_mfaEnforceSettings();
2931
session = mock(PerunSessionImpl.class, RETURNS_DEEP_STUBS);
3032
user = new User();
3133
attributeToCheck = new Attribute();
3234

3335

3436
Attribute mockMfaCategories = new Attribute();
35-
mockMfaCategories.setValue("{\"categories\":" +
36-
" {" +
37+
mockMfaCategories.setValue("{" +
3738
" \"cat1\":" +
3839
" {" +
3940
" \"label\": {\"en\": \"cat1_en_label\"}," +
@@ -50,11 +51,10 @@ public void setUp() {
5051
" {" +
5152
" \"cat2_rps1\": {\"en\":\"cat2_rps1_en_label\"}" +
5253
" }" +
53-
" }" +
54-
" }" +
54+
" }" + " " +
5555
"}");
56-
when(session.getPerunBl().getAttributesManagerBl().getEntitylessAttributes(any(), any()))
57-
.thenReturn(Collections.singletonList(mockMfaCategories));
56+
when(session.getPerunBl().getAttributesManagerBl().getEntitylessAttributesWithKeys(any(), any(), any()))
57+
.thenReturn(Collections.singletonMap("categories", mockMfaCategories));
5858
}
5959

6060
@Test

0 commit comments

Comments
 (0)