"use strict";
// *** WARNING: this file was generated by pulumi-language-nodejs. ***
// *** Do not edit by hand unless you're certain you know what you are doing! ***
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
    if (k2 === undefined) k2 = k;
    var desc = Object.getOwnPropertyDescriptor(m, k);
    if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
      desc = { enumerable: true, get: function() { return m[k]; } };
    }
    Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
    if (k2 === undefined) k2 = k;
    o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
    Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
    o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
    if (mod && mod.__esModule) return mod;
    var result = {};
    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
    __setModuleDefault(result, mod);
    return result;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.ProtectionRule = void 0;
const pulumi = __importStar(require("@pulumi/pulumi"));
const utilities = __importStar(require("../utilities"));
/**
 * This resource provides the Protection Rule resource in Oracle Cloud Infrastructure Web Application Acceleration and Security service.
 * Api doc link for the resource: https://docs.oracle.com/iaas/api/#/en/waas/latest/ProtectionRule
 *
 * Example terraform configs related to the resource : https://github.com/oracle/terraform-provider-oci/tree/master/examples/web_application_acceleration_and_security
 *
 * Updates the action for each specified protection rule. Requests can either be allowed, blocked, or trigger an alert if they meet the parameters of an applied rule. For more information on protection rules, see [WAF Protection Rules](https://docs.cloud.oracle.com/iaas/Content/WAF/Tasks/wafprotectionrules.htm).
 * This operation can update or disable protection rules depending on the structure of the request body.
 * Protection rules can be updated by changing the properties of the protection rule object with the rule's key specified in the key field.
 *
 * ## Example Usage
 *
 * ```typescript
 * import * as pulumi from "@pulumi/pulumi";
 * import * as oci from "@pulumi/oci";
 *
 * const testProtectionRule = new oci.waas.ProtectionRule("test_protection_rule", {
 *     waasPolicyId: testWaasPolicy.id,
 *     key: key,
 *     action: "DETECT",
 *     exclusions: {
 *         exclusions: ["example.com"],
 *         target: "REQUEST_COOKIES",
 *     },
 * });
 * ```
 *
 * ## Import
 *
 * ProtectionRules can be imported using the `id`, e.g.
 * ```sh
 * $ pulumi import oci:Waas/protectionRule:ProtectionRule test_protection_rule "waasPolicyId/{waasPolicyId}/key/{key}"
 * ```
 */
class ProtectionRule extends pulumi.CustomResource {
    /**
     * Get an existing ProtectionRule resource's state with the given name, ID, and optional extra
     * properties used to qualify the lookup.
     *
     * @param name The _unique_ name of the resulting resource.
     * @param id The _unique_ provider ID of the resource to lookup.
     * @param state Any extra arguments used during the lookup.
     * @param opts Optional settings to control the behavior of the CustomResource.
     */
    static get(name, id, state, opts) {
        return new ProtectionRule(name, state, { ...opts, id: id });
    }
    /** @internal */
    static __pulumiType = 'oci:Waas/protectionRule:ProtectionRule';
    /**
     * Returns true if the given object is an instance of ProtectionRule.  This is designed to work even
     * when multiple copies of the Pulumi SDK have been loaded into the same process.
     */
    static isInstance(obj) {
        if (obj === undefined || obj === null) {
            return false;
        }
        return obj['__pulumiType'] === ProtectionRule.__pulumiType;
    }
    constructor(name, argsOrState, opts) {
        let resourceInputs = {};
        opts = opts || {};
        if (opts.id) {
            const state = argsOrState;
            resourceInputs["action"] = state?.action;
            resourceInputs["description"] = state?.description;
            resourceInputs["exclusions"] = state?.exclusions;
            resourceInputs["key"] = state?.key;
            resourceInputs["labels"] = state?.labels;
            resourceInputs["modSecurityRuleIds"] = state?.modSecurityRuleIds;
            resourceInputs["name"] = state?.name;
            resourceInputs["waasPolicyId"] = state?.waasPolicyId;
        }
        else {
            const args = argsOrState;
            if (args?.key === undefined && !opts.urn) {
                throw new Error("Missing required property 'key'");
            }
            if (args?.waasPolicyId === undefined && !opts.urn) {
                throw new Error("Missing required property 'waasPolicyId'");
            }
            resourceInputs["action"] = args?.action;
            resourceInputs["exclusions"] = args?.exclusions;
            resourceInputs["key"] = args?.key;
            resourceInputs["waasPolicyId"] = args?.waasPolicyId;
            resourceInputs["description"] = undefined /*out*/;
            resourceInputs["labels"] = undefined /*out*/;
            resourceInputs["modSecurityRuleIds"] = undefined /*out*/;
            resourceInputs["name"] = undefined /*out*/;
        }
        opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts);
        super(ProtectionRule.__pulumiType, name, resourceInputs, opts);
    }
}
exports.ProtectionRule = ProtectionRule;
//# sourceMappingURL=protectionRule.js.map