summaryrefslogtreecommitdiff
path: root/document-portal/xdp-util.c
diff options
context:
space:
mode:
authorAlexander Larsson <alexl@redhat.com>2015-08-26 15:38:12 +0200
committerAlexander Larsson <alexl@redhat.com>2015-08-26 17:11:35 +0200
commit12fbd9ff95482357b8285f97c2c28bd290add993 (patch)
treead7f319535d98554b2a0027e2419e637740c2920 /document-portal/xdp-util.c
parenta3f4342b5ac4f85ad6cdaf058c310a7a5bd649cf (diff)
downloadxdg-app-12fbd9ff95482357b8285f97c2c28bd290add993.tar.gz
Make document portal use the new permission store
Diffstat (limited to 'document-portal/xdp-util.c')
-rw-r--r--document-portal/xdp-util.c116
1 files changed, 116 insertions, 0 deletions
diff --git a/document-portal/xdp-util.c b/document-portal/xdp-util.c
index 1ef6194..aa2d5a5 100644
--- a/document-portal/xdp-util.c
+++ b/document-portal/xdp-util.c
@@ -3,6 +3,122 @@
#include <errno.h>
#include <gio/gio.h>
#include "xdp-error.h"
+#include "xdp-util.h"
+
+const char **
+xdg_unparse_permissions (XdpPermissionFlags permissions)
+{
+ GPtrArray *array;
+
+ array = g_ptr_array_new ();
+
+ if (permissions & XDP_PERMISSION_FLAGS_READ)
+ g_ptr_array_add (array, "read");
+ if (permissions & XDP_PERMISSION_FLAGS_WRITE)
+ g_ptr_array_add (array, "write");
+ if (permissions & XDP_PERMISSION_FLAGS_GRANT_PERMISSIONS)
+ g_ptr_array_add (array, "grant-permissions");
+ if (permissions & XDP_PERMISSION_FLAGS_DELETE)
+ g_ptr_array_add (array, "delete");
+
+ g_ptr_array_add (array, NULL);
+ return (const char **)g_ptr_array_free (array, FALSE);
+}
+
+XdpPermissionFlags
+xdp_parse_permissions (const char **permissions)
+{
+ XdpPermissionFlags perms;
+ int i;
+
+ perms = 0;
+ for (i = 0; permissions[i]; i++)
+ {
+ if (strcmp (permissions[i], "read") == 0)
+ perms |= XDP_PERMISSION_FLAGS_READ;
+ else if (strcmp (permissions[i], "write") == 0)
+ perms |= XDP_PERMISSION_FLAGS_WRITE;
+ else if (strcmp (permissions[i], "grant-permissions") == 0)
+ perms |= XDP_PERMISSION_FLAGS_GRANT_PERMISSIONS;
+ else if (strcmp (permissions[i], "delete") == 0)
+ perms |= XDP_PERMISSION_FLAGS_DELETE;
+ else
+ g_warning ("No such permission: %s", permissions[i]);
+ }
+
+ return perms;
+}
+
+XdpPermissionFlags
+xdp_get_permissions (XdgAppDbEntry *entry,
+ const char *app_id)
+{
+ g_autoptr(GVariant) app_array = NULL;
+ g_autofree const char **permissions = NULL;
+
+ if (strcmp (app_id, "") == 0)
+ return XDP_PERMISSION_FLAGS_ALL;
+
+ permissions = xdg_app_db_entry_list_permissions (entry, app_id);
+ return xdp_parse_permissions (permissions);
+}
+
+gboolean
+xdp_has_permissions (XdgAppDbEntry *entry,
+ const char *app_id,
+ XdpPermissionFlags perms)
+{
+ XdpPermissionFlags current_perms;
+
+ current_perms = xdp_get_permissions (entry, app_id);
+
+ return (current_perms & perms) == perms;
+}
+
+guint32
+xdp_id_from_name (const char *name)
+{
+ return g_ascii_strtoull (name, NULL, 16);
+}
+
+char *
+xdp_name_from_id (guint32 doc_id)
+{
+ return g_strdup_printf ("%x", doc_id);
+}
+
+const char *
+xdp_get_uri (XdgAppDbEntry *entry)
+{
+ g_autoptr(GVariant) v = xdg_app_db_entry_get_data (entry);
+ return g_variant_get_string (v, NULL);
+}
+
+char *
+xdp_dup_path (XdgAppDbEntry *entry)
+{
+ const char *uri = xdp_get_uri (entry);
+ g_autoptr(GFile) file = g_file_new_for_uri (uri);
+
+ return g_file_get_path (file);
+}
+
+char *
+xdp_dup_basename (XdgAppDbEntry *entry)
+{
+ const char *uri = xdp_get_uri (entry);
+ g_autoptr(GFile) file = g_file_new_for_uri (uri);
+
+ return g_file_get_basename (file);
+}
+
+char *
+xdp_dup_dirname (XdgAppDbEntry *entry)
+{
+ g_autofree char *path = xdp_dup_path (entry);
+
+ return g_path_get_dirname (path);
+}
static GHashTable *app_ids;