Пример #1
0
        /// <summary>
        /// Return the requested DdnsClient instance based on specified Ddns Service Provider
        /// </summary>
        /// <param name="ddnsServiceProvider">Ddns Service Provider for create the right DdnsClient instance</param>
        /// <param name="ddnsConfig">Ddns configuration information</param>
        /// <returns>Concrete DdnsClient instance</returns>
        public static DdnsClient GetDdnsClient(DdnsServiceProvider ddnsServiceProvider, DdnsConfig ddnsConfig)
        {
            DdnsClient ddnsClient = null;

            switch (ddnsServiceProvider)
            {
                case DdnsServiceProvider.NoIp:
                    ddnsClient = new DdnsNoIpClient(ddnsConfig);
                    break;
                case DdnsServiceProvider.DynDns:
                    ddnsClient = new DdnsDynDnsClient(ddnsConfig);
                    break;
                default:
                    break;
            }

            return ddnsClient;
        }
Пример #2
0
        /// <summary>
        /// Return the requested DdnsClient instance based on specified Ddns Service Provider
        /// </summary>
        /// <param name="ddnsServiceProvider">Ddns Service Provider for create the right DdnsClient instance</param>
        /// <param name="ddnsConfig">Ddns configuration information</param>
        /// <returns>Concrete DdnsClient instance</returns>
        public static DdnsClient GetDdnsClient(DdnsServiceProvider ddnsServiceProvider, DdnsConfig ddnsConfig)
        {
            DdnsClient ddnsClient = null;

            switch (ddnsServiceProvider)
            {
            case DdnsServiceProvider.NoIp:
                ddnsClient = new DdnsNoIpClient(ddnsConfig);
                break;

            case DdnsServiceProvider.DynDns:
                ddnsClient = new DdnsDynDnsClient(ddnsConfig);
                break;

            default:
                break;
            }

            return(ddnsClient);
        }
Пример #3
0
        public void UpdateDomainInfo(string ip)
        {
            List <DdnsServiceProvider> providers = ConfigManager.Now.DdnsConfig.DdnsServiceProviders;

            if (providers == null || providers.Count == 0)
            {
                throw new Exception("配置DDNS时发生错误,未发现DDNS服务提供配置。");
            }

            bool          isProcessed = true;
            StringBuilder sb          = new StringBuilder();

            foreach (var item in ConfigManager.Now.DdnsConfig.Domains)
            {
                try
                {
                    if (!DomainInfoVal(item))
                    {
                        Log.Warn($"DDNS域名格式不正确,正确的域名格式参考:xxx.xxx.com,已跳过该域名[{item.Domain}]DNNS。");
                        continue;
                    }
                    if (!DomainTTLVal(item))
                    {
                        Log.Warn($"DDNS域名TTL不正确,TTL不能小于60秒,已跳过该域名[{item.Domain}]DNNS。");
                        continue;
                    }
                    DdnsServiceProvider provider = providers.Where(p => p.Id == item.Provider).SingleOrDefault();
                    if (provider == null)
                    {
                        Log.Warn($"未找到该域名[{item.Domain}]的DDNS服务提供者,跳过该域名DNNS。");
                        continue;
                    }
                    bool state = false;
                    switch (provider.Type)
                    {
                    case DdnsServiceProviderType.Aliyun:
                        state = UpdateDdnsInfo(new AliyunDdns(provider.AccessKey, provider.AccessKeySecret), ip, item);
                        if (state)
                        {
                            Log.Info($"域名[{item.Domain}]DDNS信息已变更,当前IP:{ip}");
                        }
                        else
                        {
                            Log.Info($"域名[{item.Domain}]DDNS信息未变更,当前IP:{ip}");
                        }
                        break;

                    case DdnsServiceProviderType.TencentCloud:
                        state = UpdateDdnsInfo(new QCloudDdns(provider.AccessKey, provider.AccessKeySecret), ip, item);
                        if (state)
                        {
                            Log.Info($"域名[{item.Domain}]DDNS信息已变更,当前IP:{ip}");
                        }
                        else
                        {
                            Log.Info($"域名[{item.Domain}]DDNS信息未变更,当前IP:{ip}");
                        }
                        break;

                    default:
                        Log.Warn($"未知的DDNS服务提供者({provider.Type}),跳过该域名[{item.Domain}]DNNS。");
                        break;
                    }
                }
                catch (Exception ex)
                {
                    isProcessed = false;
                    string error = $"配置类型ID为{item.Provider}的DDNS时发生错误:{ex.Message}";
                    Log.Error(error, ex);
                    sb.AppendLine(error);
                }
            }
            if (!isProcessed)
            {
                throw new Exception(sb.ToString());
            }
        }