public async Task <IActionResult> Link([FromBody] DomainLinkingRequestContract request) { try { if ((await domaineBusiness.LinkDomainToClusterAsync(request))) { return(Ok()); } } catch (DuplicateException dex) { logger.LogWarning(dex, "Error on link domain."); return(Conflict()); } catch (NotFoundException ex) { logger.LogWarning(ex, "Error on link domain."); return(NotFound()); } catch (Exception e) { logger.LogError(e, "Error on link domain."); } return(BadRequest()); }
public async Task <bool> LinkDomainToClusterAsync(DomainLinkingRequestContract request) { var domainName = await domainRepository.ReadAsync(d => d.Id == request.DomainId && d.ValidationDate.HasValue); var cluster = await clusterRepository.ReadAsync(c => c.Id == request.ClusterId && !c.DeleteAt.HasValue); var domainLink = await domainRepository.ReadAsync(d => d.Value == request.SubDomain); if (domainLink != null) { throw new DuplicateException(); } if (domainName == null || cluster == null) { throw new NotFoundException(); } if (domainName.ValidationDate.HasValue) { try { if (request.Protocol == "HTTP") { await ProcessHttpDomainLink(request, cluster, domainName); } else if (request.Protocol == "TLS") { await ProcessTlsDomainLink(request, cluster, domainName); } else { await ProcessHttpsDomainLink(request, cluster, domainName); } return(true); } catch (Exception e) { logger.LogError(e, "Error on linking."); } } return(false); }
private async Task ProcessHttpsDomainLink(DomainLinkingRequestContract request, Cluster cluster, Domain domainName) { var linkEntry = new ClusterDomain() { ClusterId = cluster.Id, Name = string.IsNullOrEmpty(request.SubDomain) ? domainName.Value : request.SubDomain, Value = string.IsNullOrEmpty(request.SubDomain) ? domainName.Value : request.SubDomain, RootDomainId = domainName.Id, Protocol = request.Protocol, Resolver = request.Resolver }; if ((await clusterDomainRepository.InsertAsync(linkEntry)) > 0) { var domainToInsert = string.IsNullOrEmpty(request.SubDomain) ? domainName.Value : $"{request.SubDomain}.{domainName.Value}"; await traefikRouterService.StoreNewHttpsRule(cluster, request.SubDomain, domainName.Value); } }
public async Task <bool> LinkDomainToClusterAsync(DomainLinkingRequestContract request) { var httpResponse = await httpClient.PostAsync($"api/domain/link-to-cluster", GetContent(request)); return(httpResponse.IsSuccessStatusCode); }
private Task ProcessTlsDomainLink(DomainLinkingRequestContract request, Cluster cluster, Domain domainName) { throw new NotImplementedException(); }