use of com.unboundid.util.json.JSONField in project ldapsdk by pingidentity.
the class PasswordPolicyStateJSONTestCase method createState.
/**
* Creates a password policy state JSON object with the provided fields.
*
* @param fields The fields to include in the JSON object.
*
* @return The password policy state JSON object that was created.
*
* @throws Exception If an unexpected problem occurs.
*/
private PasswordPolicyStateJSON createState(final Map<PasswordPolicyStateJSONField, ?> fields) throws Exception {
final Map<String, JSONValue> jsonFields = new LinkedHashMap<>();
for (final PasswordPolicyStateJSONField field : fields.keySet()) {
final String name = field.getFieldName();
final Object value = fields.get(field);
if (value instanceof Boolean) {
final Boolean b = (Boolean) value;
jsonFields.put(name, new JSONBoolean(b));
} else if (value instanceof Integer) {
final Integer i = (Integer) value;
jsonFields.put(name, new JSONNumber(i));
} else if (value instanceof String) {
final String s = (String) value;
jsonFields.put(name, new JSONString(s));
} else if (value instanceof Date) {
final Date d = (Date) value;
jsonFields.put(name, new JSONString(StaticUtils.encodeRFC3339Time(d)));
} else if (value instanceof List) {
final List<?> l = (List<?>) value;
final List<JSONValue> arrayValues = new ArrayList<>();
for (final Object o : l) {
if (o instanceof Date) {
final Date d = (Date) o;
arrayValues.add(new JSONString(StaticUtils.encodeRFC3339Time(d)));
} else if (o instanceof String) {
final String s = (String) o;
arrayValues.add(new JSONString(s));
} else if (o instanceof PasswordPolicyStateAccountUsabilityError) {
final PasswordPolicyStateAccountUsabilityError e = (PasswordPolicyStateAccountUsabilityError) o;
if (e.getMessage() == null) {
arrayValues.add(new JSONObject(new JSONField("type-name", e.getName()), new JSONField("type-id", e.getIntValue())));
} else {
arrayValues.add(new JSONObject(new JSONField("type-name", e.getName()), new JSONField("type-id", e.getIntValue()), new JSONField("message", e.getMessage())));
}
} else if (o instanceof PasswordPolicyStateAccountUsabilityWarning) {
final PasswordPolicyStateAccountUsabilityWarning w = (PasswordPolicyStateAccountUsabilityWarning) o;
if (w.getMessage() == null) {
arrayValues.add(new JSONObject(new JSONField("type-name", w.getName()), new JSONField("type-id", w.getIntValue())));
} else {
arrayValues.add(new JSONObject(new JSONField("type-name", w.getName()), new JSONField("type-id", w.getIntValue()), new JSONField("message", w.getMessage())));
}
} else if (o instanceof PasswordPolicyStateAccountUsabilityNotice) {
final PasswordPolicyStateAccountUsabilityNotice n = (PasswordPolicyStateAccountUsabilityNotice) o;
if (n.getMessage() == null) {
arrayValues.add(new JSONObject(new JSONField("type-name", n.getName()), new JSONField("type-id", n.getIntValue())));
} else {
arrayValues.add(new JSONObject(new JSONField("type-name", n.getName()), new JSONField("type-id", n.getIntValue()), new JSONField("message", n.getMessage())));
}
} else {
fail("Unexpected list element " + o + " of type " + o.getClass().getName());
}
}
jsonFields.put(name, new JSONArray(arrayValues));
} else if (value instanceof JSONValue) {
jsonFields.put(name, (JSONValue) value);
} else {
fail("Unexpected field value " + value + " of type " + value.getClass().getName());
}
}
final JSONObject o = new JSONObject(jsonFields);
final Entry entry = new Entry("dn: uid=test.user,ou=People,dc=example,dc=com", "objectClass: top", "objectClass: person", "objectClass: organizationalPerson", "objectClass: inetOrgPerson", "uid: test.user", "givenName: Test", "sn: User", "cn: Test User");
entry.addAttribute("ds-pwp-state-json", o.toSingleLineString());
final PasswordPolicyStateJSON state = PasswordPolicyStateJSON.get(entry);
assertNotNull(state);
assertNotNull(state.getPasswordPolicyStateJSONObject());
assertFalse(state.getPasswordPolicyStateJSONObject().getFields().isEmpty());
assertEquals(state.getPasswordPolicyStateJSONObject().getFields().size(), jsonFields.size());
assertNotNull(state.toString());
assertFalse(state.toString().isEmpty());
return state;
}
use of com.unboundid.util.json.JSONField in project ldapsdk by pingidentity.
the class PasswordPolicyStateJSONTestCase method testGetPasswordQualityRequirementsPropertyNotObject.
/**
* Tests the behavior when trying to retrieve password quality requirements
* when the properties array has a non-object element.
*
* @throws Exception If an unexpected problem occurs.
*/
@Test()
public void testGetPasswordQualityRequirementsPropertyNotObject() throws Exception {
final PasswordPolicyStateJSON state = createState(StaticUtils.mapOf(PASSWORD_QUALITY_REQUIREMENTS, new JSONArray(new JSONObject(new JSONField("description", "description"), new JSONField("client-side-validation-type", "type"), new JSONField("client-side-validation-properties", new JSONArray(new JSONString("foo"))), new JSONField("applies-to-add", true)))));
assertNotNull(state.getAddPasswordQualityRequirements());
assertFalse(state.getAddPasswordQualityRequirements().isEmpty());
assertEquals(state.getAddPasswordQualityRequirements().size(), 1);
final PasswordQualityRequirement r = state.getAddPasswordQualityRequirements().get(0);
assertEquals(r.getDescription(), "description");
assertEquals(r.getClientSideValidationType(), "type");
assertNotNull(r.getClientSideValidationProperties());
assertTrue(r.getClientSideValidationProperties().isEmpty());
}
use of com.unboundid.util.json.JSONField in project ldapsdk by pingidentity.
the class PasswordPolicyStateJSONTestCase method encodeRequirement.
/**
* Encodes the provided password quality requirement to a JSON object suitable
* for inclusion in the password policy state properties object.
*
* @param requirement The requirement to be encoded.
* @param appliesToAdd Indicates whether the requirement applies to
* add operations.
* @param appliesToSelfChange Indicates whether the requirement applies to
* self password changes.
* @param appliesToAdminReset Indicates whether the requirement applies to
* administrative password resets.
* @param appliesToBind Indicates whether the requirement applies to
* bind operations.
*
* @return The encoded JSON object.
*/
private static JSONObject encodeRequirement(final PasswordQualityRequirement requirement, final boolean appliesToAdd, final boolean appliesToSelfChange, final boolean appliesToAdminReset, final boolean appliesToBind) {
final Map<String, JSONValue> objectFields = new LinkedHashMap<>();
objectFields.put("description", new JSONString(requirement.getDescription()));
final String validationType = requirement.getClientSideValidationType();
if (validationType != null) {
objectFields.put("client-side-validation-type", new JSONString(validationType));
final List<JSONValue> propertyObjects = new ArrayList<>();
for (Map.Entry<String, String> e : requirement.getClientSideValidationProperties().entrySet()) {
propertyObjects.add(new JSONObject(new JSONField("name", e.getKey()), new JSONField("value", e.getValue())));
}
objectFields.put("client-side-validation-properties", new JSONArray(propertyObjects));
}
objectFields.put("applies-to-add", new JSONBoolean(appliesToAdd));
objectFields.put("applies-to-self-change", new JSONBoolean(appliesToSelfChange));
objectFields.put("applies-to-administrative-reset", new JSONBoolean(appliesToAdminReset));
objectFields.put("applies-to-bind", new JSONBoolean(appliesToBind));
return new JSONObject(objectFields);
}
use of com.unboundid.util.json.JSONField in project ldapsdk by pingidentity.
the class OIDRegistryItemTestCase method testDecodeObjectWithoutName.
/**
* Tests the behavior when trying to decode a JSON object that does not
* include a name.
*
* @throws Exception If an unexpected problem occurs.
*/
@Test(expectedExceptions = { LDAPException.class })
public void testDecodeObjectWithoutName() throws Exception {
final JSONObject o = new JSONObject(new JSONField("oid", "1.2.3.4"), new JSONField("type", "test-type"), new JSONField("origin", "test-origin"), new JSONField("url", "https://test.example.com/"));
new OIDRegistryItem(o);
}
use of com.unboundid.util.json.JSONField in project ldapsdk by pingidentity.
the class OIDRegistryItemTestCase method testDecodeObjectWithoutOID.
/**
* Tests the behavior when trying to decode a JSON object that does not
* include an OID.
*
* @throws Exception If an unexpected problem occurs.
*/
@Test(expectedExceptions = { LDAPException.class })
public void testDecodeObjectWithoutOID() throws Exception {
final JSONObject o = new JSONObject(new JSONField("name", "test-name"), new JSONField("type", "test-type"), new JSONField("origin", "test-origin"), new JSONField("url", "https://test.example.com/"));
new OIDRegistryItem(o);
}
Aggregations