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 ?"
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
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.
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.