def _exist_user(self, _request, _user_uuid): _key = DeviceUser.__tablename__ + ".uuid." + _user_uuid if not self.application.redis.exists(_key): logging.error("CHECK CODE") self.setErrorCode(API_ERR.SYS_ERR) return _is_service_user = self.application.redis.hget(_key, "is_service_user") _user_app_uuid = self.application.redis.hget(_key, "app_uuid") if "True" == _is_service_user and _request.get("app_uuid") == _user_app_uuid: logging.error("user is service user who can not help himself ^_^.") self.setErrorCode(API_ERR.NOT_PORTAL) return _user_fullname = self.application.redis.hget(_key, "user_fullname") if _user_fullname != _request.get("ent_user_fullname"): _row = DeviceUser(uuid=_user_uuid, user_fullname=_request.get("ent_user_fullname")) _row.update_redis_keys(self.application.redis) _row.async_update(self.application.redis) _r = self.getReturnData() _r["user_fullname"] = _user_fullname _r["user_uuid"] = _user_uuid _r["uuid"] = _user_uuid return
def _update_user_with_device(self, _user_uuid, _device_uuid): _values = {"uuid": _user_uuid} _values["ppkefu_browser_device_uuid"] = _device_uuid _row = DeviceUser(**_values) _row.async_update(self.application.redis) _row.update_redis_keys(self.application.redis) return
def _exist_user(self, _request, _user_uuid): _key = DeviceUser.__tablename__ + ".uuid." + _user_uuid if not self.application.redis.exists(_key): logging.error("CHECK CODE") self.setErrorCode(API_ERR.SYS_ERR) return _is_service_user = self.application.redis.hget(_key, "is_service_user") if "True" == _is_service_user: logging.error("user is service user who can not help himself ^_^.") self.setErrorCode(API_ERR.NOT_PORTAL) return _user_fullname = self.application.redis.hget(_key, "user_fullname") if _user_fullname != _request.get("ent_user_fullname"): _row = DeviceUser(uuid=_user_uuid, user_fullname=_request.get("ent_user_fullname")) _row.update_redis_keys(self.application.redis) _row.async_update(self.application.redis) _r = self.getReturnData() _r["user_fullname"] = _user_fullname _r["user_uuid"] = _user_uuid _r["uuid"] = _user_uuid return
def _create_user_name(self, user_uuid=None, data_uuid=None, ip=None): logging.info("create anonymous user_uuid: %s, ip: %s" % (user_uuid, ip)) if user_uuid == None or ip == None or data_uuid == None: return url = "http://123.57.154.168:8099/IP2GEO/" http_headers = {"Content-Type" : "application/json"} http_body = { "ip": ip, "language": _get_config().get("server").get("language").get("locale"), "team_uuid": _get_config().get("team").get("app_uuid"), "team_name": _get_config().get("team").get("name") } http_request = HTTPRequest( url, method='POST', headers=http_headers, validate_cert=False, body=json.dumps(http_body) ) http_client = AsyncHTTPClient() response = yield http_client.fetch(http_request) logging.info("geoservice return: %s" % response.body) _body = json.loads(response.body) if _body == None or _body.get("error_code") != 0: logging.error("cant get user name by ip: %s" % ip) return _country = _body.get("country") _state = _body.get("state") _city = _body.get("city") _location_user = [] if _country != None and len(_country) != 0: _location_user.append(_country) if _state != None and len(_state) != 0: _location_user.append(_state) if _city != None and len(_city) != 0: _location_user.append(_city) if len(_location_user) == 0: return _user_name = ".".join(_location_user) _row = DeviceUser(uuid=user_uuid, user_name=_user_name, user_fullname=_user_name) _row.update_redis_keys(self.application.redis) _row.async_update(self.application.redis) _row = AppUserData(uuid=data_uuid, user_fullname=_user_name) _row.update_redis_keys(self.application.redis) _row.async_update(self.application.redis) return
def _create_user_name(self, user_uuid=None, ip=None): logging.info("create anonymous user_uuid: %s, ip: %s" % (user_uuid, ip)) if user_uuid == None or ip == None: return url = "http://123.57.154.168:8099/IP2GEO/" http_headers = {"Content-Type": "application/json"} http_body = { "ip": ip, "language": _get_config().get("server").get("language").get("locale"), "team_uuid": _get_config().get("team").get("app_uuid"), "team_name": _get_config().get("team").get("name") } http_request = HTTPRequest(url, method='POST', headers=http_headers, validate_cert=False, body=json.dumps(http_body)) http_client = AsyncHTTPClient() response = yield http_client.fetch(http_request) logging.info(response.body) _body = json.loads(response.body) if _body == None or _body.get("error_code") != 0: logging.error("cant get user name by ip: %s" % ip) return _country = _body.get("country") _state = _body.get("state") _city = _body.get("city") _location_user = [] if _country != None and len(_country) != 0: _location_user.append(_country) if _state != None and len(_state) != 0: _location_user.append(_state) if _city != None and len(_city) != 0: _location_user.append(_city) if len(_location_user) == 0: return _user_name = ".".join(_location_user) _row = DeviceUser(uuid=user_uuid, user_name=_user_name, user_fullname=_user_name) _row.update_redis_keys(self.application.redis) _row.async_update(self.applicataion.redis) return
def _update_user_status(self): _values = { "uuid": self.user_uuid, "service_user_status": SERVICE_USER_STATUS.NULL } _row = DeviceUser(**_values) _row.async_update() _row.update_redis_keys(self.application.redis) return
def _update_user_status(self): _values = { "uuid": self.user_uuid, "service_user_status": SERVICE_USER_STATUS.NULL } _row = DeviceUser(**_values) _row.async_update(self.application.redis) _row.update_redis_keys(self.application.redis) return
def _update_user_with_device(self, _user_uuid, _device_uuid): _values = {"uuid": _user_uuid} if self.device_is_browser == True: _values["browser_device_uuid"] = _device_uuid else: _values["mobile_device_uuid"] = _device_uuid _row = DeviceUser(**_values) _row.async_update(self.application.redis) _row.update_redis_keys(self.application.redis) return
def _reset_device_of_user(self, _user_uuid): _v = {"uuid": _user_uuid} if self.device_is_browser == True: _v["browser_device_uuid"] = "" else: _v["mobile_device_uuid"] = "" _row = DeviceUser(**_v) _row.async_update(self.application.redis) _row.update_redis_keys(self.application.redis) return
def _user(self, _device_uuid): _v = {"ppcom_mobile_device_uuid": _device_uuid} if self._is_browser == True: _v = {"ppcom_browser_device_uuid": _device_uuid} _v["uuid"] = self._user_uuid _row = DeviceUser(**_v) _row.async_update() _row.update_redis_keys(self.application.redis) return
def _update_user_with_device(self, _user_uuid, _device_uuid): _values = {"uuid": _user_uuid} if self.device_is_browser == True: _values["browser_device_uuid"] = _device_uuid else: _values["mobile_device_uuid"] = _device_uuid _row = DeviceUser(**_values) _row.async_update() _row.update_redis_keys(self.application.redis) return
def _user(self, _device_uuid): _v = {"ppcom_mobile_device_uuid": _device_uuid} if self._is_browser == True: _v = {"ppcom_browser_device_uuid": _device_uuid} _v["uuid"] = self._user_uuid _row = DeviceUser(**_v) _row.async_update(self.application.redis) _row.update_redis_keys(self.application.redis) return
def _reset_device_of_user(self, _user_uuid): _v = {"uuid": _user_uuid} if self.device_is_browser == True: _v["browser_device_uuid"] = "" else: _v["mobile_device_uuid"] = "" _row = DeviceUser(**_v) _row.async_update() _row.update_redis_keys(self.application.redis) return
def _update_user_status(self, _user_uuid): _values = {"uuid": _user_uuid} _user_status = self.input_data.get("user_status") # NULL, READY, BUSY, REST if _user_status in SERVICE_USER_STATUS: _values["service_user_status"] = _user_status else: _values["service_user_status"] = SERVICE_USER_STATUS.READY _row = DeviceUser(**_values) _row.async_update(self.application.redis) _row.update_redis_keys(self.application.redis) return
def _create_user_name(self, user_uuid=None, ip=None): logging.info("create anonymous user_uuid: %s, ip: %s" % (user_uuid, ip)) if user_uuid == None or ip == None: return url = "http://ipinfo.io/" + ip + "/json" http_headers = {"Content-Type" : "application/json"} http_request = HTTPRequest( url, method='GET', headers=http_headers ) http_client = AsyncHTTPClient() response = yield http_client.fetch(http_request) logging.info("geoservice return: %s" % response.body) _body = json.loads(response.body) if not _body: logging.error("cant get user name by ip: %s" % ip) return _country = _body.get("country") _state = _body.get("state") _city = _body.get("city") _location_user = [] if _country != None and len(_country) != 0: _location_user.append(_country) if _state != None and len(_state) != 0: _location_user.append(_state) if _city != None and len(_city) != 0: _location_user.append(_city) if len(_location_user) == 0: return _user_name = ".".join(_location_user) _row = DeviceUser(uuid=user_uuid, user_name=_user_name, user_fullname=_user_name) _row.update_redis_keys(self.application.redis) _row.async_update(self.application.redis) return
def _create_user_name(self, user_uuid=None, ip=None): logging.info("create anonymous user_uuid: %s, ip: %s" % (user_uuid, ip)) if user_uuid == None or ip == None: return url = "http://ipinfo.io/" + ip + "/json" http_headers = {"Content-Type": "application/json"} http_request = HTTPRequest(url, method='GET', headers=http_headers) http_client = AsyncHTTPClient() response = yield http_client.fetch(http_request) logging.info("geoservice return: %s" % response.body) _body = json.loads(response.body) if not _body: logging.error("cant get user name by ip: %s" % ip) return _country = _body.get("country") _state = _body.get("state") _city = _body.get("city") _location_user = [] if _country != None and len(_country) != 0: _location_user.append(_country) if _state != None and len(_state) != 0: _location_user.append(_state) if _city != None and len(_city) != 0: _location_user.append(_city) if len(_location_user) == 0: return _user_name = ".".join(_location_user) _row = DeviceUser(uuid=user_uuid, user_name=_user_name, user_fullname=_user_name) _row.update_redis_keys(self.application.redis) _row.async_update(self.application.redis) return
def _set(self): _request = json.loads(self.request.body) _user_uuid = _request.get("user_uuid") if _user_uuid == None or len(_user_uuid) == 0: self.setErrorCode(API_ERR.NO_PARA) return _key = DeviceUser.__tablename__ + ".uuid." + _user_uuid if not self.application.redis.exists(_key): self.setErrorCode(API_ERR.NO_USER) return _user = DeviceUser(uuid=_user_uuid, service_user_status=SERVICE_USER_STATUS.REST) _user.async_update(self.application.redis) _user.update_redis_keys(self.application.redis) return
def _post(self, _request): _redis = self.application.redis _user_uuid = _request.get("user_uuid") if _user_uuid == None: logging.error("no user_uuid") self.setErrorCode(API_ERR.NO_PARA) return _user = redis_hash_to_dict(_redis, DeviceUser, _user_uuid) if _user is None: logging.error("No user %s." % _user_uuid) self.setErrorCode(API_ERR.NO_USER) return _values = {"uuid": _user_uuid} _email = _request.get("email") _icon = _request.get("icon") _password = _request.get("password") _fullname = _request.get("fullname") if _email is not None: _values["user_email"] = _email if _password is not None: _values["user_password"] = _password if _fullname is not None: _values["user_fullname"] = _fullname if _icon is not None: _file = redis_hash_to_dict(_redis, FileInfo, _icon) if _file is not None: _values["user_icon"] = _file.get("uuid") else: logging.error("No file: %s." % _icon) self.setErrorCode(API_ERR.NO_FILE) return if len(_values) > 1: _row = DeviceUser(**_values) _row.update_redis_keys(_redis) _row.async_update() return
def _send(self, _user_uuid, _user_email, _user_fullname): _new_password = StringGenerator("[a-zA-Z0-9_\[\]\{\}\(\)\|\&\$\-]{8}").render() _hash_password = hashlib.sha1(_new_password).hexdigest() _row = DeviceUser(uuid=_user_uuid, user_password=_hash_password) _row.update_redis_keys(self.application.redis) _row.async_update() _subject = "[PPMessage]: renew password" _text = "Dear %s,\n Your password has been reset to %s\n Yours Sincerely,\n PPMessage\n" % (_user_fullname, _new_password) _html = "<html><body>Dear %s, <br><br> <p>Your password has been changed to <strong>%s</strong>.</p> <p>Yours Sincerely,</p> <p>PPMessage</p></body></html>" % (_user_fullname, _new_password) _key = REDIS_EMAIL_KEY _request = { "to": [_user_email], "subject": _subject, "text": _text, "html": _html } self.application.redis.rpush(_key, json.dumps(_request)) return
def _send(self, _user_uuid, _user_email, _user_fullname): _new_password = StringGenerator("[a-zA-Z0-9_\[\]\{\}\(\)\|\&\$\-]{8}").render() _hash_password = hashlib.sha1(_new_password).hexdigest() _row = DeviceUser(uuid=_user_uuid, user_password=_hash_password) _row.update_redis_keys(self.application.redis) _row.async_update(self.application.redis) _subject = "[PPMessage]: renew password" _text = "Dear %s,\n Your password has been reset to %s\n Yours Sincerely,\n PPMessage\n" % (_user_fullname, _new_password) _html = "<html><body>Dear %s, <br><br> <p> <strong>%s</strong> is your new password. Login <a href='https://ppmessage.com/user/#/app/signup-md/signin'> PPMessage </a> with your new password. </p> <br><br> <p>Yours Sincerely,</p> <p>PPMessage</p></body></html>" % (_user_fullname, _new_password) _key = REDIS_EMAIL_KEY _request = { "to": [_user_email], "subject": _subject, "text": _text, "html": _html } self.application.redis.rpush(_key, json.dumps(_request)) return
def _exist_user(self, _user_uuid): _update = {"uuid": _user_uuid} if self._user_email: _update.update({"user_email": self._user_email}) if self._user_icon: _update.update({"user_icon": self._user_icon}) if self._user_mobile: _update.update({"user_mobile": self._user_mobile}) if self._user_name: _update.update({"user_fullname": self._user_fullname}) if _update: _row = DeviceUser(**_update) _row.update_redis_keys(self.application.redis) _row.async_update(self.application.redis) _key = DeviceUser.__tablename__ + ".uuid." + _user_uuid _r = self.getReturnData() _r.update(self.application.redis.hgetall(_key)) return
def _update(self): _redis = self.application.redis _request = json.loads(self.request.body) _app_uuid = _request.get("app_uuid") _user_uuid = _request.get("user_uuid") _user_icon = _request.get("user_icon") _user_mobile = _request.get("user_mobile") _user_email = _request.get("user_email") if _user_uuid == None or _app_uuid == None: self.setErrorCode(API_ERR.NO_PARA) return _old_password = _request.get("old_password") _user_password = _request.get("user_password") if _old_password != None and _user_password != None: _key = DeviceUser.__tablename__ + ".uuid." + _user_uuid _ex_password = _redis.hget(_key, "user_password") if _ex_password != _old_password: self.setErrorCode(API_ERR.MIS_ERR) return # remove not table fields _data = copy.deepcopy(_request) del _data["app_uuid"] del _data["user_uuid"] if _old_password != None: del _data["old_password"] if _user_icon != None: if _user_icon.startswith("http"): IOLoop.current().spawn_callback(download_random_identicon, _user_icon) else: _generic_store = get_config_server_generic_store() _abs = _generic_store + os.path.sep + _user_icon _dest = get_config_server_identicon_store() shutil.copy(_abs, _dest) if os.path.exists(_abs): IOLoop.current().spawn_callback(upload_random_identicon, _abs) _data["user_icon"] = get_random_identicon_url(_user_icon) if len(_data) > 0: _updated = generic_update(_redis, DeviceUser, _user_uuid, _data) if not _updated: self.setErrorCode(API_ERR.GENERIC_UPDATE) return if _user_mobile: import phonenumbers _p = phonenumbers.parse(_user_mobile, None) if not phonenumbers.is_valid_number(_p): self.setErrorCode(API_ERR.INVALID_PHONENUMBER) return _row = DeviceUser(uuid=_user_uuid, user_mobile=_user_mobile) _row.update_redis_keys(_redis) _row.async_update(_redis) if _user_email: _key = DeviceUser.__tablename__ + ".user_email." + _user_email if _redis.exists(_key): self.setErrorCode(API_ERR.EX_USER) return _key = DeviceUser.__tablename__ + ".uuid." + _user_uuid _old_email = _redis.hget(_key, "user_email") if _old_email: _key = DeviceUser.__tablename__ + ".user_email." + _old_email _redis.delete(_key) _row = DeviceUser(uuid=_user_uuid, user_email=_user_email) _row.update_redis_keys(_redis) _row.async_update(_redis) return
def _update(self): _redis = self.application.redis _request = json.loads(self.request.body) _user_uuid = _request.get("user_uuid") _user_icon = _request.get("user_icon") _user_mobile = _request.get("user_mobile") _user_email = _request.get("user_email") if _user_uuid == None : self.setErrorCode(API_ERR.NO_PARA) return _old_password = _request.get("old_password") _user_password = _request.get("user_password") if _old_password != None and _user_password != None: _key = DeviceUser.__tablename__ + ".uuid." + _user_uuid _ex_password = _redis.hget(_key, "user_password") if _ex_password != _old_password: self.setErrorCode(API_ERR.MIS_ERR) return # remove not table fields _data = copy.deepcopy(_request) del _data["user_uuid"] if _old_password != None: del _data["old_password"] if _user_icon != None: if _user_icon.startswith("http"): IOLoop.current().spawn_callback(download_random_identicon, _user_icon) else: _generic_store = get_config_server_generic_store() _abs = _generic_store + os.path.sep + _user_icon _dest = get_config_server_identicon_store() shutil.copy(_abs, _dest) if os.path.exists(_abs): IOLoop.current().spawn_callback(upload_random_identicon, _abs) _data["user_icon"] = get_random_identicon_url(_user_icon) if len(_data) > 0: _updated = generic_update(_redis, DeviceUser, _user_uuid, _data) if not _updated: self.setErrorCode(API_ERR.GENERIC_UPDATE) return if _user_mobile: import phonenumbers _p = phonenumbers.parse(_user_mobile, None) if not phonenumbers.is_valid_number(_p): self.setErrorCode(API_ERR.INVALID_PHONENUMBER) return _row = DeviceUser(uuid=_user_uuid, user_mobile=_user_mobile) _row.update_redis_keys(_redis) _row.async_update(_redis) if _user_email: _key = DeviceUser.__tablename__ + ".user_email." + _user_email if _redis.exists(_key): self.setErrorCode(API_ERR.EX_USER) return _key = DeviceUser.__tablename__ + ".uuid." + _user_uuid _old_email = _redis.hget(_key, "user_email") if _old_email: _key = DeviceUser.__tablename__ + ".user_email." + _old_email _redis.delete(_key) _row = DeviceUser(uuid=_user_uuid, user_email=_user_email) _row.update_redis_keys(_redis) _row.async_update(_redis) return