public async Task <List <IProjectSettings> > GetUserProjects(string userName, string password)
        {
            var permission = await security.ValidatePermissions(
                string.Empty,
                userName,
                password,
                CancellationToken
                ).ConfigureAwait(false);

            var result = new List <IProjectSettings>(); //empty

            if (!permission.CanEditPosts)
            {
                return(result); //empty
            }

            var project = await projectQueries.GetProjectSettings(permission.ProjectId, CancellationToken);

            if (project != null)
            {
                result.Add(project);
                return(result);
            }

            //await EnsureBlogSettings().ConfigureAwait(false);
            //return settings;
            return(await projectQueries.GetProjectSettingsByUser(userName, CancellationToken).ConfigureAwait(false));
        }
        public async Task <List <IPost> > GetRecentPosts(
            string projectId,
            string userName,
            string password,
            int numberToGet)
        {
            var permission = await security.ValidatePermissions(
                projectId,
                userName,
                password,
                CancellationToken
                ).ConfigureAwait(false);

            if (!permission.CanEditPosts)
            {
                return(new List <IPost>()); // empty
            }


            return(await postQueries.GetRecentPosts(
                       projectId,
                       numberToGet,
                       CancellationToken)
                   .ConfigureAwait(false));
        }
Ejemplo n.º 3
0
        public async Task <MetaWeblogSecurityResult> ValiatePermissions(MetaWeblogRequest request, CancellationToken cancellationToken)
        {
            var blogResult = await blogSecurity.ValidatePermissions(
                request.BlogId,
                request.UserName,
                request.Password,
                cancellationToken
                ).ConfigureAwait(false);

            return(new MetaWeblogSecurityResult(
                       blogResult.DisplayName,
                       blogResult.ProjectId,
                       blogResult.IsAuthenticated,
                       blogResult.CanEditPosts,
                       blogResult.CanEditPages
                       ));
        }
Ejemplo n.º 4
0
        public async Task Create(
            string projectId,
            string userName,
            string password,
            IPage page,
            bool publish)
        {
            var permission = await security.ValidatePermissions(
                projectId,
                userName,
                password,
                CancellationToken
                ).ConfigureAwait(false);

            if (!permission.CanEditPosts)
            {
                return;
            }

            var settings = await projectService.GetProjectSettings(projectId).ConfigureAwait(false);

            if (publish)
            {
                page.PubDate = DateTime.UtcNow;
            }

            if (string.IsNullOrEmpty(page.Slug))
            {
                var slug      = ContentUtils.CreateSlug(page.Title);
                var available = await SlugIsAvailable(slug);

                if (available)
                {
                    page.Slug = slug;
                }
            }

            var urlHelper            = urlHelperFactory.GetUrlHelper(actionContextAccesor.ActionContext);
            var imageAbsoluteBaseUrl = urlHelper.Content("~" + settings.LocalMediaVirtualPath);

            if (context != null)
            {
                imageAbsoluteBaseUrl = context.Request.AppBaseUrl() + settings.LocalMediaVirtualPath;
            }

            // open live writer passes in posts with absolute urls
            // we want to change them to relative to keep the files portable
            // to a different root url
            page.Content = await _contentProcessor.ConvertMediaUrlsToRelative(
                settings.LocalMediaVirtualPath,
                imageAbsoluteBaseUrl, //this shold be resolved from virtual using urlhelper
                page.Content);

            // olw also adds hard coded style to images
            page.Content = _contentProcessor.RemoveImageStyleAttribute(page.Content);

            // here we need to process any base64 embedded images
            // save them under wwwroot
            // and update the src in the post with the new url
            // since this overload of Save is only called from metaweblog
            // and metaweblog does not base64 encode the images like the browser client
            // this call may not be needed here
            //await mediaProcessor.ConvertBase64EmbeddedImagesToFilesWithUrls(
            //    settings.LocalMediaVirtualPath,
            //    post
            //    ).ConfigureAwait(false);

            var nonPublishedDate = new DateTime(1, 1, 1);

            if (page.PubDate == nonPublishedDate)
            {
                page.PubDate = DateTime.UtcNow;
            }

            await pageCommands.Create(projectId, page).ConfigureAwait(false);

            await eventHandlers.HandleCreated(projectId, page).ConfigureAwait(false);
        }
Ejemplo n.º 5
0
        public async Task <string> NewPost(
            string blogId,
            string userName,
            string password,
            PostStruct newPost,
            bool publish,
            string authorDisplayName
            )
        {
            var permission = await _security.ValidatePermissions(
                blogId,
                userName,
                password,
                CancellationToken.None
                ).ConfigureAwait(false);

            if (!permission.CanEditPosts)
            {
                _log.LogWarning($"rejecting new post because user {userName} cannot edit posts");
                return(null);
            }

            var post = _mapper.GetPostFromStruct(newPost);

            post.BlogId        = blogId;
            post.Id            = Guid.NewGuid().ToString();
            post.Author        = authorDisplayName;
            post.CreatedByUser = permission.DisplayName;
            if (publish)
            {
                post.IsPublished = true;
                if (post.IsPublished)
                {
                    post.PubDate = DateTime.UtcNow;
                }
            }
            else
            {
                post.DraftAuthor  = post.Author;
                post.DraftContent = post.Content;
                post.Content      = null;
                post.PubDate      = null;
            }

            var convertToRelativeUrls = true;

            await _blogService.Create(post, convertToRelativeUrls).ConfigureAwait(false);

            if (publish)
            {
                await _blogService.FirePublishEvent(post);
            }

            return(post.Id);
        }
        public async Task <string> NewPost(
            string blogId,
            string userName,
            string password,
            PostStruct newPost,
            bool publish,
            string authorDisplayName
            )
        {
            var permission = await _security.ValidatePermissions(
                blogId,
                userName,
                password,
                CancellationToken.None
                ).ConfigureAwait(false);

            if (!permission.CanEditPosts)
            {
                _log.LogWarning($"rejecting new post because user {userName} cannot edit posts");
                return(null);
            }

            var post = _mapper.GetPostFromStruct(newPost);

            post.BlogId        = blogId;
            post.Id            = Guid.NewGuid().ToString();
            post.Author        = authorDisplayName;
            post.CreatedByUser = permission.DisplayName;
            var utcPubDate = _timeZoneHelper.ConvertToUtc(newPost.postDate, permission.TimeZoneId);

            if (publish)
            {
                if (utcPubDate.Year == 1)
                {
                    //invalid because not supplied
                    utcPubDate = DateTime.UtcNow;
                }

                if (utcPubDate <= DateTime.UtcNow)
                {
                    post.IsPublished = true;
                    post.PubDate     = utcPubDate;
                }
                else
                {
                    //future date needs to be draft, it will auto publish after pub date
                    post.DraftAuthor  = post.Author;
                    post.DraftContent = post.Content;
                    post.DraftPubDate = utcPubDate;
                    post.IsPublished  = false;
                    post.PubDate      = null;
                    post.Content      = null;
                }
            }
            else
            {
                post.DraftAuthor  = post.Author;
                post.DraftContent = post.Content;
                if (utcPubDate > DateTime.UtcNow)
                {
                    post.DraftPubDate = utcPubDate;
                }

                post.Content = null;
                post.PubDate = null;
            }

            await _blogUrlResolver.ConvertMediaToRelativeUrls(post).ConfigureAwait(false);

            await _blogService.Create(post).ConfigureAwait(false);

            if (publish)
            {
                await _blogService.FirePublishEvent(post).ConfigureAwait(false);
            }

            return(post.Id);
        }