Private/Get-ADFSTkFederations.ps1
function Get-ADFSTkFederations { [CmdletBinding(SupportsShouldProcess=$true)] param ( [switch]$Force ) #https://technical.edugain.org/api.php?action=list_feds #Get All paths if ([string]::IsNullOrEmpty($Global:ADFSTkPaths)) { $Global:ADFSTkPaths = Get-ADFSTKPaths } $federationsFile = $Global:ADFSTkPaths.federationsFile $defaultFederationsFile = Join-Path $Global:ADFSTkPaths.moduleConfigDefaultDir federations.xml if ($PSBoundParameters.ContainsKey("Force")) { $executionList = @('URL', 'Cache', 'Default') } else { $executionList = @('Cache', 'URL', 'Default') } $retry = $true $i = 0 do { $fedXML = Get-ADFSTkFederationsFromSelection -Selection $executionList[$i] $retry = ($fedXML -eq $null) $i++ } while ($retry -eq $true -and $i -lt $executionList.Count) $fedXML } function Get-ADFSTkFederationsFromSelection { [CmdletBinding(SupportsShouldProcess=$true)] param ( [ValidateSet('URL', 'Cache', 'Default')] $Selection ) switch ($Selection) { 'URL' { #$url = 'https://technical.edugain.org/status' $url = 'https://technical.edugain.org/api.php?action=list_feds_full' Write-ADFSTkHost federationDownloadCanTakeTimeWarning -Style Info Write-ADFSTkVerboseLog (Get-ADFSTkLanguageText federationGetFederationFromURL -f $url) try { $web = Invoke-WebRequest -Uri $url #$federations = $web.AllElements | ? { $_.Class -eq 'member-div' } $federations = ConvertFrom-Json $web.Content [xml]$fedXML = New-Object System.Xml.XmlDocument $fedXML.AppendChild($fedXML.CreateXmlDeclaration("1.0",$null,$null)) | Out-Null $federationsNode = $fedXML.CreateNode("element","Federations",$null) foreach ($federation in $federations.PsObject.Properties) { $federationMainNode = $fedXML.CreateNode("element","Federation",$null) $federationNode = $fedXML.CreateNode("element","Name",$null) #$federationNode.InnerText = $federation.innerText.TrimStart().TrimEnd() $countries = $federation.Value.countries -join ',' if ([string]::IsNullOrEmpty($countries)) { $countries = $federation.Value.fed_id } $federationNode.InnerText = "{0} ({1})" -f $federation.Value.Name, $countries $federationMainNode.AppendChild($federationNode) | Out-Null $federationNode = $fedXML.CreateNode("element","Id",$null) #$federationNode.InnerText = $federation.data_value $federationNode.InnerText = $federation.Value.code $federationMainNode.AppendChild($federationNode) | Out-Null $federationsNode.AppendChild($federationMainNode) | Out-Null } $fedXML.AppendChild($federationsNode) | Out-Null $fedXML.Save($federationsFile) Write-ADFSTkVerboseLog (Get-ADFSTkLanguageText cDone) return $fedXML } catch { Write-ADFSTkVerboseLog (Get-ADFSTkLanguageText federationCouldNotGetFederationsFromURL -f $_) return $null } } 'Cache' { if (Test-Path $federationsFile) { try { Write-ADFSTkVerboseLog (Get-ADFSTkLanguageText federationGettingListFromCachedFile) [XML]$fedXML = Get-Content $federationsFile return $fedXML } catch { Write-ADFSTkVerboseLog (Get-ADFSTkLanguageText federationCouldNotGetFederationsFromCache -f $_) return $null } } else { Write-ADFSTkVerboseLog (Get-ADFSTkLanguageText federationCouldNotFindCachedFederationsFile) return $null } } 'Default' { try { Write-ADFSTkVerboseLog (Get-ADFSTkLanguageText federationGettingListFromDefaultFile) [XML]$fedXML = Get-Content $defaultFederationsFile return $fedXML } catch { Write-ADFSTkLog (Get-ADFSTkLanguageText federationCouldNotGetFederationsFromDefaultFile) -MajorFault return $null } } } } |