Du kannst nicht mehr als 25 Themen auswählen Themen müssen entweder mit einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

vor 12 Jahren
vor 12 Jahren
vor 12 Jahren
vor 13 Jahren
vor 13 Jahren
vor 12 Jahren
vor 12 Jahren
vor 12 Jahren
vor 12 Jahren
vor 12 Jahren
vor 12 Jahren
vor 11 Jahren
vor 11 Jahren
vor 11 Jahren
vor 11 Jahren
vor 11 Jahren
vor 13 Jahren
vor 12 Jahren
vor 13 Jahren
vor 13 Jahren
vor 12 Jahren
vor 11 Jahren
vor 11 Jahren
vor 11 Jahren
vor 11 Jahren
vor 12 Jahren
vor 11 Jahren
vor 13 Jahren
vor 13 Jahren
vor 12 Jahren
vor 11 Jahren
vor 12 Jahren
vor 11 Jahren
vor 13 Jahren
vor 11 Jahren
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262
  1. # Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
  2. # MIT License. See license.txt
  3. from __future__ import unicode_literals
  4. import webnotes
  5. import webnotes.db
  6. import webnotes.utils
  7. import webnotes.profile
  8. from webnotes import conf
  9. from webnotes.sessions import Session
  10. class HTTPRequest:
  11. def __init__(self):
  12. # Get Environment variables
  13. self.domain = webnotes.request.host
  14. if self.domain and self.domain.startswith('www.'):
  15. self.domain = self.domain[4:]
  16. # language
  17. self.set_lang(webnotes.get_request_header('HTTP_ACCEPT_LANGUAGE'))
  18. # load cookies
  19. webnotes.local.cookie_manager = CookieManager()
  20. # override request method. All request to be of type POST, but if _type == "POST" then commit
  21. if webnotes.form_dict.get("_type"):
  22. webnotes.local.request_method = webnotes.form_dict.get("_type")
  23. del webnotes.form_dict["_type"]
  24. # set db
  25. self.connect()
  26. # login
  27. webnotes.local.login_manager = LoginManager()
  28. # check status
  29. if webnotes.conn.get_global("__session_status")=='stop':
  30. webnotes.msgprint(webnotes.conn.get_global("__session_status_message"))
  31. raise webnotes.SessionStopped('Session Stopped')
  32. # load profile
  33. self.setup_profile()
  34. # run login triggers
  35. if webnotes.form_dict.get('cmd')=='login':
  36. webnotes.local.login_manager.run_trigger('on_session_creation')
  37. def set_lang(self, lang):
  38. import translate
  39. lang_list = translate.get_all_languages() or []
  40. if not lang:
  41. return
  42. if ";" in lang: # not considering weightage
  43. lang = lang.split(";")[0]
  44. if "," in lang:
  45. lang = lang.split(",")
  46. else:
  47. lang = [lang]
  48. for l in lang:
  49. code = l.strip()
  50. if code in lang_list:
  51. webnotes.local.lang = code
  52. return
  53. # check if parent language (pt) is setup, if variant (pt-BR)
  54. if "-" in code:
  55. code = code.split("-")[0]
  56. if code in lang_list:
  57. webnotes.local.lang = code
  58. return
  59. def setup_profile(self):
  60. webnotes.local.user = webnotes.profile.Profile()
  61. def get_db_name(self):
  62. """get database name from conf"""
  63. return conf.db_name
  64. def connect(self, ac_name = None):
  65. """connect to db, from ac_name or db_name"""
  66. webnotes.local.conn = webnotes.db.Database(user = self.get_db_name(), \
  67. password = getattr(conf,'db_password', ''))
  68. class LoginManager:
  69. def __init__(self):
  70. self.user = None
  71. if webnotes.local.form_dict.get('cmd')=='login' or webnotes.local.request.path=="/api/method/login":
  72. self.login()
  73. else:
  74. self.make_session(resume=True)
  75. def login(self):
  76. # clear cache
  77. webnotes.clear_cache(user = webnotes.form_dict.get('usr'))
  78. self.authenticate()
  79. self.post_login()
  80. def post_login(self):
  81. self.run_trigger('on_login')
  82. self.validate_ip_address()
  83. self.validate_hour()
  84. self.make_session()
  85. self.set_user_info()
  86. def set_user_info(self):
  87. info = webnotes.conn.get_value("Profile", self.user,
  88. ["user_type", "first_name", "last_name", "user_image"], as_dict=1)
  89. if info.user_type=="Website User":
  90. webnotes.local._response.set_cookie("system_user", "no")
  91. webnotes.local.response["message"] = "No App"
  92. else:
  93. webnotes.local._response.set_cookie("system_user", "yes")
  94. webnotes.local.response['message'] = 'Logged In'
  95. full_name = " ".join(filter(None, [info.first_name, info.last_name]))
  96. webnotes.response["full_name"] = full_name
  97. webnotes._response.set_cookie("full_name", full_name)
  98. webnotes._response.set_cookie("user_id", self.user)
  99. webnotes._response.set_cookie("user_image", info.user_image or "")
  100. def make_session(self, resume=False):
  101. # start session
  102. webnotes.local.session_obj = Session(user=self.user, resume=resume)
  103. # reset user if changed to Guest
  104. self.user = webnotes.local.session_obj.user
  105. webnotes.local.session = webnotes.local.session_obj.data
  106. def authenticate(self, user=None, pwd=None):
  107. if not (user and pwd):
  108. user, pwd = webnotes.form_dict.get('usr'), webnotes.form_dict.get('pwd')
  109. if not (user and pwd):
  110. self.fail('Incomplete login details')
  111. self.check_if_enabled(user)
  112. self.user = self.check_password(user, pwd)
  113. def check_if_enabled(self, user):
  114. """raise exception if user not enabled"""
  115. from webnotes.utils import cint
  116. if user=='Administrator': return
  117. if not cint(webnotes.conn.get_value('Profile', user, 'enabled')):
  118. self.fail('User disabled or missing')
  119. def check_password(self, user, pwd):
  120. """check password"""
  121. user = webnotes.conn.sql("""select `user` from __Auth where `user`=%s
  122. and `password`=password(%s)""", (user, pwd))
  123. if not user:
  124. self.fail('Incorrect password')
  125. else:
  126. return user[0][0] # in correct case
  127. def fail(self, message):
  128. webnotes.local.response['message'] = message
  129. raise webnotes.AuthenticationError
  130. def run_trigger(self, method='on_login'):
  131. for method in webnotes.get_hooks().get("method", []):
  132. webnotes.get_attr(method)(self)
  133. def validate_ip_address(self):
  134. """check if IP Address is valid"""
  135. ip_list = webnotes.conn.get_value('Profile', self.user, 'restrict_ip', ignore=True)
  136. if not ip_list:
  137. return
  138. ip_list = ip_list.replace(",", "\n").split('\n')
  139. ip_list = [i.strip() for i in ip_list]
  140. for ip in ip_list:
  141. if webnotes.get_request_header('REMOTE_ADDR', '').startswith(ip) or webnotes.get_request_header('X-Forwarded-For', '').startswith(ip):
  142. return
  143. webnotes.msgprint('Not allowed from this IP Address')
  144. raise webnotes.AuthenticationError
  145. def validate_hour(self):
  146. """check if user is logging in during restricted hours"""
  147. login_before = int(webnotes.conn.get_value('Profile', self.user, 'login_before', ignore=True) or 0)
  148. login_after = int(webnotes.conn.get_value('Profile', self.user, 'login_after', ignore=True) or 0)
  149. if not (login_before or login_after):
  150. return
  151. from webnotes.utils import now_datetime
  152. current_hour = int(now_datetime().strftime('%H'))
  153. if login_before and current_hour > login_before:
  154. webnotes.msgprint('Not allowed to login after restricted hour', raise_exception=1)
  155. if login_after and current_hour < login_after:
  156. webnotes.msgprint('Not allowed to login before restricted hour', raise_exception=1)
  157. def login_as_guest(self):
  158. """login as guest"""
  159. self.user = 'Guest'
  160. self.post_login()
  161. def logout(self, arg='', user=None):
  162. if not user: user = webnotes.session.user
  163. self.run_trigger('on_logout')
  164. if user in ['demo@erpnext.com', 'Administrator']:
  165. webnotes.conn.sql('delete from tabSessions where sid=%s', webnotes.session.get('sid'))
  166. webnotes.cache().delete_value("session:" + webnotes.session.get("sid"))
  167. else:
  168. from webnotes.sessions import clear_sessions
  169. clear_sessions(user)
  170. if user == webnotes.session.user:
  171. webnotes.session.sid = ""
  172. webnotes.local._response.delete_cookie("full_name")
  173. webnotes.local._response.delete_cookie("user_id")
  174. webnotes.local._response.delete_cookie("sid")
  175. webnotes.local._response.set_cookie("full_name", "")
  176. webnotes.local._response.set_cookie("user_id", "")
  177. webnotes.local._response.set_cookie("sid", "")
  178. class CookieManager:
  179. def __init__(self):
  180. pass
  181. def set_cookies(self):
  182. if not webnotes.local.session.get('sid'): return
  183. import datetime
  184. # sid expires in 3 days
  185. expires = datetime.datetime.now() + datetime.timedelta(days=3)
  186. if webnotes.session.sid:
  187. webnotes.local._response.set_cookie("sid", webnotes.session.sid, expires = expires)
  188. if webnotes.session.session_country:
  189. webnotes.local._response.set_cookie('country', webnotes.session.get("session_country"))
  190. def set_remember_me(self):
  191. from webnotes.utils import cint
  192. if not cint(webnotes.form_dict.get('remember_me')): return
  193. remember_days = webnotes.conn.get_value('Control Panel', None,
  194. 'remember_for_days') or 7
  195. import datetime
  196. expires = datetime.datetime.now() + \
  197. datetime.timedelta(days=remember_days)
  198. webnotes.local._response.set_cookie["remember_me"] = 1
  199. def _update_password(user, password):
  200. webnotes.conn.sql("""insert into __Auth (user, `password`)
  201. values (%s, password(%s))
  202. on duplicate key update `password`=password(%s)""", (user,
  203. password, password))
  204. @webnotes.whitelist()
  205. def get_logged_user():
  206. return webnotes.session.user