/// <summary> /// Creates the note. /// </summary> /// <param name="title">The title.</param> /// <param name="content">The content.</param> /// <returns></returns> public static Note CreateNote(Drop drop, string title, string content) { return ServiceProxy.Instance.CreateNote(drop, title, content); }
/// <summary> /// Finds the specified asset name. /// </summary> /// <param name="assetUrl">The asset URL.</param> /// <returns></returns> public static Asset Find(Drop drop, string name) { return ServiceProxy.Instance.FindAsset(drop, name); }
/// <summary> /// Maps the asset. /// </summary> /// <param name="asset">The asset.</param> /// <param name="drop">The drop.</param> /// <param name="node">The node.</param> protected void MapAsset(Asset asset, Drop drop, XmlNode node) { asset.CreatedAt = this.ExtractDateTime(this.ExtractInnerText(node, "created_at")); asset.Filesize = this.ExtractInt(node, "filesize"); asset.Status = (Status)Enum.Parse(typeof(Status), this.ExtractInnerText(node,"status"), true); asset.Name = this.ExtractInnerText(node, "name"); asset.ThumbnailUrl = this.ExtractInnerText(node, "thumbnail"); asset.FileUrl = this.ExtractInnerText(node, "file"); asset.ConvertedFileUrl = this.ExtractInnerText(node, "converted"); asset.Drop = drop; this.MapTypedData(asset, node); }
/// <summary> /// Creates the link. /// </summary> /// <param name="title">The title.</param> /// <param name="description">The description.</param> /// <param name="url">The URL.</param> /// <returns></returns> public static Link CreateLink(Drop drop, string title, string description, string url) { return ServiceProxy.Instance.CreateLink(drop, title, description, url); }
/// <summary> /// Finds the assets. /// </summary> /// <param name="drop">The drop.</param> /// <param name="page">The page.</param> /// <returns></returns> public List<Asset> FindAssets(Drop drop, int page) { return this.ServiceAdapter.FindAssets(drop, page); }
/// <summary> /// Updates the drop. /// </summary> /// <param name="drop">The drop.</param> /// <returns></returns> public bool UpdateDrop(Drop drop, string password, string adminPassword, string premiumCode) { return this.ServiceAdapter.UpdateDrop(drop, password, adminPassword, premiumCode); }
/// <summary> /// Generates the authenticated drop URL. /// </summary> /// <param name="drop">The drop.</param> /// <returns></returns> public string GenerateAuthenticatedDropUrl(Drop drop) { string unixTime = GenerateUnixTimestamp().ToString(); string signature = GenerateSignature(drop, unixTime); StringBuilder sb = new StringBuilder(); sb.Append(this.BaseUrl); sb.Append(drop.Name); sb.Append(FROM_API); sb.Append("?&signature="); sb.Append(signature); sb.Append("&expires="); sb.Append(unixTime); return sb.ToString(); }
/// <summary> /// Deletes the drop. /// </summary> /// <param name="drop">The drop.</param> /// <returns></returns> public bool DeleteDrop(Drop drop) { return this.ServiceAdapter.DeleteDrop(drop); }
/// <summary> /// Finds the asset. /// </summary> /// <param name="dropUrl">The drop name.</param> /// <param name="name">The asset name.</param> /// <returns></returns> public Asset FindAsset(Drop drop, string name) { if (drop == null) throw new ArgumentNullException("drop", "The given drop can't be null"); if (name == null) throw new ArgumentNullException("name", "The given drop name can't be null"); Asset a = null; string token = string.IsNullOrEmpty(drop.AdminToken) ? drop.GuestToken : drop.AdminToken; HttpWebRequest request = this.CreateGetRequest(this.CreateAssetUrl(drop.Name, name), token); CompleteRequest(request, delegate(HttpWebResponse response) { ReadResponse(response, delegate(XmlDocument doc) { XmlNodeList nodes = doc.SelectNodes("/asset"); a = this.CreateAndMapAsset(drop, nodes[0]); }); }); return a; }
/// <summary> /// Finds the assets for a given drop. /// </summary> /// <param name="drop">The drop.</param> /// <param name="page">The page.</param> /// <returns></returns> public List<Asset> FindAssets(Drop drop, int page) { if (drop == null) throw new ArgumentNullException("drop", "The given drop can't be null"); List<Asset> assets = new List<Asset>(); string token = string.IsNullOrEmpty(drop.AdminToken) ? drop.GuestToken : drop.AdminToken; NameValueCollection parameters = new NameValueCollection(); parameters["token"] = token; parameters["page"] = page.ToString(); HttpWebRequest request = this.CreateGetRequest(this.CreateAssetUrl(drop.Name, string.Empty), parameters); CompleteRequest(request, delegate(HttpWebResponse response) { ReadResponse(response, delegate(XmlDocument doc) { XmlNodeList nodes = doc.SelectNodes("/assets/asset"); foreach (XmlNode node in nodes) { Asset a = this.CreateAndMapAsset(drop, node); assets.Add(a); } }); }); return assets; }
/// <summary> /// Deletes the drop. /// </summary> /// <param name="drop">The drop.</param> /// <returns></returns> public bool DeleteDrop(Drop drop) { if (drop == null) throw new ArgumentNullException("drop", "The given drop can't be null"); bool destroyed = false; NameValueCollection parameters = new NameValueCollection(); string token = string.IsNullOrEmpty(drop.AdminToken) ? drop.GuestToken : drop.AdminToken; parameters.Add("token", token); HttpWebRequest request = this.CreateDeleteRequest(this.CreateDropUrl(drop.Name), parameters); CompleteRequest(request, (HttpWebResponse response) => { destroyed = true; }); return destroyed; }
/// <summary> /// Creates the note. /// </summary> /// <param name="drop">The drop.</param> /// <param name="title">The title.</param> /// <param name="contents">The contents.</param> /// <returns></returns> public Note CreateNote(Drop drop, string title, string contents) { if (drop == null) throw new ArgumentNullException("drop", "The given drop can't be null"); Note a = null; NameValueCollection parameters = new NameValueCollection(); string token = string.IsNullOrEmpty(drop.AdminToken) ? drop.GuestToken : drop.AdminToken; parameters.Add("token", token); parameters.Add("title", title); parameters.Add("contents", contents); HttpWebRequest request = this.CreatePostRequest(this.CreateAssetUrl(drop.Name, string.Empty), parameters); CompleteRequest(request, delegate(HttpWebResponse response) { ReadResponse(response, delegate(XmlDocument doc) { XmlNodeList nodes = doc.SelectNodes("/asset"); a = this.CreateAndMapAsset(drop, nodes[0]) as Note; }); }); return a; }
/// <summary> /// Maps the drop. /// </summary> /// <param name="d">The d.</param> /// <param name="doc">The doc.</param> /// <returns></returns> protected void MapDrop(Drop d, XmlDocument doc) { XmlNode node = doc.SelectSingleNode("drop"); d.Name = this.ExtractInnerText(node, "name"); d.AdminToken = this.ExtractInnerText(node, "admin_token"); d.GuestToken = this.ExtractInnerText(node, "guest_token"); d.CurrentBytes = this.ExtractInt(node, "current_bytes"); d.MaxBytes = this.ExtractInt(node, "max_bytes"); d.Voicemail = this.ExtractInnerText(node, "voicemail"); d.Fax = this.ExtractInnerText(node, "fax"); d.Conference = this.ExtractInnerText(node, "conference"); d.Email = this.ExtractInnerText(node, "email"); d.Rss = this.ExtractInnerText(node, "rss"); d.GuestsCanAdd = this.ExtractBoolean(node, "guests_can_add"); d.GuestsCanComment = this.ExtractBoolean(node, "guests_can_comment"); d.GuestsCanDelete = this.ExtractBoolean(node, "guests_can_delete"); d.ExpirationLength = this.ExtractExpirationLength(this.ExtractInnerText(node, "expiration_length")); }
/// <summary> /// Creates the link. /// </summary> /// <param name="drop">The drop.</param> /// <param name="title">The title.</param> /// <param name="description">The description.</param> /// <param name="url">The url.</param> /// <returns></returns> public Link CreateLink(Drop drop, string title, string description, string url) { return this.ServiceAdapter.CreateLink(drop, title, description, url); }
/// <summary> /// Updates the drop. /// </summary> /// <param name="drop">The drop.</param> /// <returns></returns> public bool UpdateDrop(Drop drop, string password, string adminPassword, string premiumCode) { if (drop == null) throw new ArgumentNullException("drop", "The given drop can't be null"); bool updated = false; NameValueCollection parameters = new NameValueCollection(); string token = string.IsNullOrEmpty(drop.AdminToken) ? drop.GuestToken : drop.AdminToken; parameters.Add("token", token); parameters.Add("guests_can_add", drop.GuestsCanAdd.ToString()); parameters.Add("guests_can_comment", drop.GuestsCanComment.ToString()); parameters.Add("guests_can_delete", drop.GuestsCanDelete.ToString()); parameters.Add("expiration_length", this.MapExpirationLength(drop.ExpirationLength)); parameters.Add("password", password); parameters.Add("admin_password", adminPassword); parameters.Add("premium_code", premiumCode); HttpWebRequest request = this.CreatePutRequest(this.CreateDropUrl(drop.Name), parameters); CompleteRequest(request, delegate(HttpWebResponse response) { ReadResponse(response, (XmlDocument doc) => this.MapDrop(drop, doc)); updated = true; }); return updated; }
/// <summary> /// Creates the note. /// </summary> /// <param name="drop">The drop.</param> /// <param name="title">The title.</param> /// <param name="contents">The content.</param> /// <returns></returns> public Note CreateNote(Drop drop, string title, string contents) { return this.ServiceAdapter.CreateNote(drop, title, contents); }
/// <summary> /// Creates the and map asset. /// </summary> /// <param name="d">The d.</param> /// <param name="node">The node.</param> /// <returns></returns> protected Asset CreateAndMapAsset(Drop d, XmlNode node) { string displayType = this.ExtractInnerText(node, "type"); Asset a = this.CreateTypedAsset(displayType); this.MapAsset(a, d, node); return a; }
/// <summary> /// Finds the asset. /// </summary> /// <param name="drop">The drop.</param> /// <param name="assetUrl">The asset name.</param> /// <returns></returns> public Asset FindAsset(Drop drop, string assetUrl) { return this.ServiceAdapter.FindAsset(drop, assetUrl); }
/// <summary> /// Creates and maps a drop. /// </summary> /// <param name="doc">The doc.</param> /// <returns></returns> protected Drop CreateAndMapDrop(XmlDocument doc) { Drop d = new Drop(); this.MapDrop(d, doc); return d; }
/// <summary> /// Generates the authenticated drop URL. /// </summary> /// <param name="drop">The drop.</param> /// <returns></returns> public string GenerateAuthenticatedDropUrl(Drop drop) { return this.ServiceAdapter.GenerateAuthenticatedDropUrl(drop); }
/// <summary> /// Adds the file. /// </summary> /// <param name="drop">The drop.</param> /// <param name="file">The file.</param> /// <returns></returns> public Asset AddFile(Drop drop, string file) { string requestUrl = this.UploadUrl; NameValueCollection parameters = new NameValueCollection(); string token = string.IsNullOrEmpty(drop.AdminToken) ? drop.GuestToken : drop.AdminToken; parameters.Add("token", token); HttpWebRequest request = HttpWebRequest.Create(requestUrl) as HttpWebRequest; string boundary = "DROPIO_MIME_" + DateTime.Now.ToString("yyyyMMddhhmmss"); request.Method = "POST"; request.KeepAlive = true; request.Timeout = 30000000; request.ContentType = "multipart/form-data; boundary=" + boundary + ""; request.Expect = ""; parameters["api_key"] = this.ApiKey; parameters["format"] = "xml"; parameters["drop_name"] = drop.Name; parameters["version"] = VERSION; StringBuilder sb = new StringBuilder(); string fileName = Path.GetFileName(file); foreach (string key in parameters.AllKeys) { sb.Append("--" + boundary + "\r\n"); sb.Append("Content-Disposition: form-data; name=\"" + key + "\"\r\n"); sb.Append("\r\n"); sb.Append(parameters[key] + "\r\n"); } // File sb.Append("--" + boundary + "\r\n"); sb.Append("Content-Disposition: form-data; name=\"file\"; filename=\"" + fileName + "\"\r\n"); sb.Append("Content-Type: " + this.GetMimeType(file) + "\r\n"); sb.Append("\r\n"); UTF8Encoding encoding = new UTF8Encoding(); byte[] postContents = encoding.GetBytes(sb.ToString()); Stream stream = File.OpenRead(file); byte[] fileContents = new byte[stream.Length]; stream.Read(fileContents, 0, fileContents.Length); stream.Close(); byte[] postFooter = encoding.GetBytes("\r\n--" + boundary + "--\r\n"); byte[] dataBuffer = new byte[postContents.Length + fileContents.Length + postFooter.Length]; Buffer.BlockCopy(postContents, 0, dataBuffer, 0, postContents.Length); Buffer.BlockCopy(fileContents, 0, dataBuffer, postContents.Length, fileContents.Length); Buffer.BlockCopy(postFooter, 0, dataBuffer, postContents.Length + fileContents.Length, postFooter.Length); request.ContentLength = dataBuffer.Length; Stream resStream = request.GetRequestStream(); int j = 1; int uploadBit = Math.Max(dataBuffer.Length / 100, 50 * 1024); int uploadSoFar = 0; for (int i = 0; i < dataBuffer.Length; i = i + uploadBit) { int toUpload = Math.Min(uploadBit, dataBuffer.Length - i); uploadSoFar += toUpload; resStream.Write(dataBuffer, i, toUpload); if ((OnUploadProgress != null) && ((j++) % 5 == 0 || uploadSoFar == dataBuffer.Length)) { OnUploadProgress(this, new UploadProgressEventArgs(i + toUpload, uploadSoFar == dataBuffer.Length)); } } resStream.Close(); Asset a = null; CompleteRequest(request, delegate(HttpWebResponse response) { ReadResponse(response, delegate(XmlDocument doc) { XmlNodeList nodes = doc.SelectNodes("/asset"); a = this.CreateAndMapAsset(drop, nodes[0]) as Asset; }); }); return a; }
/// <summary> /// Adds the file to the drop.. /// </summary> /// <param name="drop">The drop.</param> /// <param name="file">The file.</param> /// <returns></returns> public Asset AddFile(Drop drop, string file) { return this.ServiceAdapter.AddFile(drop, file); }
/// <summary> /// Generates the signature. /// </summary> /// <param name="drop">The drop.</param> /// <param name="expires">The expires.</param> /// <returns></returns> protected string GenerateSignature(Drop drop, string expires) { string token = string.IsNullOrEmpty(drop.AdminToken) ? drop.GuestToken : drop.AdminToken; string before = expires + "+" + token + "+" + drop.Name; SHA1 sha1 = new SHA1CryptoServiceProvider(); byte[] input = Encoding.UTF8.GetBytes(before); byte[] result = sha1.ComputeHash(input); string hex = BitConverter.ToString(result); hex = hex.Replace("-", ""); return hex; }