/// <summary> /// Creates a Metaweblog Media object from the XML struct /// </summary> /// <param name="node"> /// XML contains a Metaweblog MediaObject Struct /// </param> /// <returns> /// Metaweblog MediaObject Struct Obejct /// </returns> private static MWAMediaObject GetMediaObject(XmlNode node) { var name = node.SelectSingleNode("value/struct/member[name='name']"); var type = node.SelectSingleNode("value/struct/member[name='type']"); var bits = node.SelectSingleNode("value/struct/member[name='bits']"); var temp = new MWAMediaObject { name = name == null ? string.Empty : name.LastChild.InnerText, type = type == null ? "notsent" : type.LastChild.InnerText, bits = Convert.FromBase64String(bits == null ? string.Empty : bits.LastChild.InnerText) }; return(temp); }
/// <summary> /// Creates a Metaweblog Media object from the XML struct /// </summary> /// <param name="node">XML contains a Metaweblog MediaObject Struct</param> /// <returns>Metaweblog MediaObject Struct Obejct</returns> private MWAMediaObject GetMediaObject(XmlNode node) { MWAMediaObject temp = new MWAMediaObject(); temp.name = node.SelectSingleNode("value/struct/member[name='name']").LastChild.InnerText; if (node.SelectSingleNode("value/struct/member[name='type']") == null) { temp.type = "notsent"; } else { temp.type = node.SelectSingleNode("value/struct/member[name='type']").LastChild.InnerText; } temp.bits = System.Convert.FromBase64String(node.SelectSingleNode("value/struct/member[name='bits']").LastChild.InnerText); return(temp); }
/// <summary> /// metaWeblog.newMediaObject method /// </summary> /// <param name="blogId"> /// always 1000 in BlogEngine since it is a singlar blog instance /// </param> /// <param name="userName"> /// login username /// </param> /// <param name="password"> /// login password /// </param> /// <param name="mediaObject"> /// struct with media details /// </param> /// <param name="request"> /// The HTTP request. /// </param> /// <returns> /// struct with url to media /// </returns> internal MWAMediaInfo NewMediaObject( string blogId, string userName, string password, MWAMediaObject mediaObject, HttpContext request) { if (!Security.IsAuthorizedTo(AuthorizationCheck.HasAny, new Rights[] { Rights.CreateNewPosts, Rights.CreateNewPages, Rights.EditOwnPosts, Rights.EditOwnPages, Rights.EditOtherUsersPosts })) { throw new MetaWeblogException("11", "User authentication failed"); } var mediaInfo = new MWAMediaInfo(); var rootPath = string.Format("{0}files/", Blog.CurrentInstance.StorageLocation); var serverPath = request.Server.MapPath(rootPath); var saveFolder = serverPath; string mediaObjectName = mediaObject.name.Replace(" ", "_"); mediaObjectName = mediaObjectName.Replace(":", "-"); var fileName = mediaObjectName; var mediaFolder = string.Empty; // Check/Create Folders & Fix fileName if (mediaObjectName.LastIndexOf('/') > -1) { mediaFolder = mediaObjectName.Substring(0, mediaObjectName.LastIndexOf('/')); saveFolder += mediaFolder; mediaFolder += "/"; saveFolder = saveFolder.Replace('/', Path.DirectorySeparatorChar); fileName = mediaObjectName.Substring(mediaObjectName.LastIndexOf('/') + 1); } else { if (saveFolder.EndsWith(Path.DirectorySeparatorChar.ToString())) { saveFolder = saveFolder.Substring(0, saveFolder.Length - 1); } } if (!Directory.Exists(saveFolder)) { Directory.CreateDirectory(saveFolder); } saveFolder += Path.DirectorySeparatorChar; if (File.Exists(saveFolder + fileName)) { // Find unique fileName for (var count = 1; count < 30000; count++) { var tempFileName = fileName.Insert(fileName.LastIndexOf('.'), string.Format("_{0}", count)); if (File.Exists(saveFolder + tempFileName)) { continue; } fileName = tempFileName; break; } } // Save File using (var fs = new FileStream(saveFolder + fileName, FileMode.Create)) using (var bw = new BinaryWriter(fs)) { bw.Write(mediaObject.bits); bw.Close(); } // Set Url var rootUrl = Utils.AbsoluteWebRoot.ToString(); if (BlogSettings.Instance.RequireSslMetaWeblogApi) { rootUrl = rootUrl.Replace("https://", "http://"); } var mediaType = mediaObject.type; if (mediaType.IndexOf('/') > -1) { mediaType = mediaType.Substring(0, mediaType.IndexOf('/')); } switch (mediaType) { case "image": case "notsent": // If there wasn't a type, let's pretend it is an image. (Thanks Zoundry. This is for you.) rootUrl += "image.axd?picture="; break; default: rootUrl += "file.axd?file="; break; } mediaInfo.url = rootUrl + mediaFolder + fileName; return mediaInfo; }
/// <summary> /// metaWeblog.newMediaObject method /// </summary> /// <param name="blogId"> /// always 1000 in BlogEngine since it is a singlar blog instance /// </param> /// <param name="userName"> /// login username /// </param> /// <param name="password"> /// login password /// </param> /// <param name="mediaObject"> /// struct with media details /// </param> /// <param name="request"> /// The HTTP request. /// </param> /// <returns> /// struct with url to media /// </returns> internal MWAMediaInfo NewMediaObject( string blogId, string userName, string password, MWAMediaObject mediaObject, HttpContext request) { if (!Security.IsAuthorizedTo(AuthorizationCheck.HasAny, new Rights[] { Rights.CreateNewPosts, Rights.CreateNewPages, Rights.EditOwnPosts, Rights.EditOwnPages, Rights.EditOtherUsersPosts, Rights.EditOtherUsersPages })) { throw new MetaWeblogException("11", "User authentication failed"); } var mediaInfo = new MWAMediaInfo(); var rootPath = string.Format("{0}files/", BlogSettings.Instance.StorageLocation); var serverPath = request.Server.MapPath(rootPath); var saveFolder = serverPath; var fileName = mediaObject.name; var mediaFolder = string.Empty; // Check/Create Folders & Fix fileName if (mediaObject.name.LastIndexOf('/') > -1) { mediaFolder = mediaObject.name.Substring(0, mediaObject.name.LastIndexOf('/')); saveFolder += mediaFolder; mediaFolder += "/"; saveFolder = saveFolder.Replace('/', Path.DirectorySeparatorChar); fileName = mediaObject.name.Substring(mediaObject.name.LastIndexOf('/') + 1); } else { if (saveFolder.EndsWith(Path.DirectorySeparatorChar.ToString())) { saveFolder = saveFolder.Substring(0, saveFolder.Length - 1); } } if (!Directory.Exists(saveFolder)) { Directory.CreateDirectory(saveFolder); } saveFolder += Path.DirectorySeparatorChar; if (File.Exists(saveFolder + fileName)) { // Find unique fileName for (var count = 1; count < 30000; count++) { var tempFileName = fileName.Insert(fileName.LastIndexOf('.'), string.Format("_{0}", count)); if (File.Exists(saveFolder + tempFileName)) { continue; } fileName = tempFileName; break; } } // Save File using (var fs = new FileStream(saveFolder + fileName, FileMode.Create)) using (var bw = new BinaryWriter(fs)) { bw.Write(mediaObject.bits); bw.Close(); } // Set Url var rootUrl = Utils.AbsoluteWebRoot.ToString(); if (BlogSettings.Instance.RequireSslMetaWeblogApi) { rootUrl = rootUrl.Replace("https://", "http://"); } var mediaType = mediaObject.type; if (mediaType.IndexOf('/') > -1) { mediaType = mediaType.Substring(0, mediaType.IndexOf('/')); } switch (mediaType) { case "image": case "notsent": // If there wasn't a type, let's pretend it is an image. (Thanks Zoundry. This is for you.) rootUrl += "image.axd?picture="; break; default: rootUrl += "file.axd?file="; break; } mediaInfo.url = rootUrl + mediaFolder + fileName; return(mediaInfo); }
/// <summary> /// metaWeblog.newMediaObject /// </summary> /// <param name="blogID">always 1000 in BlogEngine since it is a singlar blog instance</param> /// <param name="userName">login username</param> /// <param name="password">login password</param> /// <param name="mediaObject">struct with media details</param> /// <param name="request">The HTTP request.</param> /// <returns>struct with url to media</returns> internal MWAMediaInfo NewMediaObject(string blogID, string userName, string password, MWAMediaObject mediaObject, HttpContext request) { ValidateRequest(userName, password); MWAMediaInfo mediaInfo = new MWAMediaInfo(); string rootPath = BlogSettings.Instance.StorageLocation + "files/"; string serverPath = request.Server.MapPath(rootPath); string saveFolder = serverPath; string fileName = mediaObject.name; string mediaFolder = ""; // Check/Create Folders & Fix fileName if (mediaObject.name.LastIndexOf('/') > -1) { mediaFolder = mediaObject.name.Substring(0, mediaObject.name.LastIndexOf('/')); saveFolder += mediaFolder; mediaFolder += "/"; saveFolder = saveFolder.Replace('/', Path.DirectorySeparatorChar); fileName = mediaObject.name.Substring(mediaObject.name.LastIndexOf('/') + 1); } else { if (saveFolder.EndsWith(Path.DirectorySeparatorChar.ToString())) saveFolder = saveFolder.Substring(0, saveFolder.Length - 1); } if (!Directory.Exists(saveFolder)) Directory.CreateDirectory(saveFolder); saveFolder += Path.DirectorySeparatorChar; if (File.Exists(saveFolder + fileName)) { // Find unique fileName for (int count = 1; count < 30000; count++) { string tempFileName = fileName.Insert(fileName.LastIndexOf('.'), "_" + count); if (!File.Exists(saveFolder + tempFileName)) { fileName = tempFileName; break; } } } // Save File FileStream fs = new FileStream(saveFolder + fileName, FileMode.Create); BinaryWriter bw = new BinaryWriter(fs); bw.Write(mediaObject.bits); bw.Close(); // Set Url string rootUrl = Utils.AbsoluteWebRoot.ToString(); if (BlogSettings.Instance.RequireSSLMetaWeblogAPI) rootUrl = rootUrl.Replace("https://", "http://"); string mediaType = mediaObject.type; if (mediaType.IndexOf('/') > -1) mediaType = mediaType.Substring(0, mediaType.IndexOf('/')); switch (mediaType) { case "image": case "notsent": // If there wasn't a type, let's pretend it is an image. (Thanks Zoundry. This is for you.) rootUrl += "image.axd?picture="; break; default: rootUrl += "file.axd?file="; break; } mediaInfo.url = rootUrl + mediaFolder + fileName; return mediaInfo; }
/// <summary> /// Loads object properties with contents of passed xml /// </summary> /// <param name="xml">xml doc with methodname and parameters</param> private void LoadXMLRequest(string xml) { XmlDocument request = new XmlDocument(); try { if (!(xml.StartsWith("<?xml") || xml.StartsWith("<method"))) { xml = xml.Substring(xml.IndexOf("<?xml")); } request.LoadXml(xml); } catch (Exception ex) { throw new MetaWeblogException("01", "Invalid XMLRPC Request. (" + ex.Message + ")"); } // Method name is always first _methodName = request.DocumentElement.ChildNodes[0].InnerText; // Parameters are next (and last) _inputParams = new List <XmlNode>(); foreach (XmlNode node in request.SelectNodes("/methodCall/params/param")) { _inputParams.Add(node); } // Determine what params are what by method name switch (_methodName) { case "metaWeblog.newPost": _blogID = _inputParams[0].InnerText; _userName = _inputParams[1].InnerText; _password = _inputParams[2].InnerText; _post = GetPost(_inputParams[3]); if (_inputParams[4].InnerText == "0" || _inputParams[4].InnerText == "false") { _publish = false; } else { _publish = true; } break; case "metaWeblog.editPost": _postID = _inputParams[0].InnerText; _userName = _inputParams[1].InnerText; _password = _inputParams[2].InnerText; _post = GetPost(_inputParams[3]); if (_inputParams[4].InnerText == "0" || _inputParams[4].InnerText == "false") { _publish = false; } else { _publish = true; } break; case "metaWeblog.getPost": _postID = _inputParams[0].InnerText; _userName = _inputParams[1].InnerText; _password = _inputParams[2].InnerText; break; case "metaWeblog.newMediaObject": _blogID = _inputParams[0].InnerText; _userName = _inputParams[1].InnerText; _password = _inputParams[2].InnerText; _media = GetMediaObject(_inputParams[3]); break; case "metaWeblog.getCategories": case "wp.getAuthors": case "wp.getPageList": case "wp.getPages": case "wp.getTags": _blogID = _inputParams[0].InnerText; _userName = _inputParams[1].InnerText; _password = _inputParams[2].InnerText; break; case "metaWeblog.getRecentPosts": _blogID = _inputParams[0].InnerText; _userName = _inputParams[1].InnerText; _password = _inputParams[2].InnerText; _numberOfPosts = Int32.Parse(_inputParams[3].InnerText, CultureInfo.InvariantCulture); break; case "blogger.getUsersBlogs": case "metaWeblog.getUsersBlogs": _appKey = _inputParams[0].InnerText; _userName = _inputParams[1].InnerText; _password = _inputParams[2].InnerText; break; case "blogger.deletePost": _appKey = _inputParams[0].InnerText; _postID = _inputParams[1].InnerText; _userName = _inputParams[2].InnerText; _password = _inputParams[3].InnerText; if (_inputParams[4].InnerText == "0" || _inputParams[4].InnerText == "false") { _publish = false; } else { _publish = true; } break; case "blogger.getUserInfo": _appKey = _inputParams[0].InnerText; _userName = _inputParams[1].InnerText; _password = _inputParams[2].InnerText; break; case "wp.newPage": _blogID = _inputParams[0].InnerText; _userName = _inputParams[1].InnerText; _password = _inputParams[2].InnerText; _page = GetPage(_inputParams[3]); if (_inputParams[4].InnerText == "0" || _inputParams[4].InnerText == "false") { _publish = false; } else { _publish = true; } break; case "wp.getPage": _blogID = _inputParams[0].InnerText; _pageID = _inputParams[1].InnerText; _userName = _inputParams[2].InnerText; _password = _inputParams[3].InnerText; break; case "wp.editPage": _blogID = _inputParams[0].InnerText; _pageID = _inputParams[1].InnerText; _userName = _inputParams[2].InnerText; _password = _inputParams[3].InnerText; _page = GetPage(_inputParams[4]); if (_inputParams[5].InnerText == "0" || _inputParams[5].InnerText == "false") { _publish = false; } else { _publish = true; } break; case "wp.deletePage": _blogID = _inputParams[0].InnerText; _userName = _inputParams[1].InnerText; _password = _inputParams[2].InnerText; _pageID = _inputParams[3].InnerText; break; default: throw new MetaWeblogException("02", "Unknown Method. (" + _methodName + ")"); } }
/// <summary> /// metaWeblog.newMediaObject /// </summary> /// <param name="blogID">always 1000 in BlogEngine since it is a singlar blog instance</param> /// <param name="userName">login username</param> /// <param name="password">login password</param> /// <param name="mediaObject">struct with media details</param> /// <param name="request">The HTTP request.</param> /// <returns>struct with url to media</returns> internal MWAMediaInfo NewMediaObject(string blogID, string userName, string password, MWAMediaObject mediaObject, HttpContext request) { ValidateRequest(userName, password); MWAMediaInfo mediaInfo = new MWAMediaInfo(); string rootPath = BlogSettings.Instance.StorageLocation + "files/"; string serverPath = request.Server.MapPath(rootPath); string saveFolder = serverPath; string fileName = mediaObject.name; string mediaFolder = ""; // Check/Create Folders & Fix fileName if (mediaObject.name.LastIndexOf('/') > -1) { mediaFolder = mediaObject.name.Substring(0, mediaObject.name.LastIndexOf('/')); saveFolder += mediaFolder; mediaFolder += "/"; saveFolder = saveFolder.Replace('/', Path.DirectorySeparatorChar); fileName = mediaObject.name.Substring(mediaObject.name.LastIndexOf('/') + 1); } else { if (saveFolder.EndsWith(Path.DirectorySeparatorChar.ToString())) { saveFolder = saveFolder.Substring(0, saveFolder.Length - 1); } } if (!Directory.Exists(saveFolder)) { Directory.CreateDirectory(saveFolder); } saveFolder += Path.DirectorySeparatorChar; if (File.Exists(saveFolder + fileName)) { // Find unique fileName for (int count = 1; count < 30000; count++) { string tempFileName = fileName.Insert(fileName.LastIndexOf('.'), "_" + count); if (!File.Exists(saveFolder + tempFileName)) { fileName = tempFileName; break; } } } // Save File FileStream fs = new FileStream(saveFolder + fileName, FileMode.Create); BinaryWriter bw = new BinaryWriter(fs); bw.Write(mediaObject.bits); bw.Close(); // Set Url string rootUrl = Utils.AbsoluteWebRoot.ToString(); if (BlogSettings.Instance.RequireSSLMetaWeblogAPI) { rootUrl = rootUrl.Replace("https://", "http://"); } string mediaType = mediaObject.type; if (mediaType.IndexOf('/') > -1) { mediaType = mediaType.Substring(0, mediaType.IndexOf('/')); } switch (mediaType) { case "image": case "notsent": // If there wasn't a type, let's pretend it is an image. (Thanks Zoundry. This is for you.) rootUrl += "image.axd?picture="; break; default: rootUrl += "file.axd?file="; break; } mediaInfo.url = rootUrl + mediaFolder + fileName; return(mediaInfo); }
/// <summary> /// Creates a Metaweblog Media object from the XML struct /// </summary> /// <param name="node"> /// XML contains a Metaweblog MediaObject Struct /// </param> /// <returns> /// Metaweblog MediaObject Struct Obejct /// </returns> private static MWAMediaObject GetMediaObject(XmlNode node) { var name = node.SelectSingleNode("value/struct/member[name='name']"); var type = node.SelectSingleNode("value/struct/member[name='type']"); var bits = node.SelectSingleNode("value/struct/member[name='bits']"); var temp = new MWAMediaObject { name = name == null ? string.Empty : name.LastChild.InnerText, type = type == null ? "notsent" : type.LastChild.InnerText, bits = Convert.FromBase64String(bits == null ? string.Empty : bits.LastChild.InnerText) }; return temp; }
/// <summary> /// Loads object properties with contents of passed xml /// </summary> /// <param name="xml">xml doc with methodname and parameters</param> private void LoadXMLRequest(string xml) { XmlDocument request = new XmlDocument(); try { if (!(xml.StartsWith("<?xml") || xml.StartsWith("<method"))) { xml = xml.Substring(xml.IndexOf("<?xml")); } request.LoadXml(xml); } catch (Exception ex) { throw new MetaWeblogException("01", "Invalid XMLRPC Request. (" + ex.Message + ")"); } // Method name is always first _methodName = request.DocumentElement.ChildNodes[0].InnerText; // Parameters are next (and last) _inputParams = new List<XmlNode>(); foreach (XmlNode node in request.SelectNodes("/methodCall/params/param")) { _inputParams.Add(node); } // Determine what params are what by method name switch (_methodName) { case "metaWeblog.newPost": _blogID = _inputParams[0].InnerText; _userName = _inputParams[1].InnerText; _password = _inputParams[2].InnerText; _post = GetPost(_inputParams[3]); if (_inputParams[4].InnerText == "0" || _inputParams[4].InnerText == "false") _publish = false; else _publish = true; break; case "metaWeblog.editPost": _postID = _inputParams[0].InnerText; _userName = _inputParams[1].InnerText; _password = _inputParams[2].InnerText; _post = GetPost(_inputParams[3]); if (_inputParams[4].InnerText == "0" || _inputParams[4].InnerText == "false") _publish = false; else _publish = true; break; case "metaWeblog.getPost": _postID = _inputParams[0].InnerText; _userName = _inputParams[1].InnerText; _password = _inputParams[2].InnerText; break; case "metaWeblog.newMediaObject": _blogID = _inputParams[0].InnerText; _userName = _inputParams[1].InnerText; _password = _inputParams[2].InnerText; _media = GetMediaObject(_inputParams[3]); break; case "metaWeblog.getCategories": case "wp.getAuthors": case "wp.getPageList": case "wp.getPages": case "wp.getTags": _blogID = _inputParams[0].InnerText; _userName = _inputParams[1].InnerText; _password = _inputParams[2].InnerText; break; case "metaWeblog.getRecentPosts": _blogID = _inputParams[0].InnerText; _userName = _inputParams[1].InnerText; _password = _inputParams[2].InnerText; _numberOfPosts = Int32.Parse(_inputParams[3].InnerText, CultureInfo.InvariantCulture); break; case "blogger.getUsersBlogs": case "metaWeblog.getUsersBlogs": _appKey = _inputParams[0].InnerText; _userName = _inputParams[1].InnerText; _password = _inputParams[2].InnerText; break; case "blogger.deletePost": _appKey = _inputParams[0].InnerText; _postID = _inputParams[1].InnerText; _userName = _inputParams[2].InnerText; _password = _inputParams[3].InnerText; if (_inputParams[4].InnerText == "0" || _inputParams[4].InnerText == "false") _publish = false; else _publish = true; break; case "blogger.getUserInfo": _appKey = _inputParams[0].InnerText; _userName = _inputParams[1].InnerText; _password = _inputParams[2].InnerText; break; case "wp.newPage": _blogID = _inputParams[0].InnerText; _userName = _inputParams[1].InnerText; _password = _inputParams[2].InnerText; _page = GetPage(_inputParams[3]); if (_inputParams[4].InnerText == "0" || _inputParams[4].InnerText == "false") _publish = false; else _publish = true; break; case "wp.getPage": _blogID = _inputParams[0].InnerText; _pageID = _inputParams[1].InnerText; _userName = _inputParams[2].InnerText; _password = _inputParams[3].InnerText; break; case "wp.editPage": _blogID = _inputParams[0].InnerText; _pageID = _inputParams[1].InnerText; _userName = _inputParams[2].InnerText; _password = _inputParams[3].InnerText; _page = GetPage(_inputParams[4]); if (_inputParams[5].InnerText == "0" || _inputParams[5].InnerText == "false") _publish = false; else _publish = true; break; case "wp.deletePage": _blogID = _inputParams[0].InnerText; _userName = _inputParams[1].InnerText; _password = _inputParams[2].InnerText; _pageID = _inputParams[3].InnerText; break; default: throw new MetaWeblogException("02", "Unknown Method. (" + _methodName + ")"); } }
/// <summary> /// Creates a Metaweblog Media object from the XML struct /// </summary> /// <param name="node">XML contains a Metaweblog MediaObject Struct</param> /// <returns>Metaweblog MediaObject Struct Obejct</returns> private MWAMediaObject GetMediaObject(XmlNode node) { MWAMediaObject temp = new MWAMediaObject(); temp.name = node.SelectSingleNode("value/struct/member[name='name']").LastChild.InnerText; if (node.SelectSingleNode("value/struct/member[name='type']") == null) temp.type = "notsent"; else temp.type = node.SelectSingleNode("value/struct/member[name='type']").LastChild.InnerText; temp.bits = System.Convert.FromBase64String(node.SelectSingleNode("value/struct/member[name='bits']").LastChild.InnerText); return temp; }