Ejemplo n.º 1
0
        public async Task <ResultModel> CreateConfig(OcelotConfigEditDto dto)
        {
            if (string.IsNullOrWhiteSpace(dto.GlobalConfiguration.BaseUrl))
            {
                return(new ResultModel(ResultCode.Fail, "请输入网关地址"));
            }
            var globalConfiguration = new GlobalConfiguration
            {
                BaseUrl = dto.GlobalConfiguration.BaseUrl
            };
            var ocelotConfig = new OcelotConfig
            {
                IsEnable            = dto.IsEnable,
                GlobalConfiguration = globalConfiguration
            };

            try
            {
                _userDatabaseContext.OcelotConfigs.Add(ocelotConfig);
                await _userDatabaseContext.SaveChangesAsync();

                return(new ResultModel(ResultCode.Success, "创建网关配置成功"));
            }
            catch (Exception ex)
            {
                return(new ResultModel(ResultCode.Fail, ex.Message));
            }
        }
Ejemplo n.º 2
0
        public Task <Result> SetOcelotConfigAsync(OcelotConfig config)
        {
            try
            {
                string json = JsonSerializer.Serialize(config);
                using (var sw = new System.IO.StreamWriter(AppDomain.CurrentDomain.BaseDirectory + "ocelot.json"))
                {
                    sw.Write(json);
                }

                return(Task.FromResult(Result.Sucess()));
            }
            catch (Exception ex)
            {
                return(Task.FromResult(Result.Fail(ex.Message)));
            }
        }
Ejemplo n.º 3
0
        public override bool Execute(NetCoreInput input)
        {
            var host        = input.BuildHost();
            var serviceType = typeof(IApiDescriptionGroupCollectionProvider);

            var ocelotBaseConfig = host.Services.GetService(typeof(IOcelotConfigBuilderConfiguration)) as IOcelotConfigBuilderConfiguration;

            if (!(host.Services.GetService(serviceType) is IApiDescriptionGroupCollectionProvider explorer))
            {
                return(true);
            }

            var results = explorer
                          .ApiDescriptionGroups
                          .Items
                          .SelectMany(x => x.Items);

            var grouped = results.GroupBy(r => r.RelativePath);

            var config = new OcelotConfig()
            {
            };

            foreach (var group in grouped)
            {
                var ocelotRoutes = group.Select(x => x.ActionDescriptor.EndpointMetadata.Where(y => y.GetType() == typeof(OcelotRoute))).FirstOrDefault();

                var ocelotRoute = GetRoute(ocelotRoutes, group.Key);

                if (ocelotRoute == null)
                {
                    continue;
                }

                var claimsToHeaders = group.Select(x => x.ActionDescriptor.EndpointMetadata.Where(y => y.GetType() == typeof(OcelotClaimToHeaderAttribute))).FirstOrDefault();

                var downStreamRoute = group.Key;
                var upstreamMethods = group.Select(x => x.HttpMethod).ToArray();

                // var upstreamPath = upstreamUrl != null ? formatUrl(upstreamUrl.Url, ocelotBaseConfig.PrefixToRemove) : formatUrl(downStreamRoute, ocelotBaseConfig.PrefixToRemove);

                var route = new OcelotConfigRoute
                {
                    DownstreamPathTemplate = formatUrl(downStreamRoute),
                    DownstreamHostAndPorts = new List <OcelotConfigBuilderDownstreamHost> {
                        ocelotBaseConfig.DownstreamHost
                    },
                    UpstreamPathTemplate = formatUrl(ocelotRoute.OcelotTemplate),
                    UpstreamHttpMethod   = upstreamMethods,
                };

                foreach (var claim in claimsToHeaders)
                {
                    var castClaim = claim as OcelotClaimToHeaderAttribute;

                    route.AddHeadersToRequest.Add(castClaim.HeaderName, $"Claims[{castClaim.Claim}]>{castClaim.ValuePath}".Trim());
                }

                if (ocelotRoute.AuthenticationProvider != null && !string.IsNullOrWhiteSpace(ocelotRoute.AuthenticationProvider))
                {
                    route.AuthenticationOptions = new OcelotConfigRouteAuthOptions
                    {
                        AuthenticationProviderKey = ocelotRoute.AuthenticationProvider
                    };
                }

                config.Routes.Add(route);
            }

            if (!ocelotBaseConfig.GenerateGlobalConfiguration)
            {
                config.GlobalConfiguration = null;
            }
            else
            {
                config.GlobalConfiguration.BaseUrl = ocelotBaseConfig.BaseUrl;
            }

            var data = JsonConvert.SerializeObject(config, new JsonSerializerSettings
            {
                NullValueHandling = NullValueHandling.Ignore,
                Formatting        = Formatting.Indented
            });

            Console.WriteLine(data);

            var serializer = new SerializerBuilder().WithNamingConvention(CamelCaseNamingConvention.Instance).Build();
            var configmap  = new Configmap
            {
                Metadata = new ConfigmapMetadata
                {
                    Name      = ocelotBaseConfig.Kubernetes.Name,
                    Namespace = ocelotBaseConfig.Kubernetes.Namespace
                },
            };

            configmap.Data.Add("ocelot.api.json", data);

            var output = serializer.Serialize(configmap);

            File.WriteAllText(ocelotBaseConfig.OutputFileName, output);

            return(true);
        }