Esempio n. 1
0
        public void NonThrowableItem_IsNotMovedToTrashcan_LegacyAttribute()
        {
            IDefinitionManager definitions = mocks.Stub <IDefinitionManager>();

            IPersister persister = mocks.Stub <IPersister>();

            Expect.Call(persister.Get(1)).Return(root).Repeat.Any();
            persister.ItemDeleting += null;
            IEventRaiser invokeDelete = LastCall.IgnoreArguments().GetEventRaiser();

            mocks.ReplayAll();

            var          host = new Host(webContext, 1, 1);
            TrashHandler th   = new TrashHandler(persister, null, null, new ContainerRepository <TrashContainerItem>(persister, null, host, null))
            {
                UseNavigationMode = true
            };
            DeleteInterceptor interceptor = new DeleteInterceptor(persister, th);

            interceptor.Start();

            CancellableItemEventArgs deleteArgs = new CancellableItemEventArgs(nonThrowable2);

            invokeDelete.Raise(persister, deleteArgs);

            Assert.That(deleteArgs.Cancel, Is.False);
            Assert.That(trash.Children.Count, Is.EqualTo(0));
        }
Esempio n. 2
0
 private void ItemDeletingEvenHandler(object sender, CancellableItemEventArgs e)
 {
     if (security.Enabled && security.ScopeEnabled)
     {
         OnItemDeleting(e.AffectedItem);
     }
 }
Esempio n. 3
0
 private void OnItemDeleting(object sender, CancellableItemEventArgs e)
 {
     if (trashHandler.CanThrow(e.AffectedItem))
     {
         e.FinalAction = trashHandler.Throw;
     }
 }
Esempio n. 4
0
        public void DeletedItem_IsThrownInTrash()
        {
            persister.ItemDeleting += null;
            IEventRaiser invokeDelete = LastCall.IgnoreArguments().GetEventRaiser();

            persister.ItemCopied += null;
            LastCall.IgnoreArguments();
            persister.ItemMoving += null;
            LastCall.IgnoreArguments();

            TrashHandler th = mocks.StrictMock <TrashHandler>(persister, null, null, new ContainerRepository <TrashContainerItem>(persister, null, new Host(webContext, 1, 1), null));

            th.UseNavigationMode = true;
            Expect.Call(delegate { th.Throw(item); });

            mocks.ReplayAll();

            DeleteInterceptor interceptor = new DeleteInterceptor(persister, th);

            interceptor.Start();

            CancellableItemEventArgs deleteArgs = new CancellableItemEventArgs(item);

            invokeDelete.Raise(persister, deleteArgs);

            deleteArgs.FinalAction(deleteArgs.AffectedItem);

            mocks.VerifyAll();
        }
Esempio n. 5
0
		/// <summary>Creates a version of the item. This must be called before the item item is modified to save a version before modifications.</summary>
		/// <param name="item">The item to create a old version of.</param>
		/// <returns>The old version.</returns>
		public virtual ContentItem SaveVersion(ContentItem item)
		{
			if (item == null) 
				throw new ArgumentNullException("item");

			CancellableItemEventArgs args = new CancellableItemEventArgs(item);
			if (ItemSavingVersion != null)
				ItemSavingVersion.Invoke(this, args);

			if (args.Cancel)
				return null;

			item = args.AffectedItem;
                
			ContentItem oldVersion = item.Clone(false);
			if(item.State == ContentState.Published)
				stateChanger.ChangeTo(oldVersion, ContentState.Unpublished);
			else
				stateChanger.ChangeTo(oldVersion, ContentState.Draft);
			oldVersion.Expires = Utility.CurrentTime().AddSeconds(-1);
			oldVersion.Updated = Utility.CurrentTime().AddSeconds(-1);
			oldVersion.Parent = null;
			oldVersion.VersionOf = item;
			if (item.Parent != null)
				oldVersion["ParentID"] = item.Parent.ID;
			itemRepository.SaveOrUpdate(oldVersion);

			if (ItemSavedVersion != null)
				ItemSavedVersion.Invoke(this, new ItemEventArgs(oldVersion));

			TrimVersionCountTo(item, maximumVersionsPerItem);

			return oldVersion;
		}
        private void securityEnforcer_AuthorizationFailed(object sender, CancellableItemEventArgs e)
        {
            string returnUrl = context.Url.LocalUrl;
            string loginUrl  = null;

            // Custom login page:
            var startPage = parser.StartPage as StartPage;

            if ((startPage != null) && !string.IsNullOrWhiteSpace(startPage.LoginPage))
            {
                loginUrl = startPage.LoginPage;
            }

            // Default login page:
            if (loginUrl == null)
            {
                var loginPageToken = "{Account.Login.PageUrl}";
                var loginPageUrl   = loginPageToken.ResolveUrlTokens();
                if (loginPageUrl != loginPageToken)
                {
                    loginUrl = loginPageUrl;
                }
            }

            if (loginUrl != null)
            {
                e.Cancel = true;
                context.HttpContext.Response.Redirect(Url.Parse(loginUrl).AppendQuery("returnUrl", returnUrl));
            }
        }
Esempio n. 7
0
 private void OnItemDeleting(object sender, CancellableItemEventArgs e)
 {
     if (trashHandler.CanThrow(e.AffectedItem))
     {
         e.FinalAction = trashHandler.Throw;
     }
 }
        void securityEnforcer_AuthorizationFailed(object sender, CancellableItemEventArgs e)
        {
            var url = new Url("{ManagementUrl}/Login.aspx").ResolveTokens();

            url.AppendQuery("returnUrl", _context.Url.LocalUrl);
            _context.HttpContext.Response.Redirect(url);
        }
        public void DeletedItem_IsThrownInTrash()
        {
            persister.ItemDeleting += null;
            IEventRaiser invokeDelete = LastCall.IgnoreArguments().GetEventRaiser();
            persister.ItemCopied += null;
            LastCall.IgnoreArguments();
            persister.ItemMoving += null;
            LastCall.IgnoreArguments();

            TrashHandler th = mocks.StrictMock<TrashHandler>(persister, null, null, new ContainerRepository<TrashContainerItem>(persister, null, new Host(webContext, 1, 1), null), null);
            th.UseNavigationMode = true;
            Expect.Call(delegate { th.Throw(item); });

            mocks.ReplayAll();

            DeleteInterceptor interceptor = new DeleteInterceptor(persister, th);
            interceptor.Start();

            CancellableItemEventArgs deleteArgs = new CancellableItemEventArgs(item);
            invokeDelete.Raise(persister, deleteArgs);

            deleteArgs.FinalAction(deleteArgs.AffectedItem);

            mocks.VerifyAll();
        }
Esempio n. 10
0
        void persister_ItemDeleting(object sender, CancellableItemEventArgs e)
        {
            if (!autoDeleteTranslations)
            {
                gateway.Unassociate(e.AffectedItem);
                return;
            }

            // prevent infinite recursion
            if (context.RequestItems[DeletingKey] != null)
            {
                return;
            }

            ContentItem item = e.AffectedItem;

            using (new DictionaryScope(context.RequestItems, DeletingKey, item))
            {
                if (item is ILanguage)
                {
                    return;
                }

                DeleteTranslations(item);
            }
        }
 void securityEnforcer_AuthorizationFailed(object sender, CancellableItemEventArgs e)
 {
     StartPage startPage = parser.StartPage as StartPage;
     if (startPage != null && startPage.LoginPage != null)
     {
         e.Cancel = true;
         context.HttpContext.Response.Redirect(Url.Parse(startPage.LoginPage.Url).AppendQuery("returnUrl", context.Url.LocalUrl));
     }
 }
Esempio n. 12
0
        void securityEnforcer_AuthorizationFailed(object sender, CancellableItemEventArgs e)
        {
            StartPage startPage = parser.StartPage as StartPage;

            if (startPage != null && startPage.LoginPage != null)
            {
                e.Cancel = true;
                context.Response.Redirect(Url.Parse(startPage.LoginPage.Url).AppendQuery("returnUrl", context.Url.LocalUrl));
            }
        }
Esempio n. 13
0
 void persister_ItemSaving(object sender, CancellableItemEventArgs e)
 {
     try
     {
         OnTrackingLinks(e.AffectedItem);
     }
     catch (Exception ex)
     {
         errorHandler.Notify(ex);
     }
 }
Esempio n. 14
0
		void persister_ItemSaving(object sender, CancellableItemEventArgs e)
		{
            try
            {
			    OnTrackingLinks(e.AffectedItem);
            }
            catch(Exception ex)
            {
                errorHandler.Notify(ex);
            }
		}
Esempio n. 15
0
 void Persister_ItemSaving(object sender, CancellableItemEventArgs e)
 {
     foreach (var cd in e.AffectedItem.Details)
     {
         if (cd.StringValue != null)
         {
             if (cd.StringValue.Contains("script"))
             {
                 throw new Exception("The demo site does not allow scripts to be entered.");
             }
         }
     }
 }
Esempio n. 16
0
        /// <summary>Creates a version of the item. This must be called before the item item is modified to save a version before modifications.</summary>
        /// <param name="item">The item to create a old version of.</param>
        /// <returns>The old version.</returns>
        public virtual ContentItem AddVersion(ContentItem item, bool asPreviousVersion = true)
        {
            if (item == null)
                throw new ArgumentNullException("item");

            CancellableItemEventArgs args = new CancellableItemEventArgs(item);
            if (ItemSavingVersion != null)
                ItemSavingVersion.Invoke(this, args);

            if (args.Cancel)
                return null;

            item = args.AffectedItem;

            if (!item.IsPage)
            {
                var page = Find.ClosestPage(item);
                if (page == null)
                    throw new InvalidOperationException("Cannot create version of part which isn't on a page: " + item);

                var pageVersion = AddVersion(page, asPreviousVersion: asPreviousVersion);
                var partVersion = pageVersion.FindPartVersion(item);
                return partVersion;
            }

            ContentItem version = item.CloneForVersioningRecursive(stateChanger, asPreviousVersion);

            if (item.Parent != null)
                version["ParentID"] = item.Parent.ID;

			//ContentVersion savedVersion;
            if (asPreviousVersion)
            {
				/*savedVersion = */Repository.Save(version, asPreviousVersion);
                item.VersionIndex = Repository.GetGreatestVersionIndex(item) + 1;
                itemRepository.SaveOrUpdate(item);
            }
            else
            {
                version.VersionIndex = Repository.GetGreatestVersionIndex(item) + 1;
				/*savedVersion = */Repository.Save(version, asPreviousVersion);
            }

            if (ItemSavedVersion != null)
                ItemSavedVersion.Invoke(this, new ItemEventArgs(version));

            TrimVersionCountTo(item, maximumVersionsPerItem);

			return version;// Repository.DeserializeVersion(savedVersion);
        }
Esempio n. 17
0
        /// <summary>Checks that the current user is authorized to access the current item.</summary>
        public virtual void AuthorizeRequest(IPrincipal user, ContentItem page, Permission requiredPermission)
        {
            if (page != null)
            {
                if (page != null && !security.IsAuthorized(user, page, requiredPermission))
                {
                    CancellableItemEventArgs args = new CancellableItemEventArgs(page);
                    if (AuthorizationFailed != null)
                        AuthorizationFailed.Invoke(this, args);

                    if (!args.Cancel)
                        throw new PermissionDeniedException(page, user);
                }
            }
        }
Esempio n. 18
0
        void OnItemDeleting(object sender, CancellableItemEventArgs e)
        {
            InvokeBehaviors <IRemovingBehavior>(
                e.AffectedItem,
                e.AffectedItem.Parent,
                "Removing",
                (behavior, ctx) => behavior.OnRemovingChild(ctx),
                (behavior, ctx) => behavior.OnRemoving(ctx));

            InvokeBehaviors <IDeletingBehavior>(
                e.AffectedItem,
                e.AffectedItem.Parent,
                "Deleting",
                (behavior, ctx) => behavior.OnDeletingChild(ctx),
                (behavior, ctx) => behavior.OnDeleting(ctx));
        }
Esempio n. 19
0
        void OnItemSaving(object sender, CancellableItemEventArgs e)
        {
            InvokeBehaviors <ISavingBehavior>(
                e.AffectedItem,
                e.AffectedItem.Parent,
                "Saving",
                (behavior, ctx) => behavior.OnSavingChild(ctx),
                (behavior, ctx) => behavior.OnSaving(ctx));

            if (e.AffectedItem.ID == 0)
            {
                InvokeBehaviors <IAddingBehavior>(
                    e.AffectedItem,
                    e.AffectedItem.Parent,
                    "Adding",
                    (behavior, ctx) => behavior.OnAddingChild(ctx),
                    (behavior, ctx) => behavior.OnAdding(ctx));
            }
        }
Esempio n. 20
0
        /// <summary>Checks that the current user is authorized to access the current item.</summary>
        public virtual void AuthorizeRequest(IPrincipal user, ContentItem page, Permission requiredPermission)
        {
            if (page != null)
            {
                if (page != null && !security.IsAuthorized(user, page, requiredPermission))
                {
                    CancellableItemEventArgs args = new CancellableItemEventArgs(page);
                    if (AuthorizationFailed != null)
                    {
                        AuthorizationFailed.Invoke(this, args);
                    }

                    if (!args.Cancel)
                    {
                        throw new PermissionDeniedException(page, user);
                    }
                }
            }
        }
Esempio n. 21
0
        /// <summary>Creates a version of the item. This must be called before the item item is modified to save a version before modifications.</summary>
        /// <param name="item">The item to create a old version of.</param>
        /// <returns>The old version.</returns>
        public virtual ContentItem SaveVersion(ContentItem item)
        {
            CancellableItemEventArgs args = new CancellableItemEventArgs(item);

            if (ItemSavingVersion != null)
            {
                ItemSavingVersion.Invoke(this, args);
            }
            if (!args.Cancel)
            {
                item = args.AffectedItem;

                ContentItem oldVersion = item.Clone(false);
                if (item.State == ContentState.Published)
                {
                    stateChanger.ChangeTo(oldVersion, ContentState.Unpublished);
                }
                else
                {
                    stateChanger.ChangeTo(oldVersion, ContentState.Draft);
                }
                oldVersion.Expires   = Utility.CurrentTime().AddSeconds(-1);
                oldVersion.Updated   = Utility.CurrentTime().AddSeconds(-1);
                oldVersion.Parent    = null;
                oldVersion.VersionOf = item;
                if (item.Parent != null)
                {
                    oldVersion["ParentID"] = item.Parent.ID;
                }
                itemRepository.SaveOrUpdate(oldVersion);

                if (ItemSavedVersion != null)
                {
                    ItemSavedVersion.Invoke(this, new ItemEventArgs(oldVersion));
                }

                TrimVersionCountTo(item, maximumVersionsPerItem);

                return(oldVersion);
            }
            return(null);
        }
Esempio n. 22
0
        /// <summary>Checks that the current user is authorized to access the current item.</summary>
        public virtual void AuthorizeRequest(IPrincipal user, ContentItem page, Permission requiredPermission)
        {
            if (page != null)
            {
                if (page != null && !security.IsAuthorized(user, page, requiredPermission))
                {
                    CancellableItemEventArgs args = new CancellableItemEventArgs(page);
                    if (AuthorizationFailed != null)
                        AuthorizationFailed.Invoke(this, args);

                    if (args.Cancel)
                        logger.Info("AuthorizeRequest: Default permission denied handling cancelled by event handler.");
                    else
                    {
                        logger.InfoFormat("AuthorizeRequest: Executing default permission denied action with http code {0}.", permissionDeniedHttpCode);
                        throw new PermissionDeniedException(permissionDeniedHttpCode, permissionDeniedHttpCode == 401 ? "Unauthorized" : "Not Found", page, user);
                    }
                }
            }
        }
Esempio n. 23
0
		void persister_ItemDeleting(object sender, CancellableItemEventArgs e)
		{
			if (!autoDeleteTranslations)
			{
				gateway.Unassociate(e.AffectedItem);
				return;
			}

			// prevent infinite recursion
			if (context.RequestItems[DeletingKey] != null) return;

			ContentItem item = e.AffectedItem;
			using (new DictionaryScope(context.RequestItems, DeletingKey, item))
			{
				if (item is ILanguage)
					return;

				DeleteTranslations(item);
			}
		}
Esempio n. 24
0
        /// <summary>Throws an item in a way that it later may be restored to it's original location at a later stage.</summary>
        /// <param name="item">The item to throw.</param>
        public virtual void Throw(ContentItem item)
        {
            CancellableItemEventArgs args = Invoke <CancellableItemEventArgs>(ItemThrowing, new CancellableItemEventArgs(item));

            if (!args.Cancel)
            {
                item = args.AffectedItem;

                ExpireTrashedItem(item);

                try
                {
                    persister.Move(item, GetTrashContainer(true));
                }
                catch (PermissionDeniedException ex)
                {
                    throw new PermissionDeniedException("Permission denied while moving item to trash. Try disabling security checks using N2.Context.Security or preventing items from beeing moved to the trash with the [NonThrowable] attribute", ex);
                }

                Invoke <ItemEventArgs>(ItemThrowed, new ItemEventArgs(item));
            }
        }
Esempio n. 25
0
        /// <summary>Checks that the current user is authorized to access the current item.</summary>
        public virtual void AuthorizeRequest(IPrincipal user, ContentItem page, Permission requiredPermission)
        {
            if (page != null)
            {
                if (page != null && !security.IsAuthorized(user, page, requiredPermission))
                {
                    CancellableItemEventArgs args = new CancellableItemEventArgs(page);
                    if (AuthorizationFailed != null)
                    {
                        AuthorizationFailed.Invoke(this, args);
                    }

                    if (args.Cancel)
                    {
                        logger.Info("AuthorizeRequest: Default permission denied handling cancelled by event handler.");
                    }
                    else
                    {
                        logger.InfoFormat("AuthorizeRequest: Executing default permission denied action with http code {0}.", permissionDeniedHttpCode);
                        throw new PermissionDeniedException(permissionDeniedHttpCode, permissionDeniedHttpCode == 401 ? "Unauthorized" : "Not Found", page, user);
                    }
                }
            }
        }
Esempio n. 26
0
 void Events_ItemSavingVersion(object sender, CancellableItemEventArgs e)
 {
     events.AppendLine(DateTime.Now + ": " + MethodBase.GetCurrentMethod().Name + ", " + e.AffectedItem);
 }
Esempio n. 27
0
 private void ItemDeletingEvenHandler(object sender, CancellableItemEventArgs e)
 {
     OnItemDeleting(e.AffectedItem);
 }
Esempio n. 28
0
 protected void editManager_SavingVersion(object sender, CancellableItemEventArgs e)
 {
     savingVersionEventInvoked = true;
 }
Esempio n. 29
0
 private void ItemSavingEventHandler(object sender, CancellableItemEventArgs e)
 {
     if (security.Enabled && security.ScopeEnabled)
         OnItemSaving(e.AffectedItem);
 }
Esempio n. 30
0
 protected void editManager_SavingVersion(object sender, CancellableItemEventArgs e)
 {
     savingVersionEventInvoked = true;
 }
Esempio n. 31
0
 private void ItemDeletingEvenHandler(object sender, CancellableItemEventArgs e)
 {
     OnItemDeleting(e.AffectedItem);
 }
        public void NonThrowableItem_IsNotMovedToTrashcan()
        {
            IDefinitionManager definitions = mocks.Stub<IDefinitionManager>();

            IPersister persister = mocks.Stub<IPersister>();
            Expect.Call(persister.Get(1)).Return(root).Repeat.Any();
            persister.ItemDeleting += null;
            IEventRaiser invokeDelete = LastCall.IgnoreArguments().GetEventRaiser();

            mocks.ReplayAll();

            var host = new Host(webContext, 1, 1);
            TrashHandler th = new TrashHandler(persister, null, null, new ContainerRepository<TrashContainerItem>(persister, null, host, null), new StateChanger()) { UseNavigationMode = true };
            DeleteInterceptor interceptor = new DeleteInterceptor(persister, th);
            interceptor.Start();

            CancellableItemEventArgs deleteArgs = new CancellableItemEventArgs(nonThrowable);
            invokeDelete.Raise(persister, deleteArgs);

            Assert.That(deleteArgs.Cancel, Is.False);
            Assert.That(trash.Children.Count, Is.EqualTo(0));
        }
Esempio n. 33
0
 void Persister_ItemDeleting(object sender, CancellableItemEventArgs e)
 {
     events.AppendLine(DateTime.Now + ": " + MethodBase.GetCurrentMethod().Name + ", " + e.AffectedItem);
 }
Esempio n. 34
0
        /// <summary>Creates a version of the item. This must be called before the item item is modified to save a version before modifications.</summary>
        /// <param name="item">The item to create a old version of.</param>
        /// <returns>The old version.</returns>
        public virtual ContentItem AddVersion(ContentItem item, bool asPreviousVersion = true)
        {
            if (item == null)
            {
                throw new ArgumentNullException("item");
            }

            CancellableItemEventArgs args = new CancellableItemEventArgs(item);

            if (ItemSavingVersion != null)
            {
                ItemSavingVersion.Invoke(this, args);
            }

            if (args.Cancel)
            {
                return(null);
            }

            item = args.AffectedItem;

            if (!item.IsPage)
            {
                var page = Find.ClosestPage(item);
                if (page == null)
                {
                    throw new InvalidOperationException("Cannot create version of part which isn't on a page: " + item);
                }

                var pageVersion = AddVersion(page, asPreviousVersion: asPreviousVersion);
                var partVersion = pageVersion.FindPartVersion(item);
                return(partVersion);
            }

            ContentItem version = item.CloneForVersioningRecursive(stateChanger, asPreviousVersion);

            if (item.Parent != null)
            {
                version["ParentID"] = item.Parent.ID;
            }

            //ContentVersion savedVersion;
            if (asPreviousVersion)
            {
                /*savedVersion = */ Repository.Save(version, asPreviousVersion);
                item.VersionIndex = Repository.GetGreatestVersionIndex(item) + 1;
                itemRepository.SaveOrUpdate(item);
            }
            else
            {
                version.VersionIndex = Repository.GetGreatestVersionIndex(item) + 1;
                /*savedVersion = */ Repository.Save(version, asPreviousVersion);
            }

            if (ItemSavedVersion != null)
            {
                ItemSavedVersion.Invoke(this, new ItemEventArgs(version));
            }

            TrimVersionCountTo(item, maximumVersionsPerItem);

            return(version);           // Repository.DeserializeVersion(savedVersion);
        }
Esempio n. 35
0
 void Persister_ItemDeleting(object sender, CancellableItemEventArgs e)
 {
     events.AppendLine(DateTime.Now + ": " + MethodBase.GetCurrentMethod().Name + ", " + e.AffectedItem);
 }
Esempio n. 36
0
 void Events_ItemSavingVersion(object sender, CancellableItemEventArgs e)
 {
     events.AppendLine(DateTime.Now + ": " + MethodBase.GetCurrentMethod().Name + ", " + e.AffectedItem);
 }