Não pode escolher mais do que 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.
 
 
 
 
 
 

106 linhas
2.8 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. from frappe import _
  6. import frappe.utils
  7. import frappe.sessions
  8. import frappe.utils.file_manager
  9. import frappe.desk.form.run_method
  10. from frappe.utils.response import build_response
  11. @frappe.whitelist(allow_guest=True)
  12. def version():
  13. return frappe.__version__
  14. @frappe.whitelist()
  15. def ping():
  16. return "pong"
  17. @frappe.whitelist()
  18. def runserverobj(method, docs=None, dt=None, dn=None, arg=None, args=None):
  19. frappe.desk.form.run_method.runserverobj(method, docs=docs, dt=dt, dn=dn, arg=arg, args=args)
  20. @frappe.whitelist(allow_guest=True)
  21. def logout():
  22. frappe.local.login_manager.logout()
  23. frappe.db.commit()
  24. @frappe.whitelist(allow_guest=True)
  25. def web_logout():
  26. frappe.local.login_manager.logout()
  27. frappe.db.commit()
  28. frappe.respond_as_web_page("Logged Out", """<p><a href="/index" class="text-muted">Back to Home</a></p>""")
  29. @frappe.whitelist(allow_guest=True)
  30. def run_custom_method(doctype, name, custom_method):
  31. """cmd=run_custom_method&doctype={doctype}&name={name}&custom_method={custom_method}"""
  32. doc = frappe.get_doc(doctype, name)
  33. if getattr(doc, custom_method, frappe._dict()).is_whitelisted:
  34. frappe.call(getattr(doc, custom_method), **frappe.local.form_dict)
  35. else:
  36. frappe.throw(_("Not permitted"), frappe.PermissionError)
  37. @frappe.whitelist()
  38. def uploadfile():
  39. try:
  40. if frappe.form_dict.get('from_form'):
  41. try:
  42. ret = frappe.utils.file_manager.upload()
  43. except frappe.DuplicateEntryError:
  44. # ignore pass
  45. ret = None
  46. frappe.db.rollback()
  47. else:
  48. if frappe.form_dict.get('method'):
  49. ret = frappe.get_attr(frappe.form_dict.method)()
  50. except Exception:
  51. frappe.errprint(frappe.utils.get_traceback())
  52. ret = None
  53. return ret
  54. def handle():
  55. """handle request"""
  56. cmd = frappe.local.form_dict.cmd
  57. if cmd!='login':
  58. execute_cmd(cmd)
  59. return build_response("json")
  60. def execute_cmd(cmd):
  61. """execute a request as python module"""
  62. for hook in frappe.get_hooks("override_whitelisted_methods", {}).get(cmd, []):
  63. # override using the first hook
  64. cmd = hook
  65. break
  66. method = get_attr(cmd)
  67. # check if whitelisted
  68. if frappe.session['user'] == 'Guest':
  69. if (method not in frappe.guest_methods):
  70. frappe.msgprint(_("Not permitted"))
  71. raise frappe.PermissionError('Not Allowed, {0}'.format(method))
  72. else:
  73. if not method in frappe.whitelisted:
  74. frappe.msgprint(_("Not permitted"))
  75. raise frappe.PermissionError('Not Allowed, {0}'.format(method))
  76. ret = frappe.call(method, **frappe.form_dict)
  77. # returns with a message
  78. if ret:
  79. frappe.response['message'] = ret
  80. def get_attr(cmd):
  81. """get method object from cmd"""
  82. if '.' in cmd:
  83. method = frappe.get_attr(cmd)
  84. else:
  85. method = globals()[cmd]
  86. frappe.log("method:" + cmd)
  87. return method