Exemplo n.º 1
0
    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
Exemplo n.º 2
0
 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
Exemplo n.º 3
0
 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
Exemplo n.º 4
0
    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
Exemplo n.º 6
0
    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
Exemplo n.º 7
0
 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
Exemplo n.º 8
0
 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
Exemplo n.º 9
0
 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
Exemplo n.º 10
0
 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
Exemplo n.º 11
0
    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
Exemplo n.º 12
0
 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
Exemplo n.º 13
0
    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
Exemplo n.º 14
0
 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
Exemplo n.º 15
0
    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
Exemplo n.º 16
0
    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
Exemplo n.º 17
0
    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
Exemplo n.º 18
0
    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
Exemplo n.º 19
0
    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
Exemplo n.º 20
0
    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
Exemplo n.º 21
0
    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
Exemplo n.º 23
0
 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
Exemplo n.º 24
0
    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
Exemplo n.º 25
0
    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
Exemplo n.º 26
0
    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