Ejemplo n.º 1
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);
                }
            }
        }
Ejemplo n.º 2
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");
                }
            }
        }
Ejemplo n.º 3
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);
        }