When making a variant from identity info, only include non-null or non-empty fields
authorAlexander Kanavin <alex.kanavin@gmail.com>
Thu, 20 Feb 2014 09:16:28 +0000 (11:16 +0200)
committerAlexander Kanavin <alex.kanavin@gmail.com>
Thu, 20 Feb 2014 09:16:28 +0000 (11:16 +0200)
libgsignon-glib/signon-identity-info.c

index 71292d4f50f21c58a269bdabbc68316910db6001..9640b1348fa90978b079538330d5bde1147f689c 100644 (file)
@@ -204,38 +204,46 @@ signon_identity_info_to_variant (const SignonIdentityInfo *self)
                            SIGNOND_IDENTITY_INFO_ID,
                            g_variant_new_uint32 (self->id));
 
-    g_variant_builder_add (&builder, "{sv}",
-                           SIGNOND_IDENTITY_INFO_USERNAME,
-                           signon_variant_new_string (self->username));
+    if (self->username != NULL) {
+        g_variant_builder_add (&builder, "{sv}",
+                               SIGNOND_IDENTITY_INFO_USERNAME,
+                               signon_variant_new_string (self->username));
+    }
 
-    g_variant_builder_add (&builder, "{sv}",
-                           SIGNOND_IDENTITY_INFO_SECRET,
-                           signon_variant_new_string (self->secret));
+    if (self->secret != NULL) {
+        g_variant_builder_add (&builder, "{sv}",
+                               SIGNOND_IDENTITY_INFO_SECRET,
+                               signon_variant_new_string (self->secret));
+    }
 
-    g_variant_builder_add (&builder, "{sv}",
-                           SIGNOND_IDENTITY_INFO_CAPTION,
-                           signon_variant_new_string (self->caption));
+    if (self->caption != NULL) {
+        g_variant_builder_add (&builder, "{sv}",
+                               SIGNOND_IDENTITY_INFO_CAPTION,
+                               signon_variant_new_string (self->caption));
+    }
 
     g_variant_builder_add (&builder, "{sv}",
                            SIGNOND_IDENTITY_INFO_STORESECRET,
                            g_variant_new_boolean (self->store_secret));
 
-    g_variant_builder_init (&method_builder,
-                            (const GVariantType *)"a{sas}");
-    g_hash_table_iter_init (&iter, self->methods);
-    while (g_hash_table_iter_next (&iter,
-                                   (gpointer)&method,
-                                   (gpointer)&mechanisms))
-    {
-        g_variant_builder_add (&method_builder, "{s^as}",
-                               method,
-                               mechanisms);
-    }
-    method_map = g_variant_builder_end (&method_builder);
+    if (g_hash_table_size(self->methods) > 0) {
+        g_variant_builder_init (&method_builder,
+                                (const GVariantType *)"a{sas}");
+        g_hash_table_iter_init (&iter, self->methods);
+        while (g_hash_table_iter_next (&iter,
+                                       (gpointer)&method,
+                                       (gpointer)&mechanisms))
+        {
+            g_variant_builder_add (&method_builder, "{s^as}",
+                                   method,
+                                   mechanisms);
+        }
+        method_map = g_variant_builder_end (&method_builder);
 
-    g_variant_builder_add (&builder, "{sv}",
-                           SIGNOND_IDENTITY_INFO_AUTHMETHODS,
-                           method_map);
+        g_variant_builder_add (&builder, "{sv}",
+                               SIGNOND_IDENTITY_INFO_AUTHMETHODS,
+                               method_map);
+    }
 
     if (self->realms != NULL)
     {