private async Task <XRpcStruct> MetaWeblogGetPostAsync( XmlRpcContext context, string contentItemId, string userName, string password, IEnumerable <IXmlRpcDriver> drivers) { var user = await ValidateUserAsync(userName, password); var contentItem = await _contentManager.GetAsync(contentItemId, VersionOptions.Latest); if (contentItem == null) { throw new ArgumentException(); } await CheckAccessAsync(Permissions.EditContent, user, contentItem); var postStruct = CreateBlogStruct(context, contentItem); foreach (var driver in _metaWeblogDrivers) { driver.BuildPost(postStruct, context, contentItem); } foreach (var driver in drivers) { driver.Process(postStruct); } return(postStruct); }
private async Task <XRpcArray> MetaWeblogGetUserBlogsAsync(XmlRpcContext context, string userName, string password) { var user = await ValidateUserAsync(userName, password); XRpcArray array = new XRpcArray(); // Look for all types using ListPart foreach (var type in _contentDefinitionManager.ListTypeDefinitions()) { if (!type.Parts.Any(x => x.Name == nameof(ListPart))) { continue; } foreach (var list in await _session.QueryAsync <ContentItem, ContentItemIndex>(x => x.ContentType == type.Name).List()) { // User needs to at least have permission to edit its own blog posts to access the service if (await _authorizationService.AuthorizeAsync(user, Permissions.EditContent, list)) { var metadata = _contentManager.PopulateAspect <ContentItemMetadata>(list); var displayRouteValues = metadata.DisplayRouteValues; array.Add(new XRpcStruct() .Set("url", context.Url.Action(displayRouteValues["action"].ToString(), displayRouteValues["controller"].ToString(), displayRouteValues, context.HttpContext.Request.Scheme)) .Set("blogid", list.ContentItemId) .Set("blogName", metadata.DisplayText)); } } } return(array); }
private XRpcStruct CreateBlogStruct(XmlRpcContext context, ContentItem contentItem) { var metadata = _contentManager.PopulateAspect <ContentItemMetadata>(contentItem); var url = context.Url.Action( metadata.DisplayRouteValues["action"].ToString(), metadata.DisplayRouteValues["controller"].ToString(), metadata.DisplayRouteValues, context.HttpContext.Request.Scheme); if (contentItem.HasDraft()) { url = context.Url.Action("Preview", "Item", new { area = "Orchard.Contents", contentItemId = contentItem.ContentItemId }); } var blogStruct = new XRpcStruct() .Set("postid", contentItem.ContentItemId) .Set("link", url) .Set("permaLink", url); if (contentItem.PublishedUtc != null) { blogStruct.Set("dateCreated", contentItem.PublishedUtc); blogStruct.Set("date_created_gmt", contentItem.PublishedUtc); } foreach (var driver in _metaWeblogDrivers) { driver.BuildPost(blogStruct, context, contentItem); } return(blogStruct); }
private async Task <XRpcMethodResponse> DispatchAsync(XRpcMethodCall request) { var context = new XmlRpcContext { Url = Url, ControllerContext = ControllerContext, HttpContext = HttpContext, RpcMethodCall = request }; try { foreach (var handler in _xmlRpcHandlers) { await handler.ProcessAsync(context); } } catch (Exception e) { // if a core exception is raised, report the error message, otherwise signal a 500 context.RpcMethodResponse = context.RpcMethodResponse ?? new XRpcMethodResponse(); context.RpcMethodResponse.Fault = new XRpcFault(0, e.Message); } return(context.RpcMethodResponse); }
public void Process(XmlRpcContext context) { switch (context.Request.MethodName) { case "metaWeblog.newPost": MetaWeblogSetCustomCreatedDate( GetId(context.Response), Convert.ToString(context.Request.Params[0].Value), Convert.ToString(context.Request.Params[1].Value), Convert.ToString(context.Request.Params[2].Value), (XRpcStruct)context.Request.Params[3].Value, Convert.ToBoolean(context.Request.Params[4].Value), context._drivers); break; case "metaWeblog.editPost": MetaWeblogSetCustomCreatedDate( GetId(context.Response), Convert.ToString(context.Request.Params[0].Value), Convert.ToString(context.Request.Params[1].Value), Convert.ToString(context.Request.Params[2].Value), (XRpcStruct)context.Request.Params[3].Value, Convert.ToBoolean(context.Request.Params[4].Value), context._drivers); break; } }
private static string ReplaceTokens(XmlRpcContext context, string rawUrl) { var url = rawUrl; foreach (var pair in context.Values) { url = url.Replace($"{{{pair.Key}}}", pair.Value); } return(url); }
public async Task ProcessRequestAsync(XmlRpcContext context) { var request = context.HttpContext.Request; if (!request.Method.Equals( HttpVerbs.Get.ToString(), StringComparison.OrdinalIgnoreCase)) { throw new InvalidOperationException(); } using (var ms = new MemoryStream()) { var xmlWriter = XmlWriter.Create(ms); xmlWriter.WriteStartDocument(); { xmlWriter.WriteStartElement("rsd", "http://schemas.microsoft.com/wlw/manifest/weblog"); { xmlWriter.WriteAttributeString("version", "1.0"); xmlWriter.WriteStartElement("service"); { xmlWriter.WriteStartElement("engineName"); xmlWriter.WriteString(context.Options.EngineName); xmlWriter.WriteEndElement(); xmlWriter.WriteStartElement("homePageLink"); xmlWriter.WriteString(context.GenerateHomepageUrl()); xmlWriter.WriteEndElement(); xmlWriter.WriteStartElement("apis"); { xmlWriter.WriteStartElement("api"); xmlWriter.WriteAttributeString("name", "MetaWeblog"); xmlWriter.WriteAttributeString("preferred", "true"); xmlWriter.WriteAttributeString("apiLink", context.GenerateEndpointUrl()); xmlWriter.WriteAttributeString("blogID", context.Values[context.Options.BlogIdTokenName] ?? string.Empty); } xmlWriter.WriteEndElement(); } xmlWriter.WriteEndElement(); } xmlWriter.WriteEndElement(); xmlWriter.WriteEndElement(); } xmlWriter.WriteEndDocument(); xmlWriter.Flush(); ms.Position = 0; context.HttpContext.Response.ContentType = "text/xml"; await ms.CopyToAsync(context.HttpContext.Response.Body); } }
public void Process(XmlRpcContext context) { if (context.Request.MethodName == "metaWeblog.newMediaObject") { var result = MetaWeblogNewMediaObject( Convert.ToString(context.Request.Params[1].Value), Convert.ToString(context.Request.Params[2].Value), (XRpcStruct)context.Request.Params[3].Value); context.Response = new XRpcMethodResponse().Add(result); } }
public override void BuildPost(XRpcStruct rpcStruct, XmlRpcContext context, ContentItem contentItem) { var bodyPart = contentItem.As <BodyPart>(); if (bodyPart == null) { return; } rpcStruct.Set("description", bodyPart.Body); }
public override void BuildPost(XRpcStruct rpcStruct, XmlRpcContext context, ContentItem contentItem) { var titlePart = contentItem.As <TitlePart>(); if (titlePart == null) { return; } rpcStruct.Set("title", _encoder.Encode(titlePart.Title)); }
public override void BuildPost(XRpcStruct rpcStruct, XmlRpcContext context, ContentItem contentItem) { var autoroutePart = contentItem.As <AutoroutePart>(); if (autoroutePart == null) { return; } rpcStruct.Set("wp_slug", autoroutePart.Path); }
public async Task <bool> ProcessAsync(XmlRpcContext context) { foreach (var handler in Handlers) { if (handler.CanProcess(context)) { await handler.ProcessRequestAsync(context); return(true); } } return(false); }
public void Process(XmlRpcContext context) { switch (context.Request.MethodName) { case "metaWeblog.getCategories": // hack... because live writer still asks for it... if (context.Response == null) { context.Response = new XRpcMethodResponse().Add(new XRpcArray()); } break; case "wp.getTags": var tags = MetaWeblogGetTags( Convert.ToString(context.Request.Params[0].Value), Convert.ToString(context.Request.Params[1].Value), Convert.ToString(context.Request.Params[2].Value)); context.Response = new XRpcMethodResponse().Add(tags); break; case "metaWeblog.getPost": MetaWeblogAttachTagsToPost( GetPost(context.Response), Convert.ToInt32(context.Request.Params[0].Value), Convert.ToString(context.Request.Params[1].Value), Convert.ToString(context.Request.Params[2].Value), context._drivers); break; case "metaWeblog.newPost": MetaWeblogUpdateTags( GetId(context.Response), Convert.ToString(context.Request.Params[0].Value), Convert.ToString(context.Request.Params[1].Value), Convert.ToString(context.Request.Params[2].Value), (XRpcStruct)context.Request.Params[3].Value, Convert.ToBoolean(context.Request.Params[4].Value), context._drivers); break; case "metaWeblog.editPost": MetaWeblogUpdateTags( GetId(context.Response), Convert.ToString(context.Request.Params[0].Value), Convert.ToString(context.Request.Params[1].Value), Convert.ToString(context.Request.Params[2].Value), (XRpcStruct)context.Request.Params[3].Value, Convert.ToBoolean(context.Request.Params[4].Value), context._drivers); break; } }
public void Process(XmlRpcContext context) { var urlHelper = new UrlHelper(context.ControllerContext.RequestContext, _routeCollection); if (context.Request.MethodName == "metaWeblog.newMediaObject") { var result = MetaWeblogNewMediaObject( Convert.ToString(context.Request.Params[1].Value), Convert.ToString(context.Request.Params[2].Value), (XRpcStruct)context.Request.Params[3].Value, urlHelper); context.Response = new XRpcMethodResponse().Add(result); } }
private XRpcMethodResponse Dispatch(XRpcMethodCall request) { var context = new XmlRpcContext { ControllerContext = ControllerContext, HttpContext = HttpContext, Request = request }; try { foreach (var handler in _xmlRpcHandlers) { handler.Process(context); } } catch (OrchardCoreException e) { // if a core exception is raised, report the error message, otherwise signal a 500 context.Response = context.Response ?? new XRpcMethodResponse(); context.Response.Fault = new XRpcFault(0, e.LocalizedMessage.ToString()); } return context.Response; }
/// <summary> /// Generate absolute Url /// </summary> /// <param name="context"></param> /// <param name="relativeUrl"></param> /// <returns></returns> private static string GenerateAbsoluteUrl(XmlRpcContext context, string relativeUrl) { var builder = new UriBuilder(); var request = context.HttpContext.Request; builder.Scheme = request.Scheme; builder.Host = request.Host.Host; if (request.Host.Port.HasValue) { builder.Port = request.Host.Port.Value; } builder.Path = relativeUrl; return(builder.ToString()); }
private async Task <XRpcArray> MetaWeblogGetRecentPosts( XmlRpcContext context, string contentItemId, string userName, string password, int numberOfPosts, IEnumerable <IXmlRpcDriver> drivers) { var user = await ValidateUserAsync(userName, password); // User needs to at least have permission to edit its own blog posts to access the service await CheckAccessAsync(Permissions.EditContent, user, null); var list = await _contentManager.GetAsync(contentItemId); if (list == null) { throw new InvalidOperationException("Could not find content item " + contentItemId); } var array = new XRpcArray(); var contentItems = await _session.Query <ContentItem>() .With <ContainedPartIndex>(x => x.ListContentItemId == contentItemId) .With <ContentItemIndex>(x => x.Latest) .OrderByDescending(x => x.CreatedUtc) .Take(numberOfPosts) .ListAsync(); foreach (var contentItem in contentItems) { var postStruct = CreateBlogStruct(context, contentItem); foreach (var driver in drivers) { driver.Process(postStruct); } array.Add(postStruct); } return(array); }
private XRpcMethodResponse Dispatch(XRpcMethodCall request) { var context = new XmlRpcContext { ControllerContext = ControllerContext, HttpContext = HttpContext, Request = request }; try { foreach (var handler in _xmlRpcHandlers) { handler.Process(context); } } catch (OrchardCoreException e) { // if a core exception is raised, report the error message, otherwise signal a 500 context.Response = context.Response ?? new XRpcMethodResponse(); context.Response.Fault = new XRpcFault(0, e.LocalizedMessage.ToString()); } return(context.Response); }
/// <summary> /// Response to the request /// </summary> /// <param name="context"></param> /// <param name="rpcService"></param> /// <param name="provider"></param> /// <returns></returns> public async Task Invoke(HttpContext context, IXmlRpcService rpcService, IMetaWeblogEndpointProvider provider) { var scopeFactory = serviceProvider.GetRequiredService <IServiceScopeFactory>(); var xmlRpcContext = new XmlRpcContext(context, Options?.Value, new Dictionary <string, string>(), serviceProvider, scopeFactory, new Type[] { rpcService.GetType() }); if (context.Request.Path.StartsWithSegments(xmlRpcContext.Options.SummaryEndpoint) || context.Request.Path.StartsWithSegments(xmlRpcContext.Options.Endpoint) || context.Request.Path.StartsWithSegments(xmlRpcContext.Options.RsdEndpoint) || context.Request.Path.StartsWithSegments(xmlRpcContext.Options.ManifestEndpoint) ) { // Add blog id into the context. xmlRpcContext.Values.Add(Options?.Value.BlogIdTokenName, context.Request.Path.ExtractBlogId()); var result = await provider.ProcessAsync(xmlRpcContext); if (result) { return; } } await next.Invoke(context); }
private XRpcMethodResponse Dispatch(XRpcMethodCall request) { var context = new XmlRpcContext { ControllerContext = ControllerContext, HttpContext = HttpContext, Request = request }; foreach (var handler in _xmlRpcHandlers) handler.Process(context); return context.Response; }
public void Process(XmlRpcContext context) { }
public async Task ProcessAsync(XmlRpcContext context) { if (context.RpcMethodCall.MethodName == "blogger.getUsersBlogs") { var result = await MetaWeblogGetUserBlogsAsync(context, Convert.ToString(context.RpcMethodCall.Params[1].Value), Convert.ToString(context.RpcMethodCall.Params[2].Value)); context.RpcMethodResponse = new XRpcMethodResponse().Add(result); } if (context.RpcMethodCall.MethodName == "metaWeblog.getRecentPosts") { var result = await MetaWeblogGetRecentPosts( context, Convert.ToString(context.RpcMethodCall.Params[0].Value), Convert.ToString(context.RpcMethodCall.Params[1].Value), Convert.ToString(context.RpcMethodCall.Params[2].Value), Convert.ToInt32(context.RpcMethodCall.Params[3].Value), context.Drivers); context.RpcMethodResponse = new XRpcMethodResponse().Add(result); } if (context.RpcMethodCall.MethodName == "metaWeblog.newPost") { var result = await MetaWeblogNewPostAsync( Convert.ToString(context.RpcMethodCall.Params[0].Value), Convert.ToString(context.RpcMethodCall.Params[1].Value), Convert.ToString(context.RpcMethodCall.Params[2].Value), (XRpcStruct)context.RpcMethodCall.Params[3].Value, Convert.ToBoolean(context.RpcMethodCall.Params[4].Value), context.Drivers); context.RpcMethodResponse = new XRpcMethodResponse().Add(result); } if (context.RpcMethodCall.MethodName == "metaWeblog.getPost") { var result = await MetaWeblogGetPostAsync( context, Convert.ToString(context.RpcMethodCall.Params[0].Value), Convert.ToString(context.RpcMethodCall.Params[1].Value), Convert.ToString(context.RpcMethodCall.Params[2].Value), context.Drivers); context.RpcMethodResponse = new XRpcMethodResponse().Add(result); } if (context.RpcMethodCall.MethodName == "metaWeblog.editPost") { var result = await MetaWeblogEditPostAsync( Convert.ToString(context.RpcMethodCall.Params[0].Value), Convert.ToString(context.RpcMethodCall.Params[1].Value), Convert.ToString(context.RpcMethodCall.Params[2].Value), (XRpcStruct)context.RpcMethodCall.Params[3].Value, Convert.ToBoolean(context.RpcMethodCall.Params[4].Value), context.Drivers); context.RpcMethodResponse = new XRpcMethodResponse().Add(result); } if (context.RpcMethodCall.MethodName == "blogger.deletePost") { var result = await MetaWeblogDeletePostAsync( Convert.ToString(context.RpcMethodCall.Params[1].Value), Convert.ToString(context.RpcMethodCall.Params[2].Value), Convert.ToString(context.RpcMethodCall.Params[3].Value), context.Drivers); context.RpcMethodResponse = new XRpcMethodResponse().Add(result); } }
public void Process(XmlRpcContext context) { var urlHelper = new UrlHelper(context.ControllerContext.RequestContext, _routeCollection); if (context.Request.MethodName == "blogger.getUsersBlogs") { var result = MetaWeblogGetUserBlogs(urlHelper, Convert.ToString(context.Request.Params[1].Value), Convert.ToString(context.Request.Params[2].Value)); context.Response = new XRpcMethodResponse().Add(result); } if (context.Request.MethodName == "metaWeblog.getRecentPosts") { var result = MetaWeblogGetRecentPosts(urlHelper, Convert.ToString(context.Request.Params[0].Value), Convert.ToString(context.Request.Params[1].Value), Convert.ToString(context.Request.Params[2].Value), Convert.ToInt32(context.Request.Params[3].Value), context._drivers); context.Response = new XRpcMethodResponse().Add(result); } if (context.Request.MethodName == "metaWeblog.newPost") { var result = MetaWeblogNewPost( Convert.ToString(context.Request.Params[0].Value), Convert.ToString(context.Request.Params[1].Value), Convert.ToString(context.Request.Params[2].Value), (XRpcStruct)context.Request.Params[3].Value, Convert.ToBoolean(context.Request.Params[4].Value), context._drivers); context.Response = new XRpcMethodResponse().Add(result); } if (context.Request.MethodName == "metaWeblog.getPost") { var result = MetaWeblogGetPost( urlHelper, Convert.ToInt32(context.Request.Params[0].Value), Convert.ToString(context.Request.Params[1].Value), Convert.ToString(context.Request.Params[2].Value), context._drivers); context.Response = new XRpcMethodResponse().Add(result); } if (context.Request.MethodName == "metaWeblog.editPost") { var result = MetaWeblogEditPost( Convert.ToInt32(context.Request.Params[0].Value), Convert.ToString(context.Request.Params[1].Value), Convert.ToString(context.Request.Params[2].Value), (XRpcStruct)context.Request.Params[3].Value, Convert.ToBoolean(context.Request.Params[4].Value), context._drivers); context.Response = new XRpcMethodResponse().Add(result); } if (context.Request.MethodName == "blogger.deletePost") { var result = MetaWeblogDeletePost( Convert.ToString(context.Request.Params[1].Value), Convert.ToString(context.Request.Params[2].Value), Convert.ToString(context.Request.Params[3].Value), context._drivers); context.Response = new XRpcMethodResponse().Add(result); } }
public virtual void BuildPost(XRpcStruct rpcStruct, XmlRpcContext context, ContentItem contentItem) { }
public void Process(XmlRpcContext context) { ProcessCalls++; context.Response = new XRpcMethodResponse(); }
public bool CanProcess(XmlRpcContext context) { return(context.HttpContext.Request.Path.StartsWithSegments(context.Options.RsdEndpoint)); }
public async Task ProcessRequestAsync(XmlRpcContext context) { var request = context.HttpContext.Request; if (!request.Method.Equals( HttpVerbs.Get.ToString(), StringComparison.OrdinalIgnoreCase)) { throw new InvalidOperationException(); } using (var ms = new MemoryStream()) { var xmlWriter = XmlWriter.Create(ms); xmlWriter.WriteStartDocument(); { xmlWriter.WriteStartElement("manifest", "http://schemas.microsoft.com/wlw/manifest/weblog"); { xmlWriter.WriteStartElement("options"); { //<clientType>Metaweblog</clientType> xmlWriter.WriteStartElement("clientType"); xmlWriter.WriteString("Metaweblog"); xmlWriter.WriteEndElement(); xmlWriter.WriteStartElement("supportsExcerpt"); xmlWriter.WriteString("Yes"); xmlWriter.WriteEndElement(); xmlWriter.WriteStartElement("supportsNewCategories"); xmlWriter.WriteString("Yes"); xmlWriter.WriteEndElement(); xmlWriter.WriteStartElement("supportsNewCategoriesInline"); xmlWriter.WriteString("Yes"); xmlWriter.WriteEndElement(); xmlWriter.WriteStartElement("supportsPostAsDraft"); xmlWriter.WriteString("Yes"); xmlWriter.WriteEndElement(); xmlWriter.WriteStartElement("supportsFileUpload"); xmlWriter.WriteString("Yes"); xmlWriter.WriteEndElement(); xmlWriter.WriteStartElement("supportsKeywords"); xmlWriter.WriteString("Yes"); xmlWriter.WriteEndElement(); xmlWriter.WriteStartElement("supportsSlug"); xmlWriter.WriteString("Yes"); xmlWriter.WriteEndElement(); } xmlWriter.WriteEndElement(); } xmlWriter.WriteEndElement(); } xmlWriter.WriteEndDocument(); xmlWriter.Flush(); ms.Position = 0; context.HttpContext.Response.ContentType = "text/xml"; await ms.CopyToAsync(context.HttpContext.Response.Body); } }
public static string GenerateSummaryUrl(this XmlRpcContext context) { string url = string.Concat(context.Options.SummaryEndpoint, '/', context.Values[context.Options.BlogIdTokenName]); return(GenerateAbsoluteUrl(context, url)); }
public static string GenerateHomepageUrl(this XmlRpcContext context) { string url = ReplaceTokens(context, context.Options.HomePageEndpointPattern); return(GenerateAbsoluteUrl(context, url)); }