Functions/GenXdev.Console.Spotify/Get-SpotifyApiToken.ps1
################################################################################ <# .SYNOPSIS Retrieves or generates a valid Spotify API authentication token. .DESCRIPTION This function manages Spotify API authentication by either retrieving a cached token or obtaining a new one. It also ensures proper firewall access and validates the token's functionality. .EXAMPLE $token = Get-SpotifyApiToken #> function Get-SpotifyApiToken { [CmdletBinding()] param() begin { # define firewall rule settings $ruleName = "Allow Current PowerShell" $programPath = Join-Path -Path $PSHOME -ChildPath "pwsh.exe" $remoteAddress = "192.168.1.1" Write-Verbose "Checking firewall rule: $ruleName" } process { # verify if firewall rule exists $existingRule = Get-NetFirewallRule ` -DisplayName $ruleName ` -ErrorAction SilentlyContinue # create firewall rule if it doesn't exist if ($null -eq $existingRule) { Write-Verbose "Creating new firewall rule" New-NetFirewallRule ` -DisplayName $ruleName ` -Direction Inbound ` -Program $programPath ` -Action Allow ` -RemoteAddress $remoteAddress Write-Host "Firewall rule '$ruleName' created." } # path to cached authentication token $path = "$PSScriptRoot\..\..\..\..\GenXdev.Local\Spotify_Auth.json" # attempt to load existing token if ([IO.File]::Exists($path)) { Write-Verbose "Loading existing token from $path" $apiToken = [IO.File]::ReadAllText($path) } else { Write-Verbose "No existing token found, connecting to Spotify" $apiToken = Connect-SpotifyApiToken $null = Set-SpotifyApiToken $apiToken } # validate token by attempting to list devices try { Write-Verbose "Validating token by retrieving devices" $null = [GenXdev.Helpers.Spotify]::GetDevices($apiToken) } catch { Write-Verbose "Token validation failed, obtaining new token" $apiToken = Connect-SpotifyApiToken $null = Set-SpotifyApiToken $apiToken } # return the valid token $apiToken } end { } } ################################################################################ |