mirror of
https://github.com/wiremock/WireMock.Net.git
synced 2026-04-27 02:38:30 +02:00
Add option to run the server on http & https (#818)
* HostingProtocol.HttpAndHttps * . * . * . * HostingScheme
This commit is contained in:
@@ -1,12 +1,15 @@
|
||||
namespace WireMock.Owin;
|
||||
|
||||
/// <summary>
|
||||
/// https://en.wikipedia.org/wiki/Uniform_Resource_Identifier
|
||||
/// </summary>
|
||||
internal struct HostUrlDetails
|
||||
{
|
||||
public bool IsHttps { get; set; }
|
||||
|
||||
public string Url { get; set; }
|
||||
|
||||
public string Protocol { get; set; }
|
||||
public string Scheme { get; set; }
|
||||
|
||||
public string Host { get; set; }
|
||||
|
||||
|
||||
@@ -1,34 +1,49 @@
|
||||
using System.Collections.Generic;
|
||||
using WireMock.Types;
|
||||
using WireMock.Util;
|
||||
|
||||
namespace WireMock.Owin;
|
||||
|
||||
internal class HostUrlOptions
|
||||
{
|
||||
private const string LOCALHOST = "localhost";
|
||||
private const string Localhost = "localhost";
|
||||
|
||||
public ICollection<string>? Urls { get; set; }
|
||||
|
||||
public int? Port { get; set; }
|
||||
|
||||
public bool UseSSL { get; set; }
|
||||
public int? HttpsPort { get; set; }
|
||||
|
||||
public ICollection<HostUrlDetails> GetDetails()
|
||||
public HostingScheme HostingScheme { get; set; }
|
||||
|
||||
public IReadOnlyList<HostUrlDetails> GetDetails()
|
||||
{
|
||||
var list = new List<HostUrlDetails>();
|
||||
if (Urls == null)
|
||||
{
|
||||
int port = Port > 0 ? Port.Value : FindFreeTcpPort();
|
||||
string protocol = UseSSL ? "https" : "http";
|
||||
list.Add(new HostUrlDetails { IsHttps = UseSSL, Url = $"{protocol}://{LOCALHOST}:{port}", Protocol = protocol, Host = LOCALHOST, Port = port });
|
||||
if (HostingScheme is HostingScheme.Http or HostingScheme.Https)
|
||||
{
|
||||
var port = Port > 0 ? Port.Value : FindFreeTcpPort();
|
||||
var scheme = HostingScheme == HostingScheme.Https ? "https" : "http";
|
||||
list.Add(new HostUrlDetails { IsHttps = HostingScheme == HostingScheme.Https, Url = $"{scheme}://{Localhost}:{port}", Scheme = scheme, Host = Localhost, Port = port });
|
||||
}
|
||||
|
||||
if (HostingScheme == HostingScheme.HttpAndHttps)
|
||||
{
|
||||
var httpPort = Port > 0 ? Port.Value : FindFreeTcpPort();
|
||||
list.Add(new HostUrlDetails { IsHttps = false, Url = $"http://{Localhost}:{httpPort}", Scheme = "http", Host = Localhost, Port = httpPort });
|
||||
|
||||
var httpsPort = FindFreeTcpPort(); // In this scenario, always get a free port for https.
|
||||
list.Add(new HostUrlDetails { IsHttps = true, Url = $"https://{Localhost}:{httpsPort}", Scheme = "https", Host = Localhost, Port = httpsPort });
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
foreach (string url in Urls)
|
||||
{
|
||||
if (PortUtils.TryExtract(url, out bool isHttps, out var protocol, out var host, out int port))
|
||||
if (PortUtils.TryExtract(url, out var isHttps, out var protocol, out var host, out var port))
|
||||
{
|
||||
list.Add(new HostUrlDetails { IsHttps = isHttps, Url = url, Protocol = protocol, Host = host, Port = port });
|
||||
list.Add(new HostUrlDetails { IsHttps = isHttps, Url = url, Scheme = protocol, Host = host, Port = port });
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user