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); } } }