Standa Lukeš
4 years ago
7 changed files with 165 additions and 4 deletions
@ -0,0 +1,34 @@ |
|||||
|
{ |
||||
|
// Use IntelliSense to learn about possible attributes. |
||||
|
// Hover to view descriptions of existing attributes. |
||||
|
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 |
||||
|
"version": "0.2.0", |
||||
|
"configurations": [ |
||||
|
{ |
||||
|
"name": ".NET Core Launch (web)", |
||||
|
"type": "coreclr", |
||||
|
"request": "launch", |
||||
|
"preLaunchTask": "build", |
||||
|
"program": "${workspaceFolder}/Ksp.WebServer/bin/Debug/netcoreapp3.1/Ksp.WebServer.dll", |
||||
|
"args": [], |
||||
|
"cwd": "${workspaceFolder}/Ksp.WebServer", |
||||
|
"stopAtEntry": false, |
||||
|
"serverReadyAction": { |
||||
|
"action": "openExternally", |
||||
|
"pattern": "\\bNow listening on:\\s+(https?://\\S+)" |
||||
|
}, |
||||
|
"env": { |
||||
|
"ASPNETCORE_ENVIRONMENT": "Development" |
||||
|
}, |
||||
|
"sourceFileMap": { |
||||
|
"/Views": "${workspaceFolder}/Views" |
||||
|
} |
||||
|
}, |
||||
|
{ |
||||
|
"name": ".NET Core Attach", |
||||
|
"type": "coreclr", |
||||
|
"request": "attach", |
||||
|
"processId": "${command:pickProcess}" |
||||
|
} |
||||
|
] |
||||
|
} |
@ -0,0 +1,42 @@ |
|||||
|
{ |
||||
|
"version": "2.0.0", |
||||
|
"tasks": [ |
||||
|
{ |
||||
|
"label": "build", |
||||
|
"command": "dotnet", |
||||
|
"type": "process", |
||||
|
"args": [ |
||||
|
"build", |
||||
|
"${workspaceFolder}/Ksp.WebServer/Ksp.WebServer.csproj", |
||||
|
"/property:GenerateFullPaths=true", |
||||
|
"/consoleloggerparameters:NoSummary" |
||||
|
], |
||||
|
"problemMatcher": "$msCompile" |
||||
|
}, |
||||
|
{ |
||||
|
"label": "publish", |
||||
|
"command": "dotnet", |
||||
|
"type": "process", |
||||
|
"args": [ |
||||
|
"publish", |
||||
|
"${workspaceFolder}/Ksp.WebServer/Ksp.WebServer.csproj", |
||||
|
"/property:GenerateFullPaths=true", |
||||
|
"/consoleloggerparameters:NoSummary" |
||||
|
], |
||||
|
"problemMatcher": "$msCompile" |
||||
|
}, |
||||
|
{ |
||||
|
"label": "watch", |
||||
|
"command": "dotnet", |
||||
|
"type": "process", |
||||
|
"args": [ |
||||
|
"watch", |
||||
|
"run", |
||||
|
"${workspaceFolder}/Ksp.WebServer/Ksp.WebServer.csproj", |
||||
|
"/property:GenerateFullPaths=true", |
||||
|
"/consoleloggerparameters:NoSummary" |
||||
|
], |
||||
|
"problemMatcher": "$msCompile" |
||||
|
} |
||||
|
] |
||||
|
} |
@ -0,0 +1,73 @@ |
|||||
|
using System; |
||||
|
using System.Collections.Generic; |
||||
|
using System.IO; |
||||
|
using System.Linq; |
||||
|
using System.Threading.Tasks; |
||||
|
using Microsoft.AspNetCore.Hosting; |
||||
|
using Microsoft.AspNetCore.Mvc; |
||||
|
using Microsoft.Extensions.Logging; |
||||
|
using AngleSharp; |
||||
|
using AngleSharp.Dom; |
||||
|
using System.Net.Http; |
||||
|
using System.Net.Http.Headers; |
||||
|
using AngleSharp.Html; |
||||
|
|
||||
|
namespace Ksp.WebServer.Controllers |
||||
|
{ |
||||
|
[ApiController] |
||||
|
[Route("grafik")] |
||||
|
public class GrafikPageController : ControllerBase |
||||
|
{ |
||||
|
private readonly ILogger<TasksController> logger; |
||||
|
private readonly IWebHostEnvironment env; |
||||
|
|
||||
|
public GrafikPageController( |
||||
|
ILogger<TasksController> logger, |
||||
|
IWebHostEnvironment env) |
||||
|
{ |
||||
|
this.env = env; |
||||
|
this.logger = logger; |
||||
|
} |
||||
|
|
||||
|
async Task<string> FetchBlankPage() |
||||
|
{ |
||||
|
var c = new HttpClient(); |
||||
|
var rq = new HttpRequestMessage(HttpMethod.Get, "https://ksp-test.ks.matfyz.cz/blank"); |
||||
|
rq.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("text/html")); |
||||
|
rq.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/xhtml+xml")); |
||||
|
rq.Headers.Authorization = |
||||
|
new AuthenticationHeaderValue("Basic", "SECRET"); |
||||
|
if (HttpContext.Request.Headers.TryGetValue("Cookie", out var x)) |
||||
|
rq.Headers.Add("Cookie", x.AsEnumerable()); |
||||
|
var rs = await c.SendAsync(rq); |
||||
|
return await rs.Content.ReadAsStringAsync(); |
||||
|
} |
||||
|
|
||||
|
[HttpGet] |
||||
|
public async Task<IActionResult> Get() |
||||
|
{ |
||||
|
var grafikPage = await System.IO.File.ReadAllTextAsync(Path.Combine(env.ContentRootPath, "../../frontend/public/grafik.html")); |
||||
|
var p = new AngleSharp.Html.Parser.HtmlParser(); |
||||
|
var grafik = p.ParseDocument(grafikPage); |
||||
|
|
||||
|
var kspTemplate = p.ParseDocument(await FetchBlankPage()); |
||||
|
|
||||
|
var innerBody = grafik.Body; |
||||
|
innerBody.Replace(kspTemplate.Body); |
||||
|
var page = grafik.Body.QuerySelector("#page"); |
||||
|
page.Replace(innerBody.ChildNodes.ToArray()); |
||||
|
|
||||
|
foreach(var headElement in kspTemplate.Head.QuerySelectorAll("link, script")) |
||||
|
{ |
||||
|
headElement.RemoveFromParent(); |
||||
|
grafik.Head.AppendChild(headElement); |
||||
|
} |
||||
|
|
||||
|
var outputHtml = new StringWriter(); |
||||
|
grafik.ToHtml(outputHtml, new PrettyMarkupFormatter() { Indentation = "\t", NewLine = "\n" }); |
||||
|
|
||||
|
|
||||
|
return this.Content(outputHtml.ToString(), "text/html"); |
||||
|
} |
||||
|
} |
||||
|
} |
Reference in new issue