Example #1
0
        private bool IsUpnValid(string upn)
        {
            GrouperDocument document = TestHelpers.MakeDocument(new
            {
                Members = new[]
                {
                    new
                    {
                        Source = GroupMemberSources.Static,
                        Rules  = new []
                        {
                            new
                            {
                                Name  = "Upn",
                                Value = upn
                            }
                        }
                    }
                }
            });
            UpnValidator           upnValidator     = new UpnValidator();
            List <ValidationError> validationErrors = new List <ValidationError>();

            upnValidator.Validate(document, document.Members[0], validationErrors);
            return(validationErrors.Count == 0);
        }
        public void TestValidateWithBrokenDocument()
        {
            GrouperDocument document = TestHelpers.MakeDocument(new
            {
                GroupId = groupId,
                Members = new []
                {
                    new
                    {
                        Source = GroupMemberSources.OnPremAdGroup,
                        Rules  = new[]
                        {
                            new
                            {
                                Name  = "Group",
                                Value = groupId
                            }
                        }
                    }
                }
            });
            ICustomValidator       validator = new OnPremAdValidator();
            List <ValidationError> errors    = new List <ValidationError>();

            validator.Validate(document, document.Members[0], errors);
            Assert.True(errors.Count > 0);
        }
Example #3
0
        public static async Task <GrouperDocument> MakeDocumentAsync(HttpRequest request)
        {
            using StreamReader stream = new StreamReader(request.Body);
            string document = await stream.ReadToEndAsync();

            return(GrouperDocument.FromJson(document));
        }
        public void TestEquals()
        {
            GrouperDocument document1 = TestHelpers.MakeDocument();
            GrouperDocument document2 = TestHelpers.MakeDocument();

            Assert.True(document1.Equals(document2));
        }
Example #5
0
        private async Task <IList <GrouperDocumentEntry> > InternalGetDocumentEntriesAsync(string storedProcedure, IDictionary <string, object> parameters)
        {
            var result = new List <GrouperDocumentEntry>();

            using (var conn = new SqlConnection(_connectionString))
            {
                await conn.OpenAsync();

                using (var cmd = new SqlCommand())
                {
                    cmd.Connection  = conn;
                    cmd.CommandType = CommandType.StoredProcedure;
                    cmd.CommandText = storedProcedure;
                    cmd.AddParameters(parameters);
                    using (var reader = await cmd.ExecuteReaderAsync())
                    {
                        while (await reader.ReadAsync())
                        {
                            result.Add(new GrouperDocumentEntry(
                                           document: GrouperDocument.FromJson(reader.GetString(5)),
                                           revision: reader.GetInt32(0),
                                           revisionCreated: reader.GetDateTime(1),
                                           isPublished: reader.GetBoolean(2),
                                           isDeleted: reader.GetBoolean(3),
                                           tags: (reader.IsDBNull(4) ? Array.Empty <string>() : reader.GetString(4).Split(','))
                                           ));
                        }
                    }
                }
            }
            return(result);
        }
        public void TestSerializationOfGroupStore()
        {
            GrouperDocument document           = TestHelpers.MakeDocument();
            string          serializedDocument = document.ToJson();
            dynamic         obj = JObject.Parse(serializedDocument);

            Assert.Equal(TestHelpers.DefaultGroupStore.ToString(), (string)obj.store);
        }
Example #7
0
 private IGroupOwnerSource GetOwnerSource(GrouperDocument document)
 {
     if (_ownerSources.TryGetValue(document.Store, out IGroupOwnerSource source))
     {
         return(source);
     }
     return(null);
 }
        public void TestNotEquals()
        {
            Guid            guid      = Guid.Parse("191de1de-df8c-4f1d-b07c-aec81fff52c1");
            GrouperDocument document1 = TestHelpers.MakeDocument();
            GrouperDocument document2 = TestHelpers.MakeDocument(new { Id = guid });

            Assert.False(document1.Equals(document2));
        }
Example #9
0
 private IGroupStore GetGroupStore(GrouperDocument document)
 {
     if (_groupStores.TryGetValue(document.Store, out IGroupStore store))
     {
         return(store);
     }
     throw new InvalidOperationException($"There is no group store added for {document.Store}");
 }
Example #10
0
        private async Task <GroupMemberCollection> GetCurrentMembersAsync(GrouperDocument document)
        {
            var         memberCollection = new GroupMemberCollection();
            IGroupStore store            = GetGroupStore(document);
            await store.GetGroupMembersAsync(memberCollection, document.GroupId);

            return(memberCollection);
        }
Example #11
0
        public void TestSerializationOfGroupOwnerAction()
        {
            GrouperDocument document           = TestHelpers.MakeDocument(new { Store = GroupStores.AzureAd, Owner = TestHelpers.DefaultOwnerAction });
            string          serializedDocument = document.ToJson();
            dynamic         obj = JObject.Parse(serializedDocument);

            Assert.Equal(TestHelpers.DefaultOwnerAction.ToString(), (string)obj.owner);
        }
Example #12
0
 public async Task StoreDocumentAsync(GrouperDocument document)
 {
     await InternalExecuteStoredProcedureAsync("dbo.store_document",
                                               new Dictionary <string, object>() {
         { "author", _author },
         { "json", document.ToJson(Newtonsoft.Json.Formatting.None) }
     }
                                               );
 }
Example #13
0
        public void TestCloneWithNewName()
        {
            GrouperDocument document     = TestHelpers.MakeDocument();
            string          newGroupName = "New Group Name";
            GrouperDocument newDocument  = document.CloneWithNewGroupName(newGroupName);

            Assert.Equal(TestHelpers.DefaultDocumentId, newDocument.Id);
            Assert.Equal(newGroupName, newDocument.GroupName);
        }
Example #14
0
        public async Task <IActionResult> ValidateDocument(string lang)
        {
            _stringResourceHelper.SetLanguage(lang);
            using StreamReader stream = new StreamReader(Request.Body);
            string document = await stream.ReadToEndAsync();

            List <ValidationError> errors = new List <ValidationError>();

            GrouperDocument.FromJson(document, errors);
            return(Ok(errors));
        }
Example #15
0
        public void TestConstructionWithDocument()
        {
            GrouperDocument       document        = TestHelpers.MakeDocument();
            GroupMember           member          = new GroupMember(Guid.Empty, "Member", GroupMemberTypes.OnPremAd);
            GroupMemberOperations operation       = GroupMemberOperations.Add;
            GroupMemberOperation  memberOperation = new GroupMemberOperation(document, member, operation);

            Assert.Equal(document.GroupId, memberOperation.GroupId);
            Assert.Equal(document.GroupName, memberOperation.GroupName);
            Assert.Equal(member, memberOperation.Member);
            Assert.Equal(operation, memberOperation.Operation);
        }
Example #16
0
        public void TestConstructionWithDocument()
        {
            GrouperDocument document = TestHelpers.MakeDocument();
            EventLogItem    logItem  = new EventLogItem(document, message, logLevel);

            Assert.Equal(TestHelpers.DefaultDocumentId, logItem.DocumentId);
            Assert.Equal(TestHelpers.DefaultGroupName, logItem.GroupDisplayName);
            Assert.Equal(TestHelpers.DefaultGroupId, logItem.GroupId);
            Assert.Equal(TestHelpers.DefaultGroupStore, logItem.GroupStore);
            Assert.Equal(message, logItem.Message);
            Assert.Equal(logLevel, logItem.LogLevel);
        }
Example #17
0
        public async Task <GroupMemberDiff> GetMemberDiffAsync(GrouperDocument document, bool includeUnchanged = false)
        {
            if (document is null)
            {
                throw new ArgumentNullException(nameof(document));
            }
            var currentMembers = await GetCurrentMembersAsync(document);

            var targetMembers = await GetTargetMembersAsync(document);

            IGroupOwnerSource ownerSource = GetOwnerSource(document);

            if (ownerSource != null)
            {
                if (document.Owner != GroupOwnerActions.MatchSource)
                {
                    var owners = new GroupMemberCollection();
                    await ownerSource.GetGroupOwnersAsync(owners, document.GroupId);

                    if (document.Owner == GroupOwnerActions.KeepExisting)
                    {
                        owners.IntersectWith(currentMembers);
                    }
                    targetMembers.Add(owners);
                }
            }
            if (!currentMembers.ContainsMatchingMemberType(targetMembers))
            {
                throw new InvalidOperationException("Member types does not match");
            }
            GroupMemberCollection unchangedMembers = new GroupMemberCollection();

            if (includeUnchanged)
            {
                unchangedMembers = currentMembers.Clone();
                unchangedMembers.IntersectWith(targetMembers);
            }
            int currentCount = currentMembers.Count;

            currentMembers.FilterUniqueMember(targetMembers);
            double changeRatio;

            if (currentCount == 0)
            {
                changeRatio = targetMembers.Count == 0 ? 1.0 : targetMembers.Count;
            }
            else
            {
                changeRatio = (currentCount - currentMembers.Count + targetMembers.Count) / (double)currentCount;
            }
            return(new GroupMemberDiff(document, targetMembers, currentMembers, unchangedMembers, changeRatio));
        }
Example #18
0
        private void WriteToLogDb(GrouperDocument document, string message, LogLevels logLevel)
        {
            EventLogItem logItem = new EventLogItem(document, message, logLevel);

            if (Environment.UserInteractive)
            {
                Console.WriteLine(logItem.ToString());
            }
            else
            {
                _logDb.StoreEventLogItemAsync(logItem).GetAwaiter().GetResult();
            }
        }
Example #19
0
        private async Task <GroupMemberCollection> GetTargetMembersAsync(GrouperDocument document)
        {
            var include = new GroupMemberCollection();
            var exclude = new GroupMemberCollection();

            foreach (GrouperDocumentMember member in document.Members)
            {
                var           memberCollection = member.Action == GroupMemberActions.Exclude ? exclude : include;
                IMemberSource source           = GetMemberSource(member);
                await source.GetMembersFromSourceAsync(memberCollection, member);
            }
            include.ExceptWith(exclude);
            return(include);
        }
        public void TestConstructionWithDocument()
        {
            DateTime           now      = DateTime.Now;
            GrouperDocument    document = TestHelpers.MakeDocument();
            OperationalLogItem logItem  = new OperationalLogItem(document, operation,
                                                                 new GroupMember(targetId, targetName, GroupMemberTypes.OnPremAd));

            Assert.True(logItem.LogTime >= now);
            Assert.Equal(TestHelpers.DefaultDocumentId, logItem.DocumentId);
            Assert.Equal(TestHelpers.DefaultGroupId, logItem.GroupId);
            Assert.Equal(TestHelpers.DefaultGroupName, logItem.GroupDisplayName);
            Assert.Equal(TestHelpers.DefaultGroupStore, logItem.GroupStore);
            Assert.Equal(operation, logItem.Operation);
            Assert.Equal(targetId, logItem.TargetId);
            Assert.Equal(targetName, logItem.TargetDisplayName);
        }
Example #21
0
        private async Task <GroupMemberCollection> GetTargetMembersAsync(GrouperDocument document, GroupMemberCollection currentMembers)
        {
            var include = new GroupMemberCollection();
            var exclude = new GroupMemberCollection();

            if (!(document.Members.Any(m => m.Action == GroupMemberActions.Include)))
            {
                include.Add(currentMembers);
            }
            foreach (GrouperDocumentMember member in document.Members)
            {
                var           memberCollection = member.Action == GroupMemberActions.Exclude ? exclude : include;
                IMemberSource source           = GetMemberSource(member);
                await source.GetMembersFromSourceAsync(memberCollection, member, document.MemberType);
            }
            include.ExceptWith(exclude);
            return(include);
        }
Example #22
0
        public async Task <IActionResult> InvokeGrouper(bool ignoreChangelimit)
        {
            GrouperDocument document = await Helper.MakeDocumentAsync(Request);

            Grouper         grouper = GetGrouperBackend();
            GroupMemberDiff diff    = await grouper.GetMemberDiffAsync(document);

            // await grouper.UpdateGroupAsync(diff, ignoreChangelimit);
            var changes = new List <OperationalLogItem>();

            foreach (GroupMember member in diff.Add)
            {
                changes.Add(new OperationalLogItem(document, GroupMemberOperations.Add, member));
            }
            foreach (GroupMember member in diff.Remove)
            {
                changes.Add(new OperationalLogItem(document, GroupMemberOperations.Remove, member));
            }
            return(Ok(changes));
        }
Example #23
0
        public void TestSerializedNames()
        {
            GrouperDocument document = TestHelpers.MakeDocument(
                new
            {
                Store    = GroupStores.AzureAd,
                Interval = 10
            }
                );
            string  json = JsonConvert.SerializeObject(document, Formatting.Indented);
            JObject obj  = JObject.Parse(json);

            Assert.True(obj.ContainsKey("id"));
            Assert.True(obj.ContainsKey("interval"));
            Assert.True(obj.ContainsKey("groupId"));
            Assert.True(obj.ContainsKey("groupName"));
            Assert.True(obj.ContainsKey("store"));
            Assert.True(obj.ContainsKey("owner"));
            Assert.True(obj.ContainsKey("members"));
        }
Example #24
0
        public void TestConstruction()
        {
            double                ratio = 0.5;
            GrouperDocument       doc   = TestHelpers.MakeDocument();
            GroupMemberCollection add   = new GroupMemberCollection();

            add.Add(new GroupMember(Guid.Empty, "M1", GroupMemberTypes.AzureAd));
            GroupMemberCollection remove = new GroupMemberCollection();

            remove.Add(new GroupMember(Guid.Empty, "M2", GroupMemberTypes.AzureAd));
            GroupMemberCollection unchanged = new GroupMemberCollection();

            unchanged.Add(new GroupMember(Guid.Empty, "M3", GroupMemberTypes.AzureAd));
            GroupMemberDiff diff = new GroupMemberDiff(doc, add, remove, unchanged, ratio);

            Assert.NotNull(diff.Add.FirstOrDefault(m => m.DisplayName == "M1"));
            Assert.NotNull(diff.Remove.FirstOrDefault(m => m.DisplayName == "M2"));
            Assert.NotNull(diff.Unchanged.FirstOrDefault(m => m.DisplayName == "M3"));
            Assert.Equal(ratio, diff.ChangeRatio);
            Assert.Equal(doc, diff.Document);
        }
Example #25
0
        public void TestGetHashCode()
        {
            GrouperDocument document = TestHelpers.MakeDocument();

            Assert.Equal(TestHelpers.DefaultDocumentId.GetHashCode(), document.GetHashCode());
        }
Example #26
0
        public void TestMembersListShouldBeImmutable()
        {
            GrouperDocument document = TestHelpers.MakeDocument();

            Assert.Throws <NotSupportedException>(() => { document.Members.RemoveAt(0); });
        }
Example #27
0
        public async Task <GroupInfo> GetGroupInfoAsync(GrouperDocument document)
        {
            IGroupStore store = GetGroupStore(document);

            return(await store.GetGroupInfoAsync(document.GroupId));
        }