From 5297b2a56c5b575cd78cf64ab15f32d2b84082d2 Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Mon, 25 Jan 2016 11:30:30 +0530 Subject: [PATCH 1/2] [minor] strip email id before validating --- frappe/utils/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frappe/utils/__init__.py b/frappe/utils/__init__.py index c60822f3b9..0d5c3f609c 100644 --- a/frappe/utils/__init__.py +++ b/frappe/utils/__init__.py @@ -71,7 +71,7 @@ def validate_email_add(email_str, throw=False): # example: "test@example.com test2@example.com" will return "test@example.comtest2" after parseaddr!!! return False - email = extract_email_id(email_str) + email = extract_email_id(email_str.strip()) match = re.match("[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?", email.lower()) if not match: From 9e2ba37823292ba4bda2e21c9ccfb538c96a9f0c Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Mon, 25 Jan 2016 15:10:44 +0530 Subject: [PATCH 2/2] [minor] add hook for website user home page by function --- frappe/auth.py | 10 ++ frappe/handler.py | 114 +++++++++++------------ frappe/templates/includes/login/login.js | 4 +- frappe/utils/boilerplate.py | 3 + frappe/website/utils.py | 19 ++-- 5 files changed, 85 insertions(+), 65 deletions(-) diff --git a/frappe/auth.py b/frappe/auth.py index 8a644b3c1d..c25bad56c1 100644 --- a/frappe/auth.py +++ b/frappe/auth.py @@ -130,10 +130,12 @@ class LoginManager: frappe.local.cookie_manager.set_cookie("system_user", "no") if not resume: frappe.local.response["message"] = "No App" + frappe.local.response["home_page"] = get_website_user_home_page(self.user) else: frappe.local.cookie_manager.set_cookie("system_user", "yes") if not resume: frappe.local.response['message'] = 'Logged In' + frappe.local.response["home_page"] = "/desk" if not resume: frappe.response["full_name"] = self.full_name @@ -293,3 +295,11 @@ def clear_cookies(): if hasattr(frappe.local, "session"): frappe.session.sid = "" frappe.local.cookie_manager.delete_cookie(["full_name", "user_id", "sid", "user_image", "system_user"]) + +def get_website_user_home_page(user): + home_page_method = frappe.get_hooks('get_website_user_home_page') + if home_page_method: + home_page = frappe.get_attr(home_page_method[-1])(user) + return '/' + home_page.strip('/') + else: + return '/me' diff --git a/frappe/handler.py b/frappe/handler.py index 43fdf71414..5325530d7b 100755 --- a/frappe/handler.py +++ b/frappe/handler.py @@ -12,63 +12,6 @@ import frappe.desk.form.run_method from frappe.utils.response import build_response import bleach -@frappe.whitelist(allow_guest=True) -def version(): - return frappe.__version__ - -@frappe.whitelist() -def ping(): - return "pong" - -@frappe.async.handler -def async_ping(): - return "pong" - -@frappe.whitelist() -def runserverobj(method, docs=None, dt=None, dn=None, arg=None, args=None): - frappe.desk.form.run_method.runserverobj(method, docs=docs, dt=dt, dn=dn, arg=arg, args=args) - -@frappe.whitelist(allow_guest=True) -def logout(): - frappe.local.login_manager.logout() - frappe.db.commit() - -@frappe.whitelist(allow_guest=True) -def web_logout(): - frappe.local.login_manager.logout() - frappe.db.commit() - frappe.respond_as_web_page("Logged Out", """

Back to Home

""") - -@frappe.whitelist(allow_guest=True) -def run_custom_method(doctype, name, custom_method): - """cmd=run_custom_method&doctype={doctype}&name={name}&custom_method={custom_method}""" - doc = frappe.get_doc(doctype, name) - if getattr(doc, custom_method, frappe._dict()).is_whitelisted: - frappe.call(getattr(doc, custom_method), **frappe.local.form_dict) - else: - frappe.throw(_("Not permitted"), frappe.PermissionError) - -@frappe.whitelist() -def uploadfile(): - try: - if frappe.form_dict.get('from_form'): - try: - ret = frappe.utils.file_manager.upload() - except frappe.DuplicateEntryError: - # ignore pass - ret = None - frappe.db.rollback() - else: - if frappe.form_dict.get('method'): - method = frappe.get_attr(frappe.form_dict.method) - is_whitelisted(method) - ret = method() - except Exception: - frappe.errprint(frappe.utils.get_traceback()) - ret = None - - return ret - def handle(): """handle request""" cmd = frappe.local.form_dict.cmd @@ -117,6 +60,55 @@ def is_whitelisted(method): frappe.msgprint(_("Not permitted")) raise frappe.PermissionError('Not Allowed, {0}'.format(method)) +@frappe.whitelist(allow_guest=True) +def version(): + return frappe.__version__ + +@frappe.whitelist() +def runserverobj(method, docs=None, dt=None, dn=None, arg=None, args=None): + frappe.desk.form.run_method.runserverobj(method, docs=docs, dt=dt, dn=dn, arg=arg, args=args) + +@frappe.whitelist(allow_guest=True) +def logout(): + frappe.local.login_manager.logout() + frappe.db.commit() + +@frappe.whitelist(allow_guest=True) +def web_logout(): + frappe.local.login_manager.logout() + frappe.db.commit() + frappe.respond_as_web_page("Logged Out", """

Back to Home

""") + +@frappe.whitelist(allow_guest=True) +def run_custom_method(doctype, name, custom_method): + """cmd=run_custom_method&doctype={doctype}&name={name}&custom_method={custom_method}""" + doc = frappe.get_doc(doctype, name) + if getattr(doc, custom_method, frappe._dict()).is_whitelisted: + frappe.call(getattr(doc, custom_method), **frappe.local.form_dict) + else: + frappe.throw(_("Not permitted"), frappe.PermissionError) + +@frappe.whitelist() +def uploadfile(): + try: + if frappe.form_dict.get('from_form'): + try: + ret = frappe.utils.file_manager.upload() + except frappe.DuplicateEntryError: + # ignore pass + ret = None + frappe.db.rollback() + else: + if frappe.form_dict.get('method'): + method = frappe.get_attr(frappe.form_dict.method) + is_whitelisted(method) + ret = method() + except Exception: + frappe.errprint(frappe.utils.get_traceback()) + ret = None + + return ret + def get_attr(cmd): """get method object from cmd""" if '.' in cmd: @@ -137,3 +129,11 @@ def get_async_task_status(task_id): "state": a.state, "progress": 0 } + +@frappe.whitelist() +def ping(): + return "pong" + +@frappe.async.handler +def async_ping(): + return "pong" diff --git a/frappe/templates/includes/login/login.js b/frappe/templates/includes/login/login.js index 98e89a5a9a..50cec4d10a 100644 --- a/frappe/templates/includes/login/login.js +++ b/frappe/templates/includes/login/login.js @@ -104,7 +104,7 @@ login.login_handlers = (function() { var login_handlers = { 200: function(data) { if(data.message=="Logged In") { - window.location.href = get_url_arg("redirect-to") || "/desk"; + window.location.href = get_url_arg("redirect-to") || data.home_page; } else if(data.message=="No App") { if(localStorage) { var last_visited = @@ -116,7 +116,7 @@ login.login_handlers = (function() { if(last_visited && last_visited != "/login") { window.location.href = last_visited; } else { - window.location.href = "/me"; + window.location.href = data.home_page; } } else if(["#signup", "#forgot"].indexOf(window.location.hash)!==-1) { frappe.msgprint(data.message); diff --git a/frappe/utils/boilerplate.py b/frappe/utils/boilerplate.py index cd41905218..c0ee17d23c 100644 --- a/frappe/utils/boilerplate.py +++ b/frappe/utils/boilerplate.py @@ -145,6 +145,9 @@ app_license = "{app_license}" # "Role": "home_page" # }} +# Website user home page (by function) +# get_website_user_home_page = "{app_name}.utils.get_home_page" + # Generators # ---------- diff --git a/frappe/website/utils.py b/frappe/website/utils.py index 3fba21824e..cd222e2ac5 100644 --- a/frappe/website/utils.py +++ b/frappe/website/utils.py @@ -36,14 +36,19 @@ def get_home_page(): return frappe.local.flags.home_page def _get_home_page(): - role_home_page = frappe.get_hooks("role_home_page") home_page = None - if role_home_page: - for role in frappe.get_roles(): - if role in role_home_page: - home_page = role_home_page[role][-1] - break + get_website_user_home_page = frappe.get_hooks('get_website_user_home_page') + if get_website_user_home_page: + home_page = frappe.get_attr(get_website_user_home_page[-1])(frappe.session.user) + + if not home_page: + role_home_page = frappe.get_hooks("role_home_page") + if role_home_page: + for role in frappe.get_roles(): + if role in role_home_page: + home_page = role_home_page[role][-1] + break if not home_page: home_page = frappe.get_hooks("home_page") @@ -53,6 +58,8 @@ def get_home_page(): if not home_page: home_page = frappe.db.get_value("Website Settings", None, "home_page") or "login" + home_page = home_page.strip('/') + return home_page return frappe.cache().hget("home_page", frappe.session.user, _get_home_page)