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, )
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)
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)
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, )
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)
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"
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'
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, )
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)
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, )
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
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
def groups(ipa): groups = [Group(g) for g in ipa.group_find(fasgroup=True)['result']] return render_template('groups.html', groups=groups)