|
|
- using CookComputing.XmlRpc;
- using System.Collections.Generic;
- using System.Configuration;
- using System.IO;
- using System.Linq;
- using System.Web.Security;
-
- public interface IMetaWeblog
- {
- #region MetaWeblog API
-
- [XmlRpcMethod("metaWeblog.newPost")]
- string AddPost(string blogid, string username, string password, Post post, bool publish);
-
- [XmlRpcMethod("metaWeblog.editPost")]
- bool UpdatePost(string postid, string username, string password, Post post, bool publish);
-
- [XmlRpcMethod("metaWeblog.getPost")]
- object GetPost(string postid, string username, string password);
-
- [XmlRpcMethod("metaWeblog.getCategories")]
- object[] GetCategories(string blogid, string username, string password);
-
- [XmlRpcMethod("metaWeblog.getRecentPosts")]
- object[] GetRecentPosts(string blogid, string username, string password, int numberOfPosts);
-
- [XmlRpcMethod("metaWeblog.newMediaObject")]
- object NewMediaObject(string blogid, string username, string password, MediaObject mediaObject);
-
- #endregion
-
- #region Blogger API
-
- [XmlRpcMethod("blogger.deletePost")]
- [return: XmlRpcReturnValue(Description = "Returns true.")]
- bool DeletePost(string key, string postid, string username, string password, bool publish);
-
- [XmlRpcMethod("blogger.getUsersBlogs")]
- object[] GetUsersBlogs(string key, string username, string password);
-
- #endregion
- }
-
- public class MetaWeblogHandler : XmlRpcService, IMetaWeblog
- {
- string IMetaWeblog.AddPost(string blogid, string username, string password, Post post, bool publish)
- {
- ValidateUser(username, password);
-
- post.Slug = PostHandler.CreateSlug(post.Title);
- post.IsPublished = publish;
- Storage.Save(post);
-
- return post.ID;
- }
-
- bool IMetaWeblog.UpdatePost(string postid, string username, string password, Post post, bool publish)
- {
- ValidateUser(username, password);
-
- Post match = Storage.GetAllPosts().FirstOrDefault(p => p.ID == postid);
-
- if (match != null)
- {
- match.Title = post.Title;
- match.Content = post.Content;
- match.Slug = post.Slug;
- match.Categories = post.Categories;
- match.IsPublished = publish;
- match.PubDate = post.PubDate;
- Storage.Save(match);
- }
-
- return match != null;
- }
-
- bool IMetaWeblog.DeletePost(string key, string postid, string username, string password, bool publish)
- {
- ValidateUser(username, password);
-
- Post post = Storage.GetAllPosts().FirstOrDefault(p => p.ID == postid);
-
- if (post != null)
- {
- Storage.Delete(post);
- }
-
- return post != null;
- }
-
- object IMetaWeblog.GetPost(string postid, string username, string password)
- {
- ValidateUser(username, password);
-
- Post post = Storage.GetAllPosts().FirstOrDefault(p => p.ID == postid);
-
- if (post == null)
- throw new XmlRpcFaultException(0, "Post does not exist");
-
- return new
- {
- description = post.Content,
- title = post.Title,
- dateCreated = post.PubDate,
- wp_slug = post.Slug,
- categories = post.Categories.ToArray(),
- postid = post.ID
- };
- }
-
- object[] IMetaWeblog.GetRecentPosts(string blogid, string username, string password, int numberOfPosts)
- {
- ValidateUser(username, password);
-
- List<object> list = new List<object>();
-
- foreach (var post in Storage.GetAllPosts().Take(numberOfPosts))
- {
- var info = new
- {
- description = post.Content,
- title = post.Title,
- dateCreated = post.PubDate,
- wp_slug = post.Slug,
- postid = post.ID
- };
-
- list.Add(info);
- }
-
- return list.ToArray();
- }
-
- object[] IMetaWeblog.GetCategories(string blogid, string username, string password)
- {
- ValidateUser(username, password);
-
- var list = new List<object>();
- var categories = Storage.GetAllPosts().SelectMany(p => p.Categories);
-
- foreach (string category in categories.Distinct())
- {
- list.Add(new { title = category });
- }
-
- return list.ToArray();
- }
-
- object IMetaWeblog.NewMediaObject(string blogid, string username, string password, MediaObject media)
- {
- ValidateUser(username, password);
-
- string path = Blog.SaveFileToDisk(media.bits, Path.GetExtension(media.name));
-
- return new { url = path };
- }
-
- object[] IMetaWeblog.GetUsersBlogs(string key, string username, string password)
- {
- ValidateUser(username, password);
-
- return new[]
- {
- new
- {
- blogid = "1",
- blogName = ConfigurationManager.AppSettings.Get("blog:name"),
- url = Context.Request.Url.Scheme + "://" + Context.Request.Url.Authority
- }
- };
- }
-
- private void ValidateUser(string username, string password)
- {
- if (!FormsAuthentication.Authenticate(username, password))
- {
- throw new XmlRpcFaultException(0, "User is not valid!");
- }
- }
- }
-
- [XmlRpcMissingMapping(MappingAction.Ignore)]
- public struct MediaObject
- {
- public string name;
- public string type;
- public byte[] bits;
- }
|