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)); }
private void ItemDeletingEvenHandler(object sender, CancellableItemEventArgs e) { if (security.Enabled && security.ScopeEnabled) { OnItemDeleting(e.AffectedItem); } }
private void OnItemDeleting(object sender, CancellableItemEventArgs e) { if (trashHandler.CanThrow(e.AffectedItem)) { e.FinalAction = trashHandler.Throw; } }
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(); }
/// <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)); } }
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(); }
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)); } }
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)); } }
void persister_ItemSaving(object sender, CancellableItemEventArgs e) { try { OnTrackingLinks(e.AffectedItem); } catch (Exception ex) { errorHandler.Notify(ex); } }
void persister_ItemSaving(object sender, CancellableItemEventArgs e) { try { OnTrackingLinks(e.AffectedItem); } catch(Exception ex) { errorHandler.Notify(ex); } }
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."); } } } }
/// <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); }
/// <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); } } }
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)); }
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)); } }
/// <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); } } } }
/// <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); }
/// <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); } } } }
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); } }
/// <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)); } }
/// <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); } } } }
void Events_ItemSavingVersion(object sender, CancellableItemEventArgs e) { events.AppendLine(DateTime.Now + ": " + MethodBase.GetCurrentMethod().Name + ", " + e.AffectedItem); }
private void ItemDeletingEvenHandler(object sender, CancellableItemEventArgs e) { OnItemDeleting(e.AffectedItem); }
protected void editManager_SavingVersion(object sender, CancellableItemEventArgs e) { savingVersionEventInvoked = true; }
private void ItemSavingEventHandler(object sender, CancellableItemEventArgs e) { if (security.Enabled && security.ScopeEnabled) OnItemSaving(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)); }
void Persister_ItemDeleting(object sender, CancellableItemEventArgs e) { events.AppendLine(DateTime.Now + ": " + MethodBase.GetCurrentMethod().Name + ", " + e.AffectedItem); }
/// <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); }