public WebDomainData AddDomain(string name, int id_dns)
        {
            if (string.IsNullOrEmpty(name))
            {
                throw new ArgumentException("Invalid domain name.", "name");
            }

            if (name.Length > 255)
            {
                throw new ArgumentException("Domain name exceed limitation of 255 characters.", "name");
            }

            if (!Parser.IsDomainValid(name))
            {
                throw new ArgumentException("Incorrect domain name.", "name");
            }

            var domain_name = name.ToLowerInvariant();

            var free_dns = MailServer.GetFreeDnsRecords(MailServerFactory);

            if (free_dns.Id != id_dns)
            {
                throw new InvalidDataException("This dkim public key is already in use. Please reopen wizard again.");
            }

            var is_verified = free_dns.CheckDnsStatus(domain_name);

            var web_domain = MailServer.CreateWebDomain(domain_name, is_verified, MailServerFactory);

            web_domain.AddDns(id_dns, MailServerFactory);

            return(web_domain.ToWebDomainData(free_dns.ToDnsData()));
        }
        public WebDomainData AddDomain(string name, int id_dns)
        {
            if (!IsAdmin)
            {
                throw new SecurityException("Need admin privileges.");
            }

            if (string.IsNullOrEmpty(name))
            {
                throw new ArgumentException(@"Invalid domain name.", "name");
            }

            if (name.Length > 255)
            {
                throw new ArgumentException(@"Domain name exceed limitation of 255 characters.", "name");
            }

            if (!Parser.IsDomainValid(name))
            {
                throw new ArgumentException(@"Incorrect domain name.", "name");
            }

            var domainName = name.ToLowerInvariant();

            var freeDns = MailServer.GetFreeDnsRecords(MailServerFactory);

            if (freeDns.Id != id_dns)
            {
                throw new InvalidDataException("This dkim public key is already in use. Please reopen wizard again.");
            }

            var dnsLookup = new DnsLookup();

            if (!dnsLookup.IsDomainTxtRecordExists(domainName, freeDns.DomainCheckRecord))
            {
                throw new InvalidOperationException("txt record is not correct.");
            }

            var isVerified = freeDns.CheckDnsStatus(domainName);

            var webDomain = MailServer.CreateWebDomain(domainName, isVerified, MailServerFactory);

            webDomain.AddDns(id_dns, MailServerFactory);

            return(webDomain.ToWebDomainData(freeDns.ToDnsData()));
        }