public static async Task <AclRuleType> CreateAclRule(
     this IComputeApiClient client,
     string networkId,
     string aclRuleName,
     int position,
     AclActionType action,
     AclProtocolType protocol,
     PortRangeTypeType portRangeType,
     IPAddress sourceIpAddress = null,
     IPAddress sourceNetmask   = null,
     IPAddress destIpAddress   = null,
     IPAddress destNetmask     = null,
     int port1       = 0,
     int port2       = 0,
     AclType aclType = AclType.OUTSIDE_ACL)
 {
     return
         (await
          client.NetworkingLegacy.Network.CreateAclRule(
              networkId,
              aclRuleName,
              position,
              action,
              protocol,
              portRangeType,
              sourceIpAddress,
              sourceNetmask,
              destIpAddress,
              destNetmask,
              port1,
              port2,
              aclType));
 }
Пример #2
0
        /// <summary>
        /// The create acl rule.
        /// </summary>
        /// <param name="networkId">
        /// The network id.
        /// </param>
        /// <param name="aclRuleName">
        /// The acl rule name.
        /// </param>
        /// <param name="position">
        /// The position.
        /// </param>
        /// <param name="action">
        /// The action.
        /// </param>
        /// <param name="protocol">
        /// The protocol.
        /// </param>
        /// <param name="portRangeType">
        /// The port range type.
        /// </param>
        /// <param name="sourceIpAddress">
        /// The source ip address.
        /// </param>
        /// <param name="sourceNetmask">
        /// The source netmask.
        /// </param>
        /// <param name="destIpAddress">
        /// The dest ip address.
        /// </param>
        /// <param name="destNetmask">
        /// The dest netmask.
        /// </param>
        /// <param name="port1">
        /// The port 1.
        /// </param>
        /// <param name="port2">
        /// The port 2.
        /// </param>
        /// <param name="aclType">
        /// The acl type.
        /// </param>
        /// <returns>
        /// The <see cref="Task"/>.
        /// </returns>
        /// <exception cref="ArgumentOutOfRangeException">
        /// </exception>
        public async Task <AclRuleType> CreateAclRule(
            string networkId,
            string aclRuleName,
            int position,
            AclActionType action,
            AclProtocolType protocol,
            PortRangeTypeType portRangeType,
            IPAddress sourceIpAddress = null,
            IPAddress sourceNetmask   = null,
            IPAddress destIpAddress   = null,
            IPAddress destNetmask     = null,
            int port1       = 0,
            int port2       = 0,
            AclType aclType = AclType.OUTSIDE_ACL)
        {
            var portRange = new PortRangeType {
                type = portRangeType
            };

            // Validate that the ports are specified when needed
            switch (portRangeType)
            {
            case PortRangeTypeType.EQUAL_TO:
            case PortRangeTypeType.GREATER_THAN:
            case PortRangeTypeType.LESS_THAN:
            {
                if (port1 < 1 || port1 > 65535)
                {
                    throw new ArgumentOutOfRangeException(
                              "port1",
                              port1,
                              string.Format(
                                  "Port1 must be between 1-65535 when the port range type is {0}",
                                  portRangeType));
                }
                portRange.port1          = port1;
                portRange.port1Specified = true;
                break;
            }

            case PortRangeTypeType.RANGE:
            {
                if (port1 < 1 || port1 > 65535)
                {
                    throw new ArgumentOutOfRangeException(
                              "port1",
                              port1,
                              string.Format(
                                  "Port1 must be between 1-65535 when the port range type is {0}",
                                  portRangeType));
                }
                if (port2 < 1 || port2 > 65535)
                {
                    throw new ArgumentOutOfRangeException(
                              "port2",
                              port2,
                              string.Format(
                                  "Port2 must be between 1-65535 when the port range type is {0}",
                                  portRangeType));
                }
                portRange.port1          = port1;
                portRange.port2          = port2;
                portRange.port1Specified = portRange.port2Specified = true;
                break;
            }
            }

            // create the acl rule object
            var rule = new AclRuleType
            {
                name      = aclRuleName,
                action    = action,
                position  = position,
                protocol  = protocol.ToString(),
                portRange = portRange,
                type      = aclType
            };

            if (sourceIpAddress != null)
            {
                rule.sourceIpRange = new IpRangeType {
                    ipAddress = sourceIpAddress.ToString()
                };
                if (sourceNetmask != null)
                {
                    rule.sourceIpRange.netmask = sourceNetmask.ToString();
                }
            }

            if (destIpAddress != null)
            {
                rule.destinationIpRange = new IpRangeType {
                    ipAddress = destIpAddress.ToString()
                };
                if (destNetmask != null)
                {
                    rule.destinationIpRange.netmask = destNetmask.ToString();
                }
            }

            return
                (await
                 _apiClient.PostAsync <AclRuleType, AclRuleType>(
                     ApiUris.CreateAclRule(_apiClient.OrganizationId, networkId),
                     rule));
        }
Пример #3
0
        /// <summary>
        /// The create acl rule.
        /// </summary>
        /// <param name="networkId">
        /// The network id.
        /// </param>
        /// <param name="aclRuleName">
        /// The acl rule name.
        /// </param>
        /// <param name="position">
        /// The position.
        /// </param>
        /// <param name="action">
        /// The action.
        /// </param>
        /// <param name="protocol">
        /// The protocol.
        /// </param>
        /// <param name="portRangeType">
        /// The port range type.
        /// </param>
        /// <param name="sourceIpAddress">
        /// The source ip address.
        /// </param>
        /// <param name="sourceNetmask">
        /// The source netmask.
        /// </param>
        /// <param name="destIpAddress">
        /// The dest ip address.
        /// </param>
        /// <param name="destNetmask">
        /// The dest netmask.
        /// </param>
        /// <param name="port1">
        /// The port 1.
        /// </param>
        /// <param name="port2">
        /// The port 2.
        /// </param>
        /// <param name="aclType">
        /// The acl type.
        /// </param>
        /// <returns>
        /// The <see cref="Task"/>.
        /// </returns>
        /// <exception cref="ArgumentOutOfRangeException">
        /// </exception>
        public async Task <AclRuleType> CreateAclRule(
            string networkId,
            string aclRuleName,
            int position,
            AclActionType action,
            AclProtocolType protocol,
            PortRangeTypeType portRangeType,
            IPAddress sourceIpAddress = null,
            IPAddress sourceNetmask   = null,
            IPAddress destIpAddress   = null,
            IPAddress destNetmask     = null,
            int port1       = 0,
            int port2       = 0,
            AclType aclType = AclType.OUTSIDE_ACL)
        {
            Contract.Requires(!string.IsNullOrEmpty(aclRuleName), "The ACL rule name must NOT be empty or null!");
            Contract.Requires(aclRuleName.Length < 60, "ACL rule name cannot exceed 60 chars");
            Contract.Requires(position >= 100 && position <= 500, "Position must be between 100 and 500 inclusive");
            Contract.Requires(aclType == AclType.INSIDE_ACL || aclType == AclType.OUTSIDE_ACL,
                              "ACL Type must be one of (OUTSIDE_ACL, INSIDE_ACL)");

            var portRange = new PortRangeType {
                type = portRangeType
            };

            // Validate that the ports are specified when needed
            switch (portRangeType)
            {
            case PortRangeTypeType.EQUAL_TO:
            case PortRangeTypeType.GREATER_THAN:
            case PortRangeTypeType.LESS_THAN:
            {
                if (port1 < 1 || port1 > 65535)
                {
                    throw new ArgumentOutOfRangeException(
                              "port1",
                              port1,
                              string.Format(
                                  "Port1 must be between 1-65535 when the port range type is {0}",
                                  portRangeType));
                }
                portRange.port1          = port1;
                portRange.port1Specified = true;
                break;
            }

            case PortRangeTypeType.RANGE:
            {
                if (port1 < 1 || port1 > 65535)
                {
                    throw new ArgumentOutOfRangeException(
                              "port1",
                              port1,
                              string.Format(
                                  "Port1 must be between 1-65535 when the port range type is {0}",
                                  portRangeType));
                }
                if (port2 < 1 || port2 > 65535)
                {
                    throw new ArgumentOutOfRangeException(
                              "port2",
                              port2,
                              string.Format(
                                  "Port2 must be between 1-65535 when the port range type is {0}",
                                  portRangeType));
                }
                portRange.port1          = port1;
                portRange.port2          = port2;
                portRange.port1Specified = portRange.port2Specified = true;
                break;
            }
            }

            // create the acl rule object
            var rule = new AclRuleType
            {
                name      = aclRuleName,
                action    = action,
                position  = position,
                protocol  = protocol.ToString(),
                portRange = portRange,
                type      = aclType
            };

            if (sourceIpAddress != null)
            {
                rule.sourceIpRange = new IpRangeType {
                    ipAddress = sourceIpAddress.ToString()
                };
                if (sourceNetmask != null)
                {
                    rule.sourceIpRange.netmask = sourceNetmask.ToString();
                }
            }

            if (destIpAddress != null)
            {
                rule.destinationIpRange = new IpRangeType {
                    ipAddress = destIpAddress.ToString()
                };
                if (destNetmask != null)
                {
                    rule.destinationIpRange.netmask = destNetmask.ToString();
                }
            }

            return
                (await
                 _apiClient.PostAsync <AclRuleType, AclRuleType>(
                     ApiUris.CreateAclRule(_apiClient.OrganizationId, networkId),
                     rule));
        }
		/// <summary>
		/// Creates a new ACL rule at a specified line using your organization ID and the ID of the target network.
		///     It is possible to create both inbound (OUTSIDE_ACL) and outbound (INSIDE_ACL) rule types.
		/// </summary>
		/// <param name="client">
		/// The <see cref="ComputeApiClient"/> object.
		/// </param>
		/// <param name="networkId">
		/// The target network id.
		/// </param>
		/// <param name="aclRuleName">
		/// The name of the ACL rule.
		/// </param>
		/// <param name="position">
		/// The position of the rule between 100-500 inclusive.
		/// </param>
		/// <param name="action">
		/// The action (Permit/deny) of the ACL rule.
		/// </param>
		/// <param name="protocol">
		/// The protocol to use (IP, ICMP, TCP, UDP).
		/// </param>
		/// <param name="portRangeType">
		/// The port range type (ALL, EQUAL_TO, RANGE, GREATER_THAN, LESS_THAN).
		/// </param>
		/// <param name="sourceIpAddress">
		/// Optional. If no source IP Address is supplied, the assumption is that any source IP address is allowed.
		///     If a source IP address is supplied without the <paramref name="sourceNetmask"/>, source IP Address represent a
		///     single host.
		/// </param>
		/// <param name="sourceNetmask">
		/// Optional. When specified, the <paramref name="sourceIpAddress"/> must be the CIDR boundary for the network.
		/// </param>
		/// <param name="destIpAddress">
		/// Optional. If no destination IP Address is supplied, the assumption is that any destination IP address is allowed.
		///     If a destination IP address is supplied without the <paramref name="destNetmask"/>, source IP Address represent a
		///     single host.
		/// </param>
		/// <param name="destNetmask">
		/// Optional. When specified, the <paramref name="destIpAddress"/> must be the CIDR boundary for the network.
		/// </param>
		/// <param name="port1">
		/// Optional depending on <paramref name="portRangeType"/>. Value within a range of 1-65535.
		/// </param>
		/// <param name="port2">
		/// Optional depending on <paramref name="portRangeType"/>. Value within a range of 1-65535.
		/// </param>
		/// <param name="aclType">
		/// Optional. One of (OUTSIDE_ACL, INSIDE_ACL). Default if not specified is OUTSIDE_ACL.
		/// </param>
		/// <returns>
		/// The ACL rules.
		/// </returns>
		public static async Task<AclRuleType> CreateAclRule(
			this IComputeApiClient client, 
			string networkId, 
			string aclRuleName, 
			int position, 
			AclActionType action, 
			AclProtocolType protocol, 
			PortRangeTypeType portRangeType, 
			IPAddress sourceIpAddress = null, 
			IPAddress sourceNetmask = null, 
			IPAddress destIpAddress = null, 
			IPAddress destNetmask = null, 
			int port1 = 0, 
			int port2 = 0, 
			AclType aclType = AclType.OUTSIDE_ACL)
		{
			Contract.Requires(!string.IsNullOrEmpty(aclRuleName), "The ACL rule name must NOT be empty or null!");
			Contract.Requires(aclRuleName.Length < 60, "ACL rule name cannot exceed 60 chars");
			Contract.Requires(position >= 100 && position <= 500, "Position must be between 100 and 500 inclusive");
			Contract.Requires(aclType == AclType.INSIDE_ACL || aclType == AclType.OUTSIDE_ACL, 
				"ACL Type must be one of (OUTSIDE_ACL, INSIDE_ACL)");

			var portRange = new PortRangeType {type = portRangeType};

// Validate that the ports are specified when needed
			switch (portRangeType)
			{
				case PortRangeTypeType.EQUAL_TO:
				case PortRangeTypeType.GREATER_THAN:
				case PortRangeTypeType.LESS_THAN:
				{
					if (port1 < 1 || port1 > 65535)
						throw new ArgumentOutOfRangeException(
							"port1", 
							port1, 
							string.Format(
								"Port1 must be between 1-65535 when the port range type is {0}", 
								portRangeType));
					portRange.port1 = port1;
					portRange.port1Specified = true;
					break;
				}

				case PortRangeTypeType.RANGE:
				{
					if (port1 < 1 || port1 > 65535)
						throw new ArgumentOutOfRangeException(
							"port1", 
							port1, 
							string.Format(
								"Port1 must be between 1-65535 when the port range type is {0}", 
								portRangeType));
					if (port2 < 1 || port2 > 65535)
						throw new ArgumentOutOfRangeException(
							"port2", 
							port2, 
							string.Format(
								"Port2 must be between 1-65535 when the port range type is {0}", 
								portRangeType));
					portRange.port1 = port1;
					portRange.port2 = port2;
					portRange.port1Specified = portRange.port2Specified = true;
					break;
				}
			}

			// create the acl rule object
			var rule = new AclRuleType
			{
				name = aclRuleName, 
				action = action, 
				position = position, 
				protocol = protocol.ToString(), 
				portRange = portRange, 
				type = aclType
			};
			if (sourceIpAddress != null)
			{
				rule.sourceIpRange = new IpRangeType {ipAddress = sourceIpAddress.ToString()};
				if (sourceNetmask != null) rule.sourceIpRange.netmask = sourceNetmask.ToString();
			}

			if (destIpAddress != null)
			{
				rule.destinationIpRange = new IpRangeType {ipAddress = destIpAddress.ToString()};
				if (destNetmask != null) rule.destinationIpRange.netmask = destNetmask.ToString();
			}

			return
				await
					client.WebApi.ApiPostAsync<AclRuleType, AclRuleType>(
						ApiUris.CreateAclRule(client.Account.OrganizationId, networkId), 
						rule);
		}
        /// <summary>
        /// Creates a new ACL rule at a specified line using your organization ID and the ID of the target network.
        /// It is possible to create both inbound (OUTSIDE_ACL) and outbound (INSIDE_ACL) rule types.
        /// </summary>
        /// <param name="client">The <see cref="ComputeApiClient"/> object.</param>
        /// <param name="networkId">The target network id.</param>
        /// <param name="aclRuleName">The name of the ACL rule.</param>
        /// <param name="position">The position of the rule between 100-500 inclusive.</param>
        /// <param name="action">The action (Permit/deny) of the ACL rule.</param>
        /// <param name="protocol">The protocol to use (IP, ICMP, TCP, UDP).</param>
        /// <param name="portRangeType">The port range type (ALL, EQUAL_TO, RANGE, GREATER_THAN, LESS_THAN).</param>
        /// <param name="sourceIpAddress">
        /// Optional. If no source IP Address is supplied, the assumption is that any source IP address is allowed.
        /// If a source IP address is supplied without the <paramref name="sourceNetmask"/>, source IP Address represent a single host.
        /// </param>
        /// <param name="sourceNetmask">
        /// Optional. When specified, the <paramref name="sourceIpAddress"/> must be the CIDR boundary for the network.
        /// </param>
        /// <param name="destIpAddress">
        /// Optional. If no destination IP Address is supplied, the assumption is that any destination IP address is allowed.
        /// If a destination IP address is supplied without the <paramref name="destNetmask"/>, source IP Address represent a single host.
        /// </param>
        /// <param name="destNetmask">
        /// Optional. When specified, the <paramref name="destIpAddress"/> must be the CIDR boundary for the network.
        /// </param>
        /// <param name="port1">Optional depending on <paramref name="portRangeType"/>. Value within a range of 1-65535.</param>
        /// <param name="port2">Optional depending on <paramref name="portRangeType"/>. Value within a range of 1-65535.</param>
        /// <param name="aclType">Optional. One of (OUTSIDE_ACL, INSIDE_ACL). Default if not specified is OUTSIDE_ACL.</param>
        /// <returns>The ACL rules.</returns>
        public static async Task <AclRuleType> CreateAclRuleAsync(
            this IComputeApiClient client,
            string networkId,
            string aclRuleName,
            int position,
            AclActionType action,
            AclProtocolType protocol,
            PortRangeTypeType portRangeType,
            IPAddress sourceIpAddress = null,
            IPAddress sourceNetmask   = null,
            IPAddress destIpAddress   = null,
            IPAddress destNetmask     = null,
            int port1       = 0,
            int port2       = 0,
            AclType aclType = AclType.OUTSIDE_ACL)
        {
            if (string.IsNullOrWhiteSpace(networkId))
            {
                throw new ArgumentException("argument cannot be null, empty or composed of whitespaces only!", "networkId");
            }
            if (string.IsNullOrWhiteSpace(aclRuleName))
            {
                throw new ArgumentException("argument cannot be null, empty or composed of whitespaces only!", "aclRuleName");
            }
            if (aclRuleName.Length >= 60)
            {
                throw new ArgumentException("ACL rule name cannot exceed 60 chars", "aclRuleName");
            }
            if (position < 100 || position > 500)
            {
                throw new ArgumentException("Position must be between 100 and 500 inclusive", "position");
            }
            if (aclType != AclType.INSIDE_ACL && aclType != AclType.OUTSIDE_ACL)
            {
                throw new ArgumentException("ACL Type must be one of (OUTSIDE_ACL, INSIDE_ACL)", "aclType");
            }

            var portRange = new PortRangeType {
                type = portRangeType
            };

            // Validate that the ports are specified when needed
            switch (portRangeType)
            {
            case PortRangeTypeType.EQUAL_TO:
            case PortRangeTypeType.GREATER_THAN:
            case PortRangeTypeType.LESS_THAN:
            {
                if (port1 < 1 || port1 > 65535)
                {
                    throw new ArgumentOutOfRangeException(
                              "port1",
                              port1,
                              string.Format(
                                  "Port1 must be between 1-65535 when the port range type is {0}",
                                  portRangeType));
                }
                portRange.port1          = port1;
                portRange.port1Specified = true;
                break;
            }

            case PortRangeTypeType.RANGE:
            {
                if (port1 < 1 || port1 > 65535)
                {
                    throw new ArgumentOutOfRangeException(
                              "port1",
                              port1,
                              string.Format(
                                  "Port1 must be between 1-65535 when the port range type is {0}",
                                  portRangeType));
                }
                if (port2 < 1 || port2 > 65535)
                {
                    throw new ArgumentOutOfRangeException(
                              "port2",
                              port2,
                              string.Format(
                                  "Port2 must be between 1-65535 when the port range type is {0}",
                                  portRangeType));
                }
                portRange.port1          = port1;
                portRange.port2          = port2;
                portRange.port1Specified = portRange.port2Specified = true;
                break;
            }
            }

            // create the acl rule object
            var rule = new AclRuleType
            {
                name      = aclRuleName,
                action    = action,
                position  = position,
                protocol  = protocol.ToString(),
                portRange = portRange,
                type      = aclType
            };

            if (sourceIpAddress != null)
            {
                rule.sourceIpRange = new IpRangeType {
                    ipAddress = sourceIpAddress.ToString()
                };
                if (sourceNetmask != null)
                {
                    rule.sourceIpRange.netmask = sourceNetmask.ToString();
                }
            }
            if (destIpAddress != null)
            {
                rule.destinationIpRange = new IpRangeType {
                    ipAddress = destIpAddress.ToString()
                };
                if (destNetmask != null)
                {
                    rule.destinationIpRange.netmask = destNetmask.ToString();
                }
            }

            return
                (await
                 client.WebApi.ApiPostAsync <AclRuleType, AclRuleType>(
                     ApiUris.CreateAclRule(client.Account.OrganizationId, networkId),
                     rule));
        }