protected override void OnNodeDeletingPhysically(object sender, CancellableNodeEventArgs e)
        {
            base.OnNodeDeletingPhysically(sender, e);

            // Memorize user, orgunit and group ids that should be removed from the security
            // component after the delete operation succeeded.
            e.CustomData = GetSecurityIdentityIds(e.SourceNode);
        }
Exemple #2
0
 protected override void OnCreating(object sender, CancellableNodeEventArgs e)
 {
     if (e.SourceNode.Index == 0)
     {
         e.CancelMessage = "Index cannot be 0";
         e.Cancel        = true;
     }
     base.OnCreating(sender, e);
 }
Exemple #3
0
        protected override void OnModifying(object sender, CancellableNodeEventArgs e)
        {
            // check type in case of the name has changed
            if (e.ChangedData.Any(cd => string.Compare(cd.Name, "Name", StringComparison.InvariantCultureIgnoreCase) == 0))
            {
                AssertExecutableType(e.SourceNode);
            }

            base.OnModifying(sender, e);
        }
Exemple #4
0
        // ================================================================================= Observer methods

        protected override void OnNodeCreating(object sender, CancellableNodeEventArgs e)
        {
            base.OnNodeCreating(sender, e);

            if (e.SourceNode.CopyInProgress)
            {
                return;
            }

            DocumentPreviewProvider.InitializePreviewGeneration(e.SourceNode);
        }
Exemple #5
0
        protected override void OnModifying(object sender, CancellableNodeEventArgs e)
        {
            base.OnModifying(sender, e);

            // has the Members field changed?
            var changedMembers = e.ChangedData.FirstOrDefault(cd => cd.Name == nameof(Members));

            if (changedMembers == null)
            {
                return;
            }

            // is this group protected?
            if (!ContentProtector.GetProtectedGroupIds().Contains(e.SourceNode.Id))
            {
                return;
            }

            // Protected groups must contain at least one direct member user
            // who is enabled. Transitivity does not count, the user must be
            // a direct member.

            // If there were no members in the group, we can't remove anybody. This
            // is probably an initial import scenario.
            var oldMembersText = (string)changedMembers.Original;

            if (string.IsNullOrEmpty(oldMembersText))
            {
                return;
            }

            // there has to be at least one member in the group
            var newMembersText = (string)changedMembers.Value;
            var newMemberIds   = string.IsNullOrEmpty(newMembersText)
                ? Array.Empty <int>()
                : newMembersText.Split(',').Select(int.Parse).ToArray();

            if (!newMemberIds.Any())
            {
                throw new InvalidOperationException($"{Name} is a protected group. " +
                                                    "It has to contain at least one member.");
            }

            using (new SystemAccount())
            {
                // at least one Enabled member has to remain in the group
                if (!LoadNodes(newMemberIds).Any(User.IsEnabledRegularUser))
                {
                    throw new InvalidOperationException($"{Name} is a protected group. " +
                                                        "It has to contain at least one enabled member.");
                }
            }
        }
        protected override void OnNodeDeletingPhysically(object sender, CancellableNodeEventArgs e)
        {
            base.OnNodeDeletingPhysically(sender, e);

            // Collect sharing group ids for publicly shared content
            // in the subtree to delete them later in the background.
            var sharingGroupIds = SharingHandler.GetSharingGroupIdsForSubtree(e.SourceNode);

            if (sharingGroupIds?.Any() ?? false)
            {
                e.SetCustomData(SharingGroupIdsCustomDataKey, sharingGroupIds);
            }
        }
Exemple #7
0
            protected internal override void OnNodeModifying(object sender, CancellableNodeEventArgs e)
            {
                var node = e.SourceNode;
                var path = $"{node.ParentPath}/{node.Name}";

                if (path != DatabaseUsageHandler.DatabaseUsageCachePath)
                {
                    return;
                }
                if (!ModifyingCrashEnabledOnce)
                {
                    return;
                }
                ModifyingCrashEnabledOnce = false;

                e.Cancel = true;
            }
Exemple #8
0
        protected override void OnDeletingPhysically(object sender, CancellableNodeEventArgs e)
        {
            base.OnDeletingPhysically(sender, e);

            if (!Path.StartsWith(RepositoryStructure.ImsFolderPath + RepositoryPath.PathSeparator))
            {
                return;
            }

            // If we are deleting a container under the security folder, we have to check whether
            // we would delete users from protected groups. If any of the protected groups would
            // become empty, this will throw an exception.
            using (new SystemAccount())
            {
                var userInSubtree = ContentQuery.Query(SafeQueries.UsersInSubtree,
                                                       QuerySettings.AdminSettings, Path).Identifiers.ToArray();

                User.AssertEnabledParentGroupMembers(userInSubtree);
            }
        }
Exemple #9
0
 protected override void OnNodeModifying(object sender, CancellableNodeEventArgs e)
 {
     _log.Append("TestObserver.OnNodeModifying").Append(Environment.NewLine);
 }
Exemple #10
0
 protected override void OnNodeModifying(object sender, CancellableNodeEventArgs e)
 {
     RouteCancelEvent(RepositoryEvent.Modifying, sender, e.SourceNode, e);
 }
Exemple #11
0
        private void RouteCancelEvent(RepositoryCancelEvent @event, object sender, Node contextNode, CancellableNodeEventArgs originalArgs)
        {
            var args = new RepositoryCancelEventArgs(contextNode);

            @event.FireEvent(sender, args);
            originalArgs.Cancel        = args.Cancel;
            originalArgs.CancelMessage = args.CancelMessage;
        }
Exemple #12
0
 protected override void OnNodeCreating(object sender, CancellableNodeEventArgs e)
 {
     _log.Append("TestObserver.OnNodeCreating").AppendLine();
 }
Exemple #13
0
 protected override void OnNodeDeletingPhysically(object sender, CancellableNodeEventArgs e)
 {
     RouteCancelEvent(RepositoryEvent.DeletingPhysically, sender, e.SourceNode, e);
 }
Exemple #14
0
        protected override void OnCreating(object sender, CancellableNodeEventArgs e)
        {
            base.OnCreating(sender, e);

            this.ReferencedWikiTitles = WikiTools.GetReferencedTitles(this);
        }
 protected internal override void OnNodeDeleting(object sender, CancellableNodeEventArgs e)
 {
     RouteCancelEvent(RepositoryEvent.Deleting, sender, e.SourceNode, e);
 }
Exemple #16
0
 protected override void OnPermissionChanging(object sender, CancellableNodeEventArgs e)
 {
     _log.AppendLine("TestObserver.OnPermissionChanging");
 }
Exemple #17
0
 void Node_Modifying(object sender, CancellableNodeEventArgs e)
 {
     LogEvent("Node_Modifying");
 }
Exemple #18
0
 void Node_OverriddenCreating(object sender, CancellableNodeEventArgs e)
 {
     LogEvent("Node_OverriddenCreating");
 }