tags:

views:

158

answers:

1

I need to set an IIS site's authentication. I see that you can do .GetLocationPaths() and return a string array of the locations. But I need to get into their child elements.

The elements are not nested within either the system.applicationHost or system.webServer elements and therefore cant be extracted using config.getSection.

Any ideas?

+1  A: 

I ended up placing what I needed in the web.config

Allow Anonymous Access
<authorization>
   <allow users="?" />
</authorization>

Disable Anonymous Access
<authorization>
   <deny users="?" />
</authorization>

I then just changed the allow or deny with my application.

Public Shared Function GetWebConfigFileName(ByVal sitePath As String) As String
    Return IO.Path.Combine(sitePath, "web.config")
End Function

Private Shared Function IIS7EnableActiveDir(ByVal sitepath As String, ByVal EnableAD As Boolean) As Boolean
    Using manager As New ServerManager

        For Each Site In manager.Sites

            If Not IsNothing(manager.Sites(Site.Name)) Then
                If Not IsNothing(manager.Sites(Site.Name).Applications.Item("/")) Then
                    For Each Application In manager.Sites(Site.Name).Applications
                        If Application.VirtualDirectories.Item(0).PhysicalPath.ToString.ToLower = sitepath.ToLower Then
                            If Not String.IsNullOrEmpty(sitepath) Then
                                Dim config As Xml.XmlDocument = New Xml.XmlDocument
                                config.Load(SettingsManager.GetWebConfigFileName(sitepath))
                                For Each node In config.SelectSingleNode("configuration/system.web/authorization")
                                    If TypeOf node Is Xml.XmlElement Then
                                        If EnableAD Then
                                            If node.Name = "allow" Then
                                                'Create new xml attribute
                                                Dim newElement As Xml.XmlElement = config.CreateElement("deny")
                                                Dim newElementAtt As Xml.XmlAttribute = config.CreateAttribute("users")
                                                newElementAtt.Value = "?"
                                                newElement.Attributes.Append(newElementAtt)
                                                config.SelectSingleNode("configuration/system.web/authorization").RemoveAll()
                                                config.SelectSingleNode("configuration/system.web/authorization").AppendChild(newElement)
                                                config.Save(SettingsManager.GetWebConfigFileName(sitepath))
                                                Return True
                                            End If
                                        Else
                                            If node.Name = "deny" Then
                                                'Create new xml attribute
                                                Dim newElement As Xml.XmlElement = config.CreateElement("allow")
                                                Dim newElementAtt As Xml.XmlAttribute = config.CreateAttribute("users")
                                                newElementAtt.Value = "?"
                                                newElement.Attributes.Append(newElementAtt)
                                                config.SelectSingleNode("configuration/system.web/authorization").RemoveAll()
                                                config.SelectSingleNode("configuration/system.web/authorization").AppendChild(newElement)
                                                config.Save(SettingsManager.GetWebConfigFileName(sitepath))
                                                Return True
                                            End If
                                        End If
                                    End If
                                Next
                            End If
                        End If
                    Next
                End If
            End If
        Next
    End Using
Ryan