summaryrefslogtreecommitdiff
path: root/lib/ephy-sync-utils.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/ephy-sync-utils.c')
-rw-r--r--lib/ephy-sync-utils.c79
1 files changed, 68 insertions, 11 deletions
diff --git a/lib/ephy-sync-utils.c b/lib/ephy-sync-utils.c
index 97936b759..260d78d3a 100644
--- a/lib/ephy-sync-utils.c
+++ b/lib/ephy-sync-utils.c
@@ -23,6 +23,8 @@
#include "ephy-settings.h"
+#include <inttypes.h>
+#include <json-glib/json-glib.h>
#include <libsoup/soup.h>
#include <stdio.h>
#include <string.h>
@@ -230,6 +232,46 @@ ephy_sync_utils_get_random_sync_id (void)
return id;
}
+char *
+ephy_sync_utils_make_client_record (const char *device_bso_id,
+ const char *device_id,
+ const char *device_name)
+{
+ JsonNode *node;
+ JsonObject *object;
+ JsonArray *array;
+ char *protocol;
+ char *retval;
+
+ g_assert (device_bso_id);
+ g_assert (device_id);
+ g_assert (device_name);
+
+ array = json_array_new ();
+ protocol = g_strdup_printf ("1.%"PRIu32, EPHY_SYNC_STORAGE_VERSION);
+ json_array_add_string_element (array, protocol);
+
+ object = json_object_new ();
+ json_object_set_string_member (object, "id", device_bso_id);
+ json_object_set_string_member (object, "fxaDeviceId", device_id);
+ json_object_set_string_member (object, "name", device_name);
+ json_object_set_string_member (object, "type", "desktop");
+ json_object_set_string_member (object, "version", VERSION);
+ json_object_set_array_member (object, "protocols", array);
+ json_object_set_string_member (object, "os", "Linux");
+ json_object_set_string_member (object, "appPackage", "org.gnome.epiphany");
+ json_object_set_string_member (object, "application", "Epiphany");
+
+ node = json_node_new (JSON_NODE_OBJECT);
+ json_node_take_object (node, object);
+ retval = json_to_string (node, FALSE);
+
+ g_free (protocol);
+ json_node_unref (node);
+
+ return retval;
+}
+
void
ephy_sync_utils_set_device_id (const char *id)
{
@@ -240,15 +282,29 @@ ephy_sync_utils_set_device_id (const char *id)
char *
ephy_sync_utils_get_device_id (void)
{
- char *id;
+ return g_settings_get_string (EPHY_SETTINGS_SYNC, EPHY_PREFS_SYNC_DEVICE_ID);
+}
- id = g_settings_get_string (EPHY_SETTINGS_SYNC, EPHY_PREFS_SYNC_DEVICE_ID);
- if (!g_strcmp0 (id, "")) {
- g_free (id);
- id = ephy_sync_utils_get_random_sync_id ();
+char *
+ephy_sync_utils_get_device_bso_id (void)
+{
+ char *base64;
+ char *sync_id;
+ char *device_id;
+
+ device_id = g_settings_get_string (EPHY_SETTINGS_SYNC, EPHY_PREFS_SYNC_DEVICE_ID);
+ if (!g_strcmp0 (device_id, "")) {
+ /* This should never be reached. */
+ return g_strnfill (EPHY_SYNC_BSO_ID_LEN, '0');
}
- return id;
+ base64 = g_base64_encode ((guint8 *)device_id, EPHY_SYNC_DEVICE_ID_LEN);
+ sync_id = g_strndup (base64, EPHY_SYNC_BSO_ID_LEN);
+
+ g_free (base64);
+ g_free (device_id);
+
+ return sync_id;
}
void
@@ -264,11 +320,12 @@ ephy_sync_utils_get_device_name (void)
char *name;
name = g_settings_get_string (EPHY_SETTINGS_SYNC, EPHY_PREFS_SYNC_DEVICE_NAME);
- if (!g_strcmp0 (name, "")) {
- g_free (name);
- name = g_strdup_printf ("%s's GNOME Web on %s",
- g_get_user_name (), g_get_host_name ());
- }
+ if (g_strcmp0 (name, ""))
+ return name;
+
+ g_free (name);
+ name = g_strdup_printf ("%s’s GNOME Web on %s", g_get_user_name (), g_get_host_name ());
+ g_settings_set_string (EPHY_SETTINGS_SYNC, EPHY_PREFS_SYNC_DEVICE_NAME, name);
return name;
}