google-oauth-serviceaccount
Motivation:
Wanted to accesss my personal calendar, NOT the one of Google Apps, and found no good example for node.js with service account without any interaction.
Install:
npm install google-oauth-serviceaccount
Preparation:
- Create your service account and enable calendar access(thanks to this post):
> a) Log in into the Google account you want to use to manage your projects. > b) Go to https://code.google.com/apis/console/ > c) Create a project. You will get issued a project number, in our example > we'll use 99999999999. > d) Allow the project to use the calendar API: > -> services (left pane), then find 'calendar api' and set the button 'on' > e) Create a Service Account. > -> API access (left pane); select 'create service account' > Part of the procedure is that you'll get a PKCS#12 bundle, which you can > download and should store on your appserver in a secure location. Your > app should be able to access it, but outsiders should not be allowed to > download it.
-
Store the p12 file into pem with openssl(thank this)
$ openssl pkcs12 -in yourkey.p12 -out yourkey.pem -nodes
type "notasecret" for password. -
Share the calendar with your developer account
Calendar "Settings" -> "Share this calendar", at "Share with specific people", put the email address of developer account choosing a permission you want, then "add person". The address should be like "yourProjectId@developer.gserviceaccount.com".
-
Edit oahtu-config.json and place key.pem which generated in step 2.
{ "keyFile": "key.pem" ,"expiresInMinuteas": 60 ,"claim":{ "iss":"yourProjectID@developer.gserviceaccount.com" ,"scope":"https://www.googleapis.com/auth/calendar" ,"aud":"https://accounts.google.com/o/oauth2/token" } }
-
Test with test.js.
if successfull, you'll see an access token:
token:ya29.AHES6ZSfxRWLEv9vfusipvawSS-55oQyMAGxF3kbRGsgGMTo
-
Enjoy with calendar APIs. You may try listEvents.js.
Usage example:
const request = ;const gaccount = ; const calRoot = "https://www.googleapis.com/calendar/v3"; gaccount;