Is it possible to store a JSON file to an ENV variable with dotenv?

I am using Google Drive API with my Rails application. The API is working fine. I have the following client_secret.json file:

{
  "type": "service_account",
  "project_id": "gobirdie-landing-page",
  "private_key_id": "xxxxx",
  "private_key": "-----BEGIN PRIVATE KEY----- xxxxx -----END PRIVATE KEY-----
",
  "client_email": "",
  "client_id": "xxxxxxxxx",
  "auth_uri": "xxxxxx",
  "token_uri": "xxxxxxx": "xxxxxxxx": "xxxxxxxxx"
}

which is called in my controller

@session = GoogleDrive::Session.from_service_account_key("client_secret.json")

With this configuration no problem, I manage to use the API. However, I would like to store my JSON in the .env file like:

CLIENT_SECRET = "{
  "type": "service_account",
  "project_id": "gobirdie-landing-page",
  "private_key_id": "xxxxx",
  "private_key": "-----BEGIN PRIVATE KEY----- xxxxx -----END PRIVATE KEY-----
",
  "client_email": "xxxxxxx@gobirdie-landing-page.iam.gserviceaccount.com",
  "client_id": "xxxxxxxxx",
  "auth_uri": "xxxxxx",
  "token_uri": "xxxxxxx": "xxxxxxxx": "xxxxxxxxx"
}" 

And call it in the controller in this way

@session = GoogleDrive::Session.from_service_account_key(ENV['CLIENT_SECRET'])

Or in this way

@session = GoogleDrive::Session.from_service_account_key(JSON.parse(ENV['CLIENT_SECRET']))

But neither methods are working. So my question is : "Is it possible to store JSON file in an ENV variable ?"

Asked By: Quentin P.
||

Answer #1:

Convert the JSON object to string and store it in the ENV

You can use JSON.dump to convert JSON object to string

and then in your controller JSON.parse(ENV['CLIENT_SECRET'])

Alternatively

you can create a google_session.rb inside initializers folder

$google_session = GoogleDrive::Session.from_service_account_key(
   # config goes here
)

and in your controller you will have access to $google_session global variable

Answered By: PGill

Answer #2:

Yes. It is possible to store json file in variable. However there is one small change needed :

\"type\"": \""service_account\"",

Do this for every double quote inside the curly braces of json.

Answered By: gkr2d2

Answer #3:

The solution I came up with was base encoding the json object and store it and then decode it upon a request of using it.

Answered By: Philip
The answers/resolutions are collected from stackoverflow, are licensed under cc by-sa 2.5 , cc by-sa 3.0 and cc by-sa 4.0 .



# More Articles