diff --git a/GodaddyApi.csproj b/GodaddyApi.csproj index ba248c4..877df1c 100644 --- a/GodaddyApi.csproj +++ b/GodaddyApi.csproj @@ -1,23 +1,27 @@  - net5.0 + net45;net48;netstandard2.0;net5.0 This is a simple API solution for handling your GoDaddy DNS records Iminetsoft - 1.2.0 + 1.3.* GodaddyApi.Net true - 1.2.0 + 1.3.0 false false Iminetsoft.GodaddyApiNet https://github.com/iminet/GodaddyApi.Net https://github.com/iminet/GodaddyApi.Net dotnet dns godaddy - 1.2.0 - 1.2.0 + 1.3.0 + 1.3.0 + Library + false + Multi-framework support + diff --git a/Iminetsoft.Godaddy.cs b/Iminetsoft.Godaddy.cs index a6b3713..3618cc5 100644 --- a/Iminetsoft.Godaddy.cs +++ b/Iminetsoft.Godaddy.cs @@ -1,174 +1,10 @@ -<<<<<<< HEAD -using System; -using System.Net; -using System.IO; -using System.Text; -using Newtonsoft.Json; -using System.Collections.Generic; - -namespace Iminetsoft -{ - /// - /// Simple and fast GoDaddy (godaddy.com) API - /// You might need a developer key and secret code first! In this case, visit https://developer.godaddy.com/keys - /// Developed and maintained by Iminetsoft | Version: 0.1 | Date: 17.01.2021 - /// - public class Godaddy - { - public enum RecordTypes { A, Nameserver, CNAME, MX, TXT, SRV, AAA, CAA } - public enum StatusCodes { OK = 0, EmptyResponse = 1, RequestMalformed = 400, AuthInvalid = 401, Unauthorized = 403, NotFound = 404, ProcessInvalid = 422, ProcessTimeout = 429, InternalError = 500, GatewayTimeout = 504 } - - public string Domain { get; set; } = String.Empty; - public RecordTypes Type { get; set; } = RecordTypes.A; - public string Name { get; set; } = String.Empty; - public int Ttl { get; set; } = 3600; - public int Port { get; set; } = 1; - public int Weight { get; set; } = 0; - public string Key { private get; set; } = String.Empty; - public string Secret { private get; set; } = String.Empty; - - public string Data { get; set; } = String.Empty; - public int Priority { get; set; } = 0; - - public string UserAgent { get; set; } = "Iminetsoft.Godaddy.Net"; - - public Dictionary ResponseHeaders { get; private set; } = new Dictionary(); - public string ExceptionMessage { private set; get; } = String.Empty; - public StatusCodes StatusCode = StatusCodes.EmptyResponse; - - public Godaddy() { } - public Godaddy(string domain, string name, RecordTypes type, int ttl, string key, string secret) - { - Domain = (domain.Length > 0 ? domain.Trim() : Domain); - Name = (name.Length > 0 ? name.Trim() : Name); - Type = type; - Ttl = (ttl >= 10 && ttl <= 3600 ? ttl : Ttl); - Key = (key.Length > 0 ? key.Trim() : Key); - Secret = (secret.Length > 0 ? secret.Trim() : Secret); - } - - /// - /// Gets the current data of the specified domain and DNS record - /// - /// - public bool GetDnsRecord() - { - GetSetDnsRecord(); - return (StatusCode == StatusCodes.OK ? true : false); - } - - /// - /// Gets the current IP/hostname of the specified domain and DNS record, typed A - /// - /// - public string GetDnsRecordString() - { - GetSetDnsRecord(); - return (StatusCode == StatusCodes.OK ? Data : ""); - } - - /// - /// Creates or updates the specified DNS record - /// - /// - public bool SetDnsRecord() - { - GetSetDnsRecord(true); - return (StatusCode == StatusCodes.OK ? true : false); - } - - private void GetSetDnsRecord(bool UpdateData = false) - { - string HtmlContent = String.Empty; - string apiurl = $"https://api.godaddy.com/v1/domains/{Domain}/records/{Type.ToString()}/{Name}"; - - ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; - HttpWebRequest webreq = (HttpWebRequest)System.Net.WebRequest.Create(apiurl); - webreq.Headers.Add("Authorization", $"sso-key {Key}:{Secret}"); - webreq.ContentType = "application/json"; - webreq.Accept = "application/json"; - webreq.UserAgent = UserAgent; - - if (UpdateData == true && RecordToJson().Length > 0) - { - webreq.Method = "PUT"; - webreq.ContentLength = RecordToJson().Length; - using (var writer = new StreamWriter(webreq.GetRequestStream())) - { - writer.Write(RecordToJson()); - } - } - else webreq.Method = "GET"; - - try - { - HttpWebResponse WebResponse = (HttpWebResponse)webreq.GetResponse(); - Stream responseStream = responseStream = WebResponse.GetResponseStream(); - - StreamReader Reader = new StreamReader(responseStream, Encoding.Default); - HtmlContent = Reader.ReadToEnd(); - - ResponseHeaders.Clear(); - foreach (string headkey in WebResponse.Headers.AllKeys) - { - ResponseHeaders.Add(headkey, WebResponse.Headers[headkey]); - } - - if (WebResponse.StatusCode == HttpStatusCode.OK && HtmlContent.Length > 0) - { - dynamic jsondata = JsonConvert.DeserializeObject(HtmlContent); - - if (jsondata != null && jsondata.Count != null && jsondata.Count > 0 && jsondata[0] != null) - { - if (jsondata[0].data != null) Data = jsondata[0].data.ToString().Trim(); - if (jsondata[0].name != null) Name = jsondata[0].name.ToString().Trim(); - if (jsondata[0].ttl != null) Ttl = jsondata[0].ttl; - if (jsondata[0].type != null) Type = (RecordTypes)System.Enum.Parse(typeof(RecordTypes), jsondata[0].type.ToString().Trim()); //jsondata[0].type.ToString().Trim(); - StatusCode = StatusCodes.OK; - } - else StatusCode = StatusCodes.EmptyResponse; - } - else StatusCode = StatusCodes.EmptyResponse; - - WebResponse.Close(); - responseStream.Close(); - } - catch (Exception e) - { - ExceptionMessage = e.Message; - StatusCode = StatusCodes.EmptyResponse; - } - } - - /// - /// Current record export in JSON format - this needs primarly to create/update your DNS record - /// - /// - public string RecordToJson() - { - Dictionary pushrecord = new Dictionary() - { - { "data", Data }, - { "name", Name }, - { "ttl", Ttl }, - { "type", Type.ToString() }, - { "port", Port }, - { "priority", Priority }, - { "protocol", "string" }, - { "service", "string" }, - { "weight", Weight }, - }; - return JsonConvert.SerializeObject(new object[1] { pushrecord }); - } - } -} -======= using System; using System.Net; using System.IO; using System.Text; using Newtonsoft.Json; using System.Collections.Generic; +using System.Reflection; namespace Iminetsoft { @@ -325,5 +161,4 @@ namespace Iminetsoft return JsonConvert.SerializeObject(new object[1] { pushrecord }); } } -} ->>>>>>> e6769d5bb2960e93a83739a7b88698538c85ee9c +} \ No newline at end of file