Skip to content

Commit bc378e5

Browse files
Consolidate markdig version, render on server
1 parent b31d895 commit bc378e5

File tree

8 files changed

+225
-12
lines changed

8 files changed

+225
-12
lines changed

src/Certify.Server/Certify.Server.Hub.Api.Client/Certify.Server.Hub.Api.Client.cs

Lines changed: 166 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
//----------------------
22
// <auto-generated>
3-
// Generated using the NSwag toolchain v14.3.0.0 (NJsonSchema v11.2.0.0 (Newtonsoft.Json v13.0.0.0)) (http://NSwag.org)
3+
// Generated using the NSwag toolchain v14.4.0.0 (NJsonSchema v11.3.2.0 (Newtonsoft.Json v13.0.0.0)) (http://NSwag.org)
44
// </auto-generated>
55
//----------------------
66

@@ -12,6 +12,7 @@
1212
using Certify.Models.Hub;
1313
using Certify.Models.Config.Migration;
1414
using Certify.Shared;
15+
using FileResult=Microsoft.AspNetCore.Mvc.FileResult;
1516

1617
#pragma warning disable 108 // Disable "CS0108 '{derivedDto}.ToJson()' hides inherited member '{dtoBase}.ToJson()'. Use the new keyword if hiding was intended."
1718
#pragma warning disable 114 // Disable "CS0114 '{derivedDto}.RaisePropertyChanged(String)' hides inherited member 'dtoBase.RaisePropertyChanged(String)'. To make the current member override that implementation, add the override keyword. Otherwise add the new keyword."
@@ -33,7 +34,7 @@ namespace Certify.Server.Hub.Api
3334
{
3435
using System = global::System;
3536

36-
[System.CodeDom.Compiler.GeneratedCode("NSwag", "14.3.0.0 (NJsonSchema v11.2.0.0 (Newtonsoft.Json v13.0.0.0))")]
37+
[System.CodeDom.Compiler.GeneratedCode("NSwag", "14.4.0.0 (NJsonSchema v11.3.2.0 (Newtonsoft.Json v13.0.0.0))")]
3738
public partial class Client
3839
{
3940
#pragma warning disable 8618
@@ -4579,6 +4580,166 @@ public virtual async System.Threading.Tasks.Task<ActionResult> RemoveManagedChal
45794580
}
45804581
}
45814582

4583+
/// <returns>OK</returns>
4584+
/// <exception cref="ApiException">A server side error occurred.</exception>
4585+
public virtual System.Threading.Tasks.Task<FileResponse> GetPreviewAsMarkdownAsync(ManagedCertificate body)
4586+
{
4587+
return GetPreviewAsMarkdownAsync(body, System.Threading.CancellationToken.None);
4588+
}
4589+
4590+
/// <param name="cancellationToken">A cancellation token that can be used by other objects or threads to receive notice of cancellation.</param>
4591+
/// <returns>OK</returns>
4592+
/// <exception cref="ApiException">A server side error occurred.</exception>
4593+
public virtual async System.Threading.Tasks.Task<FileResponse> GetPreviewAsMarkdownAsync(ManagedCertificate body, System.Threading.CancellationToken cancellationToken)
4594+
{
4595+
var client_ = _httpClient;
4596+
var disposeClient_ = false;
4597+
try
4598+
{
4599+
using (var request_ = new System.Net.Http.HttpRequestMessage())
4600+
{
4601+
var json_ = Newtonsoft.Json.JsonConvert.SerializeObject(body, JsonSerializerSettings);
4602+
var content_ = new System.Net.Http.StringContent(json_);
4603+
content_.Headers.ContentType = System.Net.Http.Headers.MediaTypeHeaderValue.Parse("application/json");
4604+
request_.Content = content_;
4605+
request_.Method = new System.Net.Http.HttpMethod("POST");
4606+
request_.Headers.Accept.Add(System.Net.Http.Headers.MediaTypeWithQualityHeaderValue.Parse("text/html"));
4607+
4608+
var urlBuilder_ = new System.Text.StringBuilder();
4609+
if (!string.IsNullOrEmpty(_baseUrl)) urlBuilder_.Append(_baseUrl);
4610+
// Operation Path: "internal/v1/preview/managedcertificate"
4611+
urlBuilder_.Append("internal/v1/preview/managedcertificate");
4612+
4613+
PrepareRequest(client_, request_, urlBuilder_);
4614+
4615+
var url_ = urlBuilder_.ToString();
4616+
request_.RequestUri = new System.Uri(url_, System.UriKind.RelativeOrAbsolute);
4617+
4618+
PrepareRequest(client_, request_, url_);
4619+
4620+
var response_ = await client_.SendAsync(request_, System.Net.Http.HttpCompletionOption.ResponseHeadersRead, cancellationToken).ConfigureAwait(false);
4621+
var disposeResponse_ = true;
4622+
try
4623+
{
4624+
var headers_ = new System.Collections.Generic.Dictionary<string, System.Collections.Generic.IEnumerable<string>>();
4625+
foreach (var item_ in response_.Headers)
4626+
headers_[item_.Key] = item_.Value;
4627+
if (response_.Content != null && response_.Content.Headers != null)
4628+
{
4629+
foreach (var item_ in response_.Content.Headers)
4630+
headers_[item_.Key] = item_.Value;
4631+
}
4632+
4633+
ProcessResponse(client_, response_);
4634+
4635+
var status_ = (int)response_.StatusCode;
4636+
if (status_ == 200 || status_ == 206)
4637+
{
4638+
var responseStream_ = response_.Content == null ? System.IO.Stream.Null : await response_.Content.ReadAsStreamAsync().ConfigureAwait(false);
4639+
var fileResponse_ = new FileResponse(status_, headers_, responseStream_, null, response_);
4640+
disposeClient_ = false; disposeResponse_ = false; // response and client are disposed by FileResponse
4641+
return fileResponse_;
4642+
}
4643+
else
4644+
{
4645+
var responseData_ = response_.Content == null ? null : await response_.Content.ReadAsStringAsync().ConfigureAwait(false);
4646+
throw new ApiException("The HTTP status code of the response was not expected (" + status_ + ").", status_, responseData_, headers_, null);
4647+
}
4648+
}
4649+
finally
4650+
{
4651+
if (disposeResponse_)
4652+
response_.Dispose();
4653+
}
4654+
}
4655+
}
4656+
finally
4657+
{
4658+
if (disposeClient_)
4659+
client_.Dispose();
4660+
}
4661+
}
4662+
4663+
/// <returns>OK</returns>
4664+
/// <exception cref="ApiException">A server side error occurred.</exception>
4665+
public virtual System.Threading.Tasks.Task<FileResponse> RenderMarkdownAsync(string body)
4666+
{
4667+
return RenderMarkdownAsync(body, System.Threading.CancellationToken.None);
4668+
}
4669+
4670+
/// <param name="cancellationToken">A cancellation token that can be used by other objects or threads to receive notice of cancellation.</param>
4671+
/// <returns>OK</returns>
4672+
/// <exception cref="ApiException">A server side error occurred.</exception>
4673+
public virtual async System.Threading.Tasks.Task<FileResponse> RenderMarkdownAsync(string body, System.Threading.CancellationToken cancellationToken)
4674+
{
4675+
var client_ = _httpClient;
4676+
var disposeClient_ = false;
4677+
try
4678+
{
4679+
using (var request_ = new System.Net.Http.HttpRequestMessage())
4680+
{
4681+
var json_ = Newtonsoft.Json.JsonConvert.SerializeObject(body, JsonSerializerSettings);
4682+
var content_ = new System.Net.Http.StringContent(json_);
4683+
content_.Headers.ContentType = System.Net.Http.Headers.MediaTypeHeaderValue.Parse("application/json");
4684+
request_.Content = content_;
4685+
request_.Method = new System.Net.Http.HttpMethod("POST");
4686+
request_.Headers.Accept.Add(System.Net.Http.Headers.MediaTypeWithQualityHeaderValue.Parse("text/html"));
4687+
4688+
var urlBuilder_ = new System.Text.StringBuilder();
4689+
if (!string.IsNullOrEmpty(_baseUrl)) urlBuilder_.Append(_baseUrl);
4690+
// Operation Path: "internal/v1/preview/rendermarkdown"
4691+
urlBuilder_.Append("internal/v1/preview/rendermarkdown");
4692+
4693+
PrepareRequest(client_, request_, urlBuilder_);
4694+
4695+
var url_ = urlBuilder_.ToString();
4696+
request_.RequestUri = new System.Uri(url_, System.UriKind.RelativeOrAbsolute);
4697+
4698+
PrepareRequest(client_, request_, url_);
4699+
4700+
var response_ = await client_.SendAsync(request_, System.Net.Http.HttpCompletionOption.ResponseHeadersRead, cancellationToken).ConfigureAwait(false);
4701+
var disposeResponse_ = true;
4702+
try
4703+
{
4704+
var headers_ = new System.Collections.Generic.Dictionary<string, System.Collections.Generic.IEnumerable<string>>();
4705+
foreach (var item_ in response_.Headers)
4706+
headers_[item_.Key] = item_.Value;
4707+
if (response_.Content != null && response_.Content.Headers != null)
4708+
{
4709+
foreach (var item_ in response_.Content.Headers)
4710+
headers_[item_.Key] = item_.Value;
4711+
}
4712+
4713+
ProcessResponse(client_, response_);
4714+
4715+
var status_ = (int)response_.StatusCode;
4716+
if (status_ == 200 || status_ == 206)
4717+
{
4718+
var responseStream_ = response_.Content == null ? System.IO.Stream.Null : await response_.Content.ReadAsStreamAsync().ConfigureAwait(false);
4719+
var fileResponse_ = new FileResponse(status_, headers_, responseStream_, null, response_);
4720+
disposeClient_ = false; disposeResponse_ = false; // response and client are disposed by FileResponse
4721+
return fileResponse_;
4722+
}
4723+
else
4724+
{
4725+
var responseData_ = response_.Content == null ? null : await response_.Content.ReadAsStringAsync().ConfigureAwait(false);
4726+
throw new ApiException("The HTTP status code of the response was not expected (" + status_ + ").", status_, responseData_, headers_, null);
4727+
}
4728+
}
4729+
finally
4730+
{
4731+
if (disposeResponse_)
4732+
response_.Dispose();
4733+
}
4734+
}
4735+
}
4736+
finally
4737+
{
4738+
if (disposeClient_)
4739+
client_.Dispose();
4740+
}
4741+
}
4742+
45824743
/// <summary>
45834744
/// Get List of Stored Credentials [Generated]
45844745
/// </summary>
@@ -6322,7 +6483,7 @@ private string ConvertToString(object value, System.Globalization.CultureInfo cu
63226483

63236484

63246485

6325-
[System.CodeDom.Compiler.GeneratedCode("NSwag", "14.3.0.0 (NJsonSchema v11.2.0.0 (Newtonsoft.Json v13.0.0.0))")]
6486+
[System.CodeDom.Compiler.GeneratedCode("NSwag", "14.4.0.0 (NJsonSchema v11.3.2.0 (Newtonsoft.Json v13.0.0.0))")]
63266487
public partial class FileResponse : System.IDisposable
63276488
{
63286489
private System.IDisposable _client;
@@ -6359,7 +6520,7 @@ public void Dispose()
63596520
}
63606521

63616522

6362-
[System.CodeDom.Compiler.GeneratedCode("NSwag", "14.3.0.0 (NJsonSchema v11.2.0.0 (Newtonsoft.Json v13.0.0.0))")]
6523+
[System.CodeDom.Compiler.GeneratedCode("NSwag", "14.4.0.0 (NJsonSchema v11.3.2.0 (Newtonsoft.Json v13.0.0.0))")]
63636524
public partial class ApiException : System.Exception
63646525
{
63656526
public int StatusCode { get; private set; }
@@ -6382,7 +6543,7 @@ public override string ToString()
63826543
}
63836544
}
63846545

6385-
[System.CodeDom.Compiler.GeneratedCode("NSwag", "14.3.0.0 (NJsonSchema v11.2.0.0 (Newtonsoft.Json v13.0.0.0))")]
6546+
[System.CodeDom.Compiler.GeneratedCode("NSwag", "14.4.0.0 (NJsonSchema v11.3.2.0 (Newtonsoft.Json v13.0.0.0))")]
63866547
public partial class ApiException<TResult> : ApiException
63876548
{
63886549
public TResult Result { get; private set; }

src/Certify.Server/Certify.Server.Hub.Api.Client/Certify.Server.Hub.Api.Client.csproj

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,10 @@
1414
</Content>
1515
</ItemGroup>
1616

17+
<ItemGroup>
18+
<PackageReference Include="Microsoft.AspNetCore.Mvc.Core" Version="2.3.0" />
19+
</ItemGroup>
20+
1721
<ItemGroup>
1822
<ProjectReference Include="..\..\Certify.Models\Certify.Models.csproj" />
1923
</ItemGroup>

src/Certify.Server/Certify.Server.Hub.Api.Client/nswag.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,8 @@
5454
"Certify.Models.Providers",
5555
"Certify.Models.Hub",
5656
"Certify.Models.Config.Migration",
57-
"Certify.Shared"
57+
"Certify.Shared",
58+
"FileResult=Microsoft.AspNetCore.Mvc.FileResult"
5859
],
5960
"additionalContractNamespaceUsages": [],
6061
"generateOptionalParameters": false,
@@ -84,6 +85,7 @@
8485
"dictionaryBaseType": "System.Collections.Generic.Dictionary",
8586
"classStyle": "Poco",
8687
"jsonLibrary": "NewtonsoftJson",
88+
"jsonPolymorphicSerializationStyle": "NJsonSchema",
8789
"generateDefaultValues": true,
8890
"generateDataAnnotations": true,
8991
"excludedTypeNames": [

src/Certify.Server/Certify.Server.Hub.Api/Certify.Server.Hub.Api.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
</PropertyGroup>
1919

2020
<ItemGroup>
21+
<PackageReference Include="Markdig" Version="0.41.1" />
2122
<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="9.0.4" />
2223
<PackageReference Include="Microsoft.AspNetCore.OpenApi" Version="9.0.4" />
2324
<PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.21.2" />

src/Certify.Server/Certify.Server.Hub.Api/Controllers/internal/PreviewController.cs

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using Certify.Models;
22
using Certify.Server.Hub.Api.Services;
3+
using Markdig;
34
using Microsoft.AspNetCore.Authentication.JwtBearer;
45
using Microsoft.AspNetCore.Authorization;
56
using Microsoft.AspNetCore.Mvc;
@@ -42,5 +43,52 @@ public async Task<IActionResult> GetPreview([FromBody] ManagedCertificate item)
4243
var previewSteps = await _mgmtAPI.GetPreviewActions(item.InstanceId, item, CurrentAuthContext);
4344
return new OkObjectResult(previewSteps);
4445
}
46+
47+
[HttpPost]
48+
[Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)]
49+
[ProducesResponseType(typeof(FileResult), StatusCodes.Status200OK, "text/html")]
50+
[Route("managedcertificate")]
51+
public async Task<IActionResult> GetPreviewAsMarkdown([FromBody] ManagedCertificate item)
52+
{
53+
var previewSteps = await _mgmtAPI.GetPreviewActions(item.InstanceId, item, CurrentAuthContext);
54+
55+
var markdown = Certify.UI.Blazor.Core.Models.Services.PreviewService.GetStepsAsMarkdown(previewSteps);
56+
57+
// output steps as html
58+
59+
var pipeline = new MarkdownPipelineBuilder()
60+
.DisableHtml()
61+
.UseAdvancedExtensions()
62+
.Build();
63+
64+
var render = Markdown.ToHtml(markdown, pipeline);
65+
return new ContentResult
66+
{
67+
Content = render,
68+
ContentType = "text/html"
69+
};
70+
}
71+
72+
[HttpPost]
73+
[Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)]
74+
[ProducesResponseType(typeof(FileResult), StatusCodes.Status200OK, "text/html")]
75+
[Route("rendermarkdown")]
76+
public async Task<IActionResult> RenderMarkdown([FromBody] string markdown)
77+
{
78+
79+
// output steps as html
80+
81+
var pipeline = new MarkdownPipelineBuilder()
82+
.DisableHtml()
83+
.UseAdvancedExtensions()
84+
.Build();
85+
86+
var render = Markdown.ToHtml(markdown, pipeline);
87+
return new ContentResult
88+
{
89+
Content = render,
90+
ContentType = "text/html"
91+
};
92+
}
4593
}
4694
}

src/Certify.UI.Shared/Certify.UI.Shared.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@
4040
<NoWarn>NU1701</NoWarn>
4141
</PackageReference>
4242
<PackageReference Include="MahApps.Metro" Version="3.0.0-rc0516" />
43-
<PackageReference Include="Markdig.Wpf" Version="0.5.0.1" />
43+
<PackageReference Include="Markdig" Version="0.41.1" />
4444
<PackageReference Include="Microsoft.Bcl.AsyncInterfaces" Version="9.0.4" />
4545
<PackageReference Include="PropertyChanged.Fody" Version="4.1.0" />
4646
<PackageReference Include="System.Text.Json" Version="9.0.4" />

src/Certify.UI.Shared/Controls/ManagedCertificate/Preview.xaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
66
xmlns:local="clr-namespace:Certify.UI.Controls.ManagedCertificate"
77
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
8-
xmlns:wpf="clr-namespace:Markdig.Wpf;assembly=Markdig.Wpf"
8+
99
IsVisibleChanged="UserControl_IsVisibleChanged"
1010
mc:Ignorable="d">
1111

@@ -31,4 +31,4 @@
3131
</DockPanel>
3232
</DockPanel>
3333

34-
</UserControl>
34+
</UserControl>

src/Certify.UI/Certify.UI.csproj

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -143,9 +143,6 @@
143143
<PackageReference Include="MahApps.Metro">
144144
<Version>3.0.0-rc0516</Version>
145145
</PackageReference>
146-
<PackageReference Include="Markdig.Wpf">
147-
<Version>0.5.0.1</Version>
148-
</PackageReference>
149146
<PackageReference Include="Microsoft.ApplicationInsights">
150147
<Version>2.23.0</Version>
151148
</PackageReference>

0 commit comments

Comments
 (0)