public/Initialize-Blogger.ps1

<#
.SYNOPSIS
  Initialize the local system to use Pandoc + Blogger together
 
.DESCRIPTION
  This prepares your system to use Pandoc + Blogger together by obtaining an authtoken that is
  authorized to communicate with blogger.
 
.PARAMETER clientId
  Google API Client ID. This currently defaults to the one I use, but you
  will need to create your own until the Google Application is published and verified
     
.PARAMETER clientSecret
  Google API Client Secret. A default value is provided, but you can provide your own if you don't trust me.
 
.PARAMETER redirectUri
  The oAuth redirect URL specifed in the Google API Consent Form.
 
.EXAMPLE
Initiate a login flow with Google
 
  Initialize-Blogger
 
#>

Function Initialize-Blogger {
  Param(
    [Parameter(HelpMessage = "Google API ClientId")]
    [string]$clientId = "284606892422-ribvo7oodlbtd70e8onn8rg4hm58mluj.apps.googleusercontent.com",

    [Parameter(HelpMessage = "Google API Client Secret")]
    [string]$clientSecret = "PUK0j9ig-GHcSByQao2i1aIa",

    [Parameter(HelpMessage = "Redirect Uri specified in Google API Consent Form")]
    [string]$redirectUri = "http://localhost/oauth2callback"
  )

  $ErrorActionPreference = 'Stop'

  Write-Information "Let's get an auth-code."

  # specify the scopes we want in our auth token
  $scope = @(
    "https://www.googleapis.com/auth/blogger" 
    #"https://www.googleapis.com/auth/drive.file" # TODO: fix
    "https://www.googleapis.com/auth/drive"

  ) -join " "

  $url = "https://accounts.google.com/o/oauth2/auth?client_id=$clientId&scope=$scope&response_type=code&redirect_uri=$redirectUri&access_type=offline&approval_prompt=force"

  Start-Process $url

  $code = Wait-GoogleAuthApiToken

  Write-Information "Sucessfully obtained auth-code!"


  # trade the auth-code for an token that has a short-lived expiry
  $expiringToken = Get-GoogleAccessToken -clientId $clientId -clientSecret $clientSecret -redirectUri $redirectUri -code $code

  # use the refresh-token to get an updated access-token
  $token = Update-GoogleAccessToken -clientId $clientId -clientSecret $clientSecret -refreshToken $expiringToken.refresh_token

  # save the token in the credential_cache.json
  Set-CredentialCache -clientId $clientId -clientSecret $clientSecret -refreshToken $expiringToken -token $token
    
  Write-Information "Awesome. We're all set."
}