feat: Add jid_is_valid_user_jid() to check for valid user JIDs

This one will need a localpart as well.
It should be used when we want to message a user for example.
While jid_is_valid() also returns TRUE for domain/server JIDs.
This commit is contained in:
Michael Vetter
2026-03-06 12:35:30 +01:00
parent 09757da5df
commit 5bcf859e92
5 changed files with 37 additions and 0 deletions

View File

@@ -152,6 +152,13 @@ jid_is_valid(const gchar* const str)
return (jid != NULL);
}
gboolean
jid_is_valid_user_jid(const gchar* const str)
{
auto_jid Jid* jid = jid_create(str);
return (jid != NULL && jid->localpart != NULL);
}
Jid*
jid_create_from_bare_and_resource(const gchar* const barejid, const gchar* const resource)
{

View File

@@ -53,6 +53,7 @@ typedef struct jid_t Jid;
Jid* jid_create(const gchar* const str);
gboolean jid_is_valid(const gchar* const str);
gboolean jid_is_valid_user_jid(const gchar* const str);
Jid* jid_create_from_bare_and_resource(const gchar* const barejid, const gchar* const resource);
void jid_destroy(Jid* jid);
void jid_ref(Jid* jid);

View File

@@ -154,6 +154,9 @@ main(int argc, char* argv[])
cmocka_unit_test(jid_create__returns__null_from_empty_parts),
cmocka_unit_test(jid_create__returns__null_from_multiple_at_in_bare),
cmocka_unit_test(jid_create__returns__correct_parts_with_at_in_resource_only),
cmocka_unit_test(jid_is_valid_user_jid__is__true_for_valid_user_jid),
cmocka_unit_test(jid_is_valid_user_jid__is__false_for_domain_jid),
cmocka_unit_test(jid_is_valid_user_jid__is__false_for_invalid_jid),
cmocka_unit_test(jid_is_valid__is__true_for_valid_jid),
cmocka_unit_test(jid_is_valid__is__false_for_invalid_jid),
cmocka_unit_test(jid_is_valid__is__false_for_null),

View File

@@ -306,6 +306,29 @@ jid_create__returns__correct_parts_with_at_in_resource_only(void** state)
jid_destroy(result);
}
void
jid_is_valid_user_jid__is__true_for_valid_user_jid(void** state)
{
assert_true(jid_is_valid_user_jid("myuser@mydomain/laptop"));
assert_true(jid_is_valid_user_jid("myuser@mydomain"));
}
void
jid_is_valid_user_jid__is__false_for_domain_jid(void** state)
{
assert_false(jid_is_valid_user_jid("mydomain/laptop"));
assert_false(jid_is_valid_user_jid("mydomain"));
}
void
jid_is_valid_user_jid__is__false_for_invalid_jid(void** state)
{
assert_false(jid_is_valid_user_jid("@mydomain"));
assert_false(jid_is_valid_user_jid("/laptop"));
assert_false(jid_is_valid_user_jid(NULL));
assert_false(jid_is_valid_user_jid(""));
}
void
jid_is_valid__is__true_for_valid_jid(void** state)
{

View File

@@ -30,6 +30,9 @@ void jid_create__returns__null_from_invalid_localpart_chars(void** state);
void jid_create__returns__null_from_empty_parts(void** state);
void jid_create__returns__null_from_multiple_at_in_bare(void** state);
void jid_create__returns__correct_parts_with_at_in_resource_only(void** state);
void jid_is_valid_user_jid__is__true_for_valid_user_jid(void** state);
void jid_is_valid_user_jid__is__false_for_domain_jid(void** state);
void jid_is_valid_user_jid__is__false_for_invalid_jid(void** state);
void jid_is_valid__is__true_for_valid_jid(void** state);
void jid_is_valid__is__false_for_invalid_jid(void** state);
void jid_is_valid__is__false_for_null(void** state);