# coding: utf-8

"""
    Agilicus API

    Agilicus is API-first. Modern software is controlled by other software, is open, is available for you to use the way you want, securely, simply.  A rendered, online viewable and usable version of this specification is available at [api](https://www.agilicus.com/api). You may try the API inline directly in the web page. To do so, first obtain an Authentication Token (the simplest way is to install the Python SDK, and then run `agilicus-cli --issuer https://MYISSUER get-token`). You will need an org-id for most calls (and can obtain from `agilicus-cli --issuer https://MYISSUER list-orgs`). The `MYISSUER` will typically be `auth.MYDOMAIN`, and you will see it as you sign-in to the administrative UI.  This API releases on Bearer-Token authentication. To obtain a valid bearer token you will need to Authenticate to an Issuer with OpenID Connect (a superset of OAUTH2).  Your \"issuer\" will look like https://auth.MYDOMAIN. For example, when you signed-up, if you said \"use my own domain name\" and assigned a CNAME of cloud.example.com, then your issuer would be https://auth.cloud.example.com.  If you selected \"use an Agilicus supplied domain name\", your issuer would look like https://auth.myorg.agilicus.cloud.  For test purposes you can use our [Python SDK](https://pypi.org/project/agilicus/) and run `agilicus-cli --issuer https://auth.MYDOMAIN get-token`.  This API may be used in any language runtime that supports OpenAPI 3.0, or, you may use our [Python SDK](https://pypi.org/project/agilicus/), our [Typescript SDK](https://www.npmjs.com/package/@agilicus/angular), or our [Golang SDK](https://git.agilicus.com/pub/sdk-go).  100% of the activities in our system our API-driven, from our web-admin, through our progressive web applications, to all internals: there is nothing that is not accessible.  For more information, see [developer resources](https://www.agilicus.com/developer).   # noqa: E501

    The version of the OpenAPI document: 2021.05.26
    Contact: dev@agilicus.com
    Generated by: https://openapi-generator.tech
"""


import pprint
import re  # noqa: F401

import six

from agilicus_api.configuration import Configuration


class HTTPSecuritySettings(object):
    """NOTE: This class is auto generated by OpenAPI Generator.
    Ref: https://openapi-generator.tech

    Do not edit the class manually.
    """

    """
    Attributes:
      openapi_types (dict): The key is attribute name
                            and the value is attribute type.
      attribute_map (dict): The key is attribute name
                            and the value is json key in definition.
    """
    openapi_types = {
        'csp': 'CSPSettings',
        'cors': 'CORSSettings',
        'hsts': 'HSTSSettings',
        'xss_protection': 'XSSSettings',
        'certificate_transparency': 'CertificateTransparencySettings',
        'frame_options': 'FrameOptionsSettings',
        'content_type_options': 'ContentTypeOptionsSettings',
        'permitted_cross_domain_policies': 'PermittedCrossDomainPoliciesSettings',
        'coep': 'CrossOriginEmbedderPolicySettings',
        'coop': 'CrossOriginOpenerPolicySettings',
        'corp': 'CrossOriginResourcePolicySettings',
        'referrer_policy': 'ReferrerPolicySettings'
    }

    attribute_map = {
        'csp': 'csp',
        'cors': 'cors',
        'hsts': 'hsts',
        'xss_protection': 'xss_protection',
        'certificate_transparency': 'certificate_transparency',
        'frame_options': 'frame_options',
        'content_type_options': 'content_type_options',
        'permitted_cross_domain_policies': 'permitted_cross_domain_policies',
        'coep': 'coep',
        'coop': 'coop',
        'corp': 'corp',
        'referrer_policy': 'referrer_policy'
    }

    def __init__(self, csp=None, cors=None, hsts=None, xss_protection=None, certificate_transparency=None, frame_options=None, content_type_options=None, permitted_cross_domain_policies=None, coep=None, coop=None, corp=None, referrer_policy=None, local_vars_configuration=None):  # noqa: E501
        """HTTPSecuritySettings - a model defined in OpenAPI"""  # noqa: E501
        if local_vars_configuration is None:
            local_vars_configuration = Configuration()
        self.local_vars_configuration = local_vars_configuration

        self._csp = None
        self._cors = None
        self._hsts = None
        self._xss_protection = None
        self._certificate_transparency = None
        self._frame_options = None
        self._content_type_options = None
        self._permitted_cross_domain_policies = None
        self._coep = None
        self._coop = None
        self._corp = None
        self._referrer_policy = None
        self.discriminator = None

        if csp is not None:
            self.csp = csp
        if cors is not None:
            self.cors = cors
        if hsts is not None:
            self.hsts = hsts
        if xss_protection is not None:
            self.xss_protection = xss_protection
        if certificate_transparency is not None:
            self.certificate_transparency = certificate_transparency
        if frame_options is not None:
            self.frame_options = frame_options
        if content_type_options is not None:
            self.content_type_options = content_type_options
        if permitted_cross_domain_policies is not None:
            self.permitted_cross_domain_policies = permitted_cross_domain_policies
        if coep is not None:
            self.coep = coep
        if coop is not None:
            self.coop = coop
        if corp is not None:
            self.corp = corp
        if referrer_policy is not None:
            self.referrer_policy = referrer_policy

    @property
    def csp(self):
        """Gets the csp of this HTTPSecuritySettings.  # noqa: E501


        :return: The csp of this HTTPSecuritySettings.  # noqa: E501
        :rtype: CSPSettings
        """
        return self._csp

    @csp.setter
    def csp(self, csp):
        """Sets the csp of this HTTPSecuritySettings.


        :param csp: The csp of this HTTPSecuritySettings.  # noqa: E501
        :type: CSPSettings
        """

        self._csp = csp

    @property
    def cors(self):
        """Gets the cors of this HTTPSecuritySettings.  # noqa: E501


        :return: The cors of this HTTPSecuritySettings.  # noqa: E501
        :rtype: CORSSettings
        """
        return self._cors

    @cors.setter
    def cors(self, cors):
        """Sets the cors of this HTTPSecuritySettings.


        :param cors: The cors of this HTTPSecuritySettings.  # noqa: E501
        :type: CORSSettings
        """

        self._cors = cors

    @property
    def hsts(self):
        """Gets the hsts of this HTTPSecuritySettings.  # noqa: E501


        :return: The hsts of this HTTPSecuritySettings.  # noqa: E501
        :rtype: HSTSSettings
        """
        return self._hsts

    @hsts.setter
    def hsts(self, hsts):
        """Sets the hsts of this HTTPSecuritySettings.


        :param hsts: The hsts of this HTTPSecuritySettings.  # noqa: E501
        :type: HSTSSettings
        """

        self._hsts = hsts

    @property
    def xss_protection(self):
        """Gets the xss_protection of this HTTPSecuritySettings.  # noqa: E501


        :return: The xss_protection of this HTTPSecuritySettings.  # noqa: E501
        :rtype: XSSSettings
        """
        return self._xss_protection

    @xss_protection.setter
    def xss_protection(self, xss_protection):
        """Sets the xss_protection of this HTTPSecuritySettings.


        :param xss_protection: The xss_protection of this HTTPSecuritySettings.  # noqa: E501
        :type: XSSSettings
        """

        self._xss_protection = xss_protection

    @property
    def certificate_transparency(self):
        """Gets the certificate_transparency of this HTTPSecuritySettings.  # noqa: E501


        :return: The certificate_transparency of this HTTPSecuritySettings.  # noqa: E501
        :rtype: CertificateTransparencySettings
        """
        return self._certificate_transparency

    @certificate_transparency.setter
    def certificate_transparency(self, certificate_transparency):
        """Sets the certificate_transparency of this HTTPSecuritySettings.


        :param certificate_transparency: The certificate_transparency of this HTTPSecuritySettings.  # noqa: E501
        :type: CertificateTransparencySettings
        """

        self._certificate_transparency = certificate_transparency

    @property
    def frame_options(self):
        """Gets the frame_options of this HTTPSecuritySettings.  # noqa: E501


        :return: The frame_options of this HTTPSecuritySettings.  # noqa: E501
        :rtype: FrameOptionsSettings
        """
        return self._frame_options

    @frame_options.setter
    def frame_options(self, frame_options):
        """Sets the frame_options of this HTTPSecuritySettings.


        :param frame_options: The frame_options of this HTTPSecuritySettings.  # noqa: E501
        :type: FrameOptionsSettings
        """

        self._frame_options = frame_options

    @property
    def content_type_options(self):
        """Gets the content_type_options of this HTTPSecuritySettings.  # noqa: E501


        :return: The content_type_options of this HTTPSecuritySettings.  # noqa: E501
        :rtype: ContentTypeOptionsSettings
        """
        return self._content_type_options

    @content_type_options.setter
    def content_type_options(self, content_type_options):
        """Sets the content_type_options of this HTTPSecuritySettings.


        :param content_type_options: The content_type_options of this HTTPSecuritySettings.  # noqa: E501
        :type: ContentTypeOptionsSettings
        """

        self._content_type_options = content_type_options

    @property
    def permitted_cross_domain_policies(self):
        """Gets the permitted_cross_domain_policies of this HTTPSecuritySettings.  # noqa: E501


        :return: The permitted_cross_domain_policies of this HTTPSecuritySettings.  # noqa: E501
        :rtype: PermittedCrossDomainPoliciesSettings
        """
        return self._permitted_cross_domain_policies

    @permitted_cross_domain_policies.setter
    def permitted_cross_domain_policies(self, permitted_cross_domain_policies):
        """Sets the permitted_cross_domain_policies of this HTTPSecuritySettings.


        :param permitted_cross_domain_policies: The permitted_cross_domain_policies of this HTTPSecuritySettings.  # noqa: E501
        :type: PermittedCrossDomainPoliciesSettings
        """

        self._permitted_cross_domain_policies = permitted_cross_domain_policies

    @property
    def coep(self):
        """Gets the coep of this HTTPSecuritySettings.  # noqa: E501


        :return: The coep of this HTTPSecuritySettings.  # noqa: E501
        :rtype: CrossOriginEmbedderPolicySettings
        """
        return self._coep

    @coep.setter
    def coep(self, coep):
        """Sets the coep of this HTTPSecuritySettings.


        :param coep: The coep of this HTTPSecuritySettings.  # noqa: E501
        :type: CrossOriginEmbedderPolicySettings
        """

        self._coep = coep

    @property
    def coop(self):
        """Gets the coop of this HTTPSecuritySettings.  # noqa: E501


        :return: The coop of this HTTPSecuritySettings.  # noqa: E501
        :rtype: CrossOriginOpenerPolicySettings
        """
        return self._coop

    @coop.setter
    def coop(self, coop):
        """Sets the coop of this HTTPSecuritySettings.


        :param coop: The coop of this HTTPSecuritySettings.  # noqa: E501
        :type: CrossOriginOpenerPolicySettings
        """

        self._coop = coop

    @property
    def corp(self):
        """Gets the corp of this HTTPSecuritySettings.  # noqa: E501


        :return: The corp of this HTTPSecuritySettings.  # noqa: E501
        :rtype: CrossOriginResourcePolicySettings
        """
        return self._corp

    @corp.setter
    def corp(self, corp):
        """Sets the corp of this HTTPSecuritySettings.


        :param corp: The corp of this HTTPSecuritySettings.  # noqa: E501
        :type: CrossOriginResourcePolicySettings
        """

        self._corp = corp

    @property
    def referrer_policy(self):
        """Gets the referrer_policy of this HTTPSecuritySettings.  # noqa: E501


        :return: The referrer_policy of this HTTPSecuritySettings.  # noqa: E501
        :rtype: ReferrerPolicySettings
        """
        return self._referrer_policy

    @referrer_policy.setter
    def referrer_policy(self, referrer_policy):
        """Sets the referrer_policy of this HTTPSecuritySettings.


        :param referrer_policy: The referrer_policy of this HTTPSecuritySettings.  # noqa: E501
        :type: ReferrerPolicySettings
        """

        self._referrer_policy = referrer_policy

    def to_dict(self):
        """Returns the model properties as a dict"""
        result = {}

        for attr, _ in six.iteritems(self.openapi_types):
            value = getattr(self, attr)
            if isinstance(value, list):
                result[attr] = list(map(
                    lambda x: x.to_dict() if hasattr(x, "to_dict") else x,
                    value
                ))
            elif hasattr(value, "to_dict"):
                result[attr] = value.to_dict()
            elif isinstance(value, dict):
                result[attr] = dict(map(
                    lambda item: (item[0], item[1].to_dict())
                    if hasattr(item[1], "to_dict") else item,
                    value.items()
                ))
            else:
                result[attr] = value

        return result

    def to_str(self):
        """Returns the string representation of the model"""
        return pprint.pformat(self.to_dict())

    def __repr__(self):
        """For `print` and `pprint`"""
        return self.to_str()

    def __eq__(self, other):
        """Returns true if both objects are equal"""
        if not isinstance(other, HTTPSecuritySettings):
            return False

        return self.to_dict() == other.to_dict()

    def __ne__(self, other):
        """Returns true if both objects are not equal"""
        if not isinstance(other, HTTPSecuritySettings):
            return True

        return self.to_dict() != other.to_dict()
