mirror of
https://gitlab.gnome.org/GNOME/libsecret.git
synced 2024-12-22 04:38:55 +00:00
Use collection aliases with secret_password_store() and friends
* Make SECRET_COLLECTION_DEFAULT and SECRET_COLLECTION_SESSION be the simple aliases for those collections. * Accept either an alias or a path in secret_password_store() and secret_service_store() and friends.
This commit is contained in:
parent
7098b856b7
commit
b535ed1bbf
@ -66,6 +66,21 @@
|
||||
* during a secret_collection_new() or secret_collection_new_sync() operation.
|
||||
*/
|
||||
|
||||
/**
|
||||
* SECRET_COLLECTION_DEFAULT:
|
||||
*
|
||||
* An alias to the default collection. This can be passed to secret_password_store()
|
||||
* secret_service_read_alias().
|
||||
*/
|
||||
|
||||
/**
|
||||
* SECRET_COLLECTION_SESSION:
|
||||
*
|
||||
* An alias to the session collection, which will be cleared when the user ends
|
||||
* the session. This can be passed to secret_password_store(),
|
||||
* secret_service_read_alias() or similar functions.
|
||||
*/
|
||||
|
||||
enum {
|
||||
PROP_0,
|
||||
PROP_SERVICE,
|
||||
|
@ -1000,7 +1000,7 @@ on_store_service (GObject *source,
|
||||
* @service: (allow-none): the secret service
|
||||
* @schema: (allow-none): the schema to use to check attributes
|
||||
* @attributes: (element-type utf8 utf8): the attribute keys and values
|
||||
* @collection_path: (allow-none): the D-Bus path to the collection where to store the secret
|
||||
* @collection: (allow-none): a collection alias, or D-Bus object path of the collection where to store the secret
|
||||
* @label: label for the secret
|
||||
* @value: the secret value
|
||||
* @cancellable: optional cancellation object
|
||||
@ -1017,7 +1017,7 @@ on_store_service (GObject *source,
|
||||
* If @service is NULL, then secret_service_get() will be called to get
|
||||
* the default #SecretService proxy.
|
||||
*
|
||||
* If @collection_path is not specified, then the default collection will be
|
||||
* If @collection is not specified, then the default collection will be
|
||||
* used. Use #SECRET_COLLECTION_SESSION to store the password in the session
|
||||
* collection, which doesn't get stored across login sessions.
|
||||
*
|
||||
@ -1027,7 +1027,7 @@ void
|
||||
secret_service_store (SecretService *service,
|
||||
const SecretSchema *schema,
|
||||
GHashTable *attributes,
|
||||
const gchar *collection_path,
|
||||
const gchar *collection,
|
||||
const gchar *label,
|
||||
SecretValue *value,
|
||||
GCancellable *cancellable,
|
||||
@ -1052,7 +1052,7 @@ secret_service_store (SecretService *service,
|
||||
async = g_simple_async_result_new (G_OBJECT (service), callback, user_data,
|
||||
secret_service_store);
|
||||
store = g_slice_new0 (StoreClosure);
|
||||
store->collection_path = g_strdup (collection_path);
|
||||
store->collection_path = _secret_util_collection_to_path (collection);
|
||||
store->cancellable = cancellable ? g_object_ref (cancellable) : NULL;
|
||||
store->value = secret_value_ref (value);
|
||||
store->properties = g_hash_table_new_full (g_str_hash, g_str_equal, NULL,
|
||||
@ -1117,7 +1117,7 @@ secret_service_store_finish (SecretService *service,
|
||||
* @service: (allow-none): the secret service
|
||||
* @schema: (allow-none): the schema for the attributes
|
||||
* @attributes: (element-type utf8 utf8): the attribute keys and values
|
||||
* @collection_path: (allow-none): the D-Bus path to the collection where to store the secret
|
||||
* @collection: (allow-none): a collection alias, or D-Bus object path of the collection where to store the secret
|
||||
* @label: label for the secret
|
||||
* @value: the secret value
|
||||
* @cancellable: optional cancellation object
|
||||
@ -1130,7 +1130,7 @@ secret_service_store_finish (SecretService *service,
|
||||
* If the attributes match a secret item already stored in the collection, then
|
||||
* the item will be updated with these new values.
|
||||
*
|
||||
* If @collection_path is %NULL, then the default collection will be
|
||||
* If @collection is %NULL, then the default collection will be
|
||||
* used. Use #SECRET_COLLECTION_SESSION to store the password in the session
|
||||
* collection, which doesn't get stored across login sessions.
|
||||
*
|
||||
@ -1146,7 +1146,7 @@ gboolean
|
||||
secret_service_store_sync (SecretService *service,
|
||||
const SecretSchema *schema,
|
||||
GHashTable *attributes,
|
||||
const gchar *collection_path,
|
||||
const gchar *collection,
|
||||
const gchar *label,
|
||||
SecretValue *value,
|
||||
GCancellable *cancellable,
|
||||
@ -1169,7 +1169,7 @@ secret_service_store_sync (SecretService *service,
|
||||
sync = _secret_sync_new ();
|
||||
g_main_context_push_thread_default (sync->context);
|
||||
|
||||
secret_service_store (service, schema, attributes, collection_path,
|
||||
secret_service_store (service, schema, attributes, collection,
|
||||
label, value, cancellable, _secret_sync_on_result, sync);
|
||||
|
||||
g_main_loop_run (sync->loop);
|
||||
|
@ -45,7 +45,7 @@
|
||||
/**
|
||||
* secret_password_store: (skip)
|
||||
* @schema: the schema for attributes
|
||||
* @collection_path: (allow-none): the D-Bus object path of the collection where to store the secret
|
||||
* @collection: (allow-none): a collection alias, or D-Bus object path of the collection where to store the secret
|
||||
* @label: label for the secret
|
||||
* @password: the null-terminated password to store
|
||||
* @cancellable: optional cancellation object
|
||||
@ -63,7 +63,7 @@
|
||||
* If the attributes match a secret item already stored in the collection, then
|
||||
* the item will be updated with these new values.
|
||||
*
|
||||
* If @collection_path is %NULL, then the default collection will be
|
||||
* If @collection is %NULL, then the default collection will be
|
||||
* used. Use #SECRET_COLLECTION_SESSION to store the password in the session
|
||||
* collection, which doesn't get stored across login sessions.
|
||||
*
|
||||
@ -71,7 +71,7 @@
|
||||
*/
|
||||
void
|
||||
secret_password_store (const SecretSchema *schema,
|
||||
const gchar *collection_path,
|
||||
const gchar *collection,
|
||||
const gchar *label,
|
||||
const gchar *password,
|
||||
GCancellable *cancellable,
|
||||
@ -91,7 +91,7 @@ secret_password_store (const SecretSchema *schema,
|
||||
attributes = secret_attributes_buildv (schema, va);
|
||||
va_end (va);
|
||||
|
||||
secret_password_storev (schema, attributes, collection_path, label, password,
|
||||
secret_password_storev (schema, attributes, collection, label, password,
|
||||
cancellable, callback, user_data);
|
||||
|
||||
g_hash_table_unref (attributes);
|
||||
@ -101,7 +101,7 @@ secret_password_store (const SecretSchema *schema,
|
||||
* secret_password_storev:
|
||||
* @schema: the schema for attributes
|
||||
* @attributes: (element-type utf8 utf8): the attribute keys and values
|
||||
* @collection_path: (allow-none): the D-Bus object path of the collection where to store the secret
|
||||
* @collection: (allow-none): a collection alias, or D-Bus object path of the collection where to store the secret
|
||||
* @label: label for the secret
|
||||
* @password: the null-terminated password to store
|
||||
* @cancellable: optional cancellation object
|
||||
@ -115,7 +115,7 @@ secret_password_store (const SecretSchema *schema,
|
||||
* If the attributes match a secret item already stored in the collection, then
|
||||
* the item will be updated with these new values.
|
||||
*
|
||||
* If @collection_path is %NULL, then the default collection will be
|
||||
* If @collection is %NULL, then the default collection will be
|
||||
* used. Use #SECRET_COLLECTION_SESSION to store the password in the session
|
||||
* collection, which doesn't get stored across login sessions.
|
||||
*
|
||||
@ -126,7 +126,7 @@ secret_password_store (const SecretSchema *schema,
|
||||
void
|
||||
secret_password_storev (const SecretSchema *schema,
|
||||
GHashTable *attributes,
|
||||
const gchar *collection_path,
|
||||
const gchar *collection,
|
||||
const gchar *label,
|
||||
const gchar *password,
|
||||
GCancellable *cancellable,
|
||||
@ -147,7 +147,7 @@ secret_password_storev (const SecretSchema *schema,
|
||||
|
||||
value = secret_value_new (password, -1, "text/plain");
|
||||
|
||||
secret_service_store (NULL, schema, attributes, collection_path,
|
||||
secret_service_store (NULL, schema, attributes, collection,
|
||||
label, value, cancellable, callback, user_data);
|
||||
|
||||
secret_value_unref (value);
|
||||
@ -173,7 +173,7 @@ secret_password_store_finish (GAsyncResult *result,
|
||||
/**
|
||||
* secret_password_store_sync:
|
||||
* @schema: the schema for attributes
|
||||
* @collection_path: (allow-none): the D-Bus object path of the collection where to store the secret
|
||||
* @collection: (allow-none): a collection alias, or D-Bus object path of the collection where to store the secret
|
||||
* @label: label for the secret
|
||||
* @password: the null-terminated password to store
|
||||
* @cancellable: optional cancellation object
|
||||
@ -190,7 +190,7 @@ secret_password_store_finish (GAsyncResult *result,
|
||||
* If the attributes match a secret item already stored in the collection, then
|
||||
* the item will be updated with these new values.
|
||||
*
|
||||
* If @collection_path is %NULL, then the default collection will be
|
||||
* If @collection is %NULL, then the default collection will be
|
||||
* used. Use #SECRET_COLLECTION_SESSION to store the password in the session
|
||||
* collection, which doesn't get stored across login sessions.
|
||||
*
|
||||
@ -201,7 +201,7 @@ secret_password_store_finish (GAsyncResult *result,
|
||||
*/
|
||||
gboolean
|
||||
secret_password_store_sync (const SecretSchema *schema,
|
||||
const gchar *collection_path,
|
||||
const gchar *collection,
|
||||
const gchar *label,
|
||||
const gchar *password,
|
||||
GCancellable *cancellable,
|
||||
@ -222,7 +222,7 @@ secret_password_store_sync (const SecretSchema *schema,
|
||||
attributes = secret_attributes_buildv (schema, va);
|
||||
va_end (va);
|
||||
|
||||
ret = secret_password_storev_sync (schema, attributes, collection_path,
|
||||
ret = secret_password_storev_sync (schema, attributes, collection,
|
||||
label, password, cancellable, error);
|
||||
|
||||
g_hash_table_unref (attributes);
|
||||
@ -233,7 +233,7 @@ secret_password_store_sync (const SecretSchema *schema,
|
||||
* secret_password_storev_sync:
|
||||
* @schema: the schema for attributes
|
||||
* @attributes: (element-type utf8 utf8): the attribute keys and values
|
||||
* @collection_path: (allow-none): the D-Bus object path of the collection where to store the secret
|
||||
* @collection: (allow-none): a collection alias, or D-Bus object path of the collection where to store the secret
|
||||
* @label: label for the secret
|
||||
* @password: the null-terminated password to store
|
||||
* @cancellable: optional cancellation object
|
||||
@ -246,7 +246,7 @@ secret_password_store_sync (const SecretSchema *schema,
|
||||
* If the attributes match a secret item already stored in the collection, then
|
||||
* the item will be updated with these new values.
|
||||
*
|
||||
* If @collection_path is %NULL, then the default collection will be
|
||||
* If @collection is %NULL, then the default collection will be
|
||||
* used. Use #SECRET_COLLECTION_SESSION to store the password in the session
|
||||
* collection, which doesn't get stored across login sessions.
|
||||
*
|
||||
@ -260,7 +260,7 @@ secret_password_store_sync (const SecretSchema *schema,
|
||||
gboolean
|
||||
secret_password_storev_sync (const SecretSchema *schema,
|
||||
GHashTable *attributes,
|
||||
const gchar *collection_path,
|
||||
const gchar *collection,
|
||||
const gchar *label,
|
||||
const gchar *password,
|
||||
GCancellable *cancellable,
|
||||
@ -283,7 +283,7 @@ secret_password_storev_sync (const SecretSchema *schema,
|
||||
sync = _secret_sync_new ();
|
||||
g_main_context_push_thread_default (sync->context);
|
||||
|
||||
secret_password_storev (schema, attributes, collection_path, label, password,
|
||||
secret_password_storev (schema, attributes, collection, label, password,
|
||||
cancellable, _secret_sync_on_result, sync);
|
||||
|
||||
g_main_loop_run (sync->loop);
|
||||
|
@ -27,7 +27,7 @@ G_BEGIN_DECLS
|
||||
#include "secret-types.h"
|
||||
|
||||
void secret_password_store (const SecretSchema *schema,
|
||||
const gchar *collection_path,
|
||||
const gchar *collection,
|
||||
const gchar *label,
|
||||
const gchar *password,
|
||||
GCancellable *cancellable,
|
||||
@ -37,7 +37,7 @@ void secret_password_store (const SecretSchema *sche
|
||||
|
||||
void secret_password_storev (const SecretSchema *schema,
|
||||
GHashTable *attributes,
|
||||
const gchar *collection_path,
|
||||
const gchar *collection,
|
||||
const gchar *label,
|
||||
const gchar *password,
|
||||
GCancellable *cancellable,
|
||||
@ -48,7 +48,7 @@ gboolean secret_password_store_finish (GAsyncResult *result,
|
||||
GError **error);
|
||||
|
||||
gboolean secret_password_store_sync (const SecretSchema *schema,
|
||||
const gchar *collection_path,
|
||||
const gchar *collection,
|
||||
const gchar *label,
|
||||
const gchar *password,
|
||||
GCancellable *cancellable,
|
||||
@ -57,7 +57,7 @@ gboolean secret_password_store_sync (const SecretSchema *sche
|
||||
|
||||
gboolean secret_password_storev_sync (const SecretSchema *schema,
|
||||
GHashTable *attributes,
|
||||
const gchar *collection_path,
|
||||
const gchar *collection,
|
||||
const gchar *label,
|
||||
const gchar *password,
|
||||
GCancellable *cancellable,
|
||||
|
@ -1834,7 +1834,7 @@ on_create_item_session (GObject *source,
|
||||
/**
|
||||
* secret_service_create_item_dbus_path:
|
||||
* @self: a secret service object
|
||||
* @collection_path: (allow-none): the D-Bus object path of the collection in which to create item
|
||||
* @collection_path: the D-Bus object path of the collection in which to create item
|
||||
* @properties: (element-type utf8 GLib.Variant): hash table of D-Bus properties
|
||||
* for the new collection
|
||||
* @value: the secret value to store in the item
|
||||
@ -1859,10 +1859,6 @@ on_create_item_session (GObject *source,
|
||||
* <literal>org.freedesktop.Secret.Item.Label</literal>. The values
|
||||
* in the hash table should be #GVariant values of the properties.
|
||||
*
|
||||
* If @collection_path is %NULL, then the default collection will be
|
||||
* used. Use #SECRET_COLLECTION_SESSION to store the password in the session
|
||||
* collection, which doesn't get stored across login sessions.
|
||||
*
|
||||
* This method will return immediately and complete asynchronously. The secret
|
||||
* service may prompt the user. secret_service_prompt() will be used to handle
|
||||
* any prompts that are required.
|
||||
@ -1881,13 +1877,11 @@ secret_service_create_item_dbus_path (SecretService *self,
|
||||
ItemClosure *closure;
|
||||
|
||||
g_return_if_fail (SECRET_IS_SERVICE (self));
|
||||
g_return_if_fail (collection_path != NULL && g_variant_is_object_path (collection_path));
|
||||
g_return_if_fail (properties != NULL);
|
||||
g_return_if_fail (value != NULL);
|
||||
g_return_if_fail (cancellable == NULL || G_IS_CANCELLABLE (cancellable));
|
||||
|
||||
if (collection_path == NULL)
|
||||
collection_path = SECRET_COLLECTION_DEFAULT;
|
||||
|
||||
res = g_simple_async_result_new (G_OBJECT (self), callback, user_data,
|
||||
secret_service_create_item_dbus_path);
|
||||
closure = g_slice_new0 (ItemClosure);
|
||||
@ -1945,7 +1939,7 @@ secret_service_create_item_dbus_path_finish (SecretService *self,
|
||||
/**
|
||||
* secret_service_create_item_dbus_path_sync:
|
||||
* @self: a secret service object
|
||||
* @collection_path: (allow-none): the D-Bus path of the collection in which to create item
|
||||
* @collection_path: the D-Bus path of the collection in which to create item
|
||||
* @properties: (element-type utf8 GLib.Variant): hash table of D-Bus properties
|
||||
* for the new collection
|
||||
* @value: the secret value to store in the item
|
||||
@ -1989,6 +1983,7 @@ secret_service_create_item_dbus_path_sync (SecretService *self,
|
||||
gchar *path;
|
||||
|
||||
g_return_val_if_fail (SECRET_IS_SERVICE (self), NULL);
|
||||
g_return_val_if_fail (collection_path != NULL && g_variant_is_object_path (collection_path), NULL);
|
||||
g_return_val_if_fail (properties != NULL, NULL);
|
||||
g_return_val_if_fail (cancellable == NULL || G_IS_CANCELLABLE (cancellable), NULL);
|
||||
g_return_val_if_fail (error == NULL || *error == NULL, NULL);
|
||||
|
@ -64,6 +64,8 @@ gchar * _secret_util_parent_path (const gchar *path
|
||||
|
||||
gboolean _secret_util_empty_path (const gchar *path);
|
||||
|
||||
gchar * _secret_util_collection_to_path (const gchar *collection);
|
||||
|
||||
gint _secret_util_array_index_of (GVariant *array,
|
||||
GVariant *value);
|
||||
|
||||
|
@ -223,7 +223,7 @@ gint secret_service_unlock_sync (SecretService
|
||||
void secret_service_store (SecretService *service,
|
||||
const SecretSchema *schema,
|
||||
GHashTable *attributes,
|
||||
const gchar *collection_path,
|
||||
const gchar *collection,
|
||||
const gchar *label,
|
||||
SecretValue *value,
|
||||
GCancellable *cancellable,
|
||||
@ -237,7 +237,7 @@ gboolean secret_service_store_finish (SecretService
|
||||
gboolean secret_service_store_sync (SecretService *service,
|
||||
const SecretSchema *schema,
|
||||
GHashTable *attributes,
|
||||
const gchar *collection_path,
|
||||
const gchar *collection,
|
||||
const gchar *label,
|
||||
SecretValue *value,
|
||||
GCancellable *cancellable,
|
||||
|
@ -37,9 +37,9 @@ typedef struct _SecretPrompt SecretPrompt;
|
||||
typedef struct _SecretService SecretService;
|
||||
typedef struct _SecretValue SecretValue;
|
||||
|
||||
#define SECRET_COLLECTION_DEFAULT "/org/freedesktop/secrets/aliases/default"
|
||||
#define SECRET_COLLECTION_DEFAULT "default"
|
||||
|
||||
#define SECRET_COLLECTION_SESSION "/org/freedesktop/secrets/aliases/session"
|
||||
#define SECRET_COLLECTION_SESSION "session"
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
|
@ -109,6 +109,16 @@ _secret_util_empty_path (const gchar *path)
|
||||
return (g_str_equal (path, "") || g_str_equal (path, "/"));
|
||||
}
|
||||
|
||||
gchar *
|
||||
_secret_util_collection_to_path (const gchar *collection)
|
||||
{
|
||||
if (collection == NULL)
|
||||
collection = SECRET_COLLECTION_DEFAULT;
|
||||
if (strchr (collection, '/') == NULL)
|
||||
return g_strdup_printf ("/org/freedesktop/secrets/aliases/%s", collection);
|
||||
return g_strdup (collection);
|
||||
}
|
||||
|
||||
GVariant *
|
||||
_secret_util_variant_for_properties (GHashTable *properties)
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user