コード例 #1
0
ファイル: AddCommandHelper.cs プロジェクト: huhubun/DDNSSharp
        public static int DoAdd(CommandLineApplication <AddCommandModel> addCmd, ProviderBase providerBase)
        {
            var newConfigItem = new DomainConfigItem
            {
                Domain = addCmd.Model.Domain,
                Type   = addCmd.Model.Type ?? DomainRecordType.A
                         // 为了便于下面 GetSingle() 模糊查询,这里先不对 Provider 赋值
            };

            // 根据 域名+类型 判断,是否有重复的
            var item = DomainConfigHelper.GetSingle(newConfigItem);

            if (item != null)
            {
                addCmd.Error.WriteLine("Failed to add, because the same configuration already exists: ");
                WriteConfigInfoToConsole(item, addCmd.Error);
                addCmd.Error.WriteLine("Only one record can be added for the same domain name and type, even if the provider is different.");

                return(1);
            }

            // 获取网卡信息
            // 如果只有一个网卡,并且用户没有设置 interface 选项,那么该域名就与该网卡绑定,使用该网卡的 IP 地址
            // 如果只有一个网卡,并且用户设置了 interface 选项,先判断可用网卡和用户设置的是否一致,如果一致则使用;不一致则报错
            // 如果有多个网卡,并且用户没有设置 interface 选项,报错
            // 如果有多个网卡,并且用户设置了 interface 选项,判断用户设置的网卡是否可用,如果不可用则报错
            NetworkInterface iface;
            var interfaces = GetAvailableNetworkInterfaces();

            if (!interfaces.Any())
            {
                return(FailedWithAvailableNetworkInterface(addCmd.Error));
            }

            if (!String.IsNullOrEmpty(addCmd.Model.Interface))
            {
                iface = interfaces.SingleOrDefault(i => i.Name == addCmd.Model.Interface);

                if (iface == null)
                {
                    return(FailedWithInterfaceNameNotFound(addCmd.Error));
                }
            }
            else if (interfaces.Count == 1)
            {
                iface = interfaces.Single();

                if (iface.Name != addCmd.Model.Interface)
                {
                    return(FailedWithInterfaceNameNotFound(addCmd.Error));
                }
            }
            else
            {
                return(FailedWithMultipleInterfaceNameFoundButNoSpecify(addCmd.Error));
            }

            // 准备保存数据了,为 Provider 等内容赋值
            newConfigItem.Provider  = addCmd.Model.Provider;
            newConfigItem.Interface = iface.Name;

            // 保存访问 DNS 提供商 API 时需要用到的参数信息
            var providerOptionNames = ProviderHelper.GetProviderOptions(providerBase.GetType()).Select(o => o.LongName);

            newConfigItem.ProviderInfo = addCmd.Options
                                         .Where(o => providerOptionNames.Contains(o.LongName))
                                         .ToDictionary(k => k.LongName, v => String.Join('|', v.Values));

            DomainConfigHelper.AddItem(newConfigItem);
            addCmd.Out.WriteLine($"Added successfully!");

            return(1);
        }
コード例 #2
0
ファイル: AddCommandHelper.cs プロジェクト: huhubun/DDNSSharp
 public static void WriteConfigInfoToConsole(DomainConfigItem item, TextWriter output)
 {
     output.WriteLine($"  Domain: {item.Domain}");
     output.WriteLine($"  Type: {item.Type}");
     output.WriteLine($"  Provider: {item.Provider}");
 }