public static QueryValues Parse(string str)
        {
            str = StringUtils.RemovePrefix(str, HttpUtility2.QuerySeparator);
            var splits = str.Split(HttpUtility2.QueryValuesDelimiter);

            var queryValues    = new QueryValues();
            var valueDelimiter = QueryValue.ValueDelimiter;

            foreach (var pair in splits)
            {
                if (string.IsNullOrWhiteSpace(pair) == false)
                {
                    var    delimiterIndex = pair.IndexOf(valueDelimiter);
                    string key            = null;
                    string value          = null;

                    if (delimiterIndex == -1)
                    {
                        key = pair;
                    }
                    else
                    {
                        key = pair.Substring(0, delimiterIndex);
                        var valueStartIndex = delimiterIndex + valueDelimiter.Length;
                        value = pair.Substring(valueStartIndex, pair.Length - valueStartIndex);
                    }

                    queryValues.Add(new QueryValue(key, value));
                }
            }

            return(queryValues);
        }
        public string Login(PasteLoginRequest request)
        {
            var queryValues = new QueryValues();

            queryValues.Add("api_user_name", request.Name);
            queryValues.Add("api_user_password", request.Password);

            var webRequest = this.CreateWebRequest(this.LoginUri, queryValues);
            var userKey    = this.ProcessWebRequest(webRequest);

            return(userKey);
        }
        public string GetPasteRaw(PasteGetRawRequest request)
        {
            var queryValues = new QueryValues();

            queryValues.Add("api_option", "show_paste");
            queryValues.Add("api_user_key", request.UserKey);
            queryValues.Add("api_paste_key", request.PasteKey);

            var webRequest = this.CreateWebRequest(this.RawUri, queryValues);
            var raw        = this.ProcessWebRequest(webRequest);

            return(raw);
        }
        public bool DeletePaste(PasteDeleteRequest request)
        {
            var queryValues = new QueryValues();

            queryValues.Add("api_option", "delete");
            queryValues.Add("api_user_key", request.UserKey);
            queryValues.Add("api_paste_key", request.PasteKey);

            var webRequest = this.CreateWebRequest(this.BaseUri, queryValues);
            var result     = this.ProcessWebRequest(webRequest);

            return(result.Equals("Paste Removed", StringComparison.OrdinalIgnoreCase));
        }
        public WebRequestParameter CreateWebRequest(string uri, QueryValues values)
        {
            var apiKeyName = "api_dev_key";
            var overrides  = new QueryValues(values);

            overrides.RemoveAll(apiKeyName);
            overrides.Add(apiKeyName, this.APIKey);

            var request = new WebRequestParameter();

            request.Method         = "POST";
            request.Uri            = uri;
            request.ContentType    = "application/x-www-form-urlencoded";
            request.WriteParameter = overrides.ToString(false, false);

            return(request);
        }
        public string CreatePaste(PasteCreateRequest request)
        {
            var queryValues = new QueryValues();

            queryValues.Add("api_option", "paste");
            queryValues.Add("api_user_key", request.UserKey);
            queryValues.Add("api_paste_private", ((byte)request.Private).ToString());
            queryValues.Add("api_paste_name", HttpUtility.UrlEncode(request.Name));
            queryValues.Add("api_paste_expire_date", request.ExpireDate?.Value);
            queryValues.Add("api_paste_format", request.Format);
            queryValues.Add("api_dev_key", this.APIKey);
            queryValues.Add("api_paste_code", HttpUtility.UrlEncode(request.Code));

            var webRequest = this.CreateWebRequest(this.BaseUri, queryValues);
            var url        = this.ProcessWebRequest(webRequest);

            return(url);
        }
        public PasteUser GetUser(string userKey)
        {
            var queryValues = new QueryValues();

            queryValues.Add("api_option", "userdetails");
            queryValues.Add("api_user_key", userKey);

            var webRequest = this.CreateWebRequest(this.BaseUri, queryValues);
            var html       = this.ProcessWebRequest(webRequest);
            var document   = new HtmlDocument();

            document.LoadHtml(html);

            var userNode = document.DocumentNode.ChildNodes["user"];
            var user     = new PasteUser(userNode);

            return(user);
        }
        public PasteData[] ListPastes(PasteListRequest request)
        {
            var queryValues = new QueryValues();

            queryValues.Add("api_option", "list");
            queryValues.Add("api_user_key", request.UserKey);
            queryValues.Add("api_results_limit", request.ResultsLimit);

            var webRequest = this.CreateWebRequest(this.BaseUri, queryValues);
            var html       = this.ProcessWebRequest(webRequest);
            var document   = new HtmlDocument();

            document.LoadHtml(html);

            var pasteNodes = document.DocumentNode.ChildNodes.Where(n => n.Name.Equals("paste")).ToArray();
            var pasteArray = pasteNodes.Select(n => new PasteData(n)).ToArray();

            return(pasteArray);
        }