using System.Threading;
using System.Threading.Tasks;
using Newtonsoft.Json.Linq;
namespace AMWD.Net.Api.Cloudflare.Zones
{
///
/// Extensions for Zone Settings.
///
public static class ZoneSettingsExtensions
{
///
/// Edit settings for a zone.
///
/// The instance.
/// The request.
/// A cancellation token used to propagate notification that this operation should be canceled.
[Obsolete("This endpoint is deprecated. Zone settings should instead be managed individually.")]
public static Task>> EditMultipleZoneSettings(this ICloudflareClient client, EditMultipleZoneSettingsRequest request, CancellationToken cancellationToken = default)
{
request.ZoneId.ValidateCloudflareId();
return client.PatchAsync, IReadOnlyCollection>($"/zones/{request.ZoneId}/settings", request.Settings, cancellationToken);
}
///
/// Updates a single zone setting by the identifier.
///
/// The type of the zone setting.
/// The instance.
/// The request.
/// A cancellation token used to propagate notification that this operation should be canceled.
public static Task> EditZoneSetting(this ICloudflareClient client, EditZoneSettingRequest request, CancellationToken cancellationToken = default)
where T : ZoneSettingBase
{
request.ZoneId.ValidateCloudflareId();
string settingId = request.Setting.Id?.GetEnumMemberValue()
?? throw new ArgumentException("The zone setting type is not known.");
var req = new JObject();
if (request.Enabled.HasValue)
req.Add("enabled", request.Enabled.Value);
else
req.Add("value", JObject.FromObject(request.Setting)["value"]);
return client.PatchAsync($"/zones/{request.ZoneId}/settings/{settingId}", req, cancellationToken);
}
///
/// Fetch a single zone setting.
///
/// The type of the zone setting.
/// The instance.
/// The zone identifier.
/// A cancellation token used to propagate notification that this operation should be canceled.
public static Task> GetZoneSetting(this ICloudflareClient client, string zoneId, CancellationToken cancellationToken = default)
where T : ZoneSettingBase
{
zoneId.ValidateCloudflareId();
string settingId = ((ZoneSettingBase)Activator.CreateInstance(typeof(T))).Id?.GetEnumMemberValue()
?? throw new ArgumentException("The zone setting type is not known.");
return client.GetAsync($"/zones/{zoneId}/settings/{settingId}", null, cancellationToken);
}
///
/// Available settings for your user in relation to a zone.
///
/// The instance.
/// The zone identifier.
/// A cancellation token used to propagate notification that this operation should be canceled.
[Obsolete("This endpoint is deprecated. Zone settings should instead be managed individually.")]
public static Task>> GetAllZoneSettings(this ICloudflareClient client, string zoneId, CancellationToken cancellationToken = default)
{
zoneId.ValidateCloudflareId();
return client.GetAsync>($"/zones/{zoneId}/settings", null, cancellationToken);
}
}
}