v2_application_security_CreateApplicationSecurityWafCustomRule/
v2_application-security_CreateApplicationSecurityWafCustomRule.rs

1// Create a WAF custom rule returns "Created" response
2use datadog_api_client::datadog;
3use datadog_api_client::datadogV2::api_application_security::ApplicationSecurityAPI;
4use datadog_api_client::datadogV2::model::ApplicationSecurityWafCustomRuleAction;
5use datadog_api_client::datadogV2::model::ApplicationSecurityWafCustomRuleActionAction;
6use datadog_api_client::datadogV2::model::ApplicationSecurityWafCustomRuleActionParameters;
7use datadog_api_client::datadogV2::model::ApplicationSecurityWafCustomRuleCondition;
8use datadog_api_client::datadogV2::model::ApplicationSecurityWafCustomRuleConditionInput;
9use datadog_api_client::datadogV2::model::ApplicationSecurityWafCustomRuleConditionInputAddress;
10use datadog_api_client::datadogV2::model::ApplicationSecurityWafCustomRuleConditionOperator;
11use datadog_api_client::datadogV2::model::ApplicationSecurityWafCustomRuleConditionOptions;
12use datadog_api_client::datadogV2::model::ApplicationSecurityWafCustomRuleConditionParameters;
13use datadog_api_client::datadogV2::model::ApplicationSecurityWafCustomRuleCreateAttributes;
14use datadog_api_client::datadogV2::model::ApplicationSecurityWafCustomRuleCreateData;
15use datadog_api_client::datadogV2::model::ApplicationSecurityWafCustomRuleCreateRequest;
16use datadog_api_client::datadogV2::model::ApplicationSecurityWafCustomRuleScope;
17use datadog_api_client::datadogV2::model::ApplicationSecurityWafCustomRuleTags;
18use datadog_api_client::datadogV2::model::ApplicationSecurityWafCustomRuleTagsCategory;
19use datadog_api_client::datadogV2::model::ApplicationSecurityWafCustomRuleType;
20use std::collections::BTreeMap;
21
22#[tokio::main]
23async fn main() {
24    let body =
25        ApplicationSecurityWafCustomRuleCreateRequest::new(
26            ApplicationSecurityWafCustomRuleCreateData::new(
27                ApplicationSecurityWafCustomRuleCreateAttributes::new(
28                    false,
29                    vec![
30                        ApplicationSecurityWafCustomRuleCondition::new(
31                            ApplicationSecurityWafCustomRuleConditionOperator::MATCH_REGEX,
32                            ApplicationSecurityWafCustomRuleConditionParameters::new(
33                                vec![
34                                    ApplicationSecurityWafCustomRuleConditionInput::new(
35                                        ApplicationSecurityWafCustomRuleConditionInputAddress::SERVER_DB_STATEMENT,
36                                    ).key_path(vec![])
37                                ],
38                            )
39                                .data("blocked_users".to_string())
40                                .list(vec![])
41                                .options(
42                                    ApplicationSecurityWafCustomRuleConditionOptions::new()
43                                        .case_sensitive(false)
44                                        .min_length(0),
45                                )
46                                .regex("path.*".to_string())
47                                .value("custom_tag".to_string()),
48                        )
49                    ],
50                    false,
51                    "Block request from a bad useragent".to_string(),
52                    ApplicationSecurityWafCustomRuleTags::new(
53                        ApplicationSecurityWafCustomRuleTagsCategory::BUSINESS_LOGIC,
54                        "users.login.success".to_string(),
55                    ).additional_properties(BTreeMap::from([])),
56                )
57                    .action(
58                        ApplicationSecurityWafCustomRuleAction::new()
59                            .action(ApplicationSecurityWafCustomRuleActionAction::BLOCK_REQUEST)
60                            .parameters(
61                                ApplicationSecurityWafCustomRuleActionParameters::new()
62                                    .location("/blocking".to_string())
63                                    .status_code(403),
64                            ),
65                    )
66                    .path_glob("/api/search/*".to_string())
67                    .scope(
68                        vec![
69                            ApplicationSecurityWafCustomRuleScope::new(
70                                "prod".to_string(),
71                                "billing-service".to_string(),
72                            )
73                        ],
74                    ),
75                ApplicationSecurityWafCustomRuleType::CUSTOM_RULE,
76            ),
77        );
78    let configuration = datadog::Configuration::new();
79    let api = ApplicationSecurityAPI::with_config(configuration);
80    let resp = api.create_application_security_waf_custom_rule(body).await;
81    if let Ok(value) = resp {
82        println!("{:#?}", value);
83    } else {
84        println!("{:#?}", resp.unwrap_err());
85    }
86}