def post(self): """Reregist a pair of umobile and tmobile. Send sms to terminal. """ status = ErrorCode.SUCCESS try: data = DotDict(json_decode(self.request.body)) logging.info("[UWEB] Register request: %s", data) except Exception as e: status = ErrorCode.ILLEGAL_DATA_FORMAT self.write_ret(status) return try: tmobile = data.tmobile user = QueryHelper.get_user_by_tmobile(tmobile, self.db) if user: umobile = user.owner_mobile terminal = QueryHelper.get_terminal_by_tmobile( tmobile, self.db) if int(terminal.biz_type) == UWEB.BIZ_TYPE.YDWS: register_sms = SMSCode.SMS_REGISTER % (umobile, tmobile) ret = SMSHelper.send_to_terminal(tmobile, register_sms) else: activation_code = QueryHelper.get_activation_code(self.db) register_sms = SMSCode.SMS_REGISTER_YDWQ % ( ConfHelper.UWEB_CONF.url_out, activation_code) ret = SMSHelper.send(tmobile, register_sms) ret = DotDict(json_decode(ret)) if ret.status == ErrorCode.SUCCESS: logging.info("[UWEB] Reregist successfully. umobile: %s, tmobile: %s .", umobile, tmobile) else: status = ErrorCode.REGISTER_FAILED logging.error("[UWEB] Reregister failed. umobile: %s, tmobile: %s. Message: %s", umobile, tmobile, ErrorCode.ERROR_MESSAGE[status]) else: logging.exception("[UWEB] Terminal has no user, ignore it. tmobile: %s. ", tmobile) self.write_ret(status) except Exception as e: logging.exception("[UWEB] Reregister failed. tmobile: %s , Exception: %s", tmobile, e.args) status = ErrorCode.REGISTER_FAILED self.write_ret(status)
def post(self): try: data = DotDict(json_decode(self.request.body)) gid = data.gid mobiles = list(data.mobiles) logging.info("[UWEB] batch jh: %s, corp_id: %s", data, self.current_user.cid) except Exception as e: status = ErrorCode.ILLEGAL_DATA_FORMAT logging.exception("[UWEB] Invalid data format. Exception: %s", e.args) self.write_ret(status) return try: status = ErrorCode.SUCCESS begintime = int(time.time()) now_ = datetime.datetime.now() endtime = now_ + relativedelta(years=1) endtime = int(time.mktime(endtime.timetuple())) res = [] for item in mobiles: tmobile = item['tmobile'] if item['umobile']: umobile = item['umobile'] else: corp = self.db.get( "SELECT cid, mobile FROM T_CORP WHERE cid = %s", self.current_user.cid) umobile = corp.mobile biz_type = item['biz_type'] r = DotDict(tmobile=tmobile, status=ErrorCode.SUCCESS) # 1. add terminal terminal = self.db.get("SELECT id, tid, service_status FROM T_TERMINAL_INFO WHERE mobile = %s", tmobile) if terminal: if terminal.service_status == UWEB.SERVICE_STATUS.TO_BE_UNBIND: delete_terminal(terminal.tid, self.db, self.redis) else: logging.error("[UWEB] mobile: %s already existed.", tmobile) r['status'] = ErrorCode.TERMINAL_ORDERED continue terminal_info = dict(tid=tmobile, group_id=gid, tmobile=tmobile, owner_mobile=umobile, mannual_status=UWEB.DEFEND_STATUS.YES, begintime=begintime, endtime=4733481600, offline_time=begintime, login_permit=0, biz_type=biz_type, service_status=UWEB.SERVICE_STATUS.ON) if int(biz_type) == UWEB.BIZ_TYPE.YDWS: register_sms = SMSCode.SMS_REGISTER % (umobile, tmobile) ret = SMSHelper.send_to_terminal(tmobile, register_sms) else: activation_code = QueryHelper.get_activation_code(self.db) tid = get_tid_from_mobile_ydwq(tmobile) terminal_info['tid'] = tid terminal_info['activation_code'] = activation_code terminal_info[ 'service_status'] = UWEB.SERVICE_STATUS.TO_BE_ACTIVATED register_sms = SMSCode.SMS_REGISTER_YDWQ % ( ConfHelper.UWEB_CONF.url_out, activation_code) ret = SMSHelper.send(tmobile, register_sms) add_terminal(terminal_info, self.db, self.redis) # record the add action, enterprise bind_info = dict(tid=terminal_info['tid'], tmobile=tmobile, umobile=umobile, group_id=gid, cid=self.current_user.cid, add_time=int(time.time())) record_add_action(bind_info, self.db) ret = DotDict(json_decode(ret)) if ret.status == ErrorCode.SUCCESS: self.db.execute("UPDATE T_TERMINAL_INFO" " SET msgid = %s" " WHERE tid = %s", ret['msgid'], terminal_info['tid']) else: r['status'] = ErrorCode.FAILED # 2. add user user_info = dict(umobile=umobile, password='******', uname=umobile) add_user(user_info, self.db, self.redis) res.append(r) self.write_ret(status, dict_=DotDict(res=res)) except Exception as e: logging.exception("[UWEB] cid: %s batch jh failed. Exception: %s", self.current_user.cid, e.args) status = ErrorCode.SERVER_BUSY self.write_ret(status)
def post(self): """Create business for a couple of users. """ fields = DotDict(ecid="", cnum="", ctype="", ccolor="", cbrand="", tmobile="", begintime="", endtime="", uname="", umobile="", password="", address="", email="", ecmobile="", biz_type="") for key in fields.iterkeys(): fields[key] = self.get_argument(key, '') # if not check_sql_injection(fields[key]): # logging.error("Create business condition contain SQL inject. %s : %s", key, fields[key]) # self.render('errors/error.html', # message=ErrorCode.ERROR_MESSAGE[ErrorCode.CREATE_CONDITION_ILLEGAL]) # return white_list = check_zs_phone(fields.tmobile, self.db) if not white_list: logging.error( "Create business error, %s is not whitelist", fields.tmobile) self.render('errors/error.html', message=ErrorCode.ERROR_MESSAGE[ErrorCode.MOBILE_NOT_ORDERED]) return try: # 1: add user user = self.db.get( "SELECT id FROM T_USER WHERE mobile = %s", fields.umobile) if not user: self.db.execute("INSERT INTO T_USER(id, uid, password, name, mobile, address, email, remark)" " VALUES(NULL, %s, password(%s), %s, %s, %s, %s, NULL)", fields.umobile, '111111', fields.uname, fields.umobile, fields.address, fields.email) self.db.execute("INSERT INTO T_SMS_OPTION(uid)" " VALUES(%s)", fields.umobile) # 2: add terminal group = self.db.get("SELECT id FROM T_GROUP" " WHERE corp_id = %s AND type = 0 LIMIT 1", fields.ecid) if not group: gid = self.db.execute("INSERT INTO T_GROUP(corp_id, name, type)" " VALUES(%s, default, default)", fields.ecid) else: gid = group.id # record the add action, enterprise bind_info = dict(tid=fields.tmobile, tmobile=fields.tmobile, umobile=fields.umobile, group_id=gid, cid=fields.ecmobile, add_time=int(time.time())) record_add_action(bind_info, self.db) if not fields.umobile: user_mobile = fields.ecmobile else: user_mobile = fields.umobile # 3: send message to terminal biz_type = int(fields.biz_type) if biz_type == UWEB.BIZ_TYPE.YDWS: self.db.execute("INSERT INTO T_TERMINAL_INFO(tid, group_id, mobile, owner_mobile," " begintime, endtime, offline_time, login_permit)" " VALUES (%s, %s, %s, %s, %s, %s, %s, %s)", fields.tmobile, gid, fields.tmobile, user_mobile, fields.begintime, 4733481600, fields.begintime, 0) register_sms = SMSCode.SMS_REGISTER % ( fields.umobile, fields.tmobile) ret = SMSHelper.send_to_terminal(fields.tmobile, register_sms) self.db.execute("INSERT INTO T_CAR(tid, cnum, type, color, brand)" " VALUES(%s, %s, %s, %s, %s)", fields.tmobile, fields.cnum, fields.ctype, fields.ccolor, fields.cbrand) else: tid = get_tid_from_mobile_ydwq(fields.tmobile) activation_code = QueryHelper.get_activation_code(self.db) self.db.execute("INSERT INTO T_TERMINAL_INFO(tid, group_id, mobile, owner_mobile," " begintime, endtime, offline_time, login_permit," " biz_type, activation_code, service_status)" " VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)", tid, gid, fields.tmobile, user_mobile, fields.begintime, 4733481600, fields.begintime, 0, biz_type, activation_code, UWEB.SERVICE_STATUS.TO_BE_ACTIVATED) register_sms = SMSCode.SMS_REGISTER_YDWQ % ( ConfHelper.UWEB_CONF.url_out, activation_code) ret = SMSHelper.send(fields.tmobile, register_sms) self.db.execute("INSERT INTO T_CAR(tid, cnum, type, color, brand)" " VALUES(%s, %s, %s, %s, %s)", tid, fields.cnum, fields.ctype, fields.ccolor, fields.cbrand) ret = DotDict(json_decode(ret)) sms_status = 0 if ret.status == ErrorCode.SUCCESS: self.db.execute("UPDATE T_TERMINAL_INFO" " SET msgid = %s" " WHERE mobile = %s", ret['msgid'], fields.tmobile) # convert front desk need format sms_status = 1 else: sms_status = 0 logging.error("[ADMIN] Create business sms send failure." " terminal mobile: %s, owner mobile: %s", fields.tmobile, fields.umobile) fields.sms_status = sms_status fields.service_status = 1 self.render('business/list.html', business=fields, status=ErrorCode.SUCCESS, message='') except Exception as e: logging.exception("Add terminal failed. Exception: %s.", e.args) self.render('errors/error.html', message=ErrorCode.ERROR_MESSAGE[ErrorCode.CREATE_USER_FAILURE])
def post(self): status = ErrorCode.SUCCESS try: data = DotDict(json_decode(self.request.body)) tmobile = data.get('tmobile', None) umobile = data.get('umobile', None) group_id = data.get('group_id', None) if int(group_id) == -1: group = QueryHelper.get_default_group_by_cid(self.current_user.cid, self.db) group_id = group.gid cnum = data.get('cnum', None) avatar = None avatar_ = data.get('avatar', None) if avatar_: avatar = base64.urlsafe_b64decode(str(avatar_)) logging.info("[BIND] umobile: %s, tmobile: %s", umobile, tmobile) except Exception as e: logging.exception("[BIND] Illegal format, body: %s, Exception: %s", self.request.body, e.args) status = ErrorCode.ILLEGAL_DATA_FORMAT self.write_ret(status) return try: # record the add action begintime = int(time.time()) now_ = datetime.datetime.now() endtime = now_ + relativedelta(years=1) endtime = int(time.mktime(endtime.timetuple())) # avatar terminal = self.db.get("SELECT id, tid, service_status FROM T_TERMINAL_INFO WHERE mobile = %s", tmobile) if terminal: if terminal.service_status == UWEB.SERVICE_STATUS.TO_BE_UNBIND: delete_terminal(terminal.tid, self.db, self.redis) else: status = ErrorCode.TERMINAL_ORDERED logging.error("[UWEB] mobile: %s already existed.", tmobile) self.write_ret(status) return tid = get_tid_from_mobile_ydwq(tmobile) activation_code = QueryHelper.get_activation_code(self.db) terminal_info = dict(tid=tid, group_id=group_id, tmobile=tmobile, owner_mobile=umobile, mannual_status=UWEB.DEFEND_STATUS.YES, begintime=begintime, endtime=4733481600, offline_time=begintime, cnum=cnum, icon_type=0, login_permit=1, push_status=1, vibl=1, use_scene=3, activation_code=activation_code, service_status=UWEB.SERVICE_STATUS.TO_BE_ACTIVATED) add_terminal(terminal_info, self.db, self.redis) bind_info = dict(tid=tmobile, tmobile=tmobile, umobile=umobile, group_id=group_id, cid=self.current_user.cid, add_time=begintime) record_add_action(bind_info, self.db) avatar_full_path, avatar_path, avatar_name, avatar_time = self.get_avatar_info(tmobile) register_sms = SMSCode.SMS_REGISTER_YDWQ % (ConfHelper.UWEB_CONF.url_out, activation_code) ret = SMSHelper.send(tmobile, register_sms) ret = DotDict(json_decode(ret)) if ret.status == ErrorCode.SUCCESS: self.db.execute("UPDATE T_TERMINAL_INFO" " SET msgid = %s" " WHERE mobile = %s", ret['msgid'], tmobile) if avatar: avatar_name = tmobile + '.png' avatar_path = self.application.settings['avatar_path'] + avatar_name avatar_full_path = self.application.settings['server_path'] + avatar_path img = open(avatar_full_path, 'w') img.write(avatar) img.close() avatar_time = self.update_avatar_time(tmobile) logging.info("[BIND] avatar_time: %s, tmobile: %s, user: %s", avatar_time, tmobile, self.current_user.cid) else: logging.error("[BIND] Terminal: %s has no avatar.", tmobile) else: logging.error("[BIND] Send %s to terminal %s failed.", register_sms, tmobile) self.write_ret(status, dict_=dict(avatar_path=avatar_path, avatar_time=avatar_time)) except Exception as e: logging.exception("[BIND] Bind terminal failed, user: %s. Exception: %s", self.current_user.uid, e.args) status = ErrorCode.SERVER_BUSY self.write_ret(status)
def post(self): """Add a terminal. """ status = ErrorCode.SUCCESS try: data = DotDict(json_decode(self.request.body)) logging.info("[UWEB] Corp add terminal request: %s, cid: %s", data, self.current_user.cid) except Exception as e: status = ErrorCode.ILLEGAL_DATA_FORMAT self.write_ret(status) return try: if data.has_key('cnum') and not check_cnum(data.cnum): status = ErrorCode.ILLEGAL_CNUM self.write_ret(status) return # 1 year begintime = int(time.time()) now_ = datetime.datetime.now() endtime = now_ + relativedelta(years=1) endtime = int(time.mktime(endtime.timetuple())) # 1: add terminal #umobile = data.umobile if data.umobile else self.current_user.cid if data.umobile: umobile = data.umobile else: corp = QueryHelper.get_corp_by_cid(self.current_user.cid, self.db) umobile = corp.get('c_mobile', '') terminal = QueryHelper.get_terminal_by_tmobile(data.tmobile, self.db) if terminal: if terminal.service_status == UWEB.SERVICE_STATUS.TO_BE_UNBIND: delete_terminal(terminal.tid, self.db, self.redis) else: logging.error( "[UWEB] mobile: %s already existed.", data.tmobile) status = ErrorCode.TERMINAL_ORDERED self.write_ret(status) return vibl = data.get("vibl") use_scene = get_use_scene_by_vibl(vibl) biz_type = data.get('biz_type', UWEB.BIZ_TYPE.YDWS) tid = data.tmobile terminal_info = dict(tid=tid, group_id=data.group_id, tmobile=data.tmobile, owner_mobile=umobile, mannual_status=UWEB.DEFEND_STATUS.YES, begintime=begintime, endtime=4733481600, offline_time=begintime, cnum=data.cnum, icon_type=data.icon_type, login_permit=data.login_permit, push_status=data.push_status, vibl=data.vibl, use_scene=use_scene, biz_type=biz_type, speed_limit=data.speed_limit, stop_interval=data.stop_interval, service_status=UWEB.SERVICE_STATUS.ON) if int(biz_type) == UWEB.BIZ_TYPE.YDWS: # 0. check tmobile is whitelist or not white_list = check_zs_phone(data.tmobile, self.db) if not white_list: logging.error("[UWEB] mobile: %s is not whitelist.", data.tmobile) status = ErrorCode.MOBILE_NOT_ORDERED message = ErrorCode.ERROR_MESSAGE[status] % data.tmobile self.write_ret(status, message=message) return # 4: send message to terminal register_sms = SMSCode.SMS_REGISTER % (umobile, data.tmobile) ret = SMSHelper.send_to_terminal(data.tmobile, register_sms) else: tid = get_tid_from_mobile_ydwq(data.tmobile) activation_code = QueryHelper.get_activation_code(self.db) terminal_info['tid'] = tid terminal_info['activation_code'] = activation_code terminal_info['service_status'] = UWEB.SERVICE_STATUS.TO_BE_ACTIVATED register_sms = SMSCode.SMS_REGISTER_YDWQ % (ConfHelper.UWEB_CONF.url_out, activation_code) ret = SMSHelper.send(data.tmobile, register_sms) add_terminal(terminal_info, self.db, self.redis) # record the add action bind_info = dict(tid=data.tmobile, tmobile=data.tmobile, umobile=umobile, group_id=data.group_id, cid=self.current_user.cid, add_time=int(time.time())) record_add_action(bind_info, self.db) if ret: ret = DotDict(json_decode(ret)) if ret.status == ErrorCode.SUCCESS: self.db.execute("UPDATE T_TERMINAL_INFO" " SET msgid = %s" " WHERE mobile = %s", ret['msgid'], data.tmobile) else: logging.error("[UWEB] Send %s to terminal %s failed.", register_sms, data.tmobile) else: logging.error("[UWEB] Send %s to terminal %s failed.", register_sms, data.tmobile) # NOTE: add user user_info = dict(umobile=umobile, password='******', uname=umobile) add_user(user_info, self.db, self.redis) self.write_ret(status) except Exception as e: logging.exception("[UWEB] Update terminal info failed. cid:%s, Exception: %s", self.current_user.cid, e.args) status = ErrorCode.SERVER_BUSY self.write_ret(status)