Esempio n. 1
0
 /// <summary>
 /// 添加域名
 /// </summary>
 /// <returns></returns>
 public new bool AddDomain(int siteId, string domain, string[] subName, CDNProviderType provider)
 {
     if (!this.IsCDNProvider(provider))
     {
         return(this.FaildMessage("当前不支持该CDN供应商"));
     }
     return(base.AddDomain(siteId, domain, subName, provider) &&
            this.AccountInfo.Log(LogType.Site, $"给商户{siteId}添加域名{domain}"));
 }
Esempio n. 2
0
        /// <summary>
        /// 添加域名
        /// </summary>
        /// <param name="siteId">商户ID</param>
        /// <param name="domain">根域名</param>
        /// <param name="subName">子域名</param>
        /// <param name="provider">CDN供应商(如果是商户操作,供应商为系统默认值,不可被商户自主选择)</param>
        /// <returns></returns>
        protected bool AddDomain(int siteId, string domain, string[] subName, CDNProviderType provider)
        {
            domain = WebAgent.GetTopDomain(domain);
            if (string.IsNullOrEmpty(domain))
            {
                return(this.FaildMessage("域名错误"));
            }
            if (this.ReadDB.Exists <SiteDomain>(t => t.Domain == domain))
            {
                return(this.FaildMessage("域名已被添加"));
            }
            foreach (string name in subName)
            {
                if (!Regex.IsMatch(name, @"^@$|^\*$|^\w+$"))
                {
                    return(this.FaildMessage($"子域名{name}不符合规范"));
                }
            }
            using (DbExecutor db = NewExecutor(IsolationLevel.ReadCommitted))
            {
                SiteDomain siteDomain = new SiteDomain()
                {
                    SiteID = siteId,
                    Domain = domain
                };
                siteDomain.AddIdentity(db);

                foreach (string name in subName.Distinct())
                {
                    // 添加域名记录
                    DomainRecord record = new DomainRecord()
                    {
                        CDNType  = provider,
                        CName    = this.CreateRecordCName(name, domain),
                        DomainID = siteDomain.ID,
                        Status   = DomainRecord.RecordStatus.Wait,
                        SubName  = name
                    };
                    record.AddIdentity(db);

                    // 添加CDN记录
                    DomainCDN cdn = new DomainCDN()
                    {
                        RecordID = record.ID,
                        Https    = provider == CDNProviderType.Manual ? DomainCDN.CDNStatus.None : DomainCDN.CDNStatus.Wait,
                        CName    = string.Empty,
                        CDNType  = provider,
                        Status   = provider == CDNProviderType.Manual ? DomainCDN.CDNStatus.None : DomainCDN.CDNStatus.Wait
                    };
                    cdn.Add(db);
                }
                db.Commit();
            }

            return(true);
        }
Esempio n. 3
0
        public Task GetCDNInfo([FromForm] int recordId, [FromForm] CDNProviderType type)
        {
            DomainCDN cdn = SiteAgent.Instance().GetDomainCDNInfo(recordId, type);

            if (cdn == null)
            {
                return(this.ShowError("没有记录"));
            }
            return(this.GetResult(cdn));
        }
Esempio n. 4
0
        public Task SaveCDNInfo([FromForm] CDNProviderType type, [FromForm] int?isOpen, [FromForm] string setting)
        {
            CDNProvider provider = new CDNProvider()
            {
                Type          = type,
                SettingString = setting,
                IsOpen        = isOpen == null ? false : isOpen == 1
            };

            return(this.GetResult(ProviderAgent.Instance().SaveCDNProvider(provider)));
        }
Esempio n. 5
0
        /// <summary>
        /// 添加域名解析记录
        /// </summary>
        /// <param name="siteId"></param>
        /// <param name="domainId"></param>
        /// <param name="subName"></param>
        /// <param name="provider"></param>
        /// <returns></returns>
        public new bool AddDomainRecord(int siteId, int domainId, string subName, CDNProviderType provider)
        {
            if (!IsCDNProvider(provider))
            {
                return(this.FaildMessage("当前不支持该供应商"));
            }
            SiteDomain domain = base.GetDomainInfo(siteId, domainId);

            return(base.AddDomainRecord(siteId, domainId, subName, provider) &&
                   this.AccountInfo.Log(LogType.Site, $"给商户{siteId}添加域名记录{subName}.{domain.Domain}"));
        }
Esempio n. 6
0
        public Task GetCDNSetting([FromForm] CDNProviderType type)
        {
            CDNProvider  provider = ProviderAgent.Instance().GetCDNProviderInfo(type);
            ICDNProvider cdn      = provider?.Setting;

            if (cdn == null)
            {
                return(this.GetResult(true));
            }
            else
            {
                return(this.GetResult(cdn.ToSetting()));
            }
        }
Esempio n. 7
0
        /// <summary>
        /// 添加域名记录
        /// </summary>
        /// <param name="siteId">商户ID</param>
        /// <param name="domainId">根域名ID</param>
        /// <param name="subName">子域名</param>
        /// <param name="provider">CDN供应商(如果是商户操作,供应商为系统默认值,不可被商户自主选择)</param>
        /// <returns></returns>
        protected bool AddDomainRecord(int siteId, int domainId, string subName, CDNProviderType provider)
        {
            if (string.IsNullOrEmpty(subName) || !Regex.IsMatch(subName, @"^@$|^\*$|^\w+$"))
            {
                return(this.FaildMessage($"子域名{subName}不符合规范"));
            }
            SiteDomain domain = this.GetDomainInfo(siteId, domainId);

            if (domain == null)
            {
                return(this.FaildMessage("域名ID错误"));
            }

            using (DbExecutor db = NewExecutor(IsolationLevel.ReadUncommitted))
            {
                if (db.Exists <DomainRecord>(t => t.DomainID == domainId && t.SubName == subName))
                {
                    return(this.FaildMessage("子域名记录已经存在"));
                }

                DomainRecord record = new DomainRecord()
                {
                    CDNType  = provider,
                    CName    = this.CreateRecordCName(subName, domain.Domain),
                    DomainID = domainId,
                    Status   = DomainRecord.RecordStatus.Wait,
                    SubName  = subName
                };
                record.AddIdentity(db);

                // 添加CDN记录
                DomainCDN cdn = new DomainCDN()
                {
                    RecordID = record.ID,
                    Https    = provider == CDNProviderType.Manual ? DomainCDN.CDNStatus.None : DomainCDN.CDNStatus.Wait,
                    CName    = string.Empty,
                    CDNType  = provider,
                    Status   = provider == CDNProviderType.Manual ? DomainCDN.CDNStatus.None : DomainCDN.CDNStatus.Wait
                };
                cdn.Add(db);

                db.Commit();
            }
            return(true);
        }
Esempio n. 8
0
        /// <summary>
        /// 创建DNS供应商工厂
        /// </summary>
        /// <param name="type"></param>
        /// <param name="setting"></param>
        /// <returns></returns>
        public static ICDNProvider GetFactory(CDNProviderType type, string setting)
        {
            /// 手动配置
            if (type == CDNProviderType.Manual)
            {
                return(null);
            }
            string key = $"{type}{setting.GetHash(8)}";

            return(MemoryUtils.Get(key, TimeSpan.FromHours(1), () =>
            {
                Type assembly = typeof(CDNFactory).Assembly.GetType($"{typeof(CDNFactory).Namespace}.{type}");
                if (assembly == null)
                {
                    return null;
                }
                return (ICDNProvider)Activator.CreateInstance(assembly, setting);
            }));
        }
Esempio n. 9
0
 /// <summary>
 /// 获取cdn供应商信息
 /// </summary>
 /// <param name="type"></param>
 /// <returns></returns>
 public new CDNProvider GetCDNProviderInfo(CDNProviderType type)
 {
     return(base.GetCDNProviderInfo(type));
 }
Esempio n. 10
0
 public Task UpdateCDNProvider([FromForm] int recordId, [FromForm] CDNProviderType provider, [FromForm] string cname)
 {
     return(this.GetResult(SiteAgent.Instance().UpdateCDNProvider(recordId, provider, cname)));
 }
Esempio n. 11
0
 public Task AddRecord([FromForm] int siteId, [FromForm] int domainId, [FromForm] string subName, [FromForm] CDNProviderType provider)
 {
     return(this.GetResult(SiteAgent.Instance().AddDomainRecord(siteId, domainId, subName, provider)));
 }
Esempio n. 12
0
 /// <returns></returns>
 public Task AddDomain([FromForm] int siteId, [FromForm] string domain, [FromForm] string subName, [FromForm] CDNProviderType provider)
 {
     return(this.GetResult(SiteAgent.Instance().AddDomain(siteId, domain,
                                                          (subName ?? string.Empty).Split(','), provider)));
 }
Esempio n. 13
0
        /// <summary>
        /// 切换域名记录的CDN供应商
        /// </summary>
        /// <param name="recordId">域名记录</param>
        /// <param name="type">CDN供应商</param>
        /// <param name="cname">自定义的别名记录</param>
        /// <returns></returns>
        public bool UpdateCDNProvider(int recordId, CDNProviderType type, string cname)
        {
            DomainRecord record = this.GetRecordInfo(recordId);

            if (record == null)
            {
                return(this.FaildMessage("域名记录错误"));
            }
            if (type == CDNProviderType.Manual && string.IsNullOrEmpty(cname))
            {
                return(this.FaildMessage("请手动设置CDN别名"));
            }
            if (!IsCDNProvider(type))
            {
                return(this.FaildMessage("当前不支持该供应商"));
            }

            SiteDomain domain = this.ReadDB.ReadInfo <SiteDomain>(t => t.ID == record.DomainID);

            using (DbExecutor db = NewExecutor(IsolationLevel.ReadUncommitted))
            {
                bool isExists = db.Exists <DomainCDN>(t => t.RecordID == recordId && t.CDNType == type);
                switch (type)
                {
                case CDNProviderType.Manual:
                {
                    if (isExists)
                    {
                        db.Update(new DomainCDN()
                            {
                                Status = DomainCDN.CDNStatus.Finish,
                                CName  = cname
                            }, t => t.RecordID == recordId && t.CDNType == type, t => t.Status, t => t.CName);
                    }
                    else
                    {
                        new DomainCDN()
                        {
                            RecordID = recordId,
                            CName    = cname,
                            Status   = DomainCDN.CDNStatus.Finish,
                            CDNType  = type
                        }.Add(db);
                    }

                    record.Status = DomainRecord.RecordStatus.Finish;

                    db.AddCallback(() =>
                        {
                            // 调用DNS供应商的接口,设定记录的别名指向到此处手动设定的CDN别名地址
                        });
                }
                break;

                default:
                {
                    if (isExists)
                    {
                        db.Update(new DomainCDN()
                            {
                                Status = DomainCDN.CDNStatus.Wait
                            }, t => t.RecordID == recordId && t.CDNType == type, t => t.Status);
                    }
                    else
                    {
                        new DomainCDN()
                        {
                            RecordID = recordId,
                            Status   = DomainCDN.CDNStatus.Wait,
                            CDNType  = type
                        }.Add(db);
                    }
                    record.Status = DomainRecord.RecordStatus.Wait;
                }
                break;
                }

                record.CDNType = type;
                record.Update(db, t => t.Status, t => t.CDNType);

                db.Commit();
            }
            return(this.AccountInfo.Log(LogType.Site, $"设定域名{record.SubName}.{domain.Domain}的CDN供应商为:{type.GetDescription()}"));
        }
Esempio n. 14
0
 /// <summary>
 /// 获取CDN配置信息
 /// </summary>
 /// <param name="recordId"></param>
 /// <param name="type"></param>
 /// <returns></returns>
 public DomainCDN GetDomainCDNInfo(int recordId, CDNProviderType type)
 {
     return(this.ReadDB.ReadInfo <DomainCDN>(t => t.RecordID == recordId && t.CDNType == type));
 }
Esempio n. 15
0
 /// <summary>
 /// 当前选择的CDN供应商是否被系统支持
 /// </summary>
 /// <param name="type"></param>
 /// <returns></returns>
 private bool IsCDNProvider(CDNProviderType type)
 {
     return(this.ReadDB.Exists <CDNProvider>(t => t.Type == type && t.IsOpen == true));
 }
Esempio n. 16
0
 /// <summary>
 /// 获取CDN 供应商信息
 /// </summary>
 /// <param name="type"></param>
 /// <returns></returns>
 protected CDNProvider GetCDNProviderInfo(CDNProviderType type)
 {
     return(this.ReadDB.ReadInfo <CDNProvider>(t => t.Type == type));
 }