Skip to content

Commit cc66f5d

Browse files
committed
Remove range for Priority, handle empty name and remove by subnet/ip
1 parent 9ac4de7 commit cc66f5d

File tree

4 files changed

+167
-66
lines changed

4 files changed

+167
-66
lines changed

src/Websites/Websites/Cmdlets/AccessRestriction/AddAzureWebAppAccessRestrictionRule.cs

Lines changed: 15 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
using Microsoft.Azure.Management.Internal.Network.Version2017_10_01;
2525
using Microsoft.Azure.Commands.Common.Authentication.Abstractions;
2626
using Microsoft.Azure.Management.Monitor.Version2018_09_01.Models;
27+
using System.ComponentModel;
2728

2829
namespace Microsoft.Azure.Commands.WebApps.Cmdlets.WebApps
2930
{
@@ -53,9 +54,9 @@ public class AddAzureWebAppAccessRestrictionRuleCmdlet : WebAppBaseClientCmdLet
5354
[ValidateNotNullOrEmpty]
5455
public string WebAppName { get; set; }
5556

56-
[Parameter(ParameterSetName = IpAddressParameterSet, Mandatory = true, HelpMessage = "Access Restriction rule name. E.g.: DeveloperWorkstation.")]
57-
[Parameter(ParameterSetName = SubnetNameParameterSet, Mandatory = true, HelpMessage = "Access Restriction rule name. E.g.: DeveloperWorkstation.")]
58-
[Parameter(ParameterSetName = SubnetIdParameterSet, Mandatory = true, HelpMessage = "Access Restriction rule name. E.g.: DeveloperWorkstation.")]
57+
[Parameter(ParameterSetName = IpAddressParameterSet, Mandatory = false, HelpMessage = "Access Restriction rule name. E.g.: DeveloperWorkstation.")]
58+
[Parameter(ParameterSetName = SubnetNameParameterSet, Mandatory = false, HelpMessage = "Access Restriction rule name. E.g.: DeveloperWorkstation.")]
59+
[Parameter(ParameterSetName = SubnetIdParameterSet, Mandatory = false, HelpMessage = "Access Restriction rule name. E.g.: DeveloperWorkstation.")]
5960
[ValidateNotNullOrEmpty]
6061
public string Name { get; set; }
6162

@@ -68,14 +69,14 @@ public class AddAzureWebAppAccessRestrictionRuleCmdlet : WebAppBaseClientCmdLet
6869
[Parameter(ParameterSetName = SubnetNameParameterSet, Mandatory = true, HelpMessage = "Access Restriction priority. E.g.: 500.")]
6970
[Parameter(ParameterSetName = SubnetIdParameterSet, Mandatory = true, HelpMessage = "Access Restriction priority. E.g.: 500.")]
7071
[ValidateNotNullOrEmpty]
71-
[ValidateRange(100, 65000)]
7272
public uint Priority { get; set; }
7373

74-
[Parameter(ParameterSetName = IpAddressParameterSet, Mandatory = true, HelpMessage = "Allow or Deny rule.")]
75-
[Parameter(ParameterSetName = SubnetNameParameterSet, Mandatory = true, HelpMessage = "Allow or Deny rule.")]
76-
[Parameter(ParameterSetName = SubnetIdParameterSet, Mandatory = true, HelpMessage = "Allow or Deny rule.")]
74+
[Parameter(ParameterSetName = IpAddressParameterSet, Mandatory = false, HelpMessage = "Allow or Deny rule.")]
75+
[Parameter(ParameterSetName = SubnetNameParameterSet, Mandatory = false, HelpMessage = "Allow or Deny rule.")]
76+
[Parameter(ParameterSetName = SubnetIdParameterSet, Mandatory = false, HelpMessage = "Allow or Deny rule.")]
7777
[ValidateNotNullOrEmpty]
7878
[ValidateSet("Allow", "Deny")]
79+
[DefaultValue("Allow")]
7980
public string Action { get; set; }
8081

8182
[Parameter(ParameterSetName = IpAddressParameterSet, Mandatory = false, HelpMessage = "Deployment Slot name.")]
@@ -121,29 +122,12 @@ public override void ExecuteCmdlet()
121122
SiteConfig siteConfig = webApp.SiteConfig;
122123
var accessRestrictionList = TargetScmSite ? siteConfig.ScmIpSecurityRestrictions : siteConfig.IpSecurityRestrictions;
123124
IpSecurityRestriction ipSecurityRestriction = null;
124-
bool accessRestrictionExists = false;
125125
int intPriority = checked((int)Priority);
126126
switch (ParameterSetName)
127127
{
128-
case IpAddressParameterSet:
129-
foreach (var accessRestriction in accessRestrictionList)
130-
{
131-
if (accessRestriction.IpAddress != null &&
132-
accessRestriction.IpAddress == IpAddress &&
133-
accessRestriction.Action.ToLowerInvariant() == Action.ToLowerInvariant())
134-
{
135-
accessRestrictionExists = true;
136-
accessRestriction.Name = Name;
137-
accessRestriction.Priority = intPriority;
138-
accessRestriction.Description = Description;
139-
break;
140-
}
141-
}
142-
if (!accessRestrictionExists)
143-
{
144-
ipSecurityRestriction = new IpSecurityRestriction(IpAddress, null, null, null, null, Action, null, intPriority, Name, Description);
145-
accessRestrictionList.Add(ipSecurityRestriction);
146-
}
128+
case IpAddressParameterSet:
129+
ipSecurityRestriction = new IpSecurityRestriction(IpAddress, null, null, null, null, Action, null, intPriority, Name, Description);
130+
accessRestrictionList.Add(ipSecurityRestriction);
147131
break;
148132

149133
case SubnetNameParameterSet:
@@ -158,29 +142,13 @@ public override void ExecuteCmdlet()
158142
{
159143
CmdletHelpers.VerifySubnetDelegation(subnetResourceId);
160144
}
161-
foreach (var accessRestriction in accessRestrictionList)
162-
{
163-
if (accessRestriction.VnetSubnetResourceId != null &&
164-
accessRestriction.VnetSubnetResourceId.ToLowerInvariant() == subnetResourceId.ToLowerInvariant() &&
165-
accessRestriction.Action.ToLowerInvariant() == Action.ToLowerInvariant())
166-
{
167-
accessRestrictionExists = true;
168-
accessRestriction.Name = Name;
169-
accessRestriction.Priority = intPriority;
170-
accessRestriction.Description = Description;
171-
break;
172-
}
173-
}
174-
if (!accessRestrictionExists)
175-
{
176-
ipSecurityRestriction = new IpSecurityRestriction(null, null, subnetResourceId, null, null, Action, null, intPriority, Name, Description);
177-
accessRestrictionList.Add(ipSecurityRestriction);
178-
}
145+
146+
ipSecurityRestriction = new IpSecurityRestriction(null, null, subnetResourceId, null, null, Action, null, intPriority, Name, Description);
147+
accessRestrictionList.Add(ipSecurityRestriction);
179148
break;
180149
}
181150

182-
string updateAction = accessRestrictionExists ? "Updating" : "Adding";
183-
if (ShouldProcess(WebAppName, $"{updateAction} Access Restriction Rule '{Name}' for Web App '{WebAppName}'"))
151+
if (ShouldProcess(WebAppName, $"Adding Access Restriction Rule for Web App '{WebAppName}'"))
184152
{
185153
// Update web app configuration
186154
WebsitesClient.UpdateWebAppConfiguration(ResourceGroupName, webApp.Location, WebAppName, SlotName, siteConfig);

src/Websites/Websites/Cmdlets/AccessRestriction/RemoveAzureWebAppAccessRestrictionRule.cs

Lines changed: 62 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818
using Microsoft.Azure.Commands.ResourceManager.Common.ArgumentCompleters;
1919
using Microsoft.Azure.Management.WebSites.Models;
2020
using Microsoft.Azure.Management.Internal.Network.Version2017_10_01.Models;
21+
using Microsoft.Azure.Commands.WebApps.Utilities;
22+
using System.ComponentModel;
2123

2224
namespace Microsoft.Azure.Commands.WebApps.Cmdlets.WebApps
2325
{
@@ -38,25 +40,47 @@ public class RemoveAzureWebAppAccessRestrictionRuleCmdlet : WebAppBaseClientCmdL
3840
[ValidateNotNullOrEmpty]
3941
public string WebAppName { get; set; }
4042

41-
[Parameter(Mandatory = true, HelpMessage = "Access Restriction rule name. E.g.: DeveloperWorkstation.")]
43+
[Parameter(Mandatory = false, HelpMessage = "Access Restriction rule name. E.g.: DeveloperWorkstation.")]
4244
[ValidateNotNullOrEmpty]
4345
public string Name { get; set; }
4446

47+
[Parameter(Mandatory = false, HelpMessage = "Allow or Deny rule.")]
48+
[ValidateNotNullOrEmpty]
49+
[ValidateSet("Allow", "Deny")]
50+
[DefaultValue("Allow")]
51+
public string Action { get; set; }
52+
4553
[Parameter(Mandatory = false, HelpMessage = "Rule is aimed for Main site or Scm site.")]
4654
[ValidateNotNullOrEmpty]
4755
public SwitchParameter TargetScmSite { get; set; }
4856

4957
[Parameter(Mandatory = false, HelpMessage = "Deployment Slot name.")]
5058
public string SlotName { get; set; }
5159

60+
[Parameter(Mandatory = false, HelpMessage = "Ip Address v4 or v6 CIDR range. E.g.: 192.168.0.0/24")]
61+
[ValidateNotNullOrEmpty]
62+
public string IpAddress { get; set; }
63+
64+
[Parameter(Mandatory = false, HelpMessage = "Name of Subnet.")]
65+
[ValidateNotNullOrEmpty]
66+
public string SubnetName { get; set; }
67+
68+
[Parameter(Mandatory = false, HelpMessage = "Name of Virtual Network (must be in same resource group as Web App).")]
69+
[ValidateNotNullOrEmpty]
70+
public string VirtualNetworkName { get; set; }
71+
72+
[Parameter(Mandatory = false, HelpMessage = "ResourceId of Subnet.")]
73+
[ValidateNotNullOrEmpty]
74+
public string SubnetId { get; set; }
75+
5276
[Parameter(Mandatory = false, HelpMessage = "Return the access restriction config object.")]
5377
public SwitchParameter PassThru { get; set; }
5478

5579
public override void ExecuteCmdlet()
5680
{
5781
if (!string.IsNullOrWhiteSpace(ResourceGroupName) && !string.IsNullOrWhiteSpace(WebAppName))
5882
{
59-
if (ShouldProcess(WebAppName, $"Removing Access Restriction Rule '{Name}' from Web App '{WebAppName}'"))
83+
if (ShouldProcess(WebAppName, $"Removing Access Restriction Rule from Web App '{WebAppName}'"))
6084
{
6185
var webApp = new PSSite(WebsitesClient.GetWebApp(ResourceGroupName, WebAppName, SlotName));
6286
SiteConfig siteConfig = webApp.SiteConfig;
@@ -66,12 +90,44 @@ public override void ExecuteCmdlet()
6690

6791
foreach (var accessRestriction in accessRestrictionList)
6892
{
69-
if (accessRestriction.Name.ToLowerInvariant() == Name.ToLowerInvariant())
93+
if (!string.IsNullOrWhiteSpace(Name))
94+
{
95+
if (!string.IsNullOrWhiteSpace(accessRestriction.Name) && accessRestriction.Name.ToLowerInvariant() == Name.ToLowerInvariant() && accessRestriction.Action.ToLowerInvariant() == Action.ToLowerInvariant())
96+
{
97+
ipSecurityRestriction = accessRestriction;
98+
accessRestrictionExists = true;
99+
break;
100+
}
101+
}
102+
else if (!string.IsNullOrWhiteSpace(IpAddress))
70103
{
71-
ipSecurityRestriction = accessRestriction;
72-
accessRestrictionExists = true;
73-
break;
104+
if (!string.IsNullOrWhiteSpace(accessRestriction.IpAddress) && accessRestriction.IpAddress.ToLowerInvariant() == IpAddress.ToLowerInvariant() && accessRestriction.Action.ToLowerInvariant() == Action.ToLowerInvariant())
105+
{
106+
if (!string.IsNullOrWhiteSpace(Name))
107+
if (!string.IsNullOrWhiteSpace(accessRestriction.Name) && accessRestriction.Name.ToLowerInvariant() == Name.ToLowerInvariant() && accessRestriction.Action.ToLowerInvariant() == Action.ToLowerInvariant())
108+
continue;
109+
110+
ipSecurityRestriction = accessRestriction;
111+
accessRestrictionExists = true;
112+
break;
113+
}
74114
}
115+
else if (!string.IsNullOrWhiteSpace(SubnetId) || (!string.IsNullOrWhiteSpace(SubnetName) && !string.IsNullOrWhiteSpace(VirtualNetworkName)))
116+
{
117+
var subnet = !string.IsNullOrWhiteSpace(SubnetId) ? SubnetId : SubnetName;
118+
var subnetResourceId = CmdletHelpers.ValidateSubnet(subnet, VirtualNetworkName, ResourceGroupName, DefaultContext.Subscription.Id);
119+
if (!string.IsNullOrWhiteSpace(accessRestriction.VnetSubnetResourceId) && accessRestriction.VnetSubnetResourceId.ToLowerInvariant() == subnetResourceId.ToLowerInvariant() && accessRestriction.Action.ToLowerInvariant() == Action.ToLowerInvariant())
120+
{
121+
if (!string.IsNullOrWhiteSpace(Name))
122+
if (!string.IsNullOrWhiteSpace(accessRestriction.Name) && accessRestriction.Name.ToLowerInvariant() == Name.ToLowerInvariant() && accessRestriction.Action.ToLowerInvariant() == Action.ToLowerInvariant())
123+
continue;
124+
125+
ipSecurityRestriction = accessRestriction;
126+
accessRestrictionExists = true;
127+
break;
128+
}
129+
}
130+
75131
}
76132
if (accessRestrictionExists)
77133
{

src/Websites/Websites/help/Add-AzWebAppAccessRestrictionRule.md

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -13,24 +13,24 @@ Adds an Access Restiction rule to an Azure Web App.
1313

1414
### IpAddressParameterSet (Default)
1515
```
16-
Add-AzWebAppAccessRestrictionRule [-ResourceGroupName] <String> [-WebAppName] <String> -Name <String>
17-
[-Description <String>] -Priority <UInt32> -Action <String> [-SlotName <String>] [-TargetScmSite]
16+
Add-AzWebAppAccessRestrictionRule [-ResourceGroupName] <String> [-WebAppName] <String> [-Name <String>]
17+
[-Description <String>] -Priority <UInt32> [-Action <String>] [-SlotName <String>] [-TargetScmSite]
1818
-IpAddress <String> [-PassThru] [-DefaultProfile <IAzureContextContainer>] [-WhatIf] [-Confirm]
1919
[<CommonParameters>]
2020
```
2121

2222
### SubnetNameParameterSet
2323
```
24-
Add-AzWebAppAccessRestrictionRule [-ResourceGroupName] <String> [-WebAppName] <String> -Name <String>
25-
[-Description <String>] -Priority <UInt32> -Action <String> [-SlotName <String>] [-TargetScmSite]
24+
Add-AzWebAppAccessRestrictionRule [-ResourceGroupName] <String> [-WebAppName] <String> [-Name <String>]
25+
[-Description <String>] -Priority <UInt32> [-Action <String>] [-SlotName <String>] [-TargetScmSite]
2626
-SubnetName <String> -VirtualNetworkName <String> [-IgnoreMissingServiceEndpoint] [-PassThru]
2727
[-DefaultProfile <IAzureContextContainer>] [-WhatIf] [-Confirm] [<CommonParameters>]
2828
```
2929

3030
### SubnetIdParameterSet
3131
```
32-
Add-AzWebAppAccessRestrictionRule [-ResourceGroupName] <String> [-WebAppName] <String> -Name <String>
33-
[-Description <String>] -Priority <UInt32> -Action <String> [-SlotName <String>] [-TargetScmSite]
32+
Add-AzWebAppAccessRestrictionRule [-ResourceGroupName] <String> [-WebAppName] <String> [-Name <String>]
33+
[-Description <String>] -Priority <UInt32> [-Action <String>] [-SlotName <String>] [-TargetScmSite]
3434
-SubnetId <String> [-IgnoreMissingServiceEndpoint] [-PassThru] [-DefaultProfile <IAzureContextContainer>]
3535
[-WhatIf] [-Confirm] [<CommonParameters>]
3636
```
@@ -67,9 +67,9 @@ Parameter Sets: (All)
6767
Aliases:
6868
Accepted values: Allow, Deny
6969

70-
Required: True
70+
Required: False
7171
Position: Named
72-
Default value: None
72+
Default value: Allow
7373
Accept pipeline input: False
7474
Accept wildcard characters: False
7575
```
@@ -142,7 +142,7 @@ Type: System.String
142142
Parameter Sets: (All)
143143
Aliases:
144144

145-
Required: True
145+
Required: False
146146
Position: Named
147147
Default value: None
148148
Accept pipeline input: False

src/Websites/Websites/help/Remove-AzWebAppAccessRestrictionRule.md

Lines changed: 81 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,10 @@ Removes an Access Restriction rule from an Azure Web App.
1212
## SYNTAX
1313

1414
```
15-
Remove-AzWebAppAccessRestrictionRule [-ResourceGroupName] <String> [-WebAppName] <String> -Name <String>
16-
[-TargetScmSite] [-SlotName <String>] [-PassThru] [-DefaultProfile <IAzureContextContainer>] [-WhatIf]
17-
[-Confirm] [<CommonParameters>]
15+
Remove-AzWebAppAccessRestrictionRule [-ResourceGroupName] <String> [-WebAppName] <String> [-Name <String>]
16+
[-Action <String>] [-TargetScmSite] [-SlotName <String>] [-IpAddress <String>] [-SubnetName <String>]
17+
[-VirtualNetworkName <String>] [-SubnetId <String>] [-PassThru] [-DefaultProfile <IAzureContextContainer>]
18+
[-WhatIf] [-Confirm] [<CommonParameters>]
1819
```
1920

2021
## DESCRIPTION
@@ -31,6 +32,22 @@ This command removes the IpRule access restriction rule from Azure Web App named
3132

3233
## PARAMETERS
3334

35+
### -Action
36+
Allow or Deny rule.
37+
38+
```yaml
39+
Type: System.String
40+
Parameter Sets: (All)
41+
Aliases:
42+
Accepted values: Allow, Deny
43+
44+
Required: False
45+
Position: Named
46+
Default value: Allow
47+
Accept pipeline input: False
48+
Accept wildcard characters: False
49+
```
50+
3451
### -DefaultProfile
3552
The credentials, account, tenant, and subscription used for communication with azure.
3653
@@ -46,6 +63,21 @@ Accept pipeline input: False
4663
Accept wildcard characters: False
4764
```
4865
66+
### -IpAddress
67+
Ip Address v4 or v6 CIDR range. E.g.: 192.168.0.0/24
68+
69+
```yaml
70+
Type: System.String
71+
Parameter Sets: (All)
72+
Aliases:
73+
74+
Required: False
75+
Position: Named
76+
Default value: None
77+
Accept pipeline input: False
78+
Accept wildcard characters: False
79+
```
80+
4981
### -Name
5082
Access Restriction Rule Name
5183
@@ -54,7 +86,7 @@ Type: System.String
5486
Parameter Sets: (All)
5587
Aliases:
5688

57-
Required: True
89+
Required: False
5890
Position: Named
5991
Default value: None
6092
Accept pipeline input: False
@@ -106,6 +138,36 @@ Accept pipeline input: False
106138
Accept wildcard characters: False
107139
```
108140
141+
### -SubnetId
142+
ResourceId of Subnet.
143+
144+
```yaml
145+
Type: System.String
146+
Parameter Sets: (All)
147+
Aliases:
148+
149+
Required: False
150+
Position: Named
151+
Default value: None
152+
Accept pipeline input: False
153+
Accept wildcard characters: False
154+
```
155+
156+
### -SubnetName
157+
Name of Subnet.
158+
159+
```yaml
160+
Type: System.String
161+
Parameter Sets: (All)
162+
Aliases:
163+
164+
Required: False
165+
Position: Named
166+
Default value: None
167+
Accept pipeline input: False
168+
Accept wildcard characters: False
169+
```
170+
109171
### -TargetScmSite
110172
Rule is aimed for Main site or Scm site.
111173
@@ -121,6 +183,21 @@ Accept pipeline input: False
121183
Accept wildcard characters: False
122184
```
123185
186+
### -VirtualNetworkName
187+
Name of Virtual Network (must be in same resource group as Web App).
188+
189+
```yaml
190+
Type: System.String
191+
Parameter Sets: (All)
192+
Aliases:
193+
194+
Required: False
195+
Position: Named
196+
Default value: None
197+
Accept pipeline input: False
198+
Accept wildcard characters: False
199+
```
200+
124201
### -WebAppName
125202
The name of the web app.
126203

0 commit comments

Comments
 (0)