Skip to content

Commit

Permalink
support for X-Forwarded-Host header
Browse files Browse the repository at this point in the history
allow to override the HTTP scheme and allow to override the url when the wsdl query is called
  • Loading branch information
Gábor Zavarkó committed Mar 5, 2024
1 parent f22ca05 commit 89fa817
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 19 deletions.
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,7 @@ To use it, add a setting like this to appsettings
```json
"FileWSDL": {
"UrlOverride": "",
"SchemeOverride": "",
"VirtualPath": "",
"WebServiceWSDLMapping": {
"Service.asmx": {
Expand All @@ -93,6 +94,7 @@ To use it, add a setting like this to appsettings
```

* UrlOverride - can be used to override the URL in the service description. This can be useful if you are behind a firewall.
* SchemeOverride - can be used to override the HTTP Scheme in the service description. This can be useful if you are behind a firewall and the firewall sets the X-Forwarded-Host header, but the internal HTTP scheme is not the same as the external.
* VirualPath - can be used if you like to add a path between the base URL and service.
* WebServiceWSDLMapping
* UrlOverride - can be used to override the URL for a specific WSDL mapping. This can be useful if you want to host different services under different folder.
Expand Down
24 changes: 5 additions & 19 deletions src/SoapCore/SoapEndpointMiddleware.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
using System.IO;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Reflection;
using System.Runtime.CompilerServices;
Expand All @@ -20,6 +21,7 @@
using Microsoft.AspNetCore.WebUtilities;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;
using Microsoft.Extensions.Primitives;
using SoapCore.DocumentationWriter;
using SoapCore.Extensibility;
Expand Down Expand Up @@ -984,16 +986,7 @@ private MetaFromFile GetMeta(HttpContext httpContext)

meta.WSDLFolder = mapping.WSDLFolder;
meta.XsdFolder = mapping.SchemaFolder;

if (options.UrlOverride != string.Empty)
{
meta.ServerUrl = options.UrlOverride;
}
else
{
meta.ServerUrl = httpContext.Request.Scheme + "://" + httpContext.Request.Host + "/";
}

meta.ServerUrl = options.GetServerUrl(httpContext);
return meta;
}

Expand Down Expand Up @@ -1072,16 +1065,9 @@ private async Task ProcessMetaFromFile(HttpContext httpContext, bool showDocumen
meta.CurrentWebService = mapping.UrlOverride;
}

meta.XsdFolder = mapping.SchemaFolder;
meta.WSDLFolder = mapping.WSDLFolder;
if (options.UrlOverride != string.Empty)
{
meta.ServerUrl = options.UrlOverride;
}
else
{
meta.ServerUrl = httpContext.Request.Scheme + "://" + httpContext.Request.Host + "/";
}
meta.XsdFolder = mapping.SchemaFolder;
meta.ServerUrl = options.GetServerUrl(httpContext);

string wsdlfile = mapping.WsdlFile;

Expand Down
20 changes: 20 additions & 0 deletions src/SoapCore/WSDLFileOptions.cs
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
using Microsoft.AspNetCore.Http;
using System;
using System.Collections.Generic;

Expand All @@ -7,8 +8,27 @@ public class WsdlFileOptions
{
public virtual Dictionary<string, WebServiceWSDLMapping> WebServiceWSDLMapping { get; set; } = new Dictionary<string, WebServiceWSDLMapping>();
public string UrlOverride { get; set; }
public string SchemeOverride { get; set; }
public string VirtualPath { get; set; }
public string AppPath { get; set; }

public virtual string GetServerUrl(HttpContext httpContext)
{
if (!string.IsNullOrEmpty(UrlOverride))
{
return UrlOverride;
}

string scheme = string.IsNullOrEmpty(SchemeOverride) ? httpContext.Request.Scheme : SchemeOverride;
string host = httpContext.Request.Host.ToString();
var forwardedHost = httpContext.Request.Headers["X-Forwarded-Host"];
if (forwardedHost.Count != 0)
{
host = forwardedHost[0];
}

return scheme + "://" + host + "/";
}
}

public class WsdlFileOptionsCaseInsensitive : WsdlFileOptions
Expand Down

0 comments on commit 89fa817

Please sign in to comment.