コード例 #1
0
        public override IPAddress[] GetRemoteIPs(HostConfig HC)
        {
            if (HC == null) throw new ArgumentNullException("HC");

            using (RMWebClient WC = new RMWebClient())
            {
                try
                {
                    NameValueCollection Params = new NameValueCollection();
                    Params.Add("a", "rec_load_all");
                    Params.Add("email", HC.Username);
                    Params.Add("tkn", HC.Password.GetPlainText());
                    Params.Add("z", HC.ProviderSpecificSettings[HostConfig.CLOUDFLARE_ZONE_NAME]);
                    Hashtable rec_load_all_response = (Hashtable)JSON.JsonDecode(Encoding.UTF8.GetString(WC.UploadValues("https://www.cloudflare.com/api_json.html", "POST", Params)));
                    if (rec_load_all_response["result"].ToString() == "success")
                    {
                        Hashtable Response = (Hashtable)rec_load_all_response["response"];
                        Hashtable Recs = (Hashtable)Response["recs"];
                        ArrayList Objs = (ArrayList)Recs["objs"];

                        foreach (Hashtable Obj in Objs)
                        {
                            if (Obj["name"].ToString().ToLower() == HC.Hostname.ToLower())
                            {
                                return new IPAddress[] {
                                    IPAddress.Parse(Obj["content"].ToString())
                                };
                            }
                        }
                    }
                    else
                    {
                        Logging.instance.LogError("Unable to get remote IPs \"" + HC.Hostname + "\" (" + HC.Provider.ToString() + "): " + (rec_load_all_response["msg"] == null ? "Unknown reason" : rec_load_all_response["msg"].ToString()));
                    }
                }
                catch (Exception ex)
                {
                    Logging.instance.LogException("Unable to get remote IPs \"" + HC.Hostname + "\" (" + HC.Provider.ToString() + ")", ex);
                }
            }

            return null;
        }
コード例 #2
0
ファイル: WebUtils.cs プロジェクト: Robin--/RMLib
        static public string HttpPost(string url, NameValueCollection nameValues)
        {
            bool OldExpect100Continue = ServicePointManager.Expect100Continue;

            ServicePointManager.Expect100Continue = false;

            try
            {
                using (RMWebClient WC = new RMWebClient())
                {
                    return(RMEncoding.Ansi.GetString(WC.UploadValues(url, nameValues)));
                }
            }
            catch (Exception)
            {
                // TODO Consider not catching this
                return(string.Empty);
            }
            finally
            {
                ServicePointManager.Expect100Continue = OldExpect100Continue;
            }
        }
コード例 #3
0
        void cmdRetrieve_Click(object sender, EventArgs e)
        {
            if (!Dialog.ValidateIsEmailAddress(txtEmailAddress)) return;
            if (!Dialog.ValidateIsNotEmpty(txtAPIKey)) return;

            lvZoneRecords.Items.Clear();

            using (RMWebClient WC = new RMWebClient())
            {
                // Get all zones
                try
                {
                    NameValueCollection Params = new NameValueCollection();
                    Params.Add("a", "zone_load_multi");
                    Params.Add("email", txtEmailAddress.Text.Trim());
                    Params.Add("tkn", txtAPIKey.Text.Trim());
                    Hashtable zone_load_multi_response = (Hashtable)JSON.JsonDecode(Encoding.UTF8.GetString(WC.UploadValues("https://www.cloudflare.com/api_json.html", "POST", Params)));
                    if ((zone_load_multi_response["result"] != null) && (zone_load_multi_response["result"].ToString() == "success"))
                    {
                        Hashtable Response = (Hashtable)zone_load_multi_response["response"];
                        Hashtable Zones = (Hashtable)Response["zones"];
                        ArrayList Objs = (ArrayList)Zones["objs"];

                        // Now get all records for each zone
                        foreach (Hashtable Zone in Objs)
                        {
                            Params = new NameValueCollection();
                            Params.Add("a", "rec_load_all");
                            Params.Add("email", txtEmailAddress.Text.Trim());
                            Params.Add("tkn", txtAPIKey.Text.Trim());
                            Params.Add("z", Zone["zone_name"].ToString());
                            Hashtable rec_load_all_response = (Hashtable)JSON.JsonDecode(Encoding.UTF8.GetString(WC.UploadValues("https://www.cloudflare.com/api_json.html", "POST", Params)));
                            Response = (Hashtable)rec_load_all_response["response"];
                            Hashtable Recs = (Hashtable)Response["recs"];
                            Objs = (ArrayList)Recs["objs"];

                            foreach (Hashtable ZoneRecord in Objs)
                            {
                                if (ZoneRecord["type"].ToString() == "A")
                                {
                                    ListViewItem LVI = new ListViewItem(ZoneRecord["name"].ToString());
                                    LVI.SubItems.Add(ZoneRecord["zone_name"].ToString());
                                    LVI.SubItems.Add(ZoneRecord["rec_id"].ToString());
                                    lvZoneRecords.Items.Add(LVI);
                                }
                            }
                        }
                    }
                    else
                    {
                        if (zone_load_multi_response["msg"] == null)
                        {
                            throw new Exception("Unknown error");
                        }
                        else
                        {
                            throw new Exception(zone_load_multi_response["msg"].ToString());
                        }
                    }
                }
                catch (Exception ex)
                {
                    Logging.instance.LogException("Error retrieving CloudFlare zone records", ex);
                    Dialog.Error("Error retrieving hostnames:\r\n\r\n" + ex.Message, "Error");
                }
            }
        }
コード例 #4
0
ファイル: WebUtils.cs プロジェクト: Robin--/RMLib
        public static string HttpPost(string url, NameValueCollection nameValues)
        {
            bool OldExpect100Continue = ServicePointManager.Expect100Continue;
            ServicePointManager.Expect100Continue = false;

            try
            {
                using (RMWebClient WC = new RMWebClient())
                {
                    return RMEncoding.Ansi.GetString(WC.UploadValues(url, nameValues));
                }
            }
            catch (Exception)
            {
                // TODO Consider not catching this
                return string.Empty;
            }
            finally
            {
                ServicePointManager.Expect100Continue = OldExpect100Continue;
            }
        }
コード例 #5
0
        public override void Update(HostConfig HC, IPAddress ipAddress)
        {
            if (HC == null) throw new ArgumentNullException("HC");
            if (ipAddress == null) throw new ArgumentNullException("ipAddress");

            using (RMWebClient WC = new RMWebClient())
            {
                try
                {
                    NameValueCollection Params = new NameValueCollection();
                    Params.Add("a", "rec_edit");
                    Params.Add("content", ipAddress.ToString());
                    Params.Add("email", HC.Username);
                    Params.Add("id", HC.ProviderSpecificSettings[HostConfig.CLOUDFLARE_REC_ID]);
                    int HostnamePeriodCount = HC.Hostname.Count(x => x == '.'); // TODO Do this for other providers too
                    switch (HostnamePeriodCount) {
                        case 0: throw new Exception("Hostname has 0 periods?");
                        case 1: Params.Add("name", HC.Hostname); break; // One period == full domain name (ie github.com)
                        default: Params.Add("name", string.Join(".", HC.Hostname.Split('.'), 0, HostnamePeriodCount - 1)); break; // More than one period == all but last element (ie www.github.com or a.b.c.d.github.com)
                    }
                    Params.Add("tkn", HC.Password.GetPlainText());
                    Params.Add("ttl", "1");
                    Params.Add("type", "A");
                    Params.Add("z", HC.ProviderSpecificSettings[HostConfig.CLOUDFLARE_ZONE_NAME]);
                    Hashtable rec_edit_response = (Hashtable)JSON.JsonDecode(Encoding.UTF8.GetString(WC.UploadValues("https://www.cloudflare.com/api_json.html", "POST", Params)));
                    if (rec_edit_response["result"].ToString() == "success")
                    {
                        Hashtable Response = (Hashtable)rec_edit_response["response"];
                        Hashtable Rec = (Hashtable)Response["rec"];
                        Hashtable Obj = (Hashtable)Rec["obj"];

                        if (!Obj["content"].ToString().Contains(ipAddress.ToString()))
                        {
                            HC.Disabled = true;
                            HC.DisabledReason = rec_edit_response["msg"].ToString();
                            HC.Save();

                            Logging.instance.LogError("Unable to update host \"" + HC.Hostname + "\" (" + HC.Provider.ToString() + "): " + HC.DisabledReason);
                        }
                    }
                    else
                    {
                        HC.Disabled = true;
                        HC.DisabledReason = (rec_edit_response["msg"] == null) ? "Unknown reason" : rec_edit_response["msg"].ToString();
                        HC.Save();

                        Logging.instance.LogError("Unable to update host \"" + HC.Hostname + "\" (" + HC.Provider.ToString() + "): " + HC.DisabledReason);
                    }
                }
                catch (Exception ex)
                {
                    HC.Disabled = true;
                    HC.DisabledReason = "Unhandled exception (" + ex.Message + ")";
                    HC.Save();

                    Logging.instance.LogException("Unable to update host \"" + HC.Hostname + "\"", ex);
                }
            }
        }