Used 'id' instead of 'dn'

This commit is contained in:
Éloi Rivard 2023-02-05 19:08:25 +01:00
parent f6447e5d76
commit 971cf317c9
19 changed files with 107 additions and 96 deletions

View file

@ -334,7 +334,7 @@ def registration(data, hash):
if "groups" not in form and invitation.groups:
form["groups"] = wtforms.SelectMultipleField(
_("Groups"),
choices=[(group.dn, group.name) for group in Group.query()],
choices=[(group.id, group.name) for group in Group.query()],
render_kw={"readonly": "true"},
)
form.process(CombinedMultiDict((request.files, request.form)) or None, data=data)
@ -390,7 +390,7 @@ def profile_create(current_app, form):
user.save()
if "groups" in form:
groups = [Group.get(group_dn) for group_dn in form["groups"].data]
groups = [Group.get(group_id) for group_id in form["groups"].data]
for group in groups:
group.add_member(user)
group.save()
@ -475,7 +475,7 @@ def profile_edit(editor, username):
}
if "groups" in fields:
data["groups"] = [g.dn for g in user.groups]
data["groups"] = [g.id for g in user.groups]
form = profile_form(editor.write, editor.read)
form.process(CombinedMultiDict((request.files, request.form)) or None, data=data)

View file

@ -13,12 +13,12 @@ from flask_babel import gettext as _
def current_user():
for dn in session.get("user_id", [])[::-1]:
user = User.get(dn=dn)
for user_id in session.get("user_id", [])[::-1]:
user = User.get(id=user_id)
if user:
return user
session["user_id"].remove(dn)
session["user_id"].remove(user_id)
return None

View file

@ -235,7 +235,7 @@ def profile_form(write_field_names, readonly_field_names):
if "groups" in write_field_names | readonly_field_names and Group.query():
fields["groups"] = wtforms.SelectMultipleField(
_("Groups"),
choices=[(group.dn, group.name) for group in Group.query()],
choices=[(group.id, group.name) for group in Group.query()],
render_kw={"placeholder": _("users, admins …")},
)
@ -297,6 +297,6 @@ class InvitationForm(FlaskForm):
)
groups = wtforms.SelectMultipleField(
_("Groups"),
choices=lambda: [(group.dn, group.name) for group in Group.query()],
choices=lambda: [(group.id, group.name) for group in Group.query()],
render_kw={},
)

View file

@ -146,10 +146,9 @@ class LDAPObject(metaclass=LDAPObjectMetaclass):
return self_attributes == other_attributes
def __hash__(self):
return hash(self.dn)
return hash(self.id)
def __getattr__(self, name):
if self.attribute_table:
name = self.attribute_table.get(name, name)
if name not in self.ldap_object_attributes():
@ -281,9 +280,9 @@ class LDAPObject(metaclass=LDAPObjectMetaclass):
return cls._attribute_type_by_name
@classmethod
def get(cls, dn=None, filter=None, conn=None, **kwargs):
def get(cls, id=None, filter=None, conn=None, **kwargs):
try:
return cls.query(dn, filter, conn, **kwargs)[0]
return cls.query(id, filter, conn, **kwargs)[0]
except (IndexError, ldap.NO_SUCH_OBJECT):
return None
@ -363,7 +362,7 @@ class LDAPObject(metaclass=LDAPObjectMetaclass):
def reload(self, conn=None):
conn = conn or self.ldap_connection()
result = conn.search_s(self.dn, ldap.SCOPE_SUBTREE, None, ["+", "*"])
result = conn.search_s(self.id, ldap.SCOPE_SUBTREE, None, ["+", "*"])
self.changes = {}
self.attrs = result[0][1]
@ -390,7 +389,7 @@ class LDAPObject(metaclass=LDAPObjectMetaclass):
(ldap.MOD_REPLACE, name, values)
for name, values in formatted_changes.items()
]
conn.modify_s(self.dn, modlist)
conn.modify_s(self.id, modlist)
# Object does not exist yet in the LDAP database
else:
@ -405,7 +404,7 @@ class LDAPObject(metaclass=LDAPObjectMetaclass):
if value is not None and value != None
}
attributes = [(name, values) for name, values in formatted_changes.items()]
conn.add_s(self.dn, attributes)
conn.add_s(self.id, attributes)
self.exists = True
self.attrs = {**self.attrs, **self.changes}
@ -417,7 +416,7 @@ class LDAPObject(metaclass=LDAPObjectMetaclass):
def delete(self, conn=None):
conn = conn or self.ldap_connection()
conn.delete_s(self.dn)
conn.delete_s(self.id)
def keys(self):
ldap_keys = self.may() + self.must()

View file

@ -44,7 +44,7 @@ def ldap_to_python(value, syntax):
return value.decode("utf-8").upper() == "TRUE"
if syntax == Syntax.DISTINGUISHED_NAME:
return LDAPObject.get(dn=value.decode("utf-8"))
return LDAPObject.get(id=value.decode("utf-8"))
return value.decode("utf-8")
@ -67,7 +67,7 @@ def python_to_ldap(value, syntax, encode=True):
value = "TRUE" if value else "FALSE"
if syntax == Syntax.DISTINGUISHED_NAME:
value = value.dn
value = value.id
if not value:
return None

View file

@ -10,6 +10,10 @@ class User(LDAPObject):
DEFAULT_FILTER = "(|(uid={login})(mail={login}))"
DEFAULT_ID_ATTRIBUTE = "cn"
attribute_table = {
"id": "dn",
}
def __init__(self, *args, **kwargs):
self.read = set()
self.write = set()
@ -22,7 +26,7 @@ class User(LDAPObject):
super().__init__(*args, **kwargs)
@classmethod
def get(cls, login=None, dn=None, filter=None, conn=None):
def get(cls, login=None, id=None, filter=None, conn=None):
conn = conn or cls.ldap_connection()
if login:
@ -32,7 +36,7 @@ class User(LDAPObject):
.format(login=ldap.filter.escape_filter_chars(login))
)
user = super().get(dn, filter, conn)
user = super().get(id, filter, conn)
if user:
user.load_permissions(conn)
@ -65,9 +69,9 @@ class User(LDAPObject):
if isinstance(session["user_id"], list)
else [session["user_id"]]
)
session["user_id"] = previous + [self.dn]
session["user_id"] = previous + [self.id]
except KeyError:
session["user_id"] = [self.dn]
session["user_id"] = [self.id]
@classmethod
def logout(self):
@ -89,7 +93,7 @@ class User(LDAPObject):
)
try:
conn.simple_bind_s(self.dn, password)
conn.simple_bind_s(self.id, password)
return True
except ldap.INVALID_CREDENTIALS:
return False
@ -99,7 +103,7 @@ class User(LDAPObject):
def set_password(self, password, conn=None):
conn = conn or self.ldap_connection()
conn.passwd_s(
self.dn,
self.id,
None,
password.encode("utf-8"),
)
@ -116,7 +120,7 @@ class User(LDAPObject):
def set_groups(self, values):
before = self._groups
after = [v if isinstance(v, Group) else Group.get(dn=v) for v in values]
after = [v if isinstance(v, Group) else Group.get(id=v) for v in values]
to_add = set(after) - set(before)
to_del = set(before) - set(after)
for group in to_add:
@ -132,8 +136,8 @@ class User(LDAPObject):
for access_group_name, details in current_app.config["ACL"].items():
if not details.get("FILTER") or (
self.dn
and conn.search_s(self.dn, ldap.SCOPE_SUBTREE, details["FILTER"])
self.id
and conn.search_s(self.id, ldap.SCOPE_SUBTREE, details["FILTER"])
):
self.permissions |= set(details.get("PERMISSIONS", []))
self.read |= set(details.get("READ", []))
@ -175,7 +179,11 @@ class Group(LDAPObject):
DEFAULT_OBJECT_CLASS = "groupOfNames"
DEFAULT_ID_ATTRIBUTE = "cn"
DEFAULT_NAME_ATTRIBUTE = "cn"
DEFAULT_USER_FILTER = "member={user.dn}"
DEFAULT_USER_FILTER = "member={user.id}"
attribute_table = {
"id": "dn",
}
def __init__(self, *args, **kwargs):
kwargs.setdefault(

View file

@ -147,7 +147,7 @@ def client_edit(client_id):
software_version=form["software_version"].data,
jwk=form["jwk"].data,
jwks_uri=form["jwks_uri"].data,
audience=[Client.get(dn=dn) for dn in form["audience"].data],
audience=[Client.get(id=id) for id in form["audience"].data],
preconsent=form["preconsent"].data,
)
client.save()

View file

@ -9,7 +9,7 @@ class LogoutForm(FlaskForm):
def client_audiences():
return [(client.dn, client.client_name) for client in Client.query()]
return [(client.id, client.client_name) for client in Client.query()]
class ClientAdd(FlaskForm):

View file

@ -38,6 +38,7 @@ class Client(LDAPObject, ClientMixin):
}
attribute_table = {
"id": "dn",
"description": "description",
"preconsent": "oauthPreconsent",
# post_logout_redirect_uris is not yet supported by authlib
@ -113,6 +114,7 @@ class AuthorizationCode(LDAPObject, AuthorizationCodeMixin):
base = "ou=authorizations,ou=oauth"
rdn_attribute = "oauthAuthorizationCodeID"
attribute_table = {
"id": "dn",
"authorization_code_id": "oauthAuthorizationCodeID",
"description": "description",
"code": "oauthCode",
@ -153,6 +155,7 @@ class Token(LDAPObject, TokenMixin):
base = "ou=tokens,ou=oauth"
rdn_attribute = "oauthTokenID"
attribute_table = {
"id": "dn",
"token_id": "oauthTokenID",
"access_token": "oauthAccessToken",
"description": "description",
@ -214,6 +217,7 @@ class Consent(LDAPObject):
base = "ou=consents,ou=oauth"
rdn_attribute = "cn"
attribute_table = {
"id": "dn",
"consent_id": "cn",
"subject": "oauthSubject",
"client": "oauthClient",

View file

@ -43,7 +43,7 @@ AUTHORIZATION_CODE_LIFETIME = 84400
def exists_nonce(nonce, req):
client = Client.get(dn=req.client_id)
client = Client.get(id=req.client_id)
exists = AuthorizationCode.query(client=client, nonce=nonce)
return bool(exists)

View file

@ -211,21 +211,21 @@ def moderator(app, slapd_connection):
@pytest.fixture
def logged_user(user, testclient):
with testclient.session_transaction() as sess:
sess["user_id"] = [user.dn]
sess["user_id"] = [user.id]
return user
@pytest.fixture
def logged_admin(admin, testclient):
with testclient.session_transaction() as sess:
sess["user_id"] = [admin.dn]
sess["user_id"] = [admin.id]
return admin
@pytest.fixture
def logged_moderator(moderator, testclient):
with testclient.session_transaction() as sess:
sess["user_id"] = [moderator.dn]
sess["user_id"] = [moderator.id]
return moderator

View file

@ -22,7 +22,7 @@ def test_object_creation(slapd_connection):
user.save()
assert user.exists
user = User.get(dn=user.dn)
user = User.get(id=user.id)
assert user.exists
user.delete()
@ -36,7 +36,7 @@ def test_repr(slapd_connection, foo_group, user):
def test_equality(slapd_connection, foo_group, bar_group):
Group.ldap_object_attributes()
assert foo_group != bar_group
foo_group2 = Group.get(dn=foo_group.dn)
foo_group2 = Group.get(id=foo_group.id)
assert foo_group == foo_group2
@ -152,10 +152,10 @@ def test_operational_attribute_conversion(slapd_connection):
def test_guess_object_from_dn(slapd_connection, testclient, foo_group):
foo_group.member = [foo_group]
foo_group.save()
g = LDAPObject.get(dn=foo_group.dn)
g = LDAPObject.get(id=foo_group.dn)
assert isinstance(g, Group)
assert g == foo_group
assert g.cn == foo_group.cn
ou = LDAPObject.get(dn=f"{Group.base},{Group.root_dn}")
ou = LDAPObject.get(id=f"{Group.base},{Group.root_dn}")
assert isinstance(g, LDAPObject)

View file

@ -150,7 +150,7 @@ def test_client_edit(testclient, client, logged_admin, other_client):
"software_version": "1",
"jwk": "jwk",
"jwks_uri": "https://foo.bar/jwks.json",
"audience": [client.dn, other_client.dn],
"audience": [client.id, other_client.id],
"preconsent": True,
"post_logout_redirect_uris": ["https://foo.bar/disconnected"],
}
@ -164,7 +164,7 @@ def test_client_edit(testclient, client, logged_admin, other_client):
) not in res.flashes
assert ("success", "The client has been edited.") in res.flashes
client = Client.get(client.dn)
client = Client.get(client.id)
data["audience"] = [client, other_client]
for k, v in data.items():
client_value = getattr(client, k)
@ -226,7 +226,7 @@ def test_client_edit_preauth(testclient, client, logged_admin, other_client):
res = res.forms["clientadd"].submit(name="action", value="edit")
assert ("success", "The client has been edited.") in res.flashes
client = Client.get(client.dn)
client = Client.get(client.id)
assert client.preconsent
res = testclient.get("/admin/client/edit/" + client.client_id)
@ -234,5 +234,5 @@ def test_client_edit_preauth(testclient, client, logged_admin, other_client):
res = res.forms["clientadd"].submit(name="action", value="edit")
assert ("success", "The client has been edited.") in res.flashes
client = Client.get(client.dn)
client = Client.get(client.id)
assert not client.preconsent

View file

@ -9,7 +9,7 @@ def test_index(testclient, user):
assert res.location == "/login"
with testclient.session_transaction() as sess:
sess["user_id"] = [user.dn]
sess["user_id"] = [user.id]
res = testclient.get("/", status=302)
assert res.location == "/profile/user"
@ -41,7 +41,7 @@ def test_signin_and_out(testclient, user):
res = res.follow(status=200)
with testclient.session_transaction() as session:
assert [user.dn] == session.get("user_id")
assert [user.id] == session.get("user_id")
assert "attempt_login" not in session
res = testclient.get("/login", status=302)
@ -92,7 +92,7 @@ def test_signin_with_alternate_attribute(testclient, user):
res = res.follow(status=200)
with testclient.session_transaction() as session:
assert [user.dn] == session.get("user_id")
assert [user.id] == session.get("user_id")
def test_password_page_without_signin_in_redirects_to_login_page(testclient, user):
@ -219,7 +219,7 @@ def test_user_deleted_in_session(testclient, slapd_connection):
testclient.get("/profile/jake", status=403)
with testclient.session_transaction() as session:
session["user_id"] = [u.dn]
session["user_id"] = [u.id]
testclient.get("/profile/jake", status=200)
u.delete()
@ -279,7 +279,7 @@ def test_admin_self_deletion(testclient, slapd_connection):
)
admin.save()
with testclient.session_transaction() as sess:
sess["user_id"] = [admin.dn]
sess["user_id"] = [admin.id]
res = testclient.get("/profile/temp")
res = (
@ -307,7 +307,7 @@ def test_user_self_deletion(testclient, slapd_connection):
)
user.save()
with testclient.session_transaction() as sess:
sess["user_id"] = [user.dn]
sess["user_id"] = [user.id]
testclient.app.config["ACL"]["DEFAULT"]["PERMISSIONS"] = ["edit_self"]
res = testclient.get("/profile/temp")

View file

@ -63,7 +63,7 @@ def test_logging_to_file(configuration, tmp_path, smtpd, admin, slapd_server):
testclient = TestApp(app)
with testclient.session_transaction() as sess:
sess["user_id"] = [admin.dn]
sess["user_id"] = [admin.id]
res = testclient.get("/admin/mail")
res.form["mail"] = "test@test.com"

View file

@ -64,27 +64,27 @@ def test_group_list_search(testclient, logged_admin, foo_group, bar_group):
def test_set_groups(app, user, foo_group, bar_group):
foo_dns = {m.dn for m in foo_group.get_members()}
assert user.dn in foo_dns
assert user.groups[0].dn == foo_group.dn
foo_ids = {m.id for m in foo_group.get_members()}
assert user.id in foo_ids
assert user.groups[0].id == foo_group.id
user.load_groups()
user.set_groups([foo_group, bar_group])
bar_group = Group.get(bar_group.dn)
bar_dns = {m.dn for m in bar_group.get_members()}
assert user.dn in bar_dns
assert user.groups[1].dn == bar_group.dn
bar_group = Group.get(bar_group.id)
bar_ids = {m.id for m in bar_group.get_members()}
assert user.id in bar_ids
assert user.groups[1].id == bar_group.id
user.load_groups()
user.set_groups([foo_group])
foo_group = Group.get(foo_group.dn)
bar_group = Group.get(bar_group.dn)
foo_dns = {m.dn for m in foo_group.get_members()}
bar_dns = {m.dn for m in bar_group.get_members()}
assert user.dn in foo_dns
assert user.dn not in bar_dns
foo_group = Group.get(foo_group.id)
bar_group = Group.get(bar_group.id)
foo_ids = {m.id for m in foo_group.get_members()}
bar_ids = {m.id for m in bar_group.get_members()}
assert user.id in foo_ids
assert user.id not in bar_ids
def test_set_groups_with_leading_space_in_user_id_attribute(app, foo_group):
@ -99,15 +99,15 @@ def test_set_groups_with_leading_space_in_user_id_attribute(app, foo_group):
user.load_groups()
user.set_groups([foo_group])
foo_dns = {m.dn for m in foo_group.get_members()}
assert user.dn in foo_dns
foo_ids = {m.id for m in foo_group.get_members()}
assert user.id in foo_ids
user.load_groups()
user.set_groups([])
foo_group = Group.get(foo_group.dn)
foo_dns = {m.dn for m in foo_group.get_members()}
assert user.dn not in foo_dns
foo_group = Group.get(foo_group.id)
foo_ids = {m.id for m in foo_group.get_members()}
assert user.id not in foo_ids
user.delete()
@ -134,8 +134,8 @@ def test_moderator_can_create_edit_and_delete_group(
bar_group = Group.get("bar")
assert bar_group.name == "bar"
assert bar_group.description == ["yolo"]
assert [member.dn for member in bar_group.get_members()] == [
logged_moderator.dn
assert [member.id for member in bar_group.get_members()] == [
logged_moderator.id
] # Group cannot be empty so creator is added in it
assert "bar" in res.text
@ -205,7 +205,7 @@ def test_edition_failed(testclient, logged_moderator, foo_group):
form["csrf_token"] = "invalid"
res = form.submit(name="action", value="edit")
assert "Group edition failed." in res
foo_group = Group.get(foo_group.dn)
foo_group = Group.get(foo_group.id)
assert foo_group.name == "foo"

View file

@ -16,7 +16,7 @@ def test_preferred_language(slapd_server, testclient, logged_user):
res = res.form.submit(name="action", value="edit")
assert res.flashes == [("success", "Le profil a été mis à jour avec succès.")]
res = res.follow()
logged_user = User.get(dn=logged_user.dn)
logged_user = User.get(id=logged_user.id)
assert logged_user.preferredLanguage == "fr"
assert res.form["preferredLanguage"].value == "fr"
assert res.pyquery("html")[0].attrib["lang"] == "fr"
@ -27,7 +27,7 @@ def test_preferred_language(slapd_server, testclient, logged_user):
res = res.form.submit(name="action", value="edit")
assert res.flashes == [("success", "Profile updated successfuly.")]
res = res.follow()
logged_user = User.get(dn=logged_user.dn)
logged_user = User.get(id=logged_user.id)
assert logged_user.preferredLanguage == "en"
assert res.form["preferredLanguage"].value == "en"
assert res.pyquery("html")[0].attrib["lang"] == "en"
@ -38,7 +38,7 @@ def test_preferred_language(slapd_server, testclient, logged_user):
res = res.form.submit(name="action", value="edit")
assert res.flashes == [("success", "Profile updated successfuly.")]
res = res.follow()
logged_user = User.get(dn=logged_user.dn)
logged_user = User.get(id=logged_user.id)
assert logged_user.preferredLanguage is None
assert res.form["preferredLanguage"].value == "auto"
assert res.pyquery("html")[0].attrib["lang"] == "en"

View file

@ -13,7 +13,7 @@ def test_invitation(testclient, logged_admin, foo_group, smtpd):
res.form["uid"] = "someone"
res.form["uid_editable"] = False
res.form["mail"] = "someone@domain.tld"
res.form["groups"] = [foo_group.dn]
res.form["groups"] = [foo_group.id]
res = res.form.submit(name="action", value="send", status=200)
assert len(smtpd.messages) == 1
@ -28,7 +28,7 @@ def test_invitation(testclient, logged_admin, foo_group, smtpd):
assert res.form["uid"].value == "someone"
assert res.form["uid"].attrs["readonly"]
assert res.form["mail"].value == "someone@domain.tld"
assert res.form["groups"].value == [foo_group.dn]
assert res.form["groups"].value == [foo_group.id]
res.form["password1"] = "whatever"
res.form["password2"] = "whatever"
@ -63,7 +63,7 @@ def test_invitation_editable_uid(testclient, logged_admin, foo_group, smtpd):
res.form["uid"] = "jackyjack"
res.form["uid_editable"] = True
res.form["mail"] = "jackyjack@domain.tld"
res.form["groups"] = [foo_group.dn]
res.form["groups"] = [foo_group.id]
res = res.form.submit(name="action", value="send", status=200)
assert len(smtpd.messages) == 1
@ -78,7 +78,7 @@ def test_invitation_editable_uid(testclient, logged_admin, foo_group, smtpd):
assert res.form["uid"].value == "jackyjack"
assert "readonly" not in res.form["uid"].attrs
assert res.form["mail"].value == "jackyjack@domain.tld"
assert res.form["groups"].value == [foo_group.dn]
assert res.form["groups"].value == [foo_group.id]
res.form["uid"] = "djorje"
res.form["password1"] = "whatever"
@ -110,7 +110,7 @@ def test_generate_link(testclient, logged_admin, foo_group, smtpd):
res.form["uid"] = "sometwo"
res.form["mail"] = "sometwo@domain.tld"
res.form["groups"] = [foo_group.dn]
res.form["groups"] = [foo_group.id]
res = res.form.submit(name="action", value="generate", status=200)
assert len(smtpd.messages) == 0
@ -124,7 +124,7 @@ def test_generate_link(testclient, logged_admin, foo_group, smtpd):
assert res.form["uid"].value == "sometwo"
assert res.form["mail"].value == "sometwo@domain.tld"
assert res.form["groups"].value == [foo_group.dn]
assert res.form["groups"].value == [foo_group.id]
res.form["password1"] = "whatever"
res.form["password2"] = "whatever"
@ -165,7 +165,7 @@ def test_registration(testclient, foo_group):
"someoneelse",
False,
"someone@mydomain.tld",
[foo_group.dn],
[foo_group.id],
)
b64 = invitation.b64()
hash = invitation.profile_hash()
@ -176,7 +176,7 @@ def test_registration(testclient, foo_group):
def test_registration_invalid_hash(testclient, foo_group):
now = datetime.now().isoformat()
invitation = Invitation(
now, "anything", False, "someone@mydomain.tld", [foo_group.dn]
now, "anything", False, "someone@mydomain.tld", [foo_group.id]
)
b64 = invitation.b64()
@ -189,7 +189,7 @@ def test_registration_invalid_data(testclient, foo_group):
"someoneelse",
False,
"someone@mydomain.tld",
[foo_group.dn],
[foo_group.id],
)
hash = invitation.profile_hash()
@ -203,7 +203,7 @@ def test_registration_more_than_48_hours_after_invitation(testclient, foo_group)
"someoneelse",
False,
"someone@mydomain.tld",
[foo_group.dn],
[foo_group.id],
)
hash = invitation.profile_hash()
b64 = invitation.b64()
@ -217,7 +217,7 @@ def test_registration_no_password(testclient, foo_group):
"someoneelse",
False,
"someone@mydomain.tld",
[foo_group.dn],
[foo_group.id],
)
hash = invitation.profile_hash()
b64 = invitation.b64()
@ -242,7 +242,7 @@ def test_no_registration_if_logged_in(testclient, logged_user, foo_group):
"someoneelse",
False,
"someone@mydomain.tld",
[foo_group.dn],
[foo_group.id],
)
hash = invitation.profile_hash()
b64 = invitation.b64()
@ -279,14 +279,14 @@ def test_groups_are_saved_even_when_user_does_not_have_read_permission(
"someoneelse",
False,
"someone@mydomain.tld",
[foo_group.dn],
[foo_group.id],
)
b64 = invitation.b64()
hash = invitation.profile_hash()
res = testclient.get(f"/register/{b64}/{hash}", status=200)
assert res.form["groups"].value == [foo_group.dn]
assert res.form["groups"].value == [foo_group.id]
assert res.form["groups"].attrs["readonly"]
res.form["password1"] = "whatever"

View file

@ -113,7 +113,7 @@ def test_edition(
assert res.flashes == [("success", "Le profil a été mis à jour avec succès.")]
res = res.follow()
logged_user = User.get(dn=logged_user.dn)
logged_user = User.get(id=logged_user.id)
logged_user.load_groups()
assert ["user"] == logged_user.uid
@ -161,7 +161,7 @@ def test_field_permissions_none(testclient, slapd_server, logged_user):
testclient.post(
"/profile/user", {"action": "edit", "telephoneNumber": "000-000-000"}
)
user = User.get(dn=logged_user.dn)
user = User.get(id=logged_user.id)
assert user.telephoneNumber == ["555-666-777"]
@ -181,7 +181,7 @@ def test_field_permissions_read(testclient, slapd_server, logged_user):
testclient.post(
"/profile/user", {"action": "edit", "telephoneNumber": "000-000-000"}
)
user = User.get(dn=logged_user.dn)
user = User.get(id=logged_user.id)
assert user.telephoneNumber == ["555-666-777"]
@ -201,7 +201,7 @@ def test_field_permissions_write(testclient, slapd_server, logged_user):
testclient.post(
"/profile/user", {"action": "edit", "telephoneNumber": "000-000-000"}
)
user = User.get(dn=logged_user.dn)
user = User.get(id=logged_user.id)
assert user.telephoneNumber == ["000-000-000"]
@ -565,7 +565,7 @@ def test_photo_on_profile_edition(
res = res.form.submit(name="action", value="edit").follow()
assert "Profile updated successfuly." in res, str(res)
logged_user = User.get(dn=logged_user.dn)
logged_user = User.get(id=logged_user.id)
assert [jpeg_photo] == logged_user.jpegPhoto
@ -575,7 +575,7 @@ def test_photo_on_profile_edition(
res = res.form.submit(name="action", value="edit").follow()
assert "Profile updated successfuly." in res, str(res)
logged_user = User.get(dn=logged_user.dn)
logged_user = User.get(id=logged_user.id)
assert [jpeg_photo] == logged_user.jpegPhoto
@ -585,7 +585,7 @@ def test_photo_on_profile_edition(
res = res.form.submit(name="action", value="edit").follow()
assert "Profile updated successfuly." in res, str(res)
logged_user = User.get(dn=logged_user.dn)
logged_user = User.get(id=logged_user.id)
assert [] == logged_user.jpegPhoto
@ -596,7 +596,7 @@ def test_photo_on_profile_edition(
res = res.form.submit(name="action", value="edit").follow()
assert "Profile updated successfuly." in res, str(res)
logged_user = User.get(dn=logged_user.dn)
logged_user = User.get(id=logged_user.id)
assert [] == logged_user.jpegPhoto