Esempio n. 1
0
def kf_group_interfaces_report_join(group_id):
    if not request.is_json:
        raise Exceptions.InvalidToken()
    data = request.json

    token = G.auto_verify(request)
    user_uuid = model.getuser_uuid(token.get("user")).uuid
    if not model.group.select().where(model.group.uuid == group_id):
        raise Exceptions.InvalidToken()
    group = G.get_group(group_id)
    if group.joinway not in ["public_join", "public_join_review"]:
        raise Exceptions.InvalidToken()

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

    if group.joinway == "public_join":
        new = model.member(user=user_uuid, group=group_id,
                           permission="common_user")
        new.save()
        return Response(json.dumps(model.kf_format_group_public(group)), mimetype='application/json; charset=utf-8')
    if group.joinway == "public_join_review":
        review = model.review(user=user_uuid, group=group.id)
        review.save()
        return Response(json.dumps({
            "reviewId": review.id
        }), mimetype='application/json; charset=utf-8')
    if group.joinway == 'private':
        raise Exceptions.InvalidToken()
Esempio n. 2
0
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')
Esempio n. 3
0
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)
Esempio n. 4
0
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')
Esempio n. 5
0
def kf_message_alreadyRead():
    data = G.autodata(request)

    token = G.auto_verify(request)
    user_uuid = model.getuser_uuid(token.get("user")).uuid
    return Response(json.dumps([{
        "title": i.title,
        "body": i.body
    } for i in model.message.select().where((model.message.to == user_uuid) & (model.message.is_read == True))]), mimetype='application/json; charset=utf-8')
Esempio n. 6
0
def kf_group_interfaces_list():
    data = G.autodata(request)

    token = G.auto_verify(request)
    user_uuid = model.getuser_uuid(token.get("user")).uuid
    Response(json.dumps([(lambda x:{
        "id": x.id,
        "name": x.name,
        "create_date": x.create_date.timestamp()
    })(i) for i in model.member.select().where(
        (model.member.is_disabled == False) &
        (model.member.user == user_uuid)
    )]), mimetype='application/json; charset=utf-8')
Esempio n. 7
0
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)
Esempio n. 8
0
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)
Esempio n. 9
0
def kf_group_interfaces_manage(group_id):
    data = G.autodata(request)

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

    selectResult = model.member.select().where(
        (model.member.group == group_id) &
        (model.member.user == user_uuid) &
        (model.member.is_disabled == False)
    )
    if not selectResult:
        raise Exceptions.InvalidToken()
    selectResult = selectResult.get()
    return Response(status=[403, 204][selectResult.permission in ['manager', 'super_manager']])
Esempio n. 10
0
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')
Esempio n. 11
0
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')
Esempio n. 12
0
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)
Esempio n. 13
0
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)
Esempio n. 14
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')
Esempio n. 15
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')
Esempio n. 16
0
def kf_group_interfaces_signout(group_id):
    data = G.autodata(request)

    token = G.auto_verify(request)
    user_uuid = model.getuser_uuid(token.get("user")).uuid
    if not model.group.select().where(model.group.uuid == group_id):
        raise Exceptions.InvalidToken()
    group: model.group = G.get_group(group_id)

    known = G.get_member(group_id, user_uuid)
    if known.permission == "super_manager":
        if not data.get("force"):
            raise Exceptions.InvalidToken()
        else:
            manager_result = model.member.select().where(
                (model.member.is_disabled == False) &
                (model.member.permission == "manager") &
                (model.member.group == group_id)
            )
            if manager_result:
                # 有其他管理员可以被任命为组管理员
                # 随!机!选!择!
                manager_selected = manager_result[random.randint(
                    0, len(manager_result) - 1)]
                manager_result.permission = "super_manager"
                manager_result.save()
                model.message(
                    to=manager_result.user,
                    title='您已成为组 "%(groupname)s" 的组管理员' % (group.name),
                    body='因该组的原组管理员的退出, 您已成为该组的组管理员.',
                    extra=json.dumps({
                        "type": "group"
                    })
                )
            else:
                # 通知一波然后删掉, 解散的组不需要
                now_member = model.member.select().where(
                    (model.member.is_disabled == False) &
                    (model.member.group == group_id) &
                    (model.member.user != user_uuid)
                )
                for i in now_member:
                    model.message(
                        to=i.user,
                        title='您已被清理出组 "%(groupname)s"' % (group.name),
                        body="因该组的原组管理员的退出, 您已被清理出该组."
                    ).save()
                model.member.delete().where(model.member.group == group_id).execute()
    else:
        known.is_disabled = True
        known.move_times += 1
        known.save()
        manager_result = model.member.select().where(
            (model.member.is_disabled == False) &
            ((model.member.permission == "manager") | (model.member.permission == "super_manager")) &
            (model.member.group == group_id)
        )
        for i in manager_result:
            model.message(
                to=i.user,
                title='%(user)s 退出组 "%(groupname)s"' % (
                    model.getuser_uuid(user_uuid).username, group.name),
                body="因该成员的主动申请, 该成员已退出该组."
            ).save()
    return Response(status=204)