Ejemplo n.º 1
0
def user(ipa, username):
    user = User(user_or_404(ipa, username))
    # As a speed optimization, we make two separate calls.
    # Just doing a group_find (with all=True) is super slow here, with a lot of
    # groups.
    member_groups = [
        Group(group) for group in ipa.group_find(
            o_user=username, o_all=False, fasgroup=True)['result']
    ]
    managed_groups = [
        Group(group) for group in ipa.group_find(o_membermanager_user=username,
                                                 o_all=False,
                                                 fasgroup=True)['result']
    ]
    groups = [group for group in managed_groups if group not in member_groups
              ] + member_groups
    # Privacy setting
    if user != g.current_user and user.is_private:
        user.anonymize()

    return render_template(
        'user.html',
        user=user,
        groups=groups,
        managed_groups=managed_groups,
        member_groups=member_groups,
    )
Ejemplo n.º 2
0
def search_json(ipa):
    username = request.args.get('username')
    groupname = request.args.get('group')

    res = []

    if username:
        users_ = [
            User(u) for u in ipa.user_find(
                username, fasuser=True, sizelimit=10)['result']
        ]

        for user_ in users_:
            res.append({
                'uid': user_.username,
                'cn': user_.name,
                'url': url_for(".user", username=user_.username),
            })

    if groupname:
        groups_ = [
            Group(g) for g in ipa.group_find(
                groupname, fasgroup=True, sizelimit=10)['result']
        ]
        for group_ in groups_:
            res.append({
                'cn': group_.name,
                'description': group_.description,
                'url': url_for(".group", groupname=group_.name),
            })

    return jsonify(res)
Ejemplo n.º 3
0
def test_diff_fields_check_mismatch(dummy_user_dict, dummy_group_dict):
    """ Check we cannot diff two different objects"""
    user = User(dummy_user_dict)
    group = Group(dummy_group_dict)

    with pytest.raises(ValueError):
        user.diff_fields(group)
Ejemplo n.º 4
0
def group(ipa, groupname):
    group = Group(group_or_404(ipa, groupname))
    sponsor_form = AddGroupMemberForm(groupname=groupname)
    remove_form = RemoveGroupMemberForm(groupname=groupname)

    members = [User(u) for u in ipa.user_find(in_group=groupname)['result']]

    batch_methods = [
        {"method": "user_find", "params": [[], {"uid": sponsorname, 'all': True}]}
        for sponsorname in group.sponsors
    ]
    sponsors = [
        User(u['result'][0]) for u in ipa.batch(methods=batch_methods)['results']
    ]

    # We can safely assume g.current_user exists after @with_ipa
    current_user_is_sponsor = g.current_user.username in group.sponsors

    return render_template(
        'group.html',
        group=group,
        members=members,
        sponsors=sponsors,
        sponsor_form=sponsor_form,
        remove_form=remove_form,
        current_user_is_sponsor=current_user_is_sponsor,
    )
Ejemplo n.º 5
0
def user(ipa, username):
    user = User(user_or_404(ipa, username))
    # As a speed optimization, we make two separate calls.
    # Just doing a group_find (with all=True) is super slow here, with a lot of
    # groups.
    groups = [
        Group(g) for g in ipa.group_find(
            user=username, all=False, fasgroup=True)['result']
    ]
    managed_groups = [
        Group(g) for g in ipa.group_find(
            membermanager_user=username, all=False, fasgroup=True)['result']
    ]
    return render_template('user.html',
                           user=user,
                           groups=groups,
                           managed_groups=managed_groups)
Ejemplo n.º 6
0
def test_group(dummy_group_dict):
    """Test the Group representation"""
    group = Group(dummy_group_dict)
    assert group.name == "dummy-group"
    assert group.description == "A dummy group"
    assert group.members == ["dummy", "testuser"]
    assert group.sponsors == ["dummy"]
    assert group.dn == "cn=dummy-group,cn=groups,cn=accounts,dc=example,dc=com"
Ejemplo n.º 7
0
def test_group(dummy_group_dict):
    """Test the Group representation"""
    group = Group(dummy_group_dict)
    assert group.name == "dummy-group"
    assert group.description == "A dummy group"
    assert group.members == ["dummy", "testuser"]
    assert group.sponsors == ["dummy"]
    assert group.dn == "cn=dummy-group,cn=groups,cn=accounts,dc=example,dc=com"
    assert group.mailing_list == '*****@*****.**'
    assert group.urls == [
        'http://example.com', "https://www.dummygroup.com.au"
    ]
    assert group.irc_channel == 'irc://freenode.net/#dummy-group'
Ejemplo n.º 8
0
def user(ipa, username):
    user = User(user_or_404(ipa, username))
    # As a speed optimization, we make two separate calls.
    # Just doing a group_find (with all=True) is super slow here, with a lot of
    # groups.
    batch_methods = [{
        "method": "group_show",
        "params": [[name], {
            "no_members": True
        }]
    } for name in user.groups]
    # Don't call remote batch method with an empty list
    if batch_methods:
        member_groups = [
            Group(g["result"]) for g in ipa.batch(batch_methods)["results"]
            if g["result"].get("fasgroup", False)
        ]
    else:
        member_groups = []

    managed_groups = [
        Group(group) for group in ipa.group_find(o_membermanager_user=username,
                                                 o_all=False,
                                                 fasgroup=True)['result']
    ]
    groups = sorted(list(set(managed_groups + member_groups)),
                    key=lambda g: g.name)

    # Privacy setting
    if user != g.current_user and user.is_private:
        user.anonymize()

    return render_template(
        'user.html',
        user=user,
        groups=groups,
        managed_groups=managed_groups,
        member_groups=member_groups,
    )
Ejemplo n.º 9
0
def search_json(ipa):
    username = request.args.get('username')
    groupname = request.args.get('group')

    res = []

    if username:
        users_ = [User(u) for u in ipa.user_find(username)['result']]

        for user_ in users_:
            res.append({'uid': user_.username, 'cn': user_.name})

    if groupname:
        groups_ = [Group(g) for g in ipa.group_find(groupname)['result']]
        for group_ in groups_:
            res.append({'cn': group_.name, 'description': group_.description})

    return jsonify(res)
Ejemplo n.º 10
0
def group(ipa, groupname):
    group = Group(group_or_404(ipa, groupname))
    sponsor_form = AddGroupMemberForm(groupname=groupname)
    remove_form = RemoveGroupMemberForm(groupname=groupname)

    members = paginated_find(ipa,
                             User,
                             in_group=groupname,
                             default_page_size=48)

    batch_methods = [{
        "method": "user_find",
        "params": [[], {
            "uid": sponsorname,
            'all': True
        }]
    } for sponsorname in group.sponsors]
    # Don't call remote batch method with an empty list
    if batch_methods:
        sponsors = [
            User(u['result'][0])
            for u in ipa.batch(a_methods=batch_methods)['results']
        ]
    else:
        sponsors = []

    # We can safely assume g.current_user exists after @with_ipa
    current_user_is_sponsor = g.current_user.username in group.sponsors

    return render_template(
        'group.html',
        group=group,
        members=members,
        sponsors=sponsors,
        sponsor_form=sponsor_form,
        remove_form=remove_form,
        current_user_is_sponsor=current_user_is_sponsor,
    )
Ejemplo n.º 11
0
def test_group_eq(dummy_group_dict):
    """Test that Groups can be compared based on their content"""
    group_1 = Group(dummy_group_dict)
    group_2 = Group(dummy_group_dict)
    assert group_1 == group_2
Ejemplo n.º 12
0
def test_group_no_dn(dummy_group_dict):
    """Test that we fallback to gecos if there is no displayname"""
    del dummy_group_dict["dn"]
    group = Group(dummy_group_dict)
    assert group.dn is None
Ejemplo n.º 13
0
def groups(ipa):
    groups = [Group(g) for g in ipa.group_find(fasgroup=True)['result']]
    return render_template('groups.html', groups=groups)