def get_customer_app(appid): app = App.get_app(g._db, appid) if app: obj = {"id": appid, "name": app['name'], "wechat": app['wechat']} return make_response(200, obj) else: return make_response(404, {"error": "not found"})
def upload_form_image(): if 'file' not in request.files: return make_response(400) f = request.files['file'] content_type = f.headers.get("Content-Type", '') ext = image_ext(content_type) if not ext: return make_response(400, {"error": "can't get image extenstion"}) data = f.read() if not data: return make_response(400, {"error": "data is null"}) name = hashlib.md5(data).hexdigest() path = "/images/" + name + ext r = FS.upload(path, data) if not r: return make_response(400, {"error": "upload file fail"}) url = request.url_root + "images/" + name + ext src = "/images/" + name + ext obj = {"src": src, "src_url": url} return make_response(200, data=obj)
def upload_form_image(): if 'file' not in request.files: return make_response(400) f = request.files['file'] content_type = f.headers["Content-Type"] if f.headers.has_key("Content-Type") else "" ext = image_ext(content_type) if not ext: return make_response(400, {"error":"can't get image extenstion"}) data = f.read() if not data: return make_response(400, {"error":"data is null"}) name = md5.new(data).hexdigest() path = "/images/" + name + ext r = FS.upload(path, data) if not r: return make_response(400, {"error":"upload file fail"}) url = request.url_root + "images/" + name + ext src = "/images/" + name + ext obj = {"src":src, "src_url":url} return make_response(200, data=obj)
def get_customer_app(appid): app = App.get_app(g._db, appid) if app: obj = { "id":appid, "name":app['name'], "wechat":app['wechat'] } return make_response(200, obj) else: return make_response(404, {"error":"not found"})
def grant_auth_token(): rds = g.rds appid = request.appid obj = json.loads(request.data) uid = obj["uid"] name = obj["user_name"] if obj.has_key("user_name") else "" token = User.get_user_access_token(rds, appid, uid) if not token: token = create_access_token() User.add_user_count(rds, appid, uid) User.save_user_access_token(rds, appid, uid, name, token) u = "%s_%s"%(appid, uid) realm = "com.beetle.face" key = hmac(u, realm, token) User.set_turn_key(rds, appid, uid, key) User.set_turn_password(rds, appid, uid, token) if obj.has_key("platform_id") and obj.has_key("device_id"): platform_id = obj['platform_id'] device_id = obj['device_id'] s = init_message_queue(appid, uid, platform_id, device_id) if s: logging.error("init message queue success") else: logging.error("init message queue fail") data = {"data":{"token":token}} return make_response(200, data)
def group_member_setting(gid, memberid): appid = request.appid uid = request.uid if uid != memberid: raise ResponseMeta(400, "setting other is forbidden") obj = json.loads(request.data) if obj.has_key('quiet'): User.set_group_do_not_disturb(g.rds, appid, uid, gid, obj['quiet']) elif obj.has_key('do_not_disturb'): User.set_group_do_not_disturb(g.rds, appid, uid, gid, obj['do_not_disturb']) elif obj.has_key('nickname'): Group.update_nickname(g._db, gid, uid, obj['nickname']) v = { "group_id":gid, "timestamp":int(time.time()), "nickname":obj['nickname'], "member_id":uid } op = {"update_member_nickname":v} send_group_notification(appid, gid, op, None) else: raise ResponseMeta(400, "no action") resp = {"success":True} return make_response(200, resp)
def grant_auth_token(): rds = g.rds appid = request.appid obj = request.get_json(force=True, silent=True, cache=False) if obj is None: logging.debug("json decode err:%s", e) raise ResponseMeta(400, "json decode error") uid = obj.get('uid') if type(uid) != int: raise ResponseMeta(400, "invalid param") name = obj.get('user_name', "") token = User.get_user_access_token(rds, appid, uid) if not token: token = create_access_token() User.add_user_count(rds, appid, uid) User.save_user_access_token(rds, appid, uid, name, token) u = "%s_%s"%(appid, uid) realm = "com.beetle.face" key = hmac(u, realm, token) User.set_turn_realm_key(rds, realm, u, key) data = {"data":{"token":token}} return make_response(200, data)
def upload_file(): if not request.data: return NO_CONTENT() md5_value = hashlib.md5(request.data).hexdigest() path = "/audios/" + md5_value r = FS.upload(path, request.data) if not r: return make_response(400) else: obj = {} url = request.url_root + "audios/" + md5_value src = "/audio/" + md5_value obj["src"] = src obj["src_url"] = url return make_response(200, obj)
def download_file(audio_path): path = "/audios/" + audio_path data = FS.download(path) if not data: return make_response(400) else: return data
def group_member_setting(gid, memberid): appid = request.appid uid = request.uid if uid != memberid: raise ResponseMeta(400, "setting other is forbidden") obj = json.loads(request.data) if obj.has_key('quiet'): User.set_group_do_not_disturb(g.rds, appid, uid, gid, obj['quiet']) elif obj.has_key('do_not_disturb'): User.set_group_do_not_disturb(g.rds, appid, uid, gid, obj['do_not_disturb']) elif obj.has_key('nickname'): Group.update_nickname(g._db, gid, uid, obj['nickname']) v = { "group_id":gid, "timestamp":int(time.time()), "nickname":obj['nickname'], "member_id":uid } op = {"update_member_nickname":v} send_group_notification(appid, gid, op, None) else: raise ResponseMeta(400, "no action") resp = {"success":True} return make_response(200, resp)
def get_groups(): appid = request.appid uid = request.uid groups = Group.get_groups(g._db, appid, uid) fields = request.args.get("fields", '') fields = fields.split(",") for obj in groups: gid = obj['id'] if "members" in fields: members = Group.get_group_members(g._db, gid) for m in members: name = User.get_user_name(g.rds, appid, m['uid']) m['name'] = name if name else '' if not m.get('nickname'): m['nickname'] = "" obj['members'] = members if "quiet" in fields: q = User.get_group_do_not_disturb(g.rds, appid, uid, gid) obj['do_not_disturb'] = bool(q) resp = {"data":groups} return make_response(200, resp)
def delete_group_member(gid): appid = request.appid obj = request.get_json(force=True, silent=True, cache=False) if obj is None: logging.debug("json decode err:%s", e) raise ResponseMeta(400, "json decode error") members = obj if len(members) == 0: raise ResponseMeta(400, "no memebers to delete") group = Group.get_group(g._db, gid) if not group: raise ResponseMeta(400, "group non exists") for m in members: if type(m) == int: member = {"uid": m} else: member = m remove_group_member(appid, gid, group['name'], member) resp = {"success": True} return make_response(200, resp)
def group_member_setting(gid, memberid): appid = request.appid uid = memberid group = Group.get_group(g._db, gid) if not group: raise ResponseMeta(400, "group non exists") obj = json.loads(request.data) if obj.has_key('do_not_disturb'): User.set_group_do_not_disturb(g.rds, appid, uid, gid, obj['do_not_disturb']) elif obj.has_key('nickname'): Group.update_nickname(g._db, gid, uid, obj['nickname']) v = { "group_id":gid, "group_name":group['name'], "timestamp":int(time.time()), "nickname":obj['nickname'], "member_id":uid } op = {"update_member_nickname":v} send_group_notification(appid, gid, op, None) elif obj.has_key('mute'): mute = 1 if obj['mute'] else 0 Group.update_mute(g._db, gid, uid, mute) content = "%d,%d,%d" % (gid, memberid, mute) publish_message(g.rds, "group_member_mute", content) else: raise ResponseMeta(400, "no action") resp = {"success":True} return make_response(200, resp)
def create_group(): appid = request.appid obj = request.get_json(force=True, silent=True, cache=False) if obj is None: logging.debug("json decode err:%s", e) raise ResponseMeta(400, "json decode error") master = obj["master"] name = obj["name"] is_super = obj["super"] if "super" in obj else False members = obj["members"] if hasattr(request, 'uid') and request.uid != master: raise ResponseMeta(400, "master must be self") gid = 0 if config.EXTERNAL_GROUP_ID: gid = obj['group_id'] if 'group_id' in obj else 0 #支持members参数为对象数组 #[{uid:"", name:"", avatar:"可选"}, ...] memberIDs = [m['uid'] if type(m) == dict else m for m in members] if gid > 0: gid = Group.create_group_ext(g._db, gid, appid, master, name, is_super, memberIDs) else: gid = Group.create_group(g._db, appid, master, name, is_super, memberIDs) s = 1 if is_super else 0 content = { "group_id": gid, "app_id": appid, "super": s, "name": Group.GROUP_EVENT_CREATE } Group.publish_create_event(g.rds, appid, gid, is_super) for mem in memberIDs: content = { "group_id": gid, "member_id": mem, "name": Group.GROUP_EVENT_MEMBER_ADD } Group.publish_member_add_event(g.rds, gid, mem) v = { "group_id": gid, "master": master, "name": name, "members": members, "timestamp": int(time.time()) } op = {"create": v} send_group_notification(appid, gid, op, members) resp = {"data": {"group_id": gid}} return make_response(200, resp)
def upgrade_group(gid): """从普通群升级为超级群""" appid = request.appid group = Group.get_group(g._db, gid) members = Group.get_group_members(g._db, gid) if not group: raise ResponseMeta(400, "group non exists") Group.update_group_super(g._db, gid, 1) content = "%d,%d,%d" % (gid, appid, 1) publish_message(g.rds, "group_upgrade", content) v = { "group_id": gid, "group_name": group['name'], "timestamp": int(time.time()), "super": 1 } op = {"upgrade": v} send_group_notification(appid, gid, op, None) resp = {"success": True} return make_response(200, resp)
def get_groups(): appid = request.appid uid = request.uid groups = Group.get_groups(g._db, appid, uid) fields = request.args.get("fields", '') fields = fields.split(",") for obj in groups: gid = obj['id'] if "members" in fields: members = Group.get_group_members(g._db, gid) for m in members: name = User.get_user_name(g.rds, appid, m['uid']) m['name'] = name if name else '' if not m.get('nickname'): m['nickname'] = "" obj['members'] = members if "quiet" in fields: q = User.get_group_do_not_disturb(g.rds, appid, uid, gid) obj['do_not_disturb'] = bool(q) resp = {"data":groups} return make_response(200, resp)
def download_file(file_path): path = "/files/" + file_path data = FS.download(path) if not data: return make_response(400) else: return data
def group_member_setting(gid, memberid): appid = request.appid uid = memberid group = Group.get_group(g._db, gid) if not group: raise ResponseMeta(400, "group non exists") obj = json.loads(request.data) if obj.has_key('do_not_disturb'): User.set_group_do_not_disturb(g.rds, appid, uid, gid, obj['do_not_disturb']) elif obj.has_key('nickname'): Group.update_nickname(g._db, gid, uid, obj['nickname']) v = { "group_id": gid, "group_name": group['name'], "timestamp": int(time.time()), "nickname": obj['nickname'], "member_id": uid } op = {"update_member_nickname": v} send_group_notification(appid, gid, op, None) elif obj.has_key('mute'): mute = 1 if obj['mute'] else 0 Group.update_mute(g._db, gid, uid, mute) content = "%d,%d,%d" % (gid, memberid, mute) publish_message(g.rds, "group_member_mute", content) else: raise ResponseMeta(400, "no action") resp = {"success": True} return make_response(200, resp)
def download_file(file_path): path = "/files/" + file_path data = FS.download(path) if not data: return make_response(400) else: return data
def get_offline_message(): rds = g.rds appid = request.appid customer_id = request.args.get("customer_id", "") uid = int(request.args.get("uid", 0)) if not uid and hasattr(request, 'uid'): uid = request.uid if not uid and customer_id: uid = Customer.get_client_id(rds, appid, customer_id) if not uid: raise ResponseMeta(400, "invalid uid") platform_id = int(request.args.get("platform_id", 0)) device_id = request.args.get("device_id", "") params = { "appid": appid, "uid": uid, "device_id":device_id, "platform_id":platform_id, } #获取离线消息数目 count = get_offline_count(appid, uid, platform_id, device_id) new = 1 if count > 0 else 0 data = {"data":{"count":count, "new":new}} return make_response(200, data)
def download_file(audio_path): path = "/audios/" + audio_path data = FS.download(path) if not data: return make_response(400) else: return data
def upgrade_group(gid): """从普通群升级为超级群""" appid = request.appid group = Group.get_group(g._db, gid) members = Group.get_group_members(g._db, gid) if not group: raise ResponseMeta(400, "group non exists") Group.update_group_super(g._db, gid, 1) content = "%d,%d,%d"%(gid, appid, 1) publish_message(g.rds, "group_upgrade", content) v = { "group_id":gid, "group_name":group['name'], "timestamp":int(time.time()), "super":1 } op = {"upgrade":v} send_group_notification(appid, gid, op, None) resp = {"success":True} return make_response(200, resp)
def upload_file(): if not request.data: return NO_CONTENT() md5_value = md5.new(request.data).hexdigest() path = "/audios/" + md5_value r = FS.upload(path, request.data) if not r: return make_response(400) else: obj = {} url = request.url_root + "audios/" + md5_value src = "/audio/" + md5_value obj["src"] = src obj["src_url"] = url return make_response(200, obj)
def update_group(gid): appid = request.appid obj = json.loads(request.data) if obj.has_key('name'): name = obj["name"] Group.update_group_name(g._db, gid, name) v = { "group_id":gid, "timestamp":int(time.time()), "name":name } op = {"update_name":v} send_group_notification(appid, gid, op, None) elif obj.has_key('notice'): notice = obj["notice"] Group.update_group_notice(g._db, gid, notice) v = { "group_id":gid, "timestamp":int(time.time()), "name":notice } op = {"update_notice":v} send_group_notification(appid, gid, op, None) else: raise ResponseMeta(400, "patch nothing") resp = {"success":True} return make_response(200, resp)
def update_group(gid): appid = request.appid obj = json.loads(request.data) if obj.has_key('name'): name = obj["name"] Group.update_group_name(g._db, gid, name) v = { "group_id":gid, "timestamp":int(time.time()), "name":name } op = {"update_name":v} send_group_notification(appid, gid, op, None) elif obj.has_key('notice'): notice = obj["notice"] Group.update_group_notice(g._db, gid, notice) v = { "group_id":gid, "timestamp":int(time.time()), "notice":notice } op = {"update_notice":v} send_group_notification(appid, gid, op, None) else: raise ResponseMeta(400, "patch nothing") resp = {"success":True} return make_response(200, resp)
def get_store(store_id): s = Store.get_store(g._db, store_id) obj = {"store_id": store_id, "name": ''} if s: obj['name'] = s['name'] return make_response(200, obj)
def upload_image(): if not request.data: return make_response(400) content_type = request.headers.get("Content-Type", '') ext = image_ext(content_type) if not ext: return make_response(400) data = request.data name = hashlib.md5(data).hexdigest() path = "/images/" + name + ext r = FS.upload(path, data) if not r: return make_response(400) url = request.url_root + "images/" + name + ext src = "/images/" + name + ext obj = {"src": src, "src_url": url} return make_response(200, data=obj)
def leave_group(gid, memberid): appid = request.appid #群组管理员或者成员本身有权限退出群 if memberid != request.uid: raise ResponseMeta(400, "no authority") remove_group_member(appid, gid, {"uid":memberid}) resp = {"success":True} return make_response(200, resp)
def upload_image(): if not request.data: return make_response(400) content_type = request.headers["Content-Type"] if request.headers.has_key("Content-Type") else "" ext = image_ext(content_type) if not ext: return make_response(400) data = request.data name = md5.new(data).hexdigest() path = "/images/" + name + ext r = FS.upload(path, data) if not r: return make_response(400) url = request.url_root + "images/" + name + ext src = "/images/" + name + ext obj = {"src":src, "src_url":url} return make_response(200, data=obj)
def upload(): url = 'http://api.gobelieve.io/images' # url = 'http://0.0.0.0:8001/images/upload' data = request.form.get('data', '') content_type = request.form.get('contentType', '') authorization = request.form.get('authorization', '') headers = {'Authorization': authorization, 'Content-Type': content_type} response = requests.post(url, base64.b64decode(data), headers=headers) print response.content return make_response(200, json.loads(response.content))
def upload(): url = 'http://api.gobelieve.io/images' # url = 'http://0.0.0.0:8001/images/upload' data = request.form.get('data', '') content_type = request.form.get('contentType', '') authorization = request.form.get('authorization', '') headers = {'Authorization': authorization, 'Content-Type': content_type} response = requests.post(url, base64.b64decode(data), headers=headers) print response.content return make_response(200, json.loads(response.content))
def leave_group(gid, memberid): appid = request.appid #群组管理员或者成员本身有权限退出群 if memberid != request.uid: raise ResponseMeta(400, "no authority") remove_group_member(appid, gid, {"uid":memberid}) resp = {"success":True} return make_response(200, resp)
def upload_image(): if not request.data: return make_response(400) content_type = request.headers["Content-Type"] if request.headers.has_key( "Content-Type") else "" ext = image_ext(content_type) if not ext: return make_response(400) data = request.data name = md5.new(data).hexdigest() path = "/images/" + name + ext r = FS.upload(path, data) if not r: return make_response(400) url = request.url_root + "images/" + name + ext src = "/images/" + name + ext obj = {"src": src, "src_url": url} return make_response(200, data=obj)
def get_store(store_id): s = Store.get_store(g._db, store_id) obj = { "store_id": store_id, "name": '' } if s: obj['name'] = s['name'] return make_response(200, obj)
def get_customer(appid, customer_id): rds = g.imrds name, avatar = Customer.get_customer_name(rds, appid, customer_id) if not name: name = "" if not avatar: avatar = "" obj = {"appid": appid, "uid": customer_id, "name": name, "avatar": avatar} return make_response(200, obj)
def upload_form_file(): if 'file' not in request.files: return NO_CONTENT() f = request.files['file'] data = f.read() if not data: return NO_CONTENT() md5_value = hashlib.md5(data).hexdigest() path = "/audios/" + md5_value r = FS.upload(path, data) if not r: return make_response(400, {"error": "upload file fail"}) obj = {} url = request.url_root + "audios/" + md5_value src = "/audio/" + md5_value obj["src"] = src obj["src_url"] = url return make_response(200, obj)
def dequeue_message(): appid = request.appid uid = request.uid obj = json.loads(request.data) msgid = obj["msgid"] if obj.has_key("msgid") else 0 if not msgid: raise ResponseMeta(400, "invalid msgid") r = rpc.dequeue_message(appid, uid, msgid) logging.debug("dequue message:%s", r) return make_response(200, {"data":{"success":True}})
def upload_form_file(): if 'file' not in request.files: return NO_CONTENT() f = request.files['file'] data = f.read() if not data: return NO_CONTENT() md5_value = md5.new(data).hexdigest() path = "/audios/" + md5_value r = FS.upload(path, data) if not r: return make_response(400, {"error":"upload file fail"}) obj = {} url = request.url_root + "audios/" + md5_value src = "/audio/" + md5_value obj["src"] = src obj["src_url"] = url return make_response(200, obj)
def add_group_member(gid): appid = request.appid obj = json.loads(request.data) if type(obj) is dict: members = [obj["uid"]] else: members = obj if len(members) == 0: return "" #支持members参数为对象数组 memberIDs = [m['uid'] if type(m) == dict else m for m in members] g._db.begin() for member_id in memberIDs: try: Group.add_group_member(g._db, gid, member_id) User.reset_group_synckey(g.rds, appid, member_id, gid) except pymysql.err.IntegrityError as e: # 可能是重新加入群 #1062 duplicate member if e.args[0] != 1062: raise g._db.commit() for m in members: member_id = m['uid'] if type(m) == dict else m v = { "group_id": gid, "member_id": member_id, "timestamp": int(time.time()) } if type(m) == dict and m.get('name'): v['name'] = m['name'] if type(m) == dict and m.get('avatar'): v['avatar'] = m['avatar'] op = {"add_member": v} send_group_notification(appid, gid, op, [member_id]) content = { "group_id": gid, "member_id": member_id, "name": Group.GROUP_EVENT_MEMBER_ADD } publish_message(g.rds, content) resp = {"success": True} return make_response(200, resp)
def leave_group_member(gid, memberid): appid = request.appid group = Group.get_group(g._db, gid) if not group: raise ResponseMeta(400, "group non exists") name = User.get_user_name(g.rds, appid, memberid) m = {"uid": memberid} if name: m['name'] = name remove_group_member(appid, gid, group['name'], m) resp = {"success": True} return make_response(200, resp)
def leave_group_member(gid, memberid): appid = request.appid if hasattr(request, "uid") and request.uid > 0: #群组管理员或者成员本身有权限退出群 if memberid != request.uid: master = Group.get_group_master(g._imdb, gid) if master != request.uid: raise ResponseMeta(400, "no authority") remove_group_member(appid, gid, memberid) resp = {"success":True} return make_response(200, resp)
def leave_group_member(gid, memberid): appid = request.appid group = Group.get_group(g._db, gid) if not group: raise ResponseMeta(400, "group non exists") name = User.get_user_name(g.rds, appid, memberid) m = {"uid":memberid} if name: m['name'] = name remove_group_member(appid, gid, group['name'], m) resp = {"success":True} return make_response(200, resp)
def download_mp3(audio_path): path = "/audios/" + audio_path + ".mp3" data = FS.download(path) if not data: path = "/audios/" + audio_path amr_data = FS.download(path) if amr_data: data = amr_to_mp3(amr_data) path = "/audios/" + audio_path + ".mp3" FS.upload(path, data) if not data: return make_response(400) else: return data
def upload_file(): if 'file' not in request.files: return NO_CONTENT() #keep file extention f = request.files['file'] _, ext = os.path.splitext(f.filename) data = f.read() if not data: return NO_CONTENT() md5_value = md5.new(data).hexdigest() filename = md5_value + ext path = "/files/" + filename r = FS.upload(path, data) if not r: return make_response(400, {"error":"upload file fail"}) obj = {} url = request.url_root + "files/" + filename src = "/files/" + filename obj["src"] = src obj["src_url"] = url return make_response(200, obj)
def download_mp3(audio_path): path = "/audios/" + audio_path + ".mp3" data = FS.download(path) if not data: path = "/audios/" + audio_path amr_data = FS.download(path) if amr_data: data = amr_to_mp3(amr_data) path = "/audios/" + audio_path + ".mp3" FS.upload(path, data) if not data: return make_response(400) else: return data
def upload_file(): if 'file' not in request.files: return NO_CONTENT() #keep file extention f = request.files['file'] _, ext = os.path.splitext(f.filename) data = f.read() if not data: return NO_CONTENT() md5_value = md5.new(data).hexdigest() filename = md5_value + ext path = "/files/" + filename r = FS.upload(path, data) if not r: return make_response(400, {"error": "upload file fail"}) obj = {} url = request.url_root + "files/" + filename src = "/files/" + filename obj["src"] = src obj["src_url"] = url return make_response(200, obj)
def customer_register(): rds = g.rds db = g._db obj = json.loads(request.data) appid = obj.get("appid", 0) uid = obj.get("customer_id", "") name = obj.get("name", "") avatar = obj.get("avatar", "") if not appid: raise ResponseMeta(400, "invalid param") store_id = App.get_store_id(db, appid) if not store_id: raise ResponseMeta(400, "app do not support customer") if not uid: client_id = Customer.generate_client_id(rds) else: client_id = Customer.get_client_id(rds, appid, uid) if not client_id: client_id = Customer.generate_client_id(rds) Customer.set_client_id(rds, appid, uid, client_id) token = User.get_user_access_token(rds, appid, client_id) if not token: token = create_access_token() User.add_user_count(rds, appid, client_id) User.save_user(rds, appid, client_id, name, avatar, token) User.save_token(rds, appid, client_id, token) if obj.has_key("platform_id") and obj.has_key("device_id"): platform_id = obj['platform_id'] device_id = obj['device_id'] s = init_message_queue(appid, client_id, platform_id, device_id) if s: logging.error("init message queue success") else: logging.error("init message queue fail") resp = { "token":token, "store_id":store_id, "client_id":client_id, } data = {"data":resp} return make_response(200, data)
def customer_register(): rds = g.rds db = g._db obj = json.loads(request.data) appid = obj.get("appid", 0) uid = obj.get("customer_id", "") name = obj.get("name", "") avatar = obj.get("avatar", "") if not appid: raise ResponseMeta(400, "invalid param") store_id = App.get_store_id(db, appid) if not store_id: raise ResponseMeta(400, "app do not support customer") if not uid: client_id = Customer.generate_client_id(rds) else: client_id = Customer.get_client_id(rds, appid, uid) if not client_id: client_id = Customer.generate_client_id(rds) Customer.set_client_id(rds, appid, uid, client_id) token = User.get_user_access_token(rds, appid, client_id) if not token: token = create_access_token() User.add_user_count(rds, appid, client_id) User.save_user(rds, appid, client_id, name, avatar, token) User.save_token(rds, appid, client_id, token) if obj.has_key("platform_id") and obj.has_key("device_id"): platform_id = obj['platform_id'] device_id = obj['device_id'] s = init_message_queue(appid, client_id, platform_id, device_id) if s: logging.error("init message queue success") else: logging.error("init message queue fail") resp = { "token": token, "store_id": store_id, "client_id": client_id, } data = {"data": resp} return make_response(200, data)
def delete_group(gid): appid = request.appid Group.disband_group(g._imdb, gid) v = { "group_id":gid, "timestamp":int(time.time()) } op = {"disband":v} send_group_notification(appid, gid, op, None) content = "%d"%gid publish_message(g.rds, "group_disband", content) resp = {"success":True} return make_response(200, resp)
def get_customer(appid, customer_id): rds = g.imrds name, avatar = Customer.get_customer_name(rds, appid, customer_id) if not name: name = "" if not avatar: avatar = "" obj = { "appid":appid, "uid":customer_id, "name":name, "avatar":avatar } return make_response(200, obj)
def get_group(gid): appid = request.appid uid = request.uid obj = Group.get_group(g._imdb, gid) members = Group.get_group_members(g._imdb, gid) for m in members: name = User.get_user_name(g.rds, appid, uid) m['name'] = name if name else '' obj['members'] = members q = User.get_user_notification_quiet(g.rds, appid, uid, gid) obj['quiet'] = bool(q) resp = {"data":obj} return make_response(200, resp)
def group_member_setting(gid, memberid): appid = request.appid uid = request.uid if uid != memberid: raise ResponseMeta(400, "setting other is forbidden") obj = json.loads(request.data) if obj.has_key('quiet'): #免打扰 User.set_user_notification_quiet(g.rds, appid, uid, gid, obj['quiet']) else: raise ResponseMeta(400, "no action") resp = {"success":True} return make_response(200, resp)
def create_group(): appid = request.appid obj = json.loads(request.data) master = obj["master"] name = obj["name"] is_super = obj["super"] if "super" in obj else False members = obj["members"] if hasattr(request, 'uid') and request.uid != master: raise ResponseMeta(400, "master must be self") #支持members参数为对象数组 #[{uid:"", name:"", avatar:"可选"}, ...] memberIDs = [m['uid'] if type(m) == dict else m for m in members] gid = Group.create_group(g._db, appid, master, name, is_super, memberIDs) s = 1 if is_super else 0 content = { "group_id": gid, "app_id": appid, "super": s, "name": Group.GROUP_EVENT_CREATE } publish_message(g.rds, content) for mem in memberIDs: content = { "group_id": gid, "member_id": mem, "name": Group.GROUP_EVENT_MEMBER_ADD } publish_message(g.rds, content) v = { "group_id": gid, "master": master, "name": name, "members": members, "timestamp": int(time.time()) } op = {"create": v} send_group_notification(appid, gid, op, members) resp = {"data": {"group_id": gid}} return make_response(200, resp)
def create_group(): appid = request.appid obj = json.loads(request.data) master = obj["master"] name = obj["name"] is_super = obj["super"] if obj.has_key("super") else False members = obj["members"] if hasattr(request, 'uid') and request.uid != master: raise ResponseMeta(400, "master must be self") gid = 0 if config.EXTERNAL_GROUP_ID: gid = obj['group_id'] if obj.has_key('group_id') else 0 #支持members参数为对象数组 #[{uid:"", name:"", avatar:"可选"}, ...] memberIDs = map(lambda m: m['uid'] if type(m) == dict else m, members) if gid > 0: gid = Group.create_group_ext(g._db, gid, appid, master, name, is_super, memberIDs) else: gid = Group.create_group(g._db, appid, master, name, is_super, memberIDs) s = 1 if is_super else 0 content = "%d,%d,%d" % (gid, appid, s) publish_message(g.rds, "group_create", content) for mem in memberIDs: content = "%d,%d" % (gid, mem) publish_message(g.rds, "group_member_add", content) v = { "group_id": gid, "master": master, "name": name, "members": members, "timestamp": int(time.time()) } op = {"create": v} send_group_notification(appid, gid, op, members) resp = {"data": {"group_id": gid}} return make_response(200, resp)
def create_group(): appid = request.appid obj = json.loads(request.data) master = obj["master"] name = obj["name"] is_super = obj["super"] if obj.has_key("super") else False members = obj["members"] if hasattr(request, 'uid') and request.uid != master: raise ResponseMeta(400, "master must be self") gid = 0 if config.EXTERNAL_GROUP_ID: gid = obj['group_id'] if obj.has_key('group_id') else 0 #支持members参数为对象数组 #[{uid:"", name:"", avatar:"可选"}, ...] memberIDs = map(lambda m:m['uid'] if type(m) == dict else m, members) if gid > 0: gid = Group.create_group_ext(g._db, gid, appid, master, name, is_super, memberIDs) else: gid = Group.create_group(g._db, appid, master, name, is_super, memberIDs) s = 1 if is_super else 0 content = "%d,%d,%d"%(gid, appid, s) publish_message(g.rds, "group_create", content) for mem in memberIDs: content = "%d,%d"%(gid, mem) publish_message(g.rds, "group_member_add", content) v = { "group_id":gid, "master":master, "name":name, "members":members, "timestamp":int(time.time()) } op = {"create":v} send_group_notification(appid, gid, op, members) resp = {"data":{"group_id":gid}} return make_response(200, resp)
def delete_group_member(gid): appid = request.appid if hasattr(request, "uid") and request.uid > 0: #群组管理员或者成员本身有权限退出群 master = Group.get_group_master(g._imdb, gid) if master != request.uid: raise ResponseMeta(400, "no authority") members = json.loads(request.data) if len(members) == 0: raise ResponseMeta(400, "no memebers to delete") for memberid in members: remove_group_member(appid, gid, memberid) resp = {"success":True} return make_response(200, resp)
def ask_question(): store_id = request.store_id query = request.args.get('question', '') if not query: return INVALID_PARAM() logging.debug("store id:%s, query:%s", store_id, query) try: answers = rpc.ask_question(store_id, query) logging.debug("answers:%s", answers) except xmlrpclib.ProtocolError as err: logging.warning("refresh questions err:%s", err) answers = [] except Exception as err: logging.warning("refresh questions err:%s", err) answers = [] return make_response(200, answers)
def get_group(gid): appid = request.appid uid = request.uid obj = Group.get_group(g._db, gid) members = Group.get_group_members(g._db, gid) for m in members: name = User.get_user_name(g.rds, appid, m['uid']) m['name'] = name if name else '' if not m.get('nickname'): m['nickname'] = "" obj['members'] = members q = User.get_group_do_not_disturb(g.rds, appid, uid, gid) obj['do_not_disturb'] = bool(q) resp = {"data":obj} return make_response(200, resp)