public Credentials(long id, string p_Email, DomainDns domainDns)
        {
            DomainDns     = domainDns;
            Email         = p_Email;
            PlainPassword = DefaultRNG.GetPassword(25, ASCII.Strings.SafeUrlOptions);
            var dom = new DynDnsDomain()
            {
                ID       = id,
                Username = domainDns.Name,
            };

            dom.CreatePasswordHash(PlainPassword);
            DynDnsDomain = dom;
        }
Exemple #2
0
        /// <summary>Updates the domain entry address.</summary>
        /// <param name="dom">The domain.</param>
        /// <param name="address">The address.</param>
        /// <returns></returns>
        /// <exception cref="System.Exception">
        /// </exception>
        public string UpdateDomainEntryAddress(DynDnsDomain dom, IPAddress address)
        {
            List <string> errors  = new List <string>();
            int           updates = 0;
            var           entries = DomainEntries.GetStructs(Search.FieldLike(nameof(DomainDns.NameAndTTL), dom.Username + "\t%"));

            foreach (var entry in entries)
            {
                bool update = IsSameDomainType(entry, address) && (entry.DomainText != address.ToString());
                if (update)
                {
                    DomainDns domainEntry = entry;
                    if (domainEntry.DomainText != address.ToString())
                    {
                        if (domainEntry.Status != "ok")
                        {
                            throw new Exception(string.Format("Cannot update domain {0} status {1}", domainEntry.Name, domainEntry.Status));
                        }

                        Domain domain = Domains[domainEntry.DomainID];
                        if (domain.Status != "ok")
                        {
                            throw new Exception(string.Format("Cannot update domain {0} status {1}", domain.Name, domain.Status));
                        }

                        domainEntry.DomainText = address.ToString();
                        domainEntry.Status     = "tochange";
                        try { DomainEntries.Update(domainEntry); }
                        catch (Exception ex)
                        {
                            string msg = string.Format("Cannot update domain {0}", domainEntry);
                            this.LogWarning(ex, msg);
                            errors.Add(msg);
                            continue;
                        }
                        domain.Status = "tochange";
                        Domains.Update(domain);
                        this.LogInfo("Update {0}", domainEntry);
                    }
                    updates++;
                }
            }
            if (errors.Count == 0)
            {
                return($"{updates} datasets updated.");
            }
            return($"{updates} datasets updated - {errors.Count} Errors.\n" + errors.JoinNewLine());
        }