Standa Lukeš
4 years ago
9 changed files with 262 additions and 0 deletions
@ -0,0 +1,2 @@ |
|||||
|
bin |
||||
|
obj |
@ -0,0 +1,39 @@ |
|||||
|
using System; |
||||
|
using System.Collections.Generic; |
||||
|
using System.Linq; |
||||
|
using System.Threading.Tasks; |
||||
|
using Microsoft.AspNetCore.Mvc; |
||||
|
using Microsoft.Extensions.Logging; |
||||
|
|
||||
|
namespace Ksp.WebServer.Controllers |
||||
|
{ |
||||
|
[ApiController] |
||||
|
[Route("[controller]")]
|
||||
|
public class WeatherForecastController : ControllerBase |
||||
|
{ |
||||
|
private static readonly string[] Summaries = new[] |
||||
|
{ |
||||
|
"Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching" |
||||
|
}; |
||||
|
|
||||
|
private readonly ILogger<WeatherForecastController> _logger; |
||||
|
|
||||
|
public WeatherForecastController(ILogger<WeatherForecastController> logger) |
||||
|
{ |
||||
|
_logger = logger; |
||||
|
} |
||||
|
|
||||
|
[HttpGet] |
||||
|
public IEnumerable<WeatherForecast> Get() |
||||
|
{ |
||||
|
var rng = new Random(); |
||||
|
return Enumerable.Range(1, 5).Select(index => new WeatherForecast |
||||
|
{ |
||||
|
Date = DateTime.Now.AddDays(index), |
||||
|
TemperatureC = rng.Next(-20, 55), |
||||
|
Summary = Summaries[rng.Next(Summaries.Length)] |
||||
|
}) |
||||
|
.ToArray(); |
||||
|
} |
||||
|
} |
||||
|
} |
@ -0,0 +1,12 @@ |
|||||
|
<Project Sdk="Microsoft.NET.Sdk.Web"> |
||||
|
|
||||
|
<PropertyGroup> |
||||
|
<TargetFramework>netcoreapp3.1</TargetFramework> |
||||
|
</PropertyGroup> |
||||
|
|
||||
|
<ItemGroup> |
||||
|
<PackageReference Include="AspNetCore.Proxy" Version="4.1.0" /> |
||||
|
</ItemGroup> |
||||
|
|
||||
|
|
||||
|
</Project> |
@ -0,0 +1,26 @@ |
|||||
|
using System; |
||||
|
using System.Collections.Generic; |
||||
|
using System.Linq; |
||||
|
using System.Threading.Tasks; |
||||
|
using Microsoft.AspNetCore.Hosting; |
||||
|
using Microsoft.Extensions.Configuration; |
||||
|
using Microsoft.Extensions.Hosting; |
||||
|
using Microsoft.Extensions.Logging; |
||||
|
|
||||
|
namespace Ksp.WebServer |
||||
|
{ |
||||
|
public class Program |
||||
|
{ |
||||
|
public static void Main(string[] args) |
||||
|
{ |
||||
|
CreateHostBuilder(args).Build().Run(); |
||||
|
} |
||||
|
|
||||
|
public static IHostBuilder CreateHostBuilder(string[] args) => |
||||
|
Host.CreateDefaultBuilder(args) |
||||
|
.ConfigureWebHostDefaults(webBuilder => |
||||
|
{ |
||||
|
webBuilder.UseStartup<Startup>(); |
||||
|
}); |
||||
|
} |
||||
|
} |
@ -0,0 +1,30 @@ |
|||||
|
{ |
||||
|
"$schema": "http://json.schemastore.org/launchsettings.json", |
||||
|
"iisSettings": { |
||||
|
"windowsAuthentication": false, |
||||
|
"anonymousAuthentication": true, |
||||
|
"iisExpress": { |
||||
|
"applicationUrl": "http://localhost:45302", |
||||
|
"sslPort": 44318 |
||||
|
} |
||||
|
}, |
||||
|
"profiles": { |
||||
|
"IIS Express": { |
||||
|
"commandName": "IISExpress", |
||||
|
"launchBrowser": true, |
||||
|
"launchUrl": "index.html", |
||||
|
"environmentVariables": { |
||||
|
"ASPNETCORE_ENVIRONMENT": "Development" |
||||
|
} |
||||
|
}, |
||||
|
"Ksp.WebServer": { |
||||
|
"commandName": "Project", |
||||
|
"launchBrowser": true, |
||||
|
"launchUrl": "index.html", |
||||
|
"applicationUrl": "https://ksp.localhost:5001;http://ksp.localhost:5000", |
||||
|
"environmentVariables": { |
||||
|
"ASPNETCORE_ENVIRONMENT": "Development" |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
@ -0,0 +1,119 @@ |
|||||
|
using System; |
||||
|
using System.Collections.Generic; |
||||
|
using System.IO; |
||||
|
using System.Linq; |
||||
|
using System.Net; |
||||
|
using System.Net.Http; |
||||
|
using System.Net.Http.Headers; |
||||
|
using System.Threading.Tasks; |
||||
|
using AspNetCore.Proxy; |
||||
|
using AspNetCore.Proxy.Builders; |
||||
|
using Microsoft.AspNetCore.Builder; |
||||
|
using Microsoft.AspNetCore.Hosting; |
||||
|
using Microsoft.AspNetCore.HttpsPolicy; |
||||
|
using Microsoft.AspNetCore.Mvc; |
||||
|
using Microsoft.Extensions.Configuration; |
||||
|
using Microsoft.Extensions.DependencyInjection; |
||||
|
using Microsoft.Extensions.FileProviders; |
||||
|
using Microsoft.Extensions.Hosting; |
||||
|
using Microsoft.Extensions.Logging; |
||||
|
|
||||
|
namespace Ksp.WebServer |
||||
|
{ |
||||
|
public class Startup |
||||
|
{ |
||||
|
public Startup(IConfiguration configuration) |
||||
|
{ |
||||
|
Configuration = configuration; |
||||
|
} |
||||
|
|
||||
|
public IConfiguration Configuration { get; } |
||||
|
|
||||
|
// This method gets called by the runtime. Use this method to add services to the container.
|
||||
|
public void ConfigureServices(IServiceCollection services) |
||||
|
{ |
||||
|
services.AddControllers(); |
||||
|
services.AddHttpClient("RedirectClient") |
||||
|
.ConfigurePrimaryHttpMessageHandler(h => { |
||||
|
return new HttpClientHandler { |
||||
|
AllowAutoRedirect = false, |
||||
|
UseCookies = false |
||||
|
}; |
||||
|
}); |
||||
|
services.AddProxies(); |
||||
|
} |
||||
|
|
||||
|
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
|
||||
|
public void Configure(IApplicationBuilder app, IWebHostEnvironment env) |
||||
|
{ |
||||
|
if (env.IsDevelopment()) |
||||
|
{ |
||||
|
app.UseDeveloperExceptionPage(); |
||||
|
} |
||||
|
else |
||||
|
{ |
||||
|
app.UseHttpsRedirection(); |
||||
|
} |
||||
|
|
||||
|
app.UseRouting(); |
||||
|
|
||||
|
app.UseAuthorization(); |
||||
|
|
||||
|
app.UseEndpoints(endpoints => |
||||
|
{ |
||||
|
endpoints.MapControllers(); |
||||
|
}); |
||||
|
|
||||
|
app.UseStaticFiles(new StaticFileOptions { |
||||
|
FileProvider = new PhysicalFileProvider( |
||||
|
Path.Combine(env.ContentRootPath, "../../frontend/public")), |
||||
|
}); |
||||
|
|
||||
|
app.RunProxy(proxy => proxy |
||||
|
.UseHttp((context, args) => |
||||
|
{ |
||||
|
return "https://ksp-test.ks.matfyz.cz"; |
||||
|
}, opt => { |
||||
|
opt.WithHttpClientName("RedirectClient"); |
||||
|
|
||||
|
opt.WithBeforeSend(async (cx, request) => { |
||||
|
request.Headers.Authorization = |
||||
|
new AuthenticationHeaderValue("Basic", "SECRET"); |
||||
|
if (request.Headers.Referrer is object) |
||||
|
request.Headers.Referrer = |
||||
|
new UriBuilder(request.Headers.Referrer) { |
||||
|
Host = "ksp-test.ks.matfyz.cz", |
||||
|
Port = 443, |
||||
|
Scheme = "https" |
||||
|
}.Uri; |
||||
|
// request.Headers.Remove("X-Forwarded-For");
|
||||
|
// request.Headers.Remove("X-Forwarded-Proto");
|
||||
|
// request.Headers.Remove("X-Forwarded-Host");
|
||||
|
// request.Headers.Remove("Forwarded");
|
||||
|
// request.Headers.Remove("Origin");
|
||||
|
// request.Headers.Add("Origin", "https://ksp-test.ks.matfyz.cz");
|
||||
|
Console.WriteLine(request); |
||||
|
}); |
||||
|
opt.WithAfterReceive(async (cx, response) => { |
||||
|
Console.WriteLine(response); |
||||
|
if (response.Headers.Location is object && response.Headers.Location.Host == "ksp-test.ks.matfyz.cz") |
||||
|
{ |
||||
|
response.Headers.Location = new UriBuilder(response.Headers.Location) { |
||||
|
Host = cx.Request.Host.Host, |
||||
|
Port = cx.Request.Host.Port.Value, |
||||
|
Scheme = cx.Request.Scheme |
||||
|
}.Uri; |
||||
|
} |
||||
|
if (response.Headers.TryGetValues("Set-Cookie", out var v)) |
||||
|
{ |
||||
|
response.Headers.Remove("Set-Cookie"); |
||||
|
response.Headers.Add("Set-Cookie", v.Select(s => |
||||
|
s.Replace("; secure", "") |
||||
|
.Replace("; domain=ksp-test.ks.matfyz.cz", $"; domain={cx.Request.Host.Host}") |
||||
|
)); |
||||
|
} |
||||
|
}); |
||||
|
})); |
||||
|
} |
||||
|
} |
||||
|
} |
@ -0,0 +1,15 @@ |
|||||
|
using System; |
||||
|
|
||||
|
namespace Ksp.WebServer |
||||
|
{ |
||||
|
public class WeatherForecast |
||||
|
{ |
||||
|
public DateTime Date { get; set; } |
||||
|
|
||||
|
public int TemperatureC { get; set; } |
||||
|
|
||||
|
public int TemperatureF => 32 + (int)(TemperatureC / 0.5556); |
||||
|
|
||||
|
public string Summary { get; set; } |
||||
|
} |
||||
|
} |
@ -0,0 +1,9 @@ |
|||||
|
{ |
||||
|
"Logging": { |
||||
|
"LogLevel": { |
||||
|
"Default": "Information", |
||||
|
"Microsoft": "Warning", |
||||
|
"Microsoft.Hosting.Lifetime": "Information" |
||||
|
} |
||||
|
} |
||||
|
} |
@ -0,0 +1,10 @@ |
|||||
|
{ |
||||
|
"Logging": { |
||||
|
"LogLevel": { |
||||
|
"Default": "Information", |
||||
|
"Microsoft": "Warning", |
||||
|
"Microsoft.Hosting.Lifetime": "Information" |
||||
|
} |
||||
|
}, |
||||
|
"AllowedHosts": "*" |
||||
|
} |
Reference in new issue