Private/Get-SpotifyAuthCode.ps1
function Get-SpotifyAuthCode { param ( # The name of the spotify credentials we've saved [Parameter(Mandatory = $false)] [string] $Name ) if ($Name) { $Credential = Get-SpotifyCredential -Name $Name } else { $Credential = Get-SpotifyCredential } $ClientId = "client_id=" + $Credential.clientid $ResponseType = "response_type=code" $RedirectURI = "redirect_uri=http%3A%2F%2Flocalhost%2Fspotifyapi" $Scopes = @( "playlist-read-private", "playlist-modify-private", "playlist-modify-public", "playlist-read-collaborative", "user-modify-playback-state", "user-read-currently-playing", "user-read-playback-state", <#commenting out user-top-read as it makes the module fail, works without this on win10 pwsh 7 #> <#"user-top-read",#> "user-read-recently-played", "app-remote-control", "streaming", "user-read-email", "user-read-private", "user-follow-read", "user-follow-modify", "user-library-modify", "user-library-read" ) $UriScopes = "scope=" $Count = $Scopes.Count foreach ($Scope in $Scopes) { if ($Count -gt 1) { $UriScopes += "$Scope%20" } else { $UriScopes += "$Scope" } $Count-- } $BaseURI = "https://accounts.spotify.com/authorize?" $Guid = [guid]::NewGuid() Write-Verbose "Using GUID $Guid" $URI = $BaseURI + $ClientId + "&" + $ResponseType + "&" + $RedirectURI + "&" + $UriScopes + "&state=$Guid" Write-Verbose "Using URI $URI" if ($IsMacOS) { # opens the constructed uri in default browser on mac Write-Verbose "We are on Mac OS" open $URI } elseif ($IsWindows) { Write-Verbose "We are on Windows" rundll32 url.dll,FileProtocolHandler $URI } $Response = Read-Host "Paste the entire URL that it redirects you to" $Response = $Response.Split("spotifyapi?")[1] $SplitResponse = $Response.Split("&state=") $Code = $SplitResponse[0] $ResponseGuid = $SplitResponse[1] # If our response guid doesn't match the one we made, we don't want to proceed if ($ResponseGuid -ne $Guid) { Write-Warning "The response guid does not match our records." return $Response } if ($Code -eq "error=access_denied&state=$Guid") { Write-Warning "We didn't successfully retrieve an auth code. This may be due to expired credentials or wardbox messed up." return $Code } $Code = $Code.Replace("code=", "") return $Code } |