Exemple #1
0
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)
Exemple #3
0
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)
Exemple #4
0
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"})
Exemple #5
0
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)
Exemple #7
0
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)
Exemple #8
0
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)
Exemple #9
0
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)
Exemple #12
0
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)
Exemple #13
0
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)
Exemple #14
0
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)
Exemple #15
0
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)
Exemple #17
0
def download_file(file_path):
    path = "/files/" + file_path
    data = FS.download(path)
    if not data:
        return make_response(400)
    else:
        return data
Exemple #18
0
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)
Exemple #19
0
def download_file(file_path):
    path = "/files/" + file_path
    data = FS.download(path)
    if not data:
        return make_response(400)
    else:
        return data
Exemple #20
0
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)
Exemple #21
0
def download_file(audio_path):
    path = "/audios/" + audio_path
    data = FS.download(path)
    if not data:
        return make_response(400)
    else:
        return data
Exemple #22
0
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)
Exemple #23
0
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)
Exemple #26
0
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)
Exemple #29
0
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)
Exemple #30
0
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))
Exemple #31
0
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)
Exemple #33
0
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)
Exemple #34
0
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)
Exemple #35
0
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)
Exemple #37
0
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}})
Exemple #38
0
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)
Exemple #40
0
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)
Exemple #41
0
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)
Exemple #42
0
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)
Exemple #43
0
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
Exemple #44
0
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)
Exemple #45
0
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
Exemple #46
0
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)
Exemple #47
0
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)
Exemple #49
0
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)
Exemple #50
0
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)
Exemple #51
0
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)
Exemple #52
0
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)
Exemple #54
0
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)
Exemple #55
0
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)
Exemple #56
0
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)
Exemple #57
0
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)