Esempio n. 1
0
        public async Task <Page> CreateAsync(CreatePageCommand cmd)
        {
            if (!cmd.IsValid)
            {
                throw new InvalidCommandException(nameof(CreatePageCommand), cmd);
            }

            var book = await _unitOfWork.BookRepository.FindAsync(cmd.BookId);

            if (book == null)
            {
                throw new NotFoundException(nameof(Book), cmd.BookId);
            }

            if (!_auth.CanWrite(book))
            {
                throw new NotAllowedException(_auth.Login, nameof(Book), cmd.BookId);
            }

            var page = new Page
            {
                Book      = book,
                Title     = cmd.Title,
                Slug      = await GetUniqueSlugAsync(cmd.Slug, book.Id),
                Type      = cmd.Type,
                State     = cmd.State,
                Owner     = await _auth.GetCurrentUserEntityAsync(),
                CreatedAt = DateTime.Now
            };

            _unitOfWork.PageRepository.Create(page);
            await _unitOfWork.SaveAsync();

            return(page);
        }
Esempio n. 2
0
        /// <summary>
        /// Initializes a new instance of the <see cref="CommandMapper"/> class.
        /// </summary>
        /// <param name="createSpaceCommand">The command to create a space.</param>
        /// <param name="listSpacesCommand">The command to list all spaces.</param>
        /// <param name="createPageCommand">The command to create a page.</param>
        public CommandMapper(
            CreateSpaceCommand createSpaceCommand,
            ListSpacesCommand listSpacesCommand,
            CreatePageCommand createPageCommand)
        {
            #region Spaces Commands

            Command createSpace = new Command("create-space")
            {
                new Argument <SpaceName>("name"),
            };
            createSpace.Description = "Creates a new space.";
            createSpace.Handler     = CommandHandler.Create <SpaceName>(createSpaceCommand.CreateSpace);

            Command listSpaces = new Command("list-spaces");
            listSpaces.Description = "Shows a list of all currently existing spaces.";
            listSpaces.Handler     = CommandHandler.Create(listSpacesCommand.ListSpaces);

            #endregion

            #region Pages Command

            Command createPage = new Command("create-page")
            {
                new Argument <SpaceName>("space")
                {
                    Description = "parent space for the new page",
                },
                new Argument <PageName>("page")
                {
                    Description = "page name",
                },
                new Argument <FileInfo>("file")
                {
                    Description = "file to read the content from",
                },
            };
            createPage.Description = "Creates a new page within a space.";
            createPage.Handler     = CommandHandler.Create <SpaceName, PageName, FileInfo>(createPageCommand.CreatePage);

            #endregion

            _rootCommand = new RootCommand()
            {
                // spaces
                createSpace,
                listSpaces,

                // pages
                createPage,
            };
        }
Esempio n. 3
0
        public void Should_Create_New_Page_With_Access_Rules()
        {
            RunActionInTransaction(
                session =>
            {
                var tempLayout = TestDataProvider.CreateNewLayout();
                session.SaveOrUpdate(tempLayout);
                session.Flush();

                var uow        = new DefaultUnitOfWork(session);
                var repository = new DefaultRepository(uow);
                var configMock = new Mock <ICmsConfiguration>();
                configMock.SetupAllProperties().Setup(f => f.Security.AccessControlEnabled).Returns(true);
                configMock.Setup(f => f.Security.DefaultAccessRules).Returns(new AccessControlCollection
                {
                    DefaultAccessLevel = "readwrite"
                });
                var config = configMock.Object;

                var command = new CreatePageCommand(
                    new Mock <IPageService>().SetupAllProperties().Object,
                    new DefaultUrlService(uow, config),
                    config,
                    new Mock <IOptionService>().SetupAllProperties().Object,
                    new Mock <IMasterPageService>().SetupAllProperties().Object);

                command.UnitOfWork           = uow;
                command.Repository           = repository;
                command.AccessControlService = new DefaultAccessControlService(Container.Resolve <ISecurityService>(), new HttpRuntimeCacheService(), config, repository);

                var contextMock = new Mock <ICommandContext>();
                contextMock.Setup(c => c.Principal).Returns(new GenericPrincipal(new GenericIdentity("John Doe"), new[] { RootModuleConstants.UserRoles.EditContent }));
                command.Context = contextMock.Object;

                var request = new AddNewPageViewModel();
                request.AccessControlEnabled = true;
                request.PageTitle            = "TestCreatePageCommand";
                request.PageUrl    = "/test-CreatePageCommand/";
                request.TemplateId = tempLayout.Id;

                request.UserAccessList = new List <UserAccessViewModel>(
                    new[]
                {
                    new UserAccessViewModel
                    {
                        Identity    = "test 1",
                        AccessLevel = AccessLevel.ReadWrite
                    },

                    new UserAccessViewModel
                    {
                        Identity    = "test 2",
                        AccessLevel = AccessLevel.Deny
                    }
                });

                var response = command.Execute(request);
                session.Clear();

                Assert.IsNotNull(response);

                var page = session.Query <Page>().FirstOrDefault(f => f.Id == response.PageId);
                Assert.IsNotNull(page);
                Assert.IsNotNull(page.AccessRules);
                Assert.AreEqual(2, page.AccessRules.Count());
            });
        }
Esempio n. 4
0
        public async Task <ActionResult <int> > Create([FromForm] CreatePageCommand command)
        {
            var res = await _mediator.Send(command);

            return(Ok(res));
        }
Esempio n. 5
0
        public void Should_Create_New_Page_With_Access_Rules()
        {
            RunActionInTransaction(
                session =>
                    {
                        var tempLayout = TestDataProvider.CreateNewLayout();
                        session.SaveOrUpdate(tempLayout);
                        session.Flush();

                        var uow = new DefaultUnitOfWork(session);
                        var repository = new DefaultRepository(uow);
                        var configMock = new Mock<ICmsConfiguration>();
                        configMock.SetupAllProperties().Setup(f => f.Security.AccessControlEnabled).Returns(true);
                        configMock.Setup(f => f.Security.DefaultAccessRules).Returns(new AccessControlCollection
                                                                                         {
                                                                                             DefaultAccessLevel = "readwrite"
                                                                                         });
                        var config = configMock.Object;

                        var command = new CreatePageCommand(
                            new Mock<IPageService>().SetupAllProperties().Object,
                            new DefaultUrlService(uow, config),
                            config,
                            new DefaultAccessControlService(Container.Resolve<ISecurityService>(), new HttpRuntimeCacheService(), config),
                            new Mock<IOptionService>().SetupAllProperties().Object);

                        command.UnitOfWork = uow;
                        command.Repository = repository;

                        var request = new AddNewPageViewModel();
                        request.AccessControlEnabled = true;
                        request.PageTitle = "TestCreatePageCommand";
                        request.PageUrl = "/test-CreatePageCommand/";
                        request.TemplateId = tempLayout.Id;

                        request.UserAccessList = new List<UserAccessViewModel>(
                            new[]
                                {
                                    new UserAccessViewModel
                                        {
                                            Identity = "test 1",
                                            AccessLevel = AccessLevel.ReadWrite
                                        },

                                    new UserAccessViewModel
                                        {
                                            Identity = "test 2",
                                            AccessLevel = AccessLevel.Deny
                                        }
                                });

                        var response = command.Execute(request);
                        session.Clear();

                        Assert.IsNotNull(response);

                        var page = session.Query<Page>().FirstOrDefault(f => f.Id == response.PageId);
                        Assert.IsNotNull(page);
                        Assert.IsNotNull(page.AccessRules);
                        Assert.AreEqual(2, page.AccessRules.Count());

                    });
        }