diff --git a/frappe/templates/includes/login.js b/frappe/templates/includes/login.js index e14fb3b14f..e3d9186e91 100644 --- a/frappe/templates/includes/login.js +++ b/frappe/templates/includes/login.js @@ -173,4 +173,16 @@ frappe.ready(function() { } }); -{%- endif %} \ No newline at end of file +{%- endif %} + +{% if google_sign_in is defined -%} + +frappe.ready(function() { + $(".btn-google").click(function() { + frappe.call({ + method: "frappe.templates.pages.login.get_google_auth_url" + }) + }) +}) + +{%- endif -%} \ No newline at end of file diff --git a/frappe/templates/pages/login.html b/frappe/templates/pages/login.html index 4a77ac83a5..0c1f813edb 100644 --- a/frappe/templates/pages/login.html +++ b/frappe/templates/pages/login.html @@ -20,6 +20,13 @@
{%- endif -%} + {%- if google_sign_in is defined %} ++
or
+ + {{ _("Login via Google") }} + {%- endif -%} diff --git a/frappe/templates/pages/login.py b/frappe/templates/pages/login.py index 8e1cf85244..e2ba627f68 100644 --- a/frappe/templates/pages/login.py +++ b/frappe/templates/pages/login.py @@ -2,10 +2,47 @@ # MIT License. See license.txt from __future__ import unicode_literals -import frappe +import frappe, os +import httplib2 + +no_cache = True def get_context(context): # get settings from site config context["title"] = "Login" if frappe.conf.get("fb_app_id"): - return { "fb_app_id": frappe.conf.fb_app_id } + context.update({ "fb_app_id": frappe.conf.fb_app_id }) + + if os.path.exists(frappe.get_site_path("google_config.json")): + context.update({ "google_sign_in": get_google_auth_url() }) + + return context + +def get_google_auth_url(): + from oauth2client.client import flow_from_clientsecrets + flow = flow_from_clientsecrets(frappe.get_site_path("google_config.json"), + scope=['https://www.googleapis.com/auth/userinfo.profile', 'https://www.googleapis.com/auth/userinfo.email'], + redirect_uri='http://localhost:8000/api/method/frappe.templates.pages.login.login_via_google') + + return flow.step1_get_authorize_url() + +@frappe.whitelist(allow_guest=True) +def login_via_google(code): + from oauth2client.client import flow_from_clientsecrets + + + flow = flow_from_clientsecrets(frappe.get_site_path("google_config.json"), + scope=['https://www.googleapis.com/auth/userinfo.profile', 'https://www.googleapis.com/auth/userinfo.email'], + redirect_uri='http://localhost:8000/api/method/frappe.templates.pages.login.login_via_google') + + credentials = flow.step2_exchange(code) + + http = httplib2.Http() + http = credentials.authorize(http) + + resp, content = http.request('https://www.googleapis.com/oauth2/v2/userinfo', 'GET') + + print content + + + \ No newline at end of file diff --git a/frappe/website/render.py b/frappe/website/render.py index 36794ce055..30d8ac3a6e 100644 --- a/frappe/website/render.py +++ b/frappe/website/render.py @@ -24,7 +24,7 @@ def render(path): data = set_content_type(data, path) frappe._response.data = data - frappe._response.headers[b"Page Name"] = path.encode("utf-8") + frappe._response.headers[b"X-Page-Name"] = path.encode("utf-8") def render_page(path): """get page html""" @@ -40,7 +40,7 @@ def render_page(path): if out: if hasattr(frappe, "_response"): - frappe._response.headers[b"From Cache"] = True + frappe._response.headers[b"X-From-Cache"] = True return out diff --git a/frappe/website/statics.py b/frappe/website/statics.py index f4cb082f98..592621fca2 100644 --- a/frappe/website/statics.py +++ b/frappe/website/statics.py @@ -16,10 +16,8 @@ def sync_statics(): time.sleep(2) class sync(object): - def __init__(self): - self.synced = [] - def start(self): + self.synced = [] for app in frappe.get_installed_apps(): self.sync_for_app(app) diff --git a/requirements.txt b/requirements.txt index 5478e1d76d..5c8b554743 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,7 +1,7 @@ chardet cssmin dropbox -google-api-python-client +oauth2client gunicorn httplib2 jinja2