DSCResources/ROSSCommon/Src/Save-ROSSWebPortalConfiguration.ps1
function Save-ROSSWebPortalConfiguration { <# .SYNOPSIS Writes a RES ONE Identity Director Web Portal web configuration file. #> [CmdletBinding(SupportsShouldProcess, DefaultParameterSetName = 'WindowsAuthentication')] param ( ## Path to RES ONE Identity Director Management Portal web configuration file [Parameter(Mandatory, ValueFromPipeline)] [System.String] $Path, ## RES ONE Identity Director database server/instance name. [Parameter(Mandatory)] [System.String] $DatabaseServer, ## RES ONE Identity Director database name. [Parameter(Mandatory)] [System.String] $DatabaseName, ## RES ONE Identity Director database access credential. Leave blank to use Windows Authentication for database access. [Parameter()] [System.Management.Automation.PSCredential] $Credential, ## RES ONE Identity Broker server Uri. [Parameter(Mandatory, ParameterSetName = 'IdentityBroker')] [System.String] $IdentityBrokerUrl, ## RES ONE Identity Broker application Uri. [Parameter(Mandatory, ParameterSetName = 'IdentityBroker')] [System.String] $ApplicationUrl, ## RES ONE Identity Broker client Id. [Parameter(Mandatory, ParameterSetName = 'IdentityBroker')] [System.String] $ClientId, ## RES ONE Identity Broker client shared secret. [Parameter(Mandatory, ParameterSetName = 'IdentityBroker')] [System.Management.Automation.PSCredential] $ClientSecret ) $webPortalConfigTemplate = @' <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <webPortalConfiguration> <managementService port="0" protocol="http"> <#ManagementServicePlaceholder#> <logFile maxLogFileSizeKB="10240" enabled="false" severity="Debug" path="" /> </managementService> <#AuthenticationPlaceholder#> <security symmetricKey="sskTiNVsBWDHaEATMTISbLSAWS" /> </webPortalConfiguration> '@ $webPortalManagementServiceSqlAuthenticationTemplate = @' <database type="<#DatabaseType#>" server="<#DatabaseServer#>" name="<#DatabaseName#>" user="<#DatabaseUser#>" password="<#DatabasePassword#>" useWindowsAuthentication="false" /> '@ $webPortalManagementServiceWindowsAuthenticationTemplate = @' <database type="<#DatabaseType#>" server="<#DatabaseServer#>" name="<#DatabaseName#>" useWindowsAuthentication="true" /> '@ $webPortalSqlAuthenticationTemplate = @' <authentication type="IdentityBroker"> <identityBroker authority="<#ServerUrl#>" redirectUri="<#ApplicationUrl#>" clientId="<#ClientId#>" clientSecret="<#ClientSecret#>" /> </authentication> '@ $webPortalWindowsAuthenticationTemplate = @' <authentication type="Windows" /> '@ if ($null -ne $Credential) { $managementService = $webPortalManagementServiceSqlAuthenticationTemplate; $managementService = $managementService.Replace('<#DatabaseUser#>', $Credential.Username); $managementService = $managementService.Replace('<#DatabasePassword#>', $Credential.GetNetworkCredential().Password); } else { $managementService = $webPortalManagementServiceWindowsAuthenticationTemplate; } $managementService = $managementService.Replace('<#DatabaseType#>', 'MSSQL'); $managementService = $managementService.Replace('<#DatabaseServer#>', $DatabaseServer); $managementService = $managementService.Replace('<#DatabaseName#>', $DatabaseName); $webPortalConfig = $webPortalConfigTemplate.Replace('<#ManagementServicePlaceholder#>', $managementService); if ($PSCmdlet.ParameterSetName -eq 'IdentityBroker') { $identityServer = $webPortalSqlAuthenticationTemplate; $identityServer = $identityServer.Replace('<#ServerUrl#>', $IdentityBrokerUrl); $identityServer = $identityServer.Replace('<#ApplicationUrl#>', $ApplicationUrl); $identityServer = $identityServer.Replace('<#ClientId#>', $ClientId); $identityServer = $identityServer.Replace('<#ClientSecret#>', $ClientSecret.GetNetworkCredential().Password); $webPortalConfig = $webPortalConfig.Replace('<#AuthenticationPlaceholder#>', $identityServer); } else { $webPortalConfig = $webPortalConfig.Replace('<#AuthenticationPlaceholder#>', $webPortalWindowsAuthenticationTemplate); } Set-Content -Value $webPortalConfig -Path $Path -Encoding UTF8; } #end function |