Beispiel #1
0
def test_group_request(session, users, groups, http_client, base_url):  # noqa: F811
    user = users["*****@*****.**"]
    group = groups["sad-team"]

    # Request to join

    fe_url = url(base_url, "/groups/{}/join".format(group.groupname))
    resp = yield http_client.fetch(
        fe_url,
        method="POST",
        headers={"X-Grouper-User": user.username},
        body=urlencode({"reason": "Test Request", "member": "User: [email protected]"}),
    )
    assert resp.code == 200

    request = Request.get(session, requester_id=user.id, requesting_id=group.id)
    assert request.status == "pending"

    # Approve request

    fe_url = url(base_url, "/groups/{}/requests/{}".format(group.groupname, request.id))
    resp = yield http_client.fetch(
        fe_url,
        method="POST",
        headers={"X-Grouper-User": "******"},
        body=urlencode({"reason": "Test Request", "status": "actioned"}),
    )
    assert resp.code == 200

    request = Request.get(session, requester_id=user.id, requesting_id=group.id)
    assert request.status == "actioned"
def test_group_request(session, users, groups, http_client, base_url):
    user = users['*****@*****.**']
    group = groups['sad-team']

    # Request to join

    fe_url = url(base_url, '/groups/{}/join'.format(group.groupname))
    resp = yield http_client.fetch(
        fe_url,
        method='POST',
        headers={'X-Grouper-User': user.username},
        body=urlencode({'reason': 'Test Request', 'member': 'User: [email protected]'}),
    )
    assert resp.code == 200

    request = Request.get(session, requester_id=user.id, requesting_id=group.id)
    assert request.status == 'pending'

    # Approve request

    fe_url = url(base_url, '/groups/{}/requests/{}'.format(group.groupname, request.id))
    resp = yield http_client.fetch(
        fe_url,
        method='POST',
        headers={'X-Grouper-User': '******'},
        body=urlencode({'reason': 'Test Request', 'status': 'actioned'}),
    )
    assert resp.code == 200

    request = Request.get(session, requester_id=user.id, requesting_id=group.id)
    assert request.status == 'actioned'
Beispiel #3
0
    def cancel_user_request(self, user_request, reason, authorization):
        # type: (UserGroupRequest, str, Authorization) -> None
        now = datetime.utcnow()
        request = Request.get(self.session, id=user_request.id)
        if not request:
            raise UserGroupRequestNotFoundException(request)
        actor = User.get(self.session, name=authorization.actor)
        if not actor:
            raise UserNotFoundException(authorization.actor)

        request_status_change = RequestStatusChange(
            request=request,
            user_id=actor.id,
            from_status=request.status,
            to_status="cancelled",
            change_at=now,
        ).add(self.session)

        request.status = "cancelled"
        self.session.flush()

        Comment(
            obj_type=OBJ_TYPES["RequestStatusChange"],
            obj_pk=request_status_change.id,
            user_id=actor.id,
            comment=reason,
            created_on=now,
        ).add(self.session)
Beispiel #4
0
    def cancel_user_request(self, user_request, reason, authorization):
        # type: (UserGroupRequest, str, Authorization) -> None
        now = datetime.utcnow()
        request = Request.get(self.session, id=user_request.id)
        if not request:
            raise UserGroupRequestNotFoundException(request)
        actor = User.get(self.session, name=authorization.actor)
        if not actor:
            raise UserNotFoundException(authorization.actor)

        request_status_change = RequestStatusChange(
            request=request,
            user_id=actor.id,
            from_status=request.status,
            to_status="cancelled",
            change_at=now,
        ).add(self.session)

        request.status = "cancelled"
        self.session.flush()

        Comment(
            obj_type=OBJ_TYPES["RequestStatusChange"],
            obj_pk=request_status_change.id,
            user_id=actor.id,
            comment=reason,
            created_on=now,
        ).add(self.session)
def test_group_request(session, users, groups, http_client, base_url):
    user = users['*****@*****.**']
    group = groups['sad-team']

    # Request to join

    fe_url = url(base_url, '/groups/{}/join'.format(group.groupname))
    resp = yield http_client.fetch(
        fe_url,
        method='POST',
        headers={'X-Grouper-User': user.username},
        body=urlencode({
            'reason': 'Test Request',
            'member': 'User: [email protected]'
        }),
    )
    assert resp.code == 200

    request = Request.get(session,
                          requester_id=user.id,
                          requesting_id=group.id)
    assert request.status == 'pending'

    # Approve request

    fe_url = url(base_url,
                 '/groups/{}/requests/{}'.format(group.groupname, request.id))
    resp = yield http_client.fetch(
        fe_url,
        method='POST',
        headers={'X-Grouper-User': '******'},
        body=urlencode({
            'reason': 'Test Request',
            'status': 'actioned'
        }),
    )
    assert resp.code == 200

    request = Request.get(session,
                          requester_id=user.id,
                          requesting_id=group.id)
    assert request.status == 'actioned'
Beispiel #6
0
def persist_group_member_changes(
        session,  # type: Session
        group,  # type: Group
        requester,  # type: User
        member,  # type: Union[User, Group]
        status,  # type: str
        reason,  # type: str
        create_edge=False,  # type: bool
        **updates  # type: Any
):
    # type: (...) -> Request
    requested_at = datetime.utcnow()

    if "role" in updates:
        role = updates["role"]
        _validate_role(member.member_type, role)

    get_plugin_proxy().will_update_group_membership(session, group, member,
                                                    **updates)

    if create_edge:
        edge = _create_edge(session, group, member,
                            updates.get("role", "member"))
    else:
        edge = _get_edge(session, group, member)
        if not edge:
            raise MemberNotFound()

    changes = _serialize_changes(edge, **updates)

    request = Request(
        requester_id=requester.id,
        requesting_id=group.id,
        on_behalf_obj_type=member.member_type,
        on_behalf_obj_pk=member.id,
        requested_at=requested_at,
        edge_id=edge.id,
        status=status,
        changes=changes,
    ).add(session)
    session.flush()

    request_status_change = RequestStatusChange(
        request=request,
        user_id=requester.id,
        to_status=status,
        change_at=requested_at).add(session)
    session.flush()

    Comment(
        obj_type=OBJ_TYPES["RequestStatusChange"],
        obj_pk=request_status_change.id,
        user_id=requester.id,
        comment=reason,
        created_on=requested_at,
    ).add(session)
    session.flush()

    if status == "actioned":
        edge.apply_changes(request.changes)
        session.flush()

    Counter.incr(session, "updates")

    return request