def kf_group_interfaces_manage_checkban(group_id):
    data = G.autodata(request)

    token = G.auto_verify(request)
    user_uuid = model.getuser_uuid(token.get("user")).uuid

    selectResult = G.isManager(group_id, user_uuid)

    try:
        page = int(data.get("range", 1))
    except ValueError:
        return Response(json.dumps({
            'error': "ForbiddenOperationException",
            'errorMessage': "Invalid request args."
        }), status=403, mimetype='application/json; charset=utf-8')

    return Response(json.dumps([
        (lambda x: {
            "create": x.create_time.timestamp(),
            "until": x.until.timestamp(),
            "length": x.until.timestamp() - x.create_time.timestamp(),
            ["user", "profile"][bool(x.profile)]: [x.profile, x.user][bool(x.profile)],
            "uuid": x.user
        })(i) for i in model.banner.select().where(model.banner.group == group_id)[15*(page - 1):15 * page]
    ]), mimetype='application/json; charset=utf-8')
def kf_group_interfaces_manage_ban_profile(group_id, kick_id, profile_id):
    data = G.autodata(request)

    token = G.auto_verify(request)
    user_uuid = model.getuser_uuid(token.get("user")).uuid

    selectResult = G.isManager(group_id, user_uuid)

    selectResult = model.member.select().where(
        (model.member.group == group_id) &
        (model.member.user == kick_id) &
        (model.member.is_disabled == False)
    )
    if not selectResult:
        raise Exceptions.InvalidRequestData()
    selectResult = selectResult.get()

    profile = model.profile.select().where(
        (model.profile.uuid == profile_id) &
        (model.profile.createby == user_uuid)
    )
    if not profile:
        raise Exceptions.InvalidRequestData()

    ban = model.banner(
        user=kick_id,
        profile=profile.get().profile_id,
        create_time=datetime.datetime.now(),
        group=group_id,
        until=datetime.datetime.fromtimestamp(
            time.time() + float(int(data.get("after"))))
    )
    ban.save()
    return Response(status=204)
def kf_group_interfaces_manager_checkjoin_length(group_id, extra=None):
    data = G.autodata(request)

    token = G.auto_verify(request)
    user_uuid = model.getuser_uuid(token.get("user")).uuid

    selectResult = G.isManager(group_id, user_uuid)

    if not extra:
        length = model.review.select().where(
            (model.review.group == group_id)
        ).count()
    else:
        if extra not in ["non-enabled", "enabled", "accessed", "non-accessed"]:
            raise Exceptions.InvalidRequestData()
        length = model.review.select().where(
            (model.review.group == group_id) &
            {
                "non-enabled": (model.review.isEnable == False),
                "enabled": (model.review.isEnable == True),
                "accessed": (model.review.isAccessed == True),
                "non-accessed": (model.review.isAccessed == False)
            }[extra]
        ).count()

    return Response(json.dumps({
        "length": length
    }), mimetype='application/json; charset=utf-8')
def kf_group_interfaces_manage_manager_down(group_id, user_id):
    data = G.autodata(request)

    token = G.auto_verify(request)
    user_uuid = model.getuser_uuid(token.get("user")).uuid

    G.is_super_manager(group_id, user_id)

    selectResult = G.isManager(group_id, user_id)

    selectResult.permission = "common_user"
    selectResult.managedown_number += 1
    selectResult.save()
    return Response(status=204)
def kf_group_interfaces_manage_setting_change(group_id, setting_name):
    data = G.autodata(request)

    token = G.auto_verify(request)
    user_uuid = model.getuser_uuid(token.get("user")).uuid
    group = G.get_group(group_id)

    manager = G.isManager(group_id, user_uuid)

    if setting_name not in [
        "joinway", "name", "enable_yggdrasil", "enable_invite",
        "enable_public_joinhistory", "enable_public_memberlist"
    ]:
        raise Exceptions.InvalidRequestData()

    value = data.get("change_value")

    if setting_name == "joinway":
        if value not in ["public_join", "public_join_review", "private"]:
            raise Exceptions.InvalidRequestData()
        group.joinway = value

    if setting_name == "name":
        if not re.match(r"[a-zA-Z0-9\u4E00-\u9FA5_-]{4,16}$", value):
            raise Exceptions.InvalidRequestData()
        group.name = value

    if setting_name == "enable_yggdrasil":
        if not type(value) == bool:
            raise Exceptions.InvalidRequestData()
        group.enable_yggdrasil = value

    if setting_name == "enable_invite":
        if not type(value) == bool:
            raise Exceptions.InvalidRequestData()
        group.enable_invite = value

    if setting_name == "enable_public_joinhistory":
        if not type(value) == bool:
            raise Exceptions.InvalidRequestData()
        group.enable_public_joinhistory = value

    if setting_name == "enable_public_memberlist":
        if not type(value) == bool:
            raise Exceptions.InvalidRequestData()
        group.enable_public_memberlist = value

    group.save()
    return Response(status=204)
def kf_group_interfaces_manage_checkjoin_non_accessed(group_id):
    data = G.autodata(request)

    token = G.auto_verify(request)
    user_uuid = model.getuser_uuid(token.get("user")).uuid

    selectResult = G.isManager(group_id, user_uuid)

    return Response(json.dumps([(lambda x: {
        "id": x.id,
        "user": x.user,
        "time": x.time.timestamp(),
        "enabled": x.isEnabled,
    })(i) for i in model.review.select().where(
        (model.review.group == group_id) &
        (model.review.isAccessed == False)
    )]), mimetype='application/json; charset=utf-8')
def kf_group_interfaces_manage_setting(group_id):
    data = G.autodata(request)

    token = G.auto_verify(request)
    user_uuid = model.getuser_uuid(token.get("user")).uuid
    group = G.get_group(group_id)

    selectResult = G.isManager(group_id, user_uuid)

    return Response(json.dumps({
        "name": group.name,
        "joinway": group.joinway,
        "enable": {
            "yggdrasil": group.enable_yggdrasil,
            "invite": group.enable_invite,
            "public_joinhistory": group.enable_public_joinhistory,
            "public_memberlist": group.enable_public_memberlist
        }
    }), mimetype='application/json; charset=utf-8')
def kf_group_interfaces_manage_checkjoin_refuse(group_id, review_id):
    data = G.autodata(request)

    token = G.auto_verify(request)
    user = model.getuser_uuid(token.get("user"))
    user_uuid = user.uuid
    group = G.get_group(group_id)

    manager = G.isManager(group_id, user_uuid)

    selectResult = model.review.select().where(
        (model.review.id == review_id) &
        (model.review.group == group_id)
    )
    if not selectResult:
        raise Exceptions.InvalidToken()
    selectResult = selectResult.get()
    if selectResult.isEnable != True:
        raise Exceptions.InvalidRequestData()
    selectResult.isEnable = False
    selectResult.isAccessed = False

    for i in model.member.select().where(
        (model.member.group == selectResult.group) &
        ((model.member.permission == "manager") | (model.member.permission == "super_manager")) &
        (model.member.is_disabled == True) &
        (model.member.user != manager.uuid)
    ):
        model.message(
            to=i.user,

            title="用户 %(user)s 面向组 %(group)s 的加组申请被拒绝" % (
                [user.uuid, user.username][bool(user.username)], group.name),
            body="用户 %(user)s 面向组 %(group)s 的加组申请被组管理员 %(manager)s 拒绝" % ([user.uuid, user.username][bool(
                user.username)], group.name, [manager.uuid, manager.username][bool(manager.username)]),
            extra=json.dumps({
                "user": user_uuid,
                "group": group.id,
                "manager": manager.uuid
            })
        )
    return Response(status=204)
def kf_group_interfaces_manage_kick(group_id, kick_id):
    data = G.autodata(request)

    token = G.auto_verify(request)
    user_uuid = model.getuser_uuid(token.get("user")).uuid

    selectResult = G.isManager(group_id, user_uuid)

    selectResult = model.member.select().where(
        (model.member.group == group_id) &
        (model.member.user == kick_id) &
        (model.member.is_disabled == False)
    )
    if not selectResult:
        raise Exceptions.InvalidRequestData()
    selectResult = selectResult.get()
    selectResult.is_disabled = True
    selectResult.move_times += 1
    selectResult.be_kicked_times_total += 1
    selectResult.save()
    return Response(status=204)
示例#10
0
def kf_group_interfaces_manage_checkjoin_info(group_id, review_id):
    data = G.autodata(request)

    token = G.auto_verify(request)
    user_uuid = model.getuser_uuid(token.get("user")).uuid

    selectResult = G.isManager(group_id, user_uuid)

    selectResult = model.review.select().where(
        (model.review.id == review_id) &
        (model.review.group == group_id)
    )
    if not selectResult:
        raise Exceptions.InvalidToken()
    selectResult = selectResult.get()
    return Response(json.dumps({
        "id": selectResult.id,
        "user": selectResult.user,
        "time": selectResult.time.timestamp(),
        "enabled": selectResult.isEnabled,
        "accessed": selectResult.isAccessed
    }), mimetype='application/json; charset=utf-8')
示例#11
0
def kf_group_interfaces_manage_checkban_user(group_id, user_id):
    data = G.autodata(request)

    token = G.auto_verify(request)
    user_uuid = model.getuser_uuid(token.get("user")).uuid

    selectResult = G.isManager(group_id, user_uuid)

    if model.member.select().where(
        (model.member.group == group_id) &
        (model.member.user == user_id) &
        (model.member.is_disabled == False)
    ):
        raise Exceptions.InvalidToken()

    return Response(json.dumps([
        (lambda x: {
            "create": x.create_time.timestamp(),
            "until": x.until.timestamp(),
            "length": x.until.timestamp() - x.create_time.timestamp(),
            [b"user", "profile"][bool(x.profile)]: [b"INSTEAD", x.profile][not bool(x.profile)],
            "uuid": x.user
        })(i) for i in model.banner.select().where((model.banner.group == group_id) & (model.banner.user == user_id))
    ], skipkeys=True), mimetype='application/json; charset=utf-8')