You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

87 line
3.0 KiB

  1. # Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
  2. # MIT License. See license.txt
  3. from __future__ import unicode_literals
  4. import frappe
  5. import frappe.utils
  6. from frappe.utils.oauth import get_oauth2_authorize_url, get_oauth_keys, login_via_oauth2, login_oauth_user as _login_oauth_user, redirect_post_login
  7. import json
  8. from frappe import _
  9. from frappe.auth import LoginManager
  10. from frappe.integrations.doctype.ldap_settings.ldap_settings import get_ldap_settings
  11. no_cache = True
  12. import pyqrcode
  13. from StringIO import StringIO
  14. from werkzeug.wrappers import Response
  15. def get_qr_code():
  16. url = pyqrcode.create('http://www.google.com')
  17. stream = StringIO()
  18. url.svg(stream, scale=5)
  19. responses = Response(stream.getvalue().encode('utf-8'))
  20. responses.status_code = 200
  21. responses.headers['content-type'] = 'image/svg+xml; charset=utf-8'
  22. return responses
  23. def get_context(context):
  24. if frappe.session.user != "Guest" and frappe.session.data.user_type=="System User":
  25. frappe.local.flags.redirect_location = "/testpayment"
  26. raise frappe.Redirect
  27. # get settings from site config
  28. context.no_header = True
  29. context.for_test = 'login.html'
  30. context["title"] = "Login"
  31. context["disable_signup"] = frappe.utils.cint(frappe.db.get_value("Website Settings", "Website Settings", "disable_signup"))
  32. for provider in ("google", "github", "facebook", "frappe"):
  33. if get_oauth_keys(provider):
  34. context["{provider}_login".format(provider=provider)] = get_oauth2_authorize_url(provider)
  35. context["social_login"] = True
  36. ldap_settings = get_ldap_settings()
  37. context["ldap_settings"] = ldap_settings
  38. context['qqrcode'] = frappe.render_template(get_qr_code())
  39. return context
  40. @frappe.whitelist(allow_guest=True)
  41. def login_via_google(code, state):
  42. login_via_oauth2("google", code, state, decoder=json.loads)
  43. @frappe.whitelist(allow_guest=True)
  44. def login_via_github(code, state):
  45. login_via_oauth2("github", code, state)
  46. @frappe.whitelist(allow_guest=True)
  47. def login_via_facebook(code, state):
  48. login_via_oauth2("facebook", code, state, decoder=json.loads)
  49. @frappe.whitelist(allow_guest=True)
  50. def login_via_frappe(code, state):
  51. login_via_oauth2("frappe", code, state, decoder=json.loads)
  52. @frappe.whitelist(allow_guest=True)
  53. def login_oauth_user(data=None, provider=None, state=None, email_id=None, key=None, generate_login_token=False):
  54. if not ((data and provider and state) or (email_id and key)):
  55. frappe.respond_as_web_page(_("Invalid Request"), _("Missing parameters for login"), http_status_code=417)
  56. return
  57. _login_oauth_user(data, provider, state, email_id, key, generate_login_token)
  58. @frappe.whitelist(allow_guest=True)
  59. def login_via_token(login_token):
  60. sid = frappe.cache().get_value("login_token:{0}".format(login_token), expires=True)
  61. if not sid:
  62. frappe.respond_as_web_page(_("Invalid Request"), _("Invalid Login Token"), http_status_code=417)
  63. return
  64. frappe.local.form_dict.sid = sid
  65. frappe.local.login_manager = LoginManager()
  66. redirect_post_login(desk_user = frappe.db.get_value("User", frappe.session.user, "user_type")=="System User")