Exemplo n.º 1
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
    }
    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)
Exemplo n.º 2
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)
Exemplo n.º 3
0
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)
Exemplo n.º 4
0
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)
Exemplo n.º 5
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_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)
Exemplo n.º 6
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)
Exemplo n.º 7
0
def add_group_member(gid):
    appid = request.appid
    obj = json.loads(request.data)
    inviter = None
    if type(obj) is dict:
        if 'members' in obj:
            members = obj['members']
            inviter = obj.get('inviter')
        else:
            members = [obj]
    else:
        members = obj

    if len(members) == 0:
        return ""
    
    group = Group.get_group(g._db, gid)
    if not group:
        raise ResponseMeta(400, "group non exists")
    
    # 支持members参数为对象数组
    memberIDs = map(lambda m:m['uid'] if type(m) == dict else m, 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 umysql.SQLError, e:
            #1062 duplicate member
            if e[0] != 1062:
                raise
Exemplo n.º 8
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)
Exemplo n.º 9
0
def add_group_member(gid):
    appid = request.appid
    obj = json.loads(request.data)
    inviter = None
    if type(obj) is dict:
        if 'members' in obj:
            members = obj['members']
            inviter = obj.get('inviter')
        else:
            members = [obj]
    else:
        members = obj

    if len(members) == 0:
        return ""

    group = Group.get_group(g._db, gid)
    if not group:
        raise ResponseMeta(400, "group non exists")

    # 支持members参数为对象数组
    memberIDs = map(lambda m: m['uid'] if type(m) == dict else m, 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, e:
            # 可能是重新加入群
            # 1062 duplicate member
            if e[0] != 1062:
                raise
Exemplo n.º 10
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)
Exemplo n.º 11
0
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)
Exemplo n.º 12
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_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)
Exemplo n.º 13
0
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)
Exemplo n.º 14
0
def update_group(gid):
    appid = request.appid
    obj = json.loads(request.data)
    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)

    return ""
Exemplo n.º 15
0
def remove_group_member(appid, gid, memberid):
    Group.delete_group_member(g._imdb, gid, memberid)
         
    v = {
        "group_id":gid,
        "member_id":memberid,
        "timestamp":int(time.time())
    }
    op = {"quit_group":v}
    send_group_notification(appid, gid, op, [memberid])
     
    content = "%d,%d"%(gid,memberid)
    publish_message(g.rds, "group_member_remove", content)
Exemplo n.º 16
0
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)
Exemplo n.º 17
0
def update_group(gid):
    appid = request.appid
    obj = json.loads(request.data)
    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)

    return ""
Exemplo n.º 18
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)
Exemplo n.º 19
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)
Exemplo n.º 20
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)
Exemplo n.º 21
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)
Exemplo n.º 22
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)
Exemplo n.º 23
0
def delete_group(gid):
    appid = request.appid

    #群组管理员有权限解散群
    master = Group.get_group_master(g._db, gid)
    if master != request.uid:
        raise ResponseMeta(400, "no authority")

    Group.disband_group(g._db, gid)

    v = {"group_id": gid, "timestamp": int(time.time())}
    op = {"disband": v}
    send_group_notification(appid, gid, op, None)

    content = {"group_id": gid, "name": Group.GROUP_EVENT_DISBAND}
    publish_message(g.rds, content)

    resp = {"success": True}
    return make_response(200, resp)
Exemplo n.º 24
0
def remove_group_member(appid, gid, member):
    memberid = member['uid']
    Group.delete_group_member(g._db, gid, memberid)
         
    v = {
        "group_id":gid,
        "member_id":memberid,
        "timestamp":int(time.time())
    }
    if member.get('name'):
        v['name'] = member['name']
    if member.get('avatar'):
        v['avatar'] = member['avatar']
            
    op = {"quit_group":v}
    send_group_notification(appid, gid, op, [memberid])
     
    content = "%d,%d"%(gid,memberid)
    publish_message(g.rds, "group_member_remove", content)
Exemplo n.º 25
0
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 ""

    g._imdb.begin()
    for member_id in members:
        try:
            Group.add_group_member(g._imdb, gid, member_id)
        except umysql.SQLError, e:
            #1062 duplicate member
            if e[0] != 1062:
                raise
Exemplo n.º 26
0
def remove_group_member(appid, gid, member):
    memberid = member['uid']
    Group.delete_group_member(g._db, gid, memberid)

    v = {"group_id": gid, "member_id": memberid, "timestamp": int(time.time())}
    if member.get('name'):
        v['name'] = member['name']
    if member.get('avatar'):
        v['avatar'] = member['avatar']

    op = {"quit_group": v}
    send_group_notification(appid, gid, op, [memberid])

    content = {
        "group_id": gid,
        "member_id": memberid,
        "name": Group.GROUP_EVENT_MEMBER_REMOVE
    }
    publish_message(g.rds, content)
Exemplo n.º 27
0
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)
Exemplo n.º 28
0
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)
Exemplo n.º 29
0
def remove_group_member(appid, gid, member):
    memberid = member['uid']
    Group.delete_group_member(g._db, gid, memberid)
         
    v = {
        "group_id":gid,
        "member_id":memberid,
        "timestamp":int(time.time())
    }
    if member.get('name'):
        v['name'] = member['name']
    if member.get('avatar'):
        v['avatar'] = member['avatar']
            
    op = {"quit_group":v}
    send_group_notification(appid, gid, op, [memberid])
     
    content = "%d,%d"%(gid,memberid)
    publish_message(g.rds, "group_member_remove", content)
Exemplo n.º 30
0
def update_group(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")

    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)

    return ""
Exemplo n.º 31
0
def delete_group(gid):
    appid = request.appid

    group = Group.get_group(g._db, gid)
    if not group:
        raise ResponseMeta(400, "group non exists")
    
    Group.disband_group(g._db, gid)
    v = {
        "group_id":gid,
        "group_name":group['name'],
        "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)
Exemplo n.º 32
0
def delete_group(gid):
    appid = request.appid

    group = Group.get_group(g._db, gid)
    if not group:
        raise ResponseMeta(400, "group non exists")

    Group.disband_group(g._db, gid)
    v = {
        "group_id": gid,
        "group_name": group['name'],
        "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)
Exemplo n.º 33
0
def add_group():
    data = request.json
    try:
        auth_status, auth_user = au_ser.check_auth_token(request.headers)
        owner = auth_user
        if owner != data['username']:
            return s_vars.not_authorized, 401
        cards = Card.query.filter(Card.card_id.in_(data['card_ids'])).all()
        if len(cards) < len(set(data['card_ids'])) or len(data['card_ids']) == 0:
            return s_vars.card_not_exist, 404
        group = Group(
            owner=owner,
            group_id=id_gen(),
            title=data['title'],
            description=data['description'],
            icon_url=data['icon_url'] if 'icon_url' in list(data.keys()) else None,
        )
        db.session.add(group)
        db.session.commit()
        result = {'group': group.__repr__(), 'cards_in_group': []}
        for card_id in list(set(data['card_ids'])):
            group_card = GroupCards(group_id=group.group_id, card_id=card_id)
            db.session.add(group_card)
            db.session.commit()
            result['cards_in_group'].append(group_card.__repr__())
        try:
            user = user_model.User.query.filter_by(username=owner).first()
            send_mail(user.email, 'Successfully Created Group', '''Hi {},
            Group \'{}\' has been successfully with below cards.
            
            {}'''.format(user.name, group.title, ', '.join([card.title for card in cards])))
        except smtplib.SMTPException:
            return s_vars.mail_sending_failed, 501
        except socket.gaierror:
            return s_vars.mail_sending_failed, 502
        return jsonify({'result': result}), 200
    except KeyError:
        return s_vars.bad_request, 400
    except exc.IntegrityError:
        return jsonify({'result': 'Duplicate record'}), 409
Exemplo n.º 34
0
def delete_group(gid):
    appid = request.appid

    #群组管理员有权限解散群
    master = Group.get_group_master(g._db, gid)
    if master != request.uid:
        raise ResponseMeta(400, "no authority")
    
    Group.disband_group(g._db, 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)
Exemplo n.º 35
0
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 = map(lambda m:m['uid'] if type(m) == dict else m, members)
    
    g._db.begin()
    for member_id in memberIDs:
        try:
            Group.add_group_member(g._db, gid, member_id)
        except umysql.SQLError, e:
            #1062 duplicate member
            if e[0] != 1062:
                raise
Exemplo n.º 36
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)
Exemplo n.º 37
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)
Exemplo n.º 38
0
def get_groups():
    appid = request.appid
    uid = request.uid

    groups = Group.get_groups(g._imdb, 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._imdb, gid)
            for m in members:
                name = User.get_user_name(g.rds, appid, uid)
                m['name'] = name if name else ''
            obj['members'] = members
     
        if "quiet" in fields:
            q = User.get_user_notification_quiet(g.rds, appid, uid, gid)
            obj['quiet'] = bool(q)
        
    resp = {"data":groups}
    return make_response(200, resp)
Exemplo n.º 39
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)
Exemplo n.º 40
0
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 = map(lambda m:m['uid'] if type(m) == dict else m, 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 umysql.SQLError, e:
            #1062 duplicate member
            if e[0] != 1062:
                raise
Exemplo n.º 41
0
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 = map(lambda m:m['uid'] if type(m) == dict else m, 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, e:
            # 可能是重新加入群
            #1062 duplicate member
            if e[0] != 1062:
                raise
Exemplo n.º 42
0
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)
Exemplo n.º 43
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)
Exemplo n.º 44
0
def delete_group_member(gid):
    appid = request.appid
    members = json.loads(request.data)
    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)
Exemplo n.º 45
0
def delete_group_member(gid):
    appid = request.appid
    members = json.loads(request.data)
    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)
Exemplo n.º 46
0
def delete_group_member(gid):
    appid = request.appid

    #群组管理员有权限删除群成员
    master = Group.get_group_master(g._db, 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 m in members:
        if type(m) == int:
            member = {"uid": m}
        else:
            member = m

        remove_group_member(appid, gid, member)

    resp = {"success": True}
    return make_response(200, resp)
Exemplo n.º 47
0
def delete_group_member(gid):
    appid = request.appid

    #群组管理员有权限删除群成员
    master = Group.get_group_master(g._db, 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 m in members:
        if type(m) == int:
            member = {"uid":m}
        else:
            member = m
            
        remove_group_member(appid, gid, member)

    resp = {"success":True}
    return make_response(200, resp)
Exemplo n.º 48
0
def add_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")
    inviter = None
    if type(obj) is dict:
        if 'members' in obj:
            members = obj['members']
            inviter = obj.get('inviter')
        else:
            members = [obj]
    else:
        members = obj

    if len(members) == 0:
        return ""
    
    group = Group.get_group(g._db, gid)
    if not group:
        raise ResponseMeta(400, "group non exists")
    
    # 支持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,
            "group_name":group['name'],
            "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']
        if inviter:
            v['inviter'] = inviter

        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)