pangea-cloudflare 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +6 -0
- data/.rspec_status +504 -0
- data/Gemfile +5 -0
- data/Gemfile.lock +88 -0
- data/LICENSE +201 -0
- data/Rakefile +8 -0
- data/flake.lock +835 -0
- data/flake.nix +60 -0
- data/gemset.nix +272 -0
- data/lib/pangea/resources/cloudflare.rb +213 -0
- data/lib/pangea/resources/cloudflare_access_rule/resource.rb +71 -0
- data/lib/pangea/resources/cloudflare_access_rule/types.rb +93 -0
- data/lib/pangea/resources/cloudflare_account/resource.rb +28 -0
- data/lib/pangea/resources/cloudflare_account/types.rb +12 -0
- data/lib/pangea/resources/cloudflare_account_dns_settings/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_account_dns_settings/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_account_dns_settings_internal_view/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_account_dns_settings_internal_view/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_account_member/resource.rb +29 -0
- data/lib/pangea/resources/cloudflare_account_member/types.rb +13 -0
- data/lib/pangea/resources/cloudflare_account_subscription/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_account_subscription/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_account_token/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_account_token/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_address_map/resource.rb +26 -0
- data/lib/pangea/resources/cloudflare_address_map/types.rb +10 -0
- data/lib/pangea/resources/cloudflare_api_shield/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_api_shield/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_api_shield_discovery_operation/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_api_shield_discovery_operation/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_api_shield_operation/resource.rb +30 -0
- data/lib/pangea/resources/cloudflare_api_shield_operation/types.rb +13 -0
- data/lib/pangea/resources/cloudflare_api_shield_operation_schema_validation_settings/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_api_shield_operation_schema_validation_settings/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_api_shield_schema/resource.rb +30 -0
- data/lib/pangea/resources/cloudflare_api_shield_schema/types.rb +14 -0
- data/lib/pangea/resources/cloudflare_api_shield_schema_validation_settings/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_api_shield_schema_validation_settings/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_api_token/resource.rb +33 -0
- data/lib/pangea/resources/cloudflare_api_token/types.rb +14 -0
- data/lib/pangea/resources/cloudflare_argo/resource.rb +91 -0
- data/lib/pangea/resources/cloudflare_argo/types.rb +92 -0
- data/lib/pangea/resources/cloudflare_authenticated_origin_pulls/resource.rb +29 -0
- data/lib/pangea/resources/cloudflare_authenticated_origin_pulls/types.rb +13 -0
- data/lib/pangea/resources/cloudflare_authenticated_origin_pulls_certificate/resource.rb +33 -0
- data/lib/pangea/resources/cloudflare_authenticated_origin_pulls_certificate/types.rb +13 -0
- data/lib/pangea/resources/cloudflare_authenticated_origin_pulls_settings/resource.rb +26 -0
- data/lib/pangea/resources/cloudflare_authenticated_origin_pulls_settings/types.rb +10 -0
- data/lib/pangea/resources/cloudflare_bot_management/resource.rb +31 -0
- data/lib/pangea/resources/cloudflare_bot_management/types.rb +15 -0
- data/lib/pangea/resources/cloudflare_byo_ip_prefix/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_byo_ip_prefix/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_calls_sfu_app/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_calls_sfu_app/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_calls_turn_app/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_calls_turn_app/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_certificate_pack/resource.rb +26 -0
- data/lib/pangea/resources/cloudflare_certificate_pack/types.rb +10 -0
- data/lib/pangea/resources/cloudflare_cloud_connector_rules/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_cloud_connector_rules/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_cloudforce_one_request/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_cloudforce_one_request/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_cloudforce_one_request_asset/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_cloudforce_one_request_asset/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_cloudforce_one_request_message/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_cloudforce_one_request_message/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_cloudforce_one_request_priority/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_cloudforce_one_request_priority/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_content_scanning/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_content_scanning/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_content_scanning_expression/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_content_scanning_expression/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_custom_hostname/resource.rb +158 -0
- data/lib/pangea/resources/cloudflare_custom_hostname/types/ssl_types.rb +145 -0
- data/lib/pangea/resources/cloudflare_custom_hostname/types.rb +107 -0
- data/lib/pangea/resources/cloudflare_custom_hostname_fallback_origin/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_custom_hostname_fallback_origin/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_custom_pages/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_custom_pages/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_custom_ssl/resource.rb +36 -0
- data/lib/pangea/resources/cloudflare_custom_ssl/types.rb +16 -0
- data/lib/pangea/resources/cloudflare_d1_database/resource.rb +92 -0
- data/lib/pangea/resources/cloudflare_d1_database/types.rb +110 -0
- data/lib/pangea/resources/cloudflare_dns_firewall/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_dns_firewall/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_dns_zone_transfers_acl/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_dns_zone_transfers_acl/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_dns_zone_transfers_incoming/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_dns_zone_transfers_incoming/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_dns_zone_transfers_outgoing/resource.rb +26 -0
- data/lib/pangea/resources/cloudflare_dns_zone_transfers_outgoing/types.rb +10 -0
- data/lib/pangea/resources/cloudflare_dns_zone_transfers_peer/resource.rb +26 -0
- data/lib/pangea/resources/cloudflare_dns_zone_transfers_peer/types.rb +10 -0
- data/lib/pangea/resources/cloudflare_dns_zone_transfers_tsig/resource.rb +26 -0
- data/lib/pangea/resources/cloudflare_dns_zone_transfers_tsig/types.rb +10 -0
- data/lib/pangea/resources/cloudflare_email_routing_address/resource.rb +26 -0
- data/lib/pangea/resources/cloudflare_email_routing_address/types.rb +10 -0
- data/lib/pangea/resources/cloudflare_email_routing_catch_all/resource.rb +26 -0
- data/lib/pangea/resources/cloudflare_email_routing_catch_all/types.rb +10 -0
- data/lib/pangea/resources/cloudflare_email_routing_dns/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_email_routing_dns/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_email_routing_rule/resource.rb +26 -0
- data/lib/pangea/resources/cloudflare_email_routing_rule/types.rb +10 -0
- data/lib/pangea/resources/cloudflare_email_routing_settings/resource.rb +26 -0
- data/lib/pangea/resources/cloudflare_email_routing_settings/types.rb +10 -0
- data/lib/pangea/resources/cloudflare_email_security_block_sender/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_email_security_block_sender/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_email_security_impersonation_registry/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_email_security_impersonation_registry/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_email_security_trusted_domains/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_email_security_trusted_domains/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_filter/resource.rb +64 -0
- data/lib/pangea/resources/cloudflare_filter/types.rb +54 -0
- data/lib/pangea/resources/cloudflare_firewall_rule/resource.rb +70 -0
- data/lib/pangea/resources/cloudflare_firewall_rule/types.rb +64 -0
- data/lib/pangea/resources/cloudflare_healthcheck/resource.rb +139 -0
- data/lib/pangea/resources/cloudflare_healthcheck/types.rb +192 -0
- data/lib/pangea/resources/cloudflare_hostname_tls_setting/resource.rb +26 -0
- data/lib/pangea/resources/cloudflare_hostname_tls_setting/types.rb +10 -0
- data/lib/pangea/resources/cloudflare_hyperdrive_config/resource.rb +176 -0
- data/lib/pangea/resources/cloudflare_hyperdrive_config/types/attributes.rb +125 -0
- data/lib/pangea/resources/cloudflare_hyperdrive_config/types/caching.rb +52 -0
- data/lib/pangea/resources/cloudflare_hyperdrive_config/types/enums.rb +37 -0
- data/lib/pangea/resources/cloudflare_hyperdrive_config/types/mtls.rb +52 -0
- data/lib/pangea/resources/cloudflare_hyperdrive_config/types/origin.rb +89 -0
- data/lib/pangea/resources/cloudflare_hyperdrive_config/types.rb +23 -0
- data/lib/pangea/resources/cloudflare_image/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_image/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_image_variant/resource.rb +26 -0
- data/lib/pangea/resources/cloudflare_image_variant/types.rb +10 -0
- data/lib/pangea/resources/cloudflare_keyless_certificate/resource.rb +26 -0
- data/lib/pangea/resources/cloudflare_keyless_certificate/types.rb +10 -0
- data/lib/pangea/resources/cloudflare_leaked_credential_check/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_leaked_credential_check/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_leaked_credential_check_rule/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_leaked_credential_check_rule/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_list/resource.rb +57 -0
- data/lib/pangea/resources/cloudflare_list/types.rb +49 -0
- data/lib/pangea/resources/cloudflare_list_item/resource.rb +130 -0
- data/lib/pangea/resources/cloudflare_list_item/types.rb +183 -0
- data/lib/pangea/resources/cloudflare_load_balancer/resource.rb +97 -0
- data/lib/pangea/resources/cloudflare_load_balancer/types.rb +75 -0
- data/lib/pangea/resources/cloudflare_load_balancer_monitor/resource.rb +78 -0
- data/lib/pangea/resources/cloudflare_load_balancer_monitor/types.rb +62 -0
- data/lib/pangea/resources/cloudflare_load_balancer_pool/resource.rb +78 -0
- data/lib/pangea/resources/cloudflare_load_balancer_pool/types.rb +81 -0
- data/lib/pangea/resources/cloudflare_logpull_retention/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_logpull_retention/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_logpush_job/resource.rb +40 -0
- data/lib/pangea/resources/cloudflare_logpush_job/types.rb +24 -0
- data/lib/pangea/resources/cloudflare_logpush_ownership_challenge/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_logpush_ownership_challenge/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_magic_network_monitoring_configuration/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_magic_network_monitoring_configuration/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_magic_network_monitoring_rule/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_magic_network_monitoring_rule/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_magic_transit_connector/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_magic_transit_connector/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_magic_transit_site/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_magic_transit_site/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_magic_transit_site_acl/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_magic_transit_site_acl/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_magic_transit_site_lan/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_magic_transit_site_lan/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_magic_transit_site_wan/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_magic_transit_site_wan/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_magic_wan_gre_tunnel/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_magic_wan_gre_tunnel/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_magic_wan_ipsec_tunnel/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_magic_wan_ipsec_tunnel/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_magic_wan_static_route/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_magic_wan_static_route/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_managed_transforms/resource.rb +36 -0
- data/lib/pangea/resources/cloudflare_managed_transforms/types.rb +12 -0
- data/lib/pangea/resources/cloudflare_mtls_certificate/resource.rb +34 -0
- data/lib/pangea/resources/cloudflare_mtls_certificate/types.rb +14 -0
- data/lib/pangea/resources/cloudflare_notification_policy/resource.rb +34 -0
- data/lib/pangea/resources/cloudflare_notification_policy/types.rb +18 -0
- data/lib/pangea/resources/cloudflare_notification_policy_webhooks/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_notification_policy_webhooks/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_observatory_scheduled_test/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_observatory_scheduled_test/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_organization/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_organization/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_organization_profile/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_organization_profile/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_origin_ca_certificate/resource.rb +97 -0
- data/lib/pangea/resources/cloudflare_origin_ca_certificate/types.rb +125 -0
- data/lib/pangea/resources/cloudflare_page_rule/resource.rb +78 -0
- data/lib/pangea/resources/cloudflare_page_rule/types.rb +71 -0
- data/lib/pangea/resources/cloudflare_page_shield_policy/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_page_shield_policy/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_pages_domain/resource.rb +28 -0
- data/lib/pangea/resources/cloudflare_pages_domain/types.rb +12 -0
- data/lib/pangea/resources/cloudflare_pages_project/resource/deployment_config.rb +80 -0
- data/lib/pangea/resources/cloudflare_pages_project/resource/main.rb +75 -0
- data/lib/pangea/resources/cloudflare_pages_project/resource.rb +19 -0
- data/lib/pangea/resources/cloudflare_pages_project/types/attributes.rb +51 -0
- data/lib/pangea/resources/cloudflare_pages_project/types/bindings.rb +38 -0
- data/lib/pangea/resources/cloudflare_pages_project/types/build_config.rb +55 -0
- data/lib/pangea/resources/cloudflare_pages_project/types/deployment_config.rb +83 -0
- data/lib/pangea/resources/cloudflare_pages_project/types.rb +27 -0
- data/lib/pangea/resources/cloudflare_queue/resource.rb +108 -0
- data/lib/pangea/resources/cloudflare_queue/types.rb +132 -0
- data/lib/pangea/resources/cloudflare_queue_consumer/resource.rb +31 -0
- data/lib/pangea/resources/cloudflare_queue_consumer/types.rb +15 -0
- data/lib/pangea/resources/cloudflare_r2_bucket/resource.rb +91 -0
- data/lib/pangea/resources/cloudflare_r2_bucket/types.rb +101 -0
- data/lib/pangea/resources/cloudflare_r2_bucket_cors/resource.rb +130 -0
- data/lib/pangea/resources/cloudflare_r2_bucket_cors/types/attributes.rb +105 -0
- data/lib/pangea/resources/cloudflare_r2_bucket_cors/types/cors_allowed.rb +59 -0
- data/lib/pangea/resources/cloudflare_r2_bucket_cors/types/cors_method.rb +34 -0
- data/lib/pangea/resources/cloudflare_r2_bucket_cors/types/cors_rule.rb +74 -0
- data/lib/pangea/resources/cloudflare_r2_bucket_cors/types.rb +22 -0
- data/lib/pangea/resources/cloudflare_r2_bucket_event_notification/resource.rb +31 -0
- data/lib/pangea/resources/cloudflare_r2_bucket_event_notification/types.rb +15 -0
- data/lib/pangea/resources/cloudflare_r2_bucket_lifecycle/resource.rb +31 -0
- data/lib/pangea/resources/cloudflare_r2_bucket_lifecycle/types.rb +26 -0
- data/lib/pangea/resources/cloudflare_r2_bucket_lock/resource.rb +29 -0
- data/lib/pangea/resources/cloudflare_r2_bucket_lock/types.rb +13 -0
- data/lib/pangea/resources/cloudflare_r2_bucket_sippy/resource.rb +26 -0
- data/lib/pangea/resources/cloudflare_r2_bucket_sippy/types.rb +10 -0
- data/lib/pangea/resources/cloudflare_r2_custom_domain/resource.rb +28 -0
- data/lib/pangea/resources/cloudflare_r2_custom_domain/types.rb +12 -0
- data/lib/pangea/resources/cloudflare_r2_managed_domain/resource.rb +26 -0
- data/lib/pangea/resources/cloudflare_r2_managed_domain/types.rb +10 -0
- data/lib/pangea/resources/cloudflare_rate_limit/resource.rb +129 -0
- data/lib/pangea/resources/cloudflare_rate_limit/types.rb +143 -0
- data/lib/pangea/resources/cloudflare_record/resource.rb +91 -0
- data/lib/pangea/resources/cloudflare_record/types.rb +114 -0
- data/lib/pangea/resources/cloudflare_regional_hostname/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_regional_hostname/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_regional_tiered_cache/resource.rb +82 -0
- data/lib/pangea/resources/cloudflare_regional_tiered_cache/types.rb +73 -0
- data/lib/pangea/resources/cloudflare_registrar_domain/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_registrar_domain/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_ruleset/resource.rb +113 -0
- data/lib/pangea/resources/cloudflare_ruleset/types/ruleset_rule.rb +84 -0
- data/lib/pangea/resources/cloudflare_ruleset/types.rb +155 -0
- data/lib/pangea/resources/cloudflare_schema_validation_operation_settings/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_schema_validation_operation_settings/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_schema_validation_schemas/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_schema_validation_schemas/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_schema_validation_settings/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_schema_validation_settings/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_snippet/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_snippet/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_snippet_rules/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_snippet_rules/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_spectrum_application/resource.rb +122 -0
- data/lib/pangea/resources/cloudflare_spectrum_application/types.rb +147 -0
- data/lib/pangea/resources/cloudflare_static_route/resource.rb +119 -0
- data/lib/pangea/resources/cloudflare_static_route/types.rb +131 -0
- data/lib/pangea/resources/cloudflare_stream/resource.rb +35 -0
- data/lib/pangea/resources/cloudflare_stream/types.rb +15 -0
- data/lib/pangea/resources/cloudflare_stream_audio_track/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_stream_audio_track/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_stream_caption_language/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_stream_caption_language/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_stream_download/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_stream_download/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_stream_key/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_stream_key/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_stream_live_input/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_stream_live_input/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_stream_watermark/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_stream_watermark/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_stream_webhook/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_stream_webhook/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_tiered_cache/resource.rb +83 -0
- data/lib/pangea/resources/cloudflare_tiered_cache/types.rb +74 -0
- data/lib/pangea/resources/cloudflare_total_tls/resource.rb +26 -0
- data/lib/pangea/resources/cloudflare_total_tls/types.rb +10 -0
- data/lib/pangea/resources/cloudflare_turnstile_widget/resource.rb +34 -0
- data/lib/pangea/resources/cloudflare_turnstile_widget/types.rb +15 -0
- data/lib/pangea/resources/cloudflare_url_normalization_settings/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_url_normalization_settings/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_user/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_user/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_user_agent_blocking_rule/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_user_agent_blocking_rule/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_waiting_room/resource.rb +122 -0
- data/lib/pangea/resources/cloudflare_waiting_room/types.rb +171 -0
- data/lib/pangea/resources/cloudflare_waiting_room_event/resource.rb +118 -0
- data/lib/pangea/resources/cloudflare_waiting_room_event/types.rb +153 -0
- data/lib/pangea/resources/cloudflare_waiting_room_rules/resource.rb +40 -0
- data/lib/pangea/resources/cloudflare_waiting_room_rules/types.rb +32 -0
- data/lib/pangea/resources/cloudflare_waiting_room_settings/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_waiting_room_settings/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_web3_hostname/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_web3_hostname/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_web_analytics_rule/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_web_analytics_rule/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_web_analytics_site/resource.rb +33 -0
- data/lib/pangea/resources/cloudflare_web_analytics_site/types.rb +13 -0
- data/lib/pangea/resources/cloudflare_worker/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_worker/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_worker_route/resource.rb +62 -0
- data/lib/pangea/resources/cloudflare_worker_route/types.rb +50 -0
- data/lib/pangea/resources/cloudflare_worker_script/resource.rb +90 -0
- data/lib/pangea/resources/cloudflare_worker_script/types.rb +109 -0
- data/lib/pangea/resources/cloudflare_worker_version/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_worker_version/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_workers_cron_trigger/resource.rb +94 -0
- data/lib/pangea/resources/cloudflare_workers_cron_trigger/types.rb +102 -0
- data/lib/pangea/resources/cloudflare_workers_custom_domain/resource.rb +93 -0
- data/lib/pangea/resources/cloudflare_workers_custom_domain/types.rb +93 -0
- data/lib/pangea/resources/cloudflare_workers_deployment/resource.rb +28 -0
- data/lib/pangea/resources/cloudflare_workers_deployment/types.rb +12 -0
- data/lib/pangea/resources/cloudflare_workers_for_platforms_dispatch_namespace/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_workers_for_platforms_dispatch_namespace/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_workers_kv/resource.rb +98 -0
- data/lib/pangea/resources/cloudflare_workers_kv/types.rb +103 -0
- data/lib/pangea/resources/cloudflare_workers_kv_namespace/resource.rb +84 -0
- data/lib/pangea/resources/cloudflare_workers_kv_namespace/types.rb +74 -0
- data/lib/pangea/resources/cloudflare_workers_script_subdomain/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_workers_script_subdomain/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_workflow/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_workflow/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_zero_trust_access_application/block_builders.rb +116 -0
- data/lib/pangea/resources/cloudflare_zero_trust_access_application/resource.rb +161 -0
- data/lib/pangea/resources/cloudflare_zero_trust_access_application/types/attributes.rb +102 -0
- data/lib/pangea/resources/cloudflare_zero_trust_access_application/types/cors_headers.rb +37 -0
- data/lib/pangea/resources/cloudflare_zero_trust_access_application/types/destination.rb +37 -0
- data/lib/pangea/resources/cloudflare_zero_trust_access_application/types/enums.rb +31 -0
- data/lib/pangea/resources/cloudflare_zero_trust_access_application/types/footer_link.rb +31 -0
- data/lib/pangea/resources/cloudflare_zero_trust_access_application/types/landing_page_design.rb +34 -0
- data/lib/pangea/resources/cloudflare_zero_trust_access_application/types/saas_app.rb +44 -0
- data/lib/pangea/resources/cloudflare_zero_trust_access_application/types/scim_config.rb +35 -0
- data/lib/pangea/resources/cloudflare_zero_trust_access_application/types.rb +26 -0
- data/lib/pangea/resources/cloudflare_zero_trust_access_custom_page/resource.rb +26 -0
- data/lib/pangea/resources/cloudflare_zero_trust_access_custom_page/types.rb +10 -0
- data/lib/pangea/resources/cloudflare_zero_trust_access_group/resource.rb +31 -0
- data/lib/pangea/resources/cloudflare_zero_trust_access_group/types.rb +15 -0
- data/lib/pangea/resources/cloudflare_zero_trust_access_identity_provider/resource.rb +31 -0
- data/lib/pangea/resources/cloudflare_zero_trust_access_identity_provider/types.rb +15 -0
- data/lib/pangea/resources/cloudflare_zero_trust_access_infrastructure_target/resource.rb +26 -0
- data/lib/pangea/resources/cloudflare_zero_trust_access_infrastructure_target/types.rb +10 -0
- data/lib/pangea/resources/cloudflare_zero_trust_access_key_configuration/resource.rb +26 -0
- data/lib/pangea/resources/cloudflare_zero_trust_access_key_configuration/types.rb +10 -0
- data/lib/pangea/resources/cloudflare_zero_trust_access_mtls_certificate/resource.rb +26 -0
- data/lib/pangea/resources/cloudflare_zero_trust_access_mtls_certificate/types.rb +10 -0
- data/lib/pangea/resources/cloudflare_zero_trust_access_mtls_hostname_settings/resource.rb +26 -0
- data/lib/pangea/resources/cloudflare_zero_trust_access_mtls_hostname_settings/types.rb +10 -0
- data/lib/pangea/resources/cloudflare_zero_trust_access_policy/resource.rb +39 -0
- data/lib/pangea/resources/cloudflare_zero_trust_access_policy/types.rb +23 -0
- data/lib/pangea/resources/cloudflare_zero_trust_access_service_token/resource.rb +26 -0
- data/lib/pangea/resources/cloudflare_zero_trust_access_service_token/types.rb +10 -0
- data/lib/pangea/resources/cloudflare_zero_trust_access_short_lived_certificate/resource.rb +26 -0
- data/lib/pangea/resources/cloudflare_zero_trust_access_short_lived_certificate/types.rb +10 -0
- data/lib/pangea/resources/cloudflare_zero_trust_access_tag/resource.rb +26 -0
- data/lib/pangea/resources/cloudflare_zero_trust_access_tag/types.rb +10 -0
- data/lib/pangea/resources/cloudflare_zero_trust_device_custom_profile/resource.rb +26 -0
- data/lib/pangea/resources/cloudflare_zero_trust_device_custom_profile/types.rb +10 -0
- data/lib/pangea/resources/cloudflare_zero_trust_device_custom_profile_local_domain_fallback/resource.rb +26 -0
- data/lib/pangea/resources/cloudflare_zero_trust_device_custom_profile_local_domain_fallback/types.rb +10 -0
- data/lib/pangea/resources/cloudflare_zero_trust_device_default_profile/resource.rb +26 -0
- data/lib/pangea/resources/cloudflare_zero_trust_device_default_profile/types.rb +10 -0
- data/lib/pangea/resources/cloudflare_zero_trust_device_default_profile_certificates/resource.rb +26 -0
- data/lib/pangea/resources/cloudflare_zero_trust_device_default_profile_certificates/types.rb +10 -0
- data/lib/pangea/resources/cloudflare_zero_trust_device_default_profile_local_domain_fallback/resource.rb +26 -0
- data/lib/pangea/resources/cloudflare_zero_trust_device_default_profile_local_domain_fallback/types.rb +10 -0
- data/lib/pangea/resources/cloudflare_zero_trust_device_managed_networks/resource.rb +26 -0
- data/lib/pangea/resources/cloudflare_zero_trust_device_managed_networks/types.rb +10 -0
- data/lib/pangea/resources/cloudflare_zero_trust_device_posture_integration/resource.rb +26 -0
- data/lib/pangea/resources/cloudflare_zero_trust_device_posture_integration/types.rb +10 -0
- data/lib/pangea/resources/cloudflare_zero_trust_device_posture_rule/resource.rb +26 -0
- data/lib/pangea/resources/cloudflare_zero_trust_device_posture_rule/types.rb +10 -0
- data/lib/pangea/resources/cloudflare_zero_trust_device_settings/resource.rb +26 -0
- data/lib/pangea/resources/cloudflare_zero_trust_device_settings/types.rb +10 -0
- data/lib/pangea/resources/cloudflare_zero_trust_dex_test/resource.rb +26 -0
- data/lib/pangea/resources/cloudflare_zero_trust_dex_test/types.rb +10 -0
- data/lib/pangea/resources/cloudflare_zero_trust_dlp_custom_entry/resource.rb +26 -0
- data/lib/pangea/resources/cloudflare_zero_trust_dlp_custom_entry/types.rb +10 -0
- data/lib/pangea/resources/cloudflare_zero_trust_dlp_custom_profile/resource.rb +26 -0
- data/lib/pangea/resources/cloudflare_zero_trust_dlp_custom_profile/types.rb +10 -0
- data/lib/pangea/resources/cloudflare_zero_trust_dlp_dataset/resource.rb +26 -0
- data/lib/pangea/resources/cloudflare_zero_trust_dlp_dataset/types.rb +10 -0
- data/lib/pangea/resources/cloudflare_zero_trust_dlp_entry/resource.rb +26 -0
- data/lib/pangea/resources/cloudflare_zero_trust_dlp_entry/types.rb +10 -0
- data/lib/pangea/resources/cloudflare_zero_trust_dlp_integration_entry/resource.rb +26 -0
- data/lib/pangea/resources/cloudflare_zero_trust_dlp_integration_entry/types.rb +10 -0
- data/lib/pangea/resources/cloudflare_zero_trust_dlp_predefined_entry/resource.rb +26 -0
- data/lib/pangea/resources/cloudflare_zero_trust_dlp_predefined_entry/types.rb +10 -0
- data/lib/pangea/resources/cloudflare_zero_trust_dlp_predefined_profile/resource.rb +26 -0
- data/lib/pangea/resources/cloudflare_zero_trust_dlp_predefined_profile/types.rb +10 -0
- data/lib/pangea/resources/cloudflare_zero_trust_dns_location/resource.rb +26 -0
- data/lib/pangea/resources/cloudflare_zero_trust_dns_location/types.rb +10 -0
- data/lib/pangea/resources/cloudflare_zero_trust_gateway_certificate/resource.rb +26 -0
- data/lib/pangea/resources/cloudflare_zero_trust_gateway_certificate/types.rb +10 -0
- data/lib/pangea/resources/cloudflare_zero_trust_gateway_logging/resource.rb +26 -0
- data/lib/pangea/resources/cloudflare_zero_trust_gateway_logging/types.rb +10 -0
- data/lib/pangea/resources/cloudflare_zero_trust_gateway_policy/resource.rb +34 -0
- data/lib/pangea/resources/cloudflare_zero_trust_gateway_policy/types.rb +18 -0
- data/lib/pangea/resources/cloudflare_zero_trust_gateway_proxy_endpoint/resource.rb +26 -0
- data/lib/pangea/resources/cloudflare_zero_trust_gateway_proxy_endpoint/types.rb +10 -0
- data/lib/pangea/resources/cloudflare_zero_trust_gateway_settings/resource.rb +26 -0
- data/lib/pangea/resources/cloudflare_zero_trust_gateway_settings/types.rb +10 -0
- data/lib/pangea/resources/cloudflare_zero_trust_list/resource.rb +26 -0
- data/lib/pangea/resources/cloudflare_zero_trust_list/types.rb +10 -0
- data/lib/pangea/resources/cloudflare_zero_trust_network_hostname_route/resource.rb +26 -0
- data/lib/pangea/resources/cloudflare_zero_trust_network_hostname_route/types.rb +10 -0
- data/lib/pangea/resources/cloudflare_zero_trust_organization/resource.rb +26 -0
- data/lib/pangea/resources/cloudflare_zero_trust_organization/types.rb +10 -0
- data/lib/pangea/resources/cloudflare_zero_trust_risk_behavior/resource.rb +26 -0
- data/lib/pangea/resources/cloudflare_zero_trust_risk_behavior/types.rb +10 -0
- data/lib/pangea/resources/cloudflare_zero_trust_risk_scoring_integration/resource.rb +26 -0
- data/lib/pangea/resources/cloudflare_zero_trust_risk_scoring_integration/types.rb +10 -0
- data/lib/pangea/resources/cloudflare_zero_trust_tunnel_cloudflared/resource.rb +33 -0
- data/lib/pangea/resources/cloudflare_zero_trust_tunnel_cloudflared/types.rb +13 -0
- data/lib/pangea/resources/cloudflare_zero_trust_tunnel_cloudflared_config/resource.rb +28 -0
- data/lib/pangea/resources/cloudflare_zero_trust_tunnel_cloudflared_config/types.rb +12 -0
- data/lib/pangea/resources/cloudflare_zero_trust_tunnel_cloudflared_route/resource.rb +30 -0
- data/lib/pangea/resources/cloudflare_zero_trust_tunnel_cloudflared_route/types.rb +14 -0
- data/lib/pangea/resources/cloudflare_zero_trust_tunnel_cloudflared_virtual_network/resource.rb +26 -0
- data/lib/pangea/resources/cloudflare_zero_trust_tunnel_cloudflared_virtual_network/types.rb +10 -0
- data/lib/pangea/resources/cloudflare_zero_trust_tunnel_warp_connector/resource.rb +26 -0
- data/lib/pangea/resources/cloudflare_zero_trust_tunnel_warp_connector/types.rb +10 -0
- data/lib/pangea/resources/cloudflare_zone/resource.rb +71 -0
- data/lib/pangea/resources/cloudflare_zone/types.rb +62 -0
- data/lib/pangea/resources/cloudflare_zone_cache_reserve/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_zone_cache_reserve/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_zone_cache_variants/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_zone_cache_variants/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_zone_dns_settings/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_zone_dns_settings/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_zone_dnssec/resource.rb +96 -0
- data/lib/pangea/resources/cloudflare_zone_dnssec/types.rb +81 -0
- data/lib/pangea/resources/cloudflare_zone_hold/resource.rb +26 -0
- data/lib/pangea/resources/cloudflare_zone_hold/types.rb +10 -0
- data/lib/pangea/resources/cloudflare_zone_lockdown/resource.rb +27 -0
- data/lib/pangea/resources/cloudflare_zone_lockdown/types.rb +11 -0
- data/lib/pangea/resources/cloudflare_zone_settings_override/resource.rb +80 -0
- data/lib/pangea/resources/cloudflare_zone_settings_override/types.rb +64 -0
- data/lib/pangea/resources/cloudflare_zone_subscription/resource.rb +26 -0
- data/lib/pangea/resources/cloudflare_zone_subscription/types.rb +10 -0
- data/lib/pangea/resources/types/cloudflare/core.rb +130 -0
- data/lib/pangea/resources/types/cloudflare/load_balancing.rb +104 -0
- data/lib/pangea/resources/types/cloudflare/security.rb +107 -0
- data/lib/pangea/resources/types/cloudflare/workers.rb +60 -0
- data/lib/pangea-cloudflare/version.rb +5 -0
- data/lib/pangea-cloudflare.rb +215 -0
- data/pangea-cloudflare.gemspec +33 -0
- metadata +586 -0
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
require 'pangea/resources/base'
|
|
3
|
+
require 'pangea/resources/reference'
|
|
4
|
+
require 'pangea/resources/cloudflare_queue_consumer/types'
|
|
5
|
+
require 'pangea/resource_registry'
|
|
6
|
+
|
|
7
|
+
module Pangea::Resources
|
|
8
|
+
module CloudflareQueueConsumer
|
|
9
|
+
def cloudflare_queue_consumer(name, attributes = {})
|
|
10
|
+
attrs = Cloudflare::Types::QueueConsumerAttributes.new(attributes)
|
|
11
|
+
resource(:cloudflare_queue_consumer, name) do
|
|
12
|
+
account_id attrs.account_id
|
|
13
|
+
queue_id attrs.queue_id
|
|
14
|
+
script_name attrs.script_name
|
|
15
|
+
batch_size attrs.batch_size if attrs.batch_size
|
|
16
|
+
max_retries attrs.max_retries if attrs.max_retries
|
|
17
|
+
max_wait_time_ms attrs.max_wait_time_ms if attrs.max_wait_time_ms
|
|
18
|
+
end
|
|
19
|
+
ResourceReference.new(
|
|
20
|
+
type: 'cloudflare_queue_consumer',
|
|
21
|
+
name: name,
|
|
22
|
+
resource_attributes: attrs.to_h,
|
|
23
|
+
outputs: { id: "${cloudflare_queue_consumer.#{name}.id}" }
|
|
24
|
+
)
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
module Cloudflare
|
|
28
|
+
include CloudflareQueueConsumer
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
Pangea::ResourceRegistry.register_module(Pangea::Resources::Cloudflare)
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
require 'dry-struct'
|
|
3
|
+
require 'pangea/resources/types'
|
|
4
|
+
|
|
5
|
+
module Pangea::Resources::Cloudflare::Types
|
|
6
|
+
class QueueConsumerAttributes < Dry::Struct
|
|
7
|
+
transform_keys(&:to_sym)
|
|
8
|
+
attribute :account_id, ::Pangea::Resources::Types::CloudflareAccountId
|
|
9
|
+
attribute :queue_id, Dry::Types['strict.string']
|
|
10
|
+
attribute :script_name, Dry::Types['strict.string']
|
|
11
|
+
attribute :batch_size, Dry::Types['coercible.integer'].optional.default(nil)
|
|
12
|
+
attribute :max_retries, Dry::Types['coercible.integer'].optional.default(nil)
|
|
13
|
+
attribute :max_wait_time_ms, Dry::Types['coercible.integer'].optional.default(nil)
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
# Copyright 2025 The Pangea Authors
|
|
3
|
+
#
|
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
# you may not use this file except in compliance with the License.
|
|
6
|
+
# You may obtain a copy of the License at
|
|
7
|
+
#
|
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
#
|
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
# See the License for the specific language governing permissions and
|
|
14
|
+
# limitations under the License.
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
require 'pangea/resources/base'
|
|
18
|
+
require 'pangea/resources/reference'
|
|
19
|
+
require 'pangea/resources/cloudflare_r2_bucket/types'
|
|
20
|
+
require 'pangea/resource_registry'
|
|
21
|
+
|
|
22
|
+
module Pangea
|
|
23
|
+
module Resources
|
|
24
|
+
# Cloudflare R2 Bucket resource module that self-registers
|
|
25
|
+
module CloudflareR2Bucket
|
|
26
|
+
# Create a Cloudflare R2 Bucket
|
|
27
|
+
#
|
|
28
|
+
# R2 is Cloudflare's S3-compatible object storage with zero egress fees.
|
|
29
|
+
# Perfect for storing images, videos, backups, and static assets.
|
|
30
|
+
#
|
|
31
|
+
# @param name [Symbol] The resource name
|
|
32
|
+
# @param attributes [Hash] Bucket attributes
|
|
33
|
+
# @option attributes [String] :account_id Cloudflare account ID (required)
|
|
34
|
+
# @option attributes [String] :name Bucket name (required, 3-63 chars)
|
|
35
|
+
# @option attributes [String] :location Location hint (optional: apac, eeur, enam, weur, wnam, oc)
|
|
36
|
+
#
|
|
37
|
+
# @return [ResourceReference] Reference object with outputs
|
|
38
|
+
#
|
|
39
|
+
# @example Create a media assets bucket
|
|
40
|
+
# r2_bucket(:media, {
|
|
41
|
+
# account_id: "a" * 32,
|
|
42
|
+
# name: "media-assets",
|
|
43
|
+
# location: "wnam"
|
|
44
|
+
# })
|
|
45
|
+
#
|
|
46
|
+
# @example Create a backup bucket in Europe
|
|
47
|
+
# r2_bucket(:backups, {
|
|
48
|
+
# account_id: "a" * 32,
|
|
49
|
+
# name: "db-backups",
|
|
50
|
+
# location: "weur"
|
|
51
|
+
# })
|
|
52
|
+
#
|
|
53
|
+
# @example Create bucket with automatic location
|
|
54
|
+
# r2_bucket(:logs, {
|
|
55
|
+
# account_id: "a" * 32,
|
|
56
|
+
# name: "application-logs"
|
|
57
|
+
# })
|
|
58
|
+
def cloudflare_r2_bucket(name, attributes = {})
|
|
59
|
+
# Validate attributes using dry-struct
|
|
60
|
+
bucket_attrs = Cloudflare::Types::R2BucketAttributes.new(attributes)
|
|
61
|
+
|
|
62
|
+
# Generate terraform resource block via terraform-synthesizer
|
|
63
|
+
resource(:cloudflare_r2_bucket, name) do
|
|
64
|
+
account_id bucket_attrs.account_id
|
|
65
|
+
name bucket_attrs.name
|
|
66
|
+
location bucket_attrs.location if bucket_attrs.location
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
# Return resource reference with available outputs
|
|
70
|
+
ResourceReference.new(
|
|
71
|
+
type: 'cloudflare_r2_bucket',
|
|
72
|
+
name: name,
|
|
73
|
+
resource_attributes: bucket_attrs.to_h,
|
|
74
|
+
outputs: {
|
|
75
|
+
id: "${cloudflare_r2_bucket.#{name}.id}",
|
|
76
|
+
bucket_name: "${cloudflare_r2_bucket.#{name}.name}",
|
|
77
|
+
location: "${cloudflare_r2_bucket.#{name}.location}"
|
|
78
|
+
}
|
|
79
|
+
)
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
# Maintain backward compatibility by extending Cloudflare module
|
|
84
|
+
module Cloudflare
|
|
85
|
+
include CloudflareR2Bucket
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
# Auto-register this module when it's loaded
|
|
91
|
+
Pangea::ResourceRegistry.register_module(Pangea::Resources::Cloudflare)
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
# Copyright 2025 The Pangea Authors
|
|
3
|
+
#
|
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
# you may not use this file except in compliance with the License.
|
|
6
|
+
# You may obtain a copy of the License at
|
|
7
|
+
#
|
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
#
|
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
# See the License for the specific language governing permissions and
|
|
14
|
+
# limitations under the License.
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
require 'dry-struct'
|
|
18
|
+
require 'pangea/resources/types'
|
|
19
|
+
|
|
20
|
+
module Pangea
|
|
21
|
+
module Resources
|
|
22
|
+
module Cloudflare
|
|
23
|
+
module Types
|
|
24
|
+
# R2 bucket location hint enum
|
|
25
|
+
CloudflareR2Location = Dry::Types['strict.string'].enum(
|
|
26
|
+
'apac', # Asia-Pacific
|
|
27
|
+
'eeur', # Eastern Europe
|
|
28
|
+
'enam', # Eastern North America
|
|
29
|
+
'weur', # Western Europe
|
|
30
|
+
'wnam', # Western North America
|
|
31
|
+
'oc' # Oceania
|
|
32
|
+
)
|
|
33
|
+
|
|
34
|
+
# Type-safe attributes for Cloudflare R2 Bucket
|
|
35
|
+
#
|
|
36
|
+
# R2 is Cloudflare's S3-compatible object storage with zero egress fees.
|
|
37
|
+
# Buckets are containers for objects with optional location hints.
|
|
38
|
+
#
|
|
39
|
+
# @example Create an R2 bucket
|
|
40
|
+
# R2BucketAttributes.new(
|
|
41
|
+
# account_id: "a" * 32,
|
|
42
|
+
# name: "media-assets",
|
|
43
|
+
# location: "wnam"
|
|
44
|
+
# )
|
|
45
|
+
class R2BucketAttributes < Dry::Struct
|
|
46
|
+
transform_keys(&:to_sym)
|
|
47
|
+
|
|
48
|
+
# @!attribute account_id
|
|
49
|
+
# @return [String] The Cloudflare account ID
|
|
50
|
+
attribute :account_id, ::Pangea::Resources::Types::CloudflareAccountId
|
|
51
|
+
|
|
52
|
+
# @!attribute name
|
|
53
|
+
# @return [String] Bucket name (must be globally unique within account)
|
|
54
|
+
attribute :name, Dry::Types['strict.string'].constrained(
|
|
55
|
+
format: /\A[a-z0-9][a-z0-9-]{1,61}[a-z0-9]\z/,
|
|
56
|
+
min_size: 3,
|
|
57
|
+
max_size: 63
|
|
58
|
+
)
|
|
59
|
+
|
|
60
|
+
# @!attribute location
|
|
61
|
+
# @return [String, nil] Location hint for bucket data
|
|
62
|
+
attribute :location, CloudflareR2Location.optional.default(nil)
|
|
63
|
+
|
|
64
|
+
# Get the full region name from location code
|
|
65
|
+
# @return [String, nil] Human-readable region name
|
|
66
|
+
def region_name
|
|
67
|
+
case location
|
|
68
|
+
when 'apac'
|
|
69
|
+
'Asia-Pacific'
|
|
70
|
+
when 'eeur'
|
|
71
|
+
'Eastern Europe'
|
|
72
|
+
when 'enam'
|
|
73
|
+
'Eastern North America'
|
|
74
|
+
when 'weur'
|
|
75
|
+
'Western Europe'
|
|
76
|
+
when 'wnam'
|
|
77
|
+
'Western North America'
|
|
78
|
+
when 'oc'
|
|
79
|
+
'Oceania'
|
|
80
|
+
else
|
|
81
|
+
'Automatic'
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
# Check if bucket name follows S3 naming conventions
|
|
86
|
+
# @return [Boolean] true if follows S3 best practices
|
|
87
|
+
def s3_compatible_name?
|
|
88
|
+
# Must not contain uppercase, must not end with dash
|
|
89
|
+
name.match?(/\A[a-z0-9][a-z0-9-]*[a-z0-9]\z/) && !name.include?('..')
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
# Generate S3-compatible endpoint URL pattern
|
|
93
|
+
# @return [String] S3 endpoint pattern
|
|
94
|
+
def s3_endpoint
|
|
95
|
+
"<account_id>.r2.cloudflarestorage.com"
|
|
96
|
+
end
|
|
97
|
+
end
|
|
98
|
+
end
|
|
99
|
+
end
|
|
100
|
+
end
|
|
101
|
+
end
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
# Copyright 2025 The Pangea Authors
|
|
3
|
+
#
|
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
# you may not use this file except in compliance with the License.
|
|
6
|
+
# You may obtain a copy of the License at
|
|
7
|
+
#
|
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
#
|
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
# See the License for the specific language governing permissions and
|
|
14
|
+
# limitations under the License.
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
require 'pangea/resources/base'
|
|
18
|
+
require 'pangea/resources/reference'
|
|
19
|
+
require 'pangea/resources/cloudflare_r2_bucket_cors/types'
|
|
20
|
+
require 'pangea/resource_registry'
|
|
21
|
+
|
|
22
|
+
module Pangea
|
|
23
|
+
module Resources
|
|
24
|
+
# Cloudflare R2 Bucket CORS resource module that self-registers
|
|
25
|
+
module CloudflareR2BucketCors
|
|
26
|
+
# Create Cloudflare R2 Bucket CORS configuration
|
|
27
|
+
#
|
|
28
|
+
# CORS (Cross-Origin Resource Sharing) controls which origins can
|
|
29
|
+
# access R2 bucket objects from web browsers. Configure allowed
|
|
30
|
+
# origins, methods, headers, and preflight caching.
|
|
31
|
+
#
|
|
32
|
+
# Origin format must be scheme://host[:port] without path components.
|
|
33
|
+
# Use "*" for wildcard origins (public access).
|
|
34
|
+
#
|
|
35
|
+
# @param name [Symbol] The resource name
|
|
36
|
+
# @param attributes [Hash] R2 bucket CORS attributes
|
|
37
|
+
# @option attributes [String] :account_id Account ID (required)
|
|
38
|
+
# @option attributes [String] :bucket_name Bucket name (required)
|
|
39
|
+
# @option attributes [Array<Hash>] :rules CORS rules (required)
|
|
40
|
+
#
|
|
41
|
+
# @return [ResourceReference] Reference object with outputs
|
|
42
|
+
#
|
|
43
|
+
# @example Basic CORS for specific origin
|
|
44
|
+
# cloudflare_r2_bucket_cors(:app_cors, {
|
|
45
|
+
# account_id: "a" * 32,
|
|
46
|
+
# bucket_name: "my-bucket",
|
|
47
|
+
# rules: [{
|
|
48
|
+
# allowed: {
|
|
49
|
+
# origins: ["https://app.example.com"],
|
|
50
|
+
# methods: ["GET", "HEAD"]
|
|
51
|
+
# },
|
|
52
|
+
# max_age_seconds: 3600
|
|
53
|
+
# }]
|
|
54
|
+
# })
|
|
55
|
+
#
|
|
56
|
+
# @example Public CORS with wildcard
|
|
57
|
+
# cloudflare_r2_bucket_cors(:public_cors, {
|
|
58
|
+
# account_id: "a" * 32,
|
|
59
|
+
# bucket_name: "public-assets",
|
|
60
|
+
# rules: [{
|
|
61
|
+
# allowed: {
|
|
62
|
+
# origins: ["*"],
|
|
63
|
+
# methods: ["GET"],
|
|
64
|
+
# headers: ["*"]
|
|
65
|
+
# },
|
|
66
|
+
# max_age_seconds: 86400
|
|
67
|
+
# }]
|
|
68
|
+
# })
|
|
69
|
+
#
|
|
70
|
+
# @example Multiple CORS rules with exposed headers
|
|
71
|
+
# cloudflare_r2_bucket_cors(:multi_cors, {
|
|
72
|
+
# account_id: "a" * 32,
|
|
73
|
+
# bucket_name: "api-bucket",
|
|
74
|
+
# rules: [
|
|
75
|
+
# {
|
|
76
|
+
# id: "production",
|
|
77
|
+
# allowed: {
|
|
78
|
+
# origins: ["https://app.example.com"],
|
|
79
|
+
# methods: ["GET", "POST", "PUT", "DELETE"],
|
|
80
|
+
# headers: ["Content-Type", "Authorization"]
|
|
81
|
+
# },
|
|
82
|
+
# max_age_seconds: 3600,
|
|
83
|
+
# expose_headers: ["ETag", "Content-Length"]
|
|
84
|
+
# },
|
|
85
|
+
# {
|
|
86
|
+
# id: "staging",
|
|
87
|
+
# allowed: {
|
|
88
|
+
# origins: ["https://staging.example.com"],
|
|
89
|
+
# methods: ["GET", "POST"]
|
|
90
|
+
# },
|
|
91
|
+
# max_age_seconds: 1800
|
|
92
|
+
# }
|
|
93
|
+
# ]
|
|
94
|
+
# })
|
|
95
|
+
def cloudflare_r2_bucket_cors(name, attributes = {})
|
|
96
|
+
# Validate attributes using dry-struct
|
|
97
|
+
cors_attrs = Cloudflare::Types::R2BucketCorsAttributes.new(attributes)
|
|
98
|
+
|
|
99
|
+
# Generate terraform resource block via terraform-synthesizer
|
|
100
|
+
resource(:cloudflare_r2_bucket_cors, name) do
|
|
101
|
+
account_id cors_attrs.account_id
|
|
102
|
+
bucket_name cors_attrs.bucket_name
|
|
103
|
+
|
|
104
|
+
# CORS rules as array (terraform-synthesizer handles array → blocks conversion)
|
|
105
|
+
if cors_attrs.rules.any?
|
|
106
|
+
rules cors_attrs.rules.map { |r| r.to_h }
|
|
107
|
+
end
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
# Return resource reference with available outputs
|
|
111
|
+
ResourceReference.new(
|
|
112
|
+
type: 'cloudflare_r2_bucket_cors',
|
|
113
|
+
name: name,
|
|
114
|
+
resource_attributes: cors_attrs.to_h,
|
|
115
|
+
outputs: {
|
|
116
|
+
id: "${cloudflare_r2_bucket_cors.#{name}.id}"
|
|
117
|
+
}
|
|
118
|
+
)
|
|
119
|
+
end
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
# Maintain backward compatibility by extending Cloudflare module
|
|
123
|
+
module Cloudflare
|
|
124
|
+
include CloudflareR2BucketCors
|
|
125
|
+
end
|
|
126
|
+
end
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
# Auto-register this module when it's loaded
|
|
130
|
+
Pangea::ResourceRegistry.register_module(Pangea::Resources::Cloudflare)
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# Copyright 2025 The Pangea Authors
|
|
4
|
+
#
|
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
# you may not use this file except in compliance with the License.
|
|
7
|
+
# You may obtain a copy of the License at
|
|
8
|
+
#
|
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
#
|
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
# See the License for the specific language governing permissions and
|
|
15
|
+
# limitations under the License.
|
|
16
|
+
|
|
17
|
+
module Pangea
|
|
18
|
+
module Resources
|
|
19
|
+
module Cloudflare
|
|
20
|
+
module Types
|
|
21
|
+
# Type-safe attributes for Cloudflare R2 Bucket CORS
|
|
22
|
+
#
|
|
23
|
+
# CORS (Cross-Origin Resource Sharing) configuration allows web
|
|
24
|
+
# applications to make requests to R2 buckets from different origins.
|
|
25
|
+
#
|
|
26
|
+
# Origin format must be scheme://host[:port] without path components.
|
|
27
|
+
# MaxAgeSeconds can be up to 86400 (24 hours).
|
|
28
|
+
#
|
|
29
|
+
# @example Basic CORS configuration
|
|
30
|
+
# R2BucketCorsAttributes.new(
|
|
31
|
+
# account_id: "a" * 32,
|
|
32
|
+
# bucket_name: "my-bucket",
|
|
33
|
+
# rules: [{
|
|
34
|
+
# allowed: {
|
|
35
|
+
# origins: ["https://example.com"],
|
|
36
|
+
# methods: ["GET", "HEAD"]
|
|
37
|
+
# },
|
|
38
|
+
# max_age_seconds: 3600
|
|
39
|
+
# }]
|
|
40
|
+
# )
|
|
41
|
+
#
|
|
42
|
+
# @example Wildcard CORS for public bucket
|
|
43
|
+
# R2BucketCorsAttributes.new(
|
|
44
|
+
# account_id: "a" * 32,
|
|
45
|
+
# bucket_name: "public-assets",
|
|
46
|
+
# rules: [{
|
|
47
|
+
# allowed: {
|
|
48
|
+
# origins: ["*"],
|
|
49
|
+
# methods: ["GET"],
|
|
50
|
+
# headers: ["*"]
|
|
51
|
+
# },
|
|
52
|
+
# max_age_seconds: 86400
|
|
53
|
+
# }]
|
|
54
|
+
# )
|
|
55
|
+
class R2BucketCorsAttributes < Dry::Struct
|
|
56
|
+
transform_keys(&:to_sym)
|
|
57
|
+
|
|
58
|
+
# @!attribute account_id
|
|
59
|
+
# @return [String] The account ID
|
|
60
|
+
attribute :account_id, ::Pangea::Resources::Types::CloudflareAccountId
|
|
61
|
+
|
|
62
|
+
# @!attribute bucket_name
|
|
63
|
+
# @return [String] R2 bucket name
|
|
64
|
+
attribute :bucket_name, Dry::Types['strict.string'].constrained(min_size: 1)
|
|
65
|
+
|
|
66
|
+
# @!attribute rules
|
|
67
|
+
# @return [Array<R2CorsRule>] CORS rules
|
|
68
|
+
attribute :rules, Dry::Types['strict.array']
|
|
69
|
+
.of(R2CorsRule)
|
|
70
|
+
.constrained(min_size: 1)
|
|
71
|
+
|
|
72
|
+
# Check if any rule allows wildcard origins
|
|
73
|
+
# @return [Boolean] true if any rule has wildcard origin
|
|
74
|
+
def has_wildcard_origin?
|
|
75
|
+
rules.any? { |rule| rule.allowed.wildcard_origin? }
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
# Check if any rule allows GET
|
|
79
|
+
# @return [Boolean] true if any rule allows GET
|
|
80
|
+
def allows_get?
|
|
81
|
+
rules.any?(&:allows_get?)
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
# Check if multiple rules configured
|
|
85
|
+
# @return [Boolean] true if more than one rule
|
|
86
|
+
def multiple_rules?
|
|
87
|
+
rules.length > 1
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
# Get all unique origins across rules
|
|
91
|
+
# @return [Array<String>] all configured origins
|
|
92
|
+
def all_origins
|
|
93
|
+
rules.flat_map { |rule| rule.allowed.origins }.uniq
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
# Get all unique methods across rules
|
|
97
|
+
# @return [Array<String>] all configured methods
|
|
98
|
+
def all_methods
|
|
99
|
+
rules.flat_map { |rule| rule.allowed[:methods] }.uniq
|
|
100
|
+
end
|
|
101
|
+
end
|
|
102
|
+
end
|
|
103
|
+
end
|
|
104
|
+
end
|
|
105
|
+
end
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# Copyright 2025 The Pangea Authors
|
|
4
|
+
#
|
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
# you may not use this file except in compliance with the License.
|
|
7
|
+
# You may obtain a copy of the License at
|
|
8
|
+
#
|
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
#
|
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
# See the License for the specific language governing permissions and
|
|
15
|
+
# limitations under the License.
|
|
16
|
+
|
|
17
|
+
module Pangea
|
|
18
|
+
module Resources
|
|
19
|
+
module Cloudflare
|
|
20
|
+
module Types
|
|
21
|
+
# Allowed configuration for CORS rule
|
|
22
|
+
class R2CorsAllowed < Dry::Struct
|
|
23
|
+
transform_keys(&:to_sym)
|
|
24
|
+
|
|
25
|
+
# @!attribute origins
|
|
26
|
+
# @return [Array<String>] Allowed origins (scheme://host[:port])
|
|
27
|
+
attribute :origins, Dry::Types['strict.array']
|
|
28
|
+
.of(Dry::Types['strict.string'])
|
|
29
|
+
.constrained(min_size: 1)
|
|
30
|
+
|
|
31
|
+
# @!attribute methods
|
|
32
|
+
# @return [Array<String>] Allowed HTTP methods
|
|
33
|
+
attribute :methods, Dry::Types['strict.array']
|
|
34
|
+
.of(CloudflareR2CorsMethod)
|
|
35
|
+
.constrained(min_size: 1)
|
|
36
|
+
|
|
37
|
+
# @!attribute headers
|
|
38
|
+
# @return [Array<String>, nil] Allowed request headers
|
|
39
|
+
attribute :headers, Dry::Types['strict.array']
|
|
40
|
+
.of(Dry::Types['strict.string'])
|
|
41
|
+
.optional
|
|
42
|
+
.default(nil)
|
|
43
|
+
|
|
44
|
+
# Check if wildcard origin
|
|
45
|
+
# @return [Boolean] true if allows all origins
|
|
46
|
+
def wildcard_origin?
|
|
47
|
+
origins.include?('*')
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
# Check if wildcard headers
|
|
51
|
+
# @return [Boolean] true if allows all headers
|
|
52
|
+
def wildcard_headers?
|
|
53
|
+
headers&.include?('*') || false
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
end
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# Copyright 2025 The Pangea Authors
|
|
4
|
+
#
|
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
# you may not use this file except in compliance with the License.
|
|
7
|
+
# You may obtain a copy of the License at
|
|
8
|
+
#
|
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
#
|
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
# See the License for the specific language governing permissions and
|
|
15
|
+
# limitations under the License.
|
|
16
|
+
|
|
17
|
+
module Pangea
|
|
18
|
+
module Resources
|
|
19
|
+
module Cloudflare
|
|
20
|
+
module Types
|
|
21
|
+
# HTTP methods for CORS
|
|
22
|
+
CloudflareR2CorsMethod = Dry::Types['strict.string'].enum(
|
|
23
|
+
'GET',
|
|
24
|
+
'HEAD',
|
|
25
|
+
'POST',
|
|
26
|
+
'PUT',
|
|
27
|
+
'DELETE',
|
|
28
|
+
'PATCH',
|
|
29
|
+
'OPTIONS'
|
|
30
|
+
)
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# Copyright 2025 The Pangea Authors
|
|
4
|
+
#
|
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
# you may not use this file except in compliance with the License.
|
|
7
|
+
# You may obtain a copy of the License at
|
|
8
|
+
#
|
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
#
|
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
# See the License for the specific language governing permissions and
|
|
15
|
+
# limitations under the License.
|
|
16
|
+
|
|
17
|
+
module Pangea
|
|
18
|
+
module Resources
|
|
19
|
+
module Cloudflare
|
|
20
|
+
module Types
|
|
21
|
+
# CORS rule for R2 bucket
|
|
22
|
+
class R2CorsRule < Dry::Struct
|
|
23
|
+
transform_keys(&:to_sym)
|
|
24
|
+
|
|
25
|
+
# @!attribute allowed
|
|
26
|
+
# @return [R2CorsAllowed] Allowed origins, methods, headers
|
|
27
|
+
attribute :allowed, R2CorsAllowed
|
|
28
|
+
|
|
29
|
+
# @!attribute id
|
|
30
|
+
# @return [String, nil] Rule identifier
|
|
31
|
+
attribute :id, Dry::Types['strict.string'].optional.default(nil)
|
|
32
|
+
|
|
33
|
+
# @!attribute max_age_seconds
|
|
34
|
+
# @return [Integer, nil] Preflight cache duration (max 86400)
|
|
35
|
+
attribute :max_age_seconds, Dry::Types['coercible.integer']
|
|
36
|
+
.constrained(gteq: 0, lteq: 86400)
|
|
37
|
+
.optional
|
|
38
|
+
.default(nil)
|
|
39
|
+
|
|
40
|
+
# @!attribute expose_headers
|
|
41
|
+
# @return [Array<String>, nil] Headers exposed to JavaScript
|
|
42
|
+
attribute :expose_headers, Dry::Types['strict.array']
|
|
43
|
+
.of(Dry::Types['strict.string'])
|
|
44
|
+
.optional
|
|
45
|
+
.default(nil)
|
|
46
|
+
|
|
47
|
+
# Check if GET requests allowed
|
|
48
|
+
# @return [Boolean] true if GET in methods
|
|
49
|
+
def allows_get?
|
|
50
|
+
allowed[:methods].include?('GET')
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
# Check if POST requests allowed
|
|
54
|
+
# @return [Boolean] true if POST in methods
|
|
55
|
+
def allows_post?
|
|
56
|
+
allowed[:methods].include?('POST')
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
# Check if has preflight caching
|
|
60
|
+
# @return [Boolean] true if max_age_seconds configured
|
|
61
|
+
def has_preflight_caching?
|
|
62
|
+
!max_age_seconds.nil? && max_age_seconds > 0
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
# Check if exposes headers
|
|
66
|
+
# @return [Boolean] true if expose_headers configured
|
|
67
|
+
def exposes_headers?
|
|
68
|
+
!expose_headers.nil? && !expose_headers.empty?
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
end
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# Copyright 2025 The Pangea Authors
|
|
4
|
+
#
|
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
# you may not use this file except in compliance with the License.
|
|
7
|
+
# You may obtain a copy of the License at
|
|
8
|
+
#
|
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
#
|
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
# See the License for the specific language governing permissions and
|
|
15
|
+
# limitations under the License.
|
|
16
|
+
|
|
17
|
+
require 'dry-struct'
|
|
18
|
+
require 'pangea/resources/types'
|
|
19
|
+
require_relative 'types/cors_method'
|
|
20
|
+
require_relative 'types/cors_allowed'
|
|
21
|
+
require_relative 'types/cors_rule'
|
|
22
|
+
require_relative 'types/attributes'
|