mirror of
https://github.com/getredash/redash.git
synced 2025-12-19 17:37:19 -05:00
* Consistently use simplejson to loading and dumping JSON. This introduces the new functions redash.utils.json_dumps and redash.utils.json_loads and simplifies the custom encoder setup. UUIDs are now handled by the default encoder, too. Fixes #2807. Use string comparison in parse_boolean instead of the (simple)json module.
45 lines
1.4 KiB
Python
45 lines
1.4 KiB
Python
from base64 import b64encode
|
|
import simplejson
|
|
from redash.models import DataSource
|
|
|
|
|
|
def convert_p12_to_pem(p12file):
|
|
from OpenSSL import crypto
|
|
with open(p12file, 'rb') as f:
|
|
p12 = crypto.load_pkcs12(f.read(), "notasecret")
|
|
|
|
return crypto.dump_privatekey(crypto.FILETYPE_PEM, p12.get_privatekey())
|
|
|
|
if __name__ == '__main__':
|
|
|
|
for ds in DataSource.select(DataSource.id, DataSource.type, DataSource.options):
|
|
|
|
if ds.type == 'bigquery':
|
|
options = simplejson.loads(ds.options)
|
|
|
|
if 'jsonKeyFile' in options:
|
|
continue
|
|
|
|
new_options = {
|
|
'projectId': options['projectId'],
|
|
'jsonKeyFile': b64encode(simplejson.dumps({
|
|
'client_email': options['serviceAccount'],
|
|
'private_key': convert_p12_to_pem(options['privateKey'])
|
|
}))
|
|
}
|
|
|
|
ds.options = simplejson.dumps(new_options)
|
|
ds.save(only=ds.dirty_fields)
|
|
elif ds.type == 'google_spreadsheets':
|
|
options = simplejson.loads(ds.options)
|
|
if 'jsonKeyFile' in options:
|
|
continue
|
|
|
|
with open(options['credentialsFilePath']) as f:
|
|
new_options = {
|
|
'jsonKeyFile': b64encode(f.read())
|
|
}
|
|
|
|
ds.options = simplejson.dumps(new_options)
|
|
ds.save(only=ds.dirty_fields)
|