/// <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}")); }
/// <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); }
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)); }
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))); }
/// <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}")); }
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())); } }
/// <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); }
/// <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); })); }
/// <summary> /// 获取cdn供应商信息 /// </summary> /// <param name="type"></param> /// <returns></returns> public new CDNProvider GetCDNProviderInfo(CDNProviderType type) { return(base.GetCDNProviderInfo(type)); }
public Task UpdateCDNProvider([FromForm] int recordId, [FromForm] CDNProviderType provider, [FromForm] string cname) { return(this.GetResult(SiteAgent.Instance().UpdateCDNProvider(recordId, provider, cname))); }
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))); }
/// <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))); }
/// <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()}")); }
/// <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)); }
/// <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)); }
/// <summary> /// 获取CDN 供应商信息 /// </summary> /// <param name="type"></param> /// <returns></returns> protected CDNProvider GetCDNProviderInfo(CDNProviderType type) { return(this.ReadDB.ReadInfo <CDNProvider>(t => t.Type == type)); }