Skip to content

Commit

Permalink
Merge pull request #83 from zingz0r/feature/zone-setting-min_tls_version
Browse files Browse the repository at this point in the history
Implementation of zone setting: Minimum TLS version
  • Loading branch information
zingz0r authored Nov 13, 2023
2 parents 46fdffa + 3eb0a93 commit a813ef3
Show file tree
Hide file tree
Showing 4 changed files with 100 additions and 10 deletions.
62 changes: 60 additions & 2 deletions CloudFlare.Client.Test/Zones/ZoneSettingsUnitTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ public async Task TestGetAlwaysUseHttpsAsync(FeatureStatus setting)
Id = Guid.NewGuid().ToString(),
Value = setting,
ModifiedDate = DateTime.UtcNow,
ValidationErrors = Array.Empty<ErrorDetails>(),
ValidationErrors = Array.Empty<ErrorDetails>()
};

_wireMockServer
Expand All @@ -64,7 +64,7 @@ public async Task TestUpdateAlwaysUseHttpsAsync(FeatureStatus setting)
Id = Guid.NewGuid().ToString(),
Value = setting,
ModifiedDate = DateTime.UtcNow,
ValidationErrors = Array.Empty<ErrorDetails>(),
ValidationErrors = Array.Empty<ErrorDetails>()
};

_wireMockServer
Expand Down Expand Up @@ -138,5 +138,63 @@ public async Task TestUpdateSslSettingsAsync(SslSetting setting)

result.Result.Should().BeEquivalentTo(zoneSetting);
}

[Theory]
[InlineData(TlsVersion.Tls10)]
[InlineData(TlsVersion.Tls11)]
[InlineData(TlsVersion.Tls12)]
[InlineData(TlsVersion.Tls13)]
public async Task TestGetMinimumTlsVersionSettingAsync(TlsVersion version)
{
var zone = ZoneTestData.Zones.First();
var zoneSetting = new ZoneSetting<TlsVersion>
{
Id = Guid.NewGuid().ToString(),
Value = version,
ModifiedDate = DateTime.UtcNow,
ValidationErrors = Array.Empty<ErrorDetails>(),
Editable = true
};

_wireMockServer
.Given(Request.Create().WithPath($"/{ZoneEndpoints.Base}/{zone.Id}/{SettingsEndpoints.Base}/{SettingsEndpoints.MinimumTlsVersion}").UsingGet())
.RespondWith(Response.Create().WithStatusCode(200)
.WithBody(WireMockResponseHelper.CreateTestResponse(zoneSetting)));

using var client = new CloudFlareClient(WireMockConnection.ApiKeyAuthentication, _connectionInfo);

var result = await client.Zones.Settings.GetMinimumTlsVersionSettingAsync(zone.Id);

result.Result.Should().BeEquivalentTo(zoneSetting);
}

[Theory]
[InlineData(TlsVersion.Tls10)]
[InlineData(TlsVersion.Tls11)]
[InlineData(TlsVersion.Tls12)]
[InlineData(TlsVersion.Tls13)]
public async Task TestUpdateMinimumTlsVersionSettingAsync(TlsVersion version)
{
var zone = ZoneTestData.Zones.First();
var zoneSetting = new ZoneSetting<TlsVersion>
{
Id = Guid.NewGuid().ToString(),
Value = version,
ModifiedDate = DateTime.UtcNow,
ValidationErrors = Array.Empty<ErrorDetails>(),
Editable = true
};

_wireMockServer
.Given(Request.Create().WithPath($"/{ZoneEndpoints.Base}/{zone.Id}/{SettingsEndpoints.Base}/{SettingsEndpoints.MinimumTlsVersion}").UsingPatch())
.RespondWith(Response.Create().WithStatusCode(200)
.WithBody(WireMockResponseHelper.CreateTestResponse(zoneSetting)));

using var client = new CloudFlareClient(WireMockConnection.ApiKeyAuthentication, _connectionInfo);

var result = await client.Zones.Settings.UpdateMinimumTlsVersionSettingAsync(zone.Id, version);

result.Result.Should().BeEquivalentTo(zoneSetting);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ internal static class SettingsEndpoints
{
public const string Base = "settings";
public const string AlwaysUseHttps = "always_use_https";
public const string MinimumTlsVersion = "min_tls_version";
public const string Ssl = "ssl";
}
}
33 changes: 25 additions & 8 deletions CloudFlare.Client/Client/Zones/IZoneSettings.cs
Original file line number Diff line number Diff line change
Expand Up @@ -20,29 +20,46 @@ public interface IZoneSettings
Task<CloudFlareResult<ZoneSetting<FeatureStatus>>> GetAlwaysUseHttpsSettingAsync(string zoneId, CancellationToken cancellationToken = default);

/// <summary>
/// Retrieves the zone SSL settings
/// Updates whether or not the SSL/TLS Edge Certificate requires HTTPS or not
/// </summary>
/// <param name="zoneId">Zone identifier</param>
/// <param name="status">Enum for turning on/off requirement for always using SSL</param>
/// <param name="cancellationToken">Cancellation token</param>
/// <returns><see cref="ZoneSetting{SslSetting}"/></returns>
Task<CloudFlareResult<ZoneSetting<SslSetting>>> GetSslSettingAsync(string zoneId, CancellationToken cancellationToken = default);
/// <returns><see cref="ZoneSetting{FeatureStatus}"/></returns>
Task<CloudFlareResult<ZoneSetting<FeatureStatus>>> UpdateAlwaysUseHttpsSettingAsync(string zoneId, FeatureStatus status, CancellationToken cancellationToken = default);

/// <summary>
/// Updates whether or not the SSL/TLS Edge Certificate requires HTTPS or not
/// Retrieves the zone SSL settings
/// </summary>
/// <param name="zoneId">Zone identifier</param>
/// <param name="status">Enum for turning on/off requirement for always using SSL</param>
/// <param name="cancellationToken">Cancellation token</param>
/// <returns><see cref="ZoneSetting{FeatureStatus}"/></returns>
Task<CloudFlareResult<ZoneSetting<FeatureStatus>>> UpdateAlwaysUseHttpsSettingAsync(string zoneId, FeatureStatus status, CancellationToken cancellationToken = default);
/// <returns><see cref="ZoneSetting{SslSetting}"/></returns>
Task<CloudFlareResult<ZoneSetting<SslSetting>>> GetSslSettingAsync(string zoneId, CancellationToken cancellationToken = default);

/// <summary>
/// Updates the zone SSL settings
/// </summary>
/// <param name="zoneId">Zone identifier</param>
/// <param name="sslSetting">Enum for ssl setting</param>
/// <param name="sslSetting">Enum for SSL setting</param>
/// <param name="cancellationToken">Cancellation token</param>
/// /// <returns><see cref="ZoneSetting{SslSetting}"/></returns>
Task<CloudFlareResult<ZoneSetting<SslSetting>>> UpdateSslSettingAsync(string zoneId, SslSetting sslSetting, CancellationToken cancellationToken = default);

/// <summary>
/// Retrieves the zone Minimum TLS version settings
/// </summary>
/// <param name="zoneId">Zone identifier</param>
/// <param name="cancellationToken">Cancellation token</param>
/// <returns><see cref="ZoneSetting{TlsVersion}"/></returns>
Task<CloudFlareResult<ZoneSetting<TlsVersion>>> GetMinimumTlsVersionSettingAsync(string zoneId, CancellationToken cancellationToken = default);

/// <summary>
/// Updates the zone Minimum TLS version settings
/// </summary>
/// <param name="zoneId">Zone identifier</param>
/// <param name="tlsVersion">Enum for minimum TLS version</param>
/// <param name="cancellationToken">Cancellation token</param>
/// /// <returns><see cref="ZoneSetting{TlsVersion}"/></returns>
Task<CloudFlareResult<ZoneSetting<TlsVersion>>> UpdateMinimumTlsVersionSettingAsync(string zoneId, TlsVersion tlsVersion, CancellationToken cancellationToken = default);
}
}
14 changes: 14 additions & 0 deletions CloudFlare.Client/Client/Zones/ZoneSettings.cs
Original file line number Diff line number Diff line change
Expand Up @@ -47,5 +47,19 @@ public async Task<CloudFlareResult<ZoneSetting<SslSetting>>> UpdateSslSettingAsy
var requestUri = $"{ZoneEndpoints.Base}/{zoneId}/{SettingsEndpoints.Base}/{SettingsEndpoints.Ssl}";
return await Connection.PatchAsync(requestUri, new ZoneSetting<SslSetting> { Value = sslSetting }, cancellationToken).ConfigureAwait(false);
}

/// <inheritdoc />
public async Task<CloudFlareResult<ZoneSetting<TlsVersion>>> GetMinimumTlsVersionSettingAsync(string zoneId, CancellationToken cancellationToken = default)
{
var requestUri = $"{ZoneEndpoints.Base}/{zoneId}/{SettingsEndpoints.Base}/{SettingsEndpoints.MinimumTlsVersion}";
return await Connection.GetAsync<ZoneSetting<TlsVersion>>(requestUri, cancellationToken).ConfigureAwait(false);
}

/// <inheritdoc />
public async Task<CloudFlareResult<ZoneSetting<TlsVersion>>> UpdateMinimumTlsVersionSettingAsync(string zoneId, TlsVersion tlsVersion, CancellationToken cancellationToken = default)
{
var requestUri = $"{ZoneEndpoints.Base}/{zoneId}/{SettingsEndpoints.Base}/{SettingsEndpoints.MinimumTlsVersion}";
return await Connection.PatchAsync(requestUri, new ZoneSetting<TlsVersion> { Value = tlsVersion }, cancellationToken).ConfigureAwait(false);
}
}
}

0 comments on commit a813ef3

Please sign in to comment.