internal static DeserializedDocument DeserializeAndValidate(string json, List <ValidationError> validationErrors) { DeserializedDocument deserializedDocument = null; try { deserializedDocument = JsonConvert.DeserializeObject <DeserializedDocument>(json); } catch (JsonReaderException ex) { validationErrors.Add(new ValidationError(nameof(json), ResourceString.ValidationJsonParsingError, ex.LineNumber, ex.LinePosition, ex.Message)); } catch (JsonSerializationException ex) { validationErrors.Add(new ValidationError(nameof(json), ResourceString.ValidationJsonParsingError, 0, 0, ex.Message)); } if (deserializedDocument == null) { validationErrors.Add(new ValidationError(nameof(json), ResourceString.ValidationCouldNotDeserializeJson)); } if (validationErrors.Count > 0) { return(null); } InternalValidateDocument(deserializedDocument, validationErrors); return(deserializedDocument); }
internal GrouperDocument(DeserializedDocument deserializedDocument) { Id = Guid.Parse(deserializedDocument.Id); ProcessingInterval = deserializedDocument.Interval; GroupName = deserializedDocument.GroupName; GroupId = Guid.Parse(deserializedDocument.GroupId); Store = (GroupStores)Enum.Parse(typeof(GroupStores), deserializedDocument.Store, true); Owner = (GroupOwnerActions)Enum.Parse(typeof(GroupOwnerActions), deserializedDocument.Owner, true); GroupMemberTypes memberType = Store == GroupStores.OnPremAd ? GroupMemberTypes.OnPremAd : GroupMemberTypes.AzureAd; _members = deserializedDocument.Members.Select(m => new GrouperDocumentMember(m, memberType)).ToList(); }
public void Validate(DeserializedDocument deserializedDocument, DeserializedMember deserializedMember, List <ValidationError> validationErrors) { foreach (DeserializedRule rule in deserializedMember.Rules) { if (rule.Name.IEquals("Group")) { if (rule.Value.IEquals(deserializedDocument.GroupId)) { validationErrors.Add(new ValidationError(nameof(rule.Value), ResourceString.ValidationErrorSourceGroupSameAsTarget)); } } } }
public void Validate(DeserializedDocument deserializedDocument, DeserializedMember deserializedMember, List <ValidationError> validationErrors) { foreach (DeserializedRule rule in deserializedMember.Rules) { if (rule.Name.IEquals("Upn")) { if (!IsUpnValid(rule.Value)) { validationErrors.Add(new ValidationError(nameof(rule.Value), ResourceString.ValidationErrorInvalidUpn, rule.Value)); } } } }
private static void InternalValidateDocument(DeserializedDocument deserializedDocument, List <ValidationError> validationErrors) { if (string.IsNullOrEmpty(deserializedDocument.Id) || !guidRegex.IsMatch(deserializedDocument.Id)) { validationErrors.Add(new ValidationError(nameof(deserializedDocument.Id), ResourceString.ValidationErrorDocumentIdNotValid, deserializedDocument.Id)); } if (deserializedDocument.Interval < 0) { validationErrors.Add(new ValidationError(nameof(deserializedDocument.Interval), ResourceString.ValidationErrorIllegalInterval)); } if (string.IsNullOrEmpty(deserializedDocument.GroupName)) { validationErrors.Add(new ValidationError(nameof(deserializedDocument.GroupName), ResourceString.ValidationErrorGroupNameIsNullOrEmpty)); } if (string.IsNullOrEmpty(deserializedDocument.GroupId) || !guidRegex.IsMatch(deserializedDocument.GroupId)) { validationErrors.Add(new ValidationError(nameof(deserializedDocument.GroupId), ResourceString.ValidationErrorGroupIdNotValid, deserializedDocument.GroupId)); } if (!Enum.TryParse(deserializedDocument.Owner, true, out GroupOwnerActions _)) { validationErrors.Add(new ValidationError(nameof(deserializedDocument.Owner), ResourceString.ValidationErrorInvalidOwnerAction, deserializedDocument.Owner)); } if (deserializedDocument.Store == null || !Enum.TryParse(deserializedDocument.Store, true, out GroupStores store)) { validationErrors.Add(new ValidationError(nameof(deserializedDocument.Store), ResourceString.ValidationErrorInvalidGroupStore, deserializedDocument.Store)); return; } if (!storeLocations.TryGetValue(store, out ResourceLocation groupLocation)) { validationErrors.Add(new ValidationError(nameof(deserializedDocument.Store), ResourceString.ValidationErrorStoreNotRecognized, store.ToString())); return; } InternalValidateMembers(deserializedDocument.Members, deserializedDocument.Store, groupLocation, validationErrors); if (validationErrors.Count > 0) { return; } foreach (DeserializedMember deserializedMember in deserializedDocument.Members) { if (memberSources.TryGetValue(deserializedMember.Source, out MemberSourceInfo memberSourceInfo)) { if (memberSourceInfo.CustomValidators != null) { foreach (ICustomValidator validator in memberSourceInfo.CustomValidators) { validator.Validate(deserializedDocument, deserializedMember, validationErrors); } } } } }
public static GrouperDocument FromJson(string json, List <ValidationError> validationErrors) { if (validationErrors == null) { throw new ArgumentNullException(nameof(validationErrors)); } DeserializedDocument deserializedDocument = DocumentValidator.DeserializeAndValidate(json, validationErrors); if (validationErrors.Count > 0) { return(null); } return(new GrouperDocument(deserializedDocument)); }