From ec16d11ae639c9a9bb2405cf44278bccd3efd5fd Mon Sep 17 00:00:00 2001 From: Saurabh Date: Tue, 20 Jun 2017 15:47:36 +0530 Subject: [PATCH] generate oauth2 access token from oauth1 access token --- .../dropbox_settings/dropbox_settings.js | 14 ++++------ .../dropbox_settings/dropbox_settings.json | 4 +-- .../dropbox_settings/dropbox_settings.py | 28 +++++++++++++++++-- 3 files changed, 33 insertions(+), 13 deletions(-) diff --git a/frappe/integrations/doctype/dropbox_settings/dropbox_settings.js b/frappe/integrations/doctype/dropbox_settings/dropbox_settings.js index 272f8060ac..a8af7126b9 100644 --- a/frappe/integrations/doctype/dropbox_settings/dropbox_settings.js +++ b/frappe/integrations/doctype/dropbox_settings/dropbox_settings.js @@ -37,14 +37,12 @@ frappe.ui.form.on('Dropbox Settings', { take_backup: function(frm) { if ((frm.doc.app_access_key && frm.doc.app_secret_key) || frm.doc.dropbox_setup_via_site_config){ - if (frm.doc.dropbox_access_token) { - frm.add_custom_button(__("Take Backup Now"), function(frm){ - frappe.call({ - method: "frappe.integrations.doctype.dropbox_settings.dropbox_settings.take_backup", - freeze: true - }) - }).addClass("btn-primary") - } + frm.add_custom_button(__("Take Backup Now"), function(frm){ + frappe.call({ + method: "frappe.integrations.doctype.dropbox_settings.dropbox_settings.take_backup", + freeze: true + }) + }).addClass("btn-primary") } } }); diff --git a/frappe/integrations/doctype/dropbox_settings/dropbox_settings.json b/frappe/integrations/doctype/dropbox_settings/dropbox_settings.json index 5e0e6dc508..cbe1fe8b1a 100644 --- a/frappe/integrations/doctype/dropbox_settings/dropbox_settings.json +++ b/frappe/integrations/doctype/dropbox_settings/dropbox_settings.json @@ -262,7 +262,7 @@ "columns": 0, "fieldname": "dropbox_access_token", "fieldtype": "Password", - "hidden": 0, + "hidden": 1, "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, @@ -325,7 +325,7 @@ "issingle": 1, "istable": 0, "max_attachments": 0, - "modified": "2017-06-19 04:02:22.472465", + "modified": "2017-06-20 15:45:33.683827", "modified_by": "Administrator", "module": "Integrations", "name": "Dropbox Settings", diff --git a/frappe/integrations/doctype/dropbox_settings/dropbox_settings.py b/frappe/integrations/doctype/dropbox_settings/dropbox_settings.py index acd04a0d63..24735a5391 100644 --- a/frappe/integrations/doctype/dropbox_settings/dropbox_settings.py +++ b/frappe/integrations/doctype/dropbox_settings/dropbox_settings.py @@ -7,10 +7,11 @@ import frappe import os from frappe import _ from frappe.model.document import Document -import dropbox +import dropbox, json from frappe.utils.backups import new_backup from frappe.utils.background_jobs import enqueue from urlparse import urlparse, parse_qs +from frappe.integrations.utils import make_post_request from frappe.utils import (cint, split_emails, get_request_site_address, cstr, get_files_path, get_backups_path, encode, get_url) @@ -80,8 +81,16 @@ def backup_to_dropbox(): # upload database dropbox_settings = get_dropbox_settings() + if not dropbox_settings['access_token']: - return + access_token = generate_oauth2_access_token_from_oauth1_token(dropbox_settings) + + if not access_token.get('oauth2_token'): + return + + dropbox_settings['access_token'] = access_token['oauth2_token'] + set_dropbox_access_token(access_token['oauth2_token']) + dropbox_client = dropbox.Dropbox(dropbox_settings['access_token']) backup = new_backup(ignore_files=True) @@ -174,7 +183,9 @@ def get_dropbox_settings(redirect_uri=False): "app_secret": settings.get_password(fieldname="app_secret_key", raise_exception=False) if settings.app_secret_key else frappe.conf.dropbox_secret_key, 'access_token': settings.get_password('dropbox_access_token', raise_exception=False) - if settings.dropbox_access_token else '' + if settings.dropbox_access_token else '', + 'access_key': settings.get_password('dropbox_access_key', raise_exception=False), + 'access_secret': settings.get_password('dropbox_access_secret', raise_exception=False) } if redirect_uri: @@ -248,3 +259,14 @@ def dropbox_auth_finish(return_access_token=False): def set_dropbox_access_token(access_token): frappe.db.set_value("Dropbox Settings", None, 'dropbox_access_token', access_token) frappe.db.commit() + +def generate_oauth2_access_token_from_oauth1_token(dropbox_settings=None): + url = "https://api.dropboxapi.com/2/auth/token/from_oauth1" + headers = {"Content-Type": "application/json"} + auth = (dropbox_settings["app_key"], dropbox_settings["app_secret"]) + data = { + "oauth1_token": dropbox_settings["access_key"], + "oauth1_token_secret": dropbox_settings["access_secret"] + } + + return make_post_request(url, auth=auth, headers=headers, data=json.dumps(data))