Ejemplo n.º 1
0
        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());
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
        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);
            }
        }
Ejemplo n.º 4
0
        public async Task <bool> LinkDomainToClusterAsync(DomainLinkingRequestContract request)
        {
            var httpResponse = await httpClient.PostAsync($"api/domain/link-to-cluster", GetContent(request));

            return(httpResponse.IsSuccessStatusCode);
        }
Ejemplo n.º 5
0
 private Task ProcessTlsDomainLink(DomainLinkingRequestContract request, Cluster cluster, Domain domainName)
 {
     throw new NotImplementedException();
 }