Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Escaping issue with firebase privateKey as a Heroku config variable

I'm trying to create an Heroku node task that reads data from Firebase and console.log it.

My node script (located inside the /bin directory) is:

require('dotenv').config({ silent: true });  var firebase = require('firebase'); firebase.initializeApp({   serviceAccount: {     projectId: process.env.fb_projectId,     clientEmail: process.env.fb_clientEmail,     privateKey: process.env.fb_privateKey   },   databaseURL: process.env.fb_databaseURL })  console.log(process.env.fb_privateKey);  firebase.database().ref('tasks').once('value', function(snapshot) {   console.log(snapshot.val());   process.exit(); }) 

All env variables are correct, except fb_privateKey, since it contains \n characters.

Both my local .env file and Heroku environment variables contains a key named fb_privateKey and a value as a string with \n characters - surrounded with ".

fb_privateKey="-----BEGIN PRIVATE KEY-----\nMY-PRIVATE-KEY\n-----END PRIVATE KEY-----\n" 

When I run the script locally, it logs me the private key with new lines + the tasks that were returned from Firebase. However, when I run it on Heroku, (heroku run myScript) is logs me private key with \n characters (as a single line) and fails to read the data from Firebase (probably due to a bad private key). Any ideas?

like image 646
Amit Kaspi Avatar asked Sep 14 '16 14:09

Amit Kaspi


2 Answers

I had the same problem today. You need to sanitize the read private key by replacing \\n characters with \n.

admin.initializeApp({   credential: admin.credential.cert({     "projectId": process.env.FIREBASE_PROJECT_ID,     "private_key": process.env.FIREBASE_PRIVATE_KEY.replace(/\\n/g, '\n'),     "clientEmail": process.env.FIREBASE_CLIENT_EMAIL,   }),   databaseURL: process.env.FIREBASE_DATABASE_URL, }); 
like image 131
Erem Avatar answered Sep 27 '22 17:09

Erem


I solved this by using the .replace(/\n/g, '\n') on the private key and also removing the quotes from the private key value on heroku config vars like it is bellow.

-----BEGIN PRIVATE KEY-----\nMY-PRIVATE-KEY\n-----END PRIVATE KEY-----\n

like image 36
Peter Edoja Avatar answered Sep 27 '22 17:09

Peter Edoja