diff --git a/.gitignore b/.gitignore
index e690b21..94b017b 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,12 +1,13 @@
*~
-*.o
-*.la
-*.lo
-*.pyc
+*.bak
*.gcov
*.gcno
*.gcda
*.gir
+*.la
+*.lo
+*.o
+*.pyc
*.pc
*.tar.gz
*.typelib
@@ -22,6 +23,7 @@ config.*
depcomp
install-sh
INSTALL
+gtk-doc.make
libtool
ltmain.sh
Makefile
@@ -29,6 +31,7 @@ Makefile.in
Makefile.in.in
missing
stamp*
+*.stamp
.settings
.project
.cproject
@@ -37,6 +40,21 @@ stamp*
/build/m4
/build/valgrind-suppressions
+/docs/reference/libsecret/version.xml
+/docs/reference/libsecret/libsecret-decl-list.txt
+/docs/reference/libsecret/libsecret-decl.txt
+/docs/reference/libsecret/libsecret-scan.c
+/docs/reference/libsecret/html
+/docs/reference/libsecret/libsecret-undeclared.txt
+/docs/reference/libsecret/libsecret-undocumented.txt
+/docs/reference/libsecret/libsecret-unused.txt
+/docs/reference/libsecret/libsecret.args
+/docs/reference/libsecret/libsecret.hierarchy
+/docs/reference/libsecret/libsecret.prerequisites
+/docs/reference/libsecret/libsecret.signals
+/docs/reference/libsecret/tmpl
+/docs/reference/libsecret/xml
+
/po/POTFILES
/po/libsecret.pot
diff --git a/Makefile.am b/Makefile.am
index bc3c3ab..92d5f00 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -3,7 +3,7 @@ include $(top_srcdir)/Makefile.decl
ACLOCAL_AMFLAGS = -I build/m4 ${ACLOCAL_FLAGS}
-SUBDIRS = build po egg library
+SUBDIRS = build egg library po docs
DISTCHECK_CONFIGURE_FLAGS = \
--enable-debug=yes \
diff --git a/autogen.sh b/autogen.sh
index b862795..fad340e 100755
--- a/autogen.sh
+++ b/autogen.sh
@@ -91,6 +91,8 @@ $ACLOCAL $ACLOCAL_FLAGS || exit $?
libtoolize --force || exit $?
intltoolize --force --copy || exit $?
+gtkdocize || exit $?
+
autoheader || exit $?
$AUTOMAKE --add-missing || exit $?
diff --git a/configure.ac b/configure.ac
index e09b8ab..b4fec56 100644
--- a/configure.ac
+++ b/configure.ac
@@ -66,6 +66,8 @@ PKG_CHECK_MODULES(GLIB,
LIBS="$LIBS $GLIB_LIBS"
CFLAGS="$CFLAGS $GLIB_CFLAGS"
+GTK_DOC_CHECK(1.9)
+
GOBJECT_INTROSPECTION_CHECK([1.29])
AC_PATH_PROG(GLIB_MKENUMS, glib-mkenums)
@@ -225,6 +227,10 @@ AC_SUBST(SECRET_MINOR)
AC_CONFIG_FILES([
Makefile
build/Makefile
+ docs/Makefile
+ docs/reference/Makefile
+ docs/reference/libsecret/Makefile
+ docs/reference/libsecret/version.xml
egg/Makefile
egg/tests/Makefile
po/Makefile.in
diff --git a/docs/Makefile.am b/docs/Makefile.am
new file mode 100644
index 0000000..cac25f2
--- /dev/null
+++ b/docs/Makefile.am
@@ -0,0 +1,2 @@
+
+SUBDIRS = reference
diff --git a/docs/reference/COPYING b/docs/reference/COPYING
new file mode 100644
index 0000000..d5c1293
--- /dev/null
+++ b/docs/reference/COPYING
@@ -0,0 +1,30 @@
+This work may be reproduced and distributed in whole or in part, in
+any medium, physical or electronic, so as long as this copyright
+notice remains intact and unchanged on all copies. Commercial
+redistribution is permitted and encouraged, but you may not
+redistribute, in whole or in part, under terms more restrictive than
+those under which you received it. If you redistribute a modified or
+translated version of this work, you must also make the source code to
+the modified or translated version available in electronic form
+without charge. However, mere aggregation as part of a larger work
+shall not count as a modification for this purpose.
+
+All code examples in this work are placed into the public domain,
+and may be used, modified and redistributed without restriction.
+
+BECAUSE THIS WORK IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE WORK, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE WORK "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. SHOULD THE WORK PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY REPAIR OR CORRECTION.
+
+IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE WORK AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+WORK, EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
diff --git a/docs/reference/Makefile.am b/docs/reference/Makefile.am
new file mode 100644
index 0000000..3173a7f
--- /dev/null
+++ b/docs/reference/Makefile.am
@@ -0,0 +1,2 @@
+
+SUBDIRS = libsecret
diff --git a/docs/reference/libsecret/Makefile.am b/docs/reference/libsecret/Makefile.am
new file mode 100644
index 0000000..33bc1ce
--- /dev/null
+++ b/docs/reference/libsecret/Makefile.am
@@ -0,0 +1,102 @@
+## Process this file with automake to produce Makefile.in
+
+# We require automake 1.6 at least.
+AUTOMAKE_OPTIONS = 1.6
+
+# This is a blank Makefile.am for using gtk-doc.
+# Copy this to your project's API docs directory and modify the variables to
+# suit your project. See the GTK+ Makefiles in gtk+/docs/reference for examples
+# of using the various options.
+
+# The name the module, e.g. 'glib'.
+DOC_MODULE=libsecret
+
+# Uncomment for versioned docs and specify the version of the module, e.g. '2'.
+DOC_MODULE_VERSION=@SECRET_MAJOR@
+
+# The top-level SGML file. You can change this if you want to.
+DOC_MAIN_SGML_FILE=$(DOC_MODULE)-docs.sgml
+
+# The directory containing the source code. Relative to $(srcdir).
+# gtk-doc will search all .c & .h files beneath here for inline comments
+# documenting the functions and macros.
+# e.g. DOC_SOURCE_DIR=../../../gtk
+DOC_SOURCE_DIR=$(top_srcdir)/library
+
+# Extra options to pass to gtkdoc-scangobj. Not normally needed.
+SCANGOBJ_OPTIONS=
+
+# Extra options to supply to gtkdoc-scan.
+# e.g. SCAN_OPTIONS=--deprecated-guards="GTK_DISABLE_DEPRECATED"
+SCAN_OPTIONS=--deprecated-guards="SECRET_DISABLE_DEPRECATED"
+
+# Extra options to supply to gtkdoc-mkdb.
+# e.g. MKDB_OPTIONS=--sgml-mode --output-format=xml
+MKDB_OPTIONS=--sgml-mode --output-format=xml
+
+# Extra options to supply to gtkdoc-mktmpl
+# e.g. MKTMPL_OPTIONS=--only-section-tmpl
+MKTMPL_OPTIONS=
+
+# Extra options to supply to gtkdoc-mkhtml
+MKHTML_OPTIONS=
+
+# Extra options to supply to gtkdoc-fixref. Not normally needed.
+# e.g. FIXXREF_OPTIONS=--extra-dir=../gdk-pixbuf/html --extra-dir=../gdk/html
+FIXXREF_OPTIONS=
+
+# Used for dependencies. The docs will be rebuilt if any of these change.
+# e.g. HFILE_GLOB=$(top_srcdir)/gtk/*.h
+# e.g. CFILE_GLOB=$(top_srcdir)/gtk/*.c
+HFILE_GLOB=$(top_srcdir)/library/*.h
+CFILE_GLOB=$(top_srcdir)/library/*.c
+
+# Extra header to include when scanning, which are not under DOC_SOURCE_DIR
+# e.g. EXTRA_HFILES=$(top_srcdir}/contrib/extra.h
+EXTRA_HFILES=
+
+# Header files to ignore when scanning. Use base file name, no paths
+# e.g. IGNORE_HFILES=gtkdebug.h gtkintl.h
+IGNORE_HFILES= \
+ mock-service.h \
+ secret-dbus-generated.h \
+ secret-private.h \
+ $(NULL)
+
+# Images to copy into HTML directory.
+# e.g. HTML_IMAGES=$(top_srcdir)/gtk/stock-icons/stock_about_24.png
+HTML_IMAGES=
+
+# Extra SGML files that are included by $(DOC_MAIN_SGML_FILE).
+# e.g. content_files=running.sgml building.sgml changes-2.0.sgml
+content_files=
+
+# SGML files where gtk-doc abbrevations (#GtkWidget) are expanded
+# These files must be listed here *and* in content_files
+# e.g. expand_content_files=running.sgml
+expand_content_files=
+
+# CFLAGS and LDFLAGS for compiling gtkdoc-scangobj with your library.
+# Only needed if you are using gtkdoc-scangobj to dynamically query widget
+# signals and properties.
+# e.g. GTKDOC_CFLAGS=-I$(top_srcdir) -I$(top_builddir) $(GTK_DEBUG_FLAGS)
+# e.g. GTKDOC_LIBS=$(top_builddir)/gtk/$(gtktargetlib)
+GTKDOC_CFLAGS= -I$(top_srcdir) -I$(top_builddir) $(GLIB_CFLAGS) -Wno-error
+GTKDOC_LIBS= $(GLIB_LIBS) $(GOBJECT_LIBS) \
+ $(top_builddir)/library/libsecret-@SECRET_MAJOR@.la
+
+# This includes the standard gtk-doc make rules, copied by gtkdocize.
+include $(top_srcdir)/gtk-doc.make
+
+# Other files to distribute
+# e.g. EXTRA_DIST += version.xml.in
+# EXTRA_DIST +=
+
+# Files not to distribute
+# for --rebuild-types in $(SCAN_OPTIONS), e.g. $(DOC_MODULE).types
+# for --rebuild-sections in $(SCAN_OPTIONS) e.g. $(DOC_MODULE)-sections.txt
+DISTCLEANFILES = tmpl/secret-unused.sgml
+
+# Comment this out if you want your docs-status tested during 'make check'
+#TESTS_ENVIRONMENT = cd $(srcsrc)
+#TESTS = $(GTKDOC_CHECK)
diff --git a/docs/reference/libsecret/libsecret-docs.sgml b/docs/reference/libsecret/libsecret-docs.sgml
new file mode 100644
index 0000000..cd8a762
--- /dev/null
+++ b/docs/reference/libsecret/libsecret-docs.sgml
@@ -0,0 +1,34 @@
+
+
+]>
+
+
+ Libsecret Library Reference Manual
+
+ for libsecret &version;.
+ An online version of this documentation can be found at
+ http://developer.gnome.org/libsecret/stable/.
+
+
+
+
+ Simple API
+
+
+
+
+ Complete API
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/reference/libsecret/libsecret-overrides.txt b/docs/reference/libsecret/libsecret-overrides.txt
new file mode 100644
index 0000000..13f485f
--- /dev/null
+++ b/docs/reference/libsecret/libsecret-overrides.txt
@@ -0,0 +1,2 @@
+# These are manually-edited to override or add declarations to those scanned
+# from the header files.
diff --git a/docs/reference/libsecret/libsecret-sections.txt b/docs/reference/libsecret/libsecret-sections.txt
new file mode 100644
index 0000000..ee86fcd
--- /dev/null
+++ b/docs/reference/libsecret/libsecret-sections.txt
@@ -0,0 +1,252 @@
+
+secret-collection
+SecretCollection
+SecretCollectionClass
+secret_collection_new
+secret_collection_new_finish
+secret_collection_new_sync
+secret_collection_create
+secret_collection_create_finish
+secret_collection_create_sync
+secret_collection_delete
+secret_collection_delete_finish
+secret_collection_delete_sync
+secret_collection_get_created
+secret_collection_get_items
+secret_collection_get_label
+secret_collection_set_label
+secret_collection_set_label_finish
+secret_collection_set_label_sync
+secret_collection_get_locked
+secret_collection_get_modified
+secret_collection_refresh
+
+SECRET_COLLECTION
+SECRET_COLLECTION_CLASS
+SECRET_COLLECTION_GET_CLASS
+SECRET_IS_COLLECTION
+SECRET_IS_COLLECTION_CLASS
+SECRET_TYPE_COLLECTION
+SecretCollectionPrivate
+secret_collection_get_type
+
+
+
+secret-item
+SecretItem
+SecretItemClass
+secret_item_new
+secret_item_new_finish
+secret_item_new_sync
+secret_item_create
+secret_item_create_finish
+secret_item_create_sync
+secret_item_delete
+secret_item_delete_finish
+secret_item_delete_sync
+secret_item_get_attributes
+secret_item_set_attributes
+secret_item_set_attributes_finish
+secret_item_set_attributes_sync
+secret_item_get_created
+secret_item_get_label
+secret_item_set_label
+secret_item_set_label_finish
+secret_item_set_label_sync
+secret_item_get_locked
+secret_item_get_modified
+secret_item_get_schema
+secret_item_get_secret
+secret_item_get_secret_finish
+secret_item_get_secret_sync
+secret_item_set_secret
+secret_item_set_secret_finish
+secret_item_set_secret_sync
+secret_item_refresh
+
+SECRET_IS_ITEM
+SECRET_IS_ITEM_CLASS
+SECRET_ITEM
+SECRET_ITEM_CLASS
+SECRET_ITEM_GET_CLASS
+SECRET_TYPE_ITEM
+SecretItemPrivate
+secret_item_get_type
+
+
+
+secret-error
+SECRET_ERROR
+SecretError
+
+SECRET_TYPE_ERROR
+secret_error_get_quark
+secret_error_get_type
+
+
+
+secret-password
+SecretSchema
+SecretSchemaType
+secret_password_store
+secret_password_storev
+secret_password_store_finish
+secret_password_store_sync
+secret_password_storev_sync
+secret_password_lookup
+secret_password_lookupv
+secret_password_lookup_finish
+secret_password_lookup_sync
+secret_password_lookupv_sync
+secret_password_remove
+secret_password_removev
+secret_password_remove_finish
+secret_password_remove_sync
+secret_password_removev_sync
+secret_password_free
+
+SECRET_TYPE_SCHEMA_TYPE
+secret_schema_type_get_type
+
+
+
+secret-prompt
+SecretPrompt
+SecretPromptClass
+secret_prompt_get_result_value
+secret_prompt_perform
+secret_prompt_perform_finish
+secret_prompt_perform_sync
+secret_prompt_run
+
+SECRET_IS_PROMPT
+SECRET_IS_PROMPT_CLASS
+SECRET_PROMPT
+SECRET_PROMPT_CLASS
+SECRET_PROMPT_GET_CLASS
+SECRET_TYPE_PROMPT
+SecretPromptPrivate
+secret_prompt_get_type
+
+
+
+secret-service
+SecretService
+SecretServiceClass
+SecretServiceFlags
+secret_service_get
+secret_service_get_sync
+secret_service_get_finish
+secret_service_new
+secret_service_new_finish
+secret_service_new_sync
+secret_service_get_collections
+secret_service_get_flags
+secret_service_get_session_algorithms
+secret_service_get_session_path
+secret_service_ensure_session
+secret_service_ensure_session_finish
+secret_service_ensure_session_sync
+secret_service_ensure_collections
+secret_service_ensure_collections_finish
+secret_service_ensure_collections_sync
+secret_service_search
+secret_service_search_finish
+secret_service_search_sync
+secret_service_search_for_paths
+secret_service_search_for_paths_finish
+secret_service_search_for_paths_sync
+secret_service_get_secrets
+secret_service_get_secrets_finish
+secret_service_get_secrets_sync
+secret_service_get_secrets_for_paths
+secret_service_get_secrets_for_paths_finish
+secret_service_get_secrets_for_paths_sync
+secret_service_get_secret_for_path
+secret_service_get_secret_for_path_finish
+secret_service_get_secret_for_path_sync
+secret_service_lock
+secret_service_lock_finish
+secret_service_lock_sync
+secret_service_lock_paths
+secret_service_lock_paths_finish
+secret_service_lock_paths_sync
+secret_service_unlock
+secret_service_unlock_finish
+secret_service_unlock_sync
+secret_service_unlock_paths
+secret_service_unlock_paths_finish
+secret_service_unlock_paths_sync
+secret_service_store
+secret_service_storev
+secret_service_store_finish
+secret_service_store_sync
+secret_service_storev_sync
+secret_service_lookup
+secret_service_lookupv
+secret_service_lookup_finish
+secret_service_lookup_sync
+secret_service_lookupv_sync
+secret_service_remove
+secret_service_removev
+secret_service_remove_finish
+secret_service_remove_sync
+secret_service_removev_sync
+secret_service_prompt
+secret_service_prompt_finish
+secret_service_prompt_sync
+secret_service_create_collection_path
+secret_service_create_collection_path_finish
+secret_service_create_collection_path_sync
+secret_service_create_item_path
+secret_service_create_item_path_finish
+secret_service_create_item_path_sync
+secret_service_delete_path
+secret_service_delete_path_finish
+secret_service_delete_path_sync
+
+SECRET_IS_SERVICE
+SECRET_IS_SERVICE_CLASS
+SECRET_SERVICE
+SECRET_SERVICE_CLASS
+SECRET_SERVICE_GET_CLASS
+SECRET_TYPE_SERVICE
+SECRET_TYPE_SERVICE_FLAGS
+SecretServicePrivate
+secret_service_flags_get_type
+secret_service_get_type
+
+
+
+secret-value
+SecretValue
+secret_value_new
+secret_value_new_full
+secret_value_get
+secret_value_get_content_type
+secret_value_ref
+secret_value_unref
+
+SECRET_TYPE_VALUE
+secret_value_get_type
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/reference/libsecret/libsecret.interfaces b/docs/reference/libsecret/libsecret.interfaces
new file mode 100644
index 0000000..ac03c45
--- /dev/null
+++ b/docs/reference/libsecret/libsecret.interfaces
@@ -0,0 +1,6 @@
+GDBusProxy GDBusInterface GInitable GAsyncInitable
+SecretCollection GDBusInterface GInitable GAsyncInitable
+SecretItem GDBusInterface GInitable GAsyncInitable
+SecretPrompt GDBusInterface GInitable GAsyncInitable
+SecretService GDBusInterface GInitable GAsyncInitable
+GDBusConnection GInitable GAsyncInitable
diff --git a/docs/reference/libsecret/libsecret.types b/docs/reference/libsecret/libsecret.types
new file mode 100644
index 0000000..f9bfa7a
--- /dev/null
+++ b/docs/reference/libsecret/libsecret.types
@@ -0,0 +1,7 @@
+secret_collection_get_type
+secret_error_get_type
+secret_item_get_type
+secret_prompt_get_type
+secret_value_get_type
+secret_service_flags_get_type
+secret_service_get_type
\ No newline at end of file
diff --git a/docs/reference/libsecret/version.xml.in b/docs/reference/libsecret/version.xml.in
new file mode 100644
index 0000000..27323da
--- /dev/null
+++ b/docs/reference/libsecret/version.xml.in
@@ -0,0 +1 @@
+@VERSION@
\ No newline at end of file
diff --git a/library/Makefile.am b/library/Makefile.am
index 3bccea6..952daa5 100644
--- a/library/Makefile.am
+++ b/library/Makefile.am
@@ -79,7 +79,7 @@ secret-dbus-generated.c: $(DBUS_XML_DEFINITIONS) Makefile.am
$(AM_V_GEN) gdbus-codegen --interface-prefix org.freedesktop.Secret. \
--generate-c-code secret-dbus-generated --c-namespace SecretGen \
$(DBUS_XML_DEFINITIONS)
- $(AM_V_GEN) sed -i -e 's/secret_gen_/_secret_gen_/g' secret-dbus-generated.[ch]
+ $(AM_V_GEN) sed -i -e 's/secret_gen_/_secret_gen_/g' -e 's/type-/type/g' secret-dbus-generated.[ch]
$(AM_V_GEN) sed -i -e '1i #define GLIB_DISABLE_DEPRECATION_WARNINGS' secret-dbus-generated.c
secret-dbus-generated.h: secret-dbus-generated.c
diff --git a/library/secret-collection.c b/library/secret-collection.c
index ee7ac74..dbebc25 100644
--- a/library/secret-collection.c
+++ b/library/secret-collection.c
@@ -21,6 +21,35 @@
#include
+/**
+ * SECTION:secret-collection
+ * @title: SecretCollection
+ * @short_description: A collection of secret items
+ *
+ * #SecretCollection represents a collection of secret items stored in the
+ * Secret Service.
+ *
+ * A collection can be in a locked or unlocked state. Use secret_service_lock()
+ * or secret_service_unlock() to lock or unlock the collection.
+ *
+ * Use the SecretCollection::items property or secret_service_get_items() to
+ * lookup the items in the collection. There may not be any items exposed when
+ * the collection is locked.
+ */
+
+/**
+ * SecretCollection:
+ *
+ * A proxy object representing a collection of secrets in the Secret Service.
+ */
+
+/**
+ * SecretCollectionClass:
+ * @parent_class: the parent class
+ *
+ * The class for #SecretCollection.
+ */
+
enum {
PROP_0,
PROP_SERVICE,
@@ -412,26 +441,67 @@ secret_collection_class_init (SecretCollectionClass *klass)
proxy_class->g_properties_changed = secret_collection_properties_changed;
+ /**
+ * SecretCollection:service:
+ *
+ * The #SecretService object that this collection is associated with and
+ * uses to interact with the actual DBus Secret Service.
+ */
g_object_class_install_property (gobject_class, PROP_SERVICE,
g_param_spec_object ("service", "Service", "Secret Service",
SECRET_TYPE_SERVICE, G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS));
+ /**
+ * SecretCollection:items:
+ *
+ * A list of #SecretItem objects representing the items that are in
+ * this collection. This list will be empty if the collection is locked.
+ */
g_object_class_install_property (gobject_class, PROP_ITEMS,
g_param_spec_boxed ("items", "Items", "Items in collection",
_secret_list_get_type (), G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
+ /**
+ * SecretCollection:label:
+ *
+ * The human readable label for the collection.
+ *
+ * Setting this property will result in the label of the collection being
+ * set asynchronously. To properly track the changing of the label use the
+ * secret_collection_set_label() function.
+ */
g_object_class_install_property (gobject_class, PROP_LABEL,
g_param_spec_string ("label", "Label", "Item label",
NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+ /**
+ * SecretCollection:locked:
+ *
+ * Whether the collection is locked or not.
+ *
+ * To lock or unlock a collection use the secret_service_lock() or
+ * secret_service_unlock() functions.
+ */
g_object_class_install_property (gobject_class, PROP_LOCKED,
g_param_spec_boolean ("locked", "Locked", "Item locked",
TRUE, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
+ /**
+ * SecretCollection:created:
+ *
+ * The date and time (in seconds since the UNIX epoch) that this
+ * collection was created.
+ */
g_object_class_install_property (gobject_class, PROP_CREATED,
g_param_spec_uint64 ("created", "Created", "Item creation date",
0UL, G_MAXUINT64, 0UL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+ /**
+ * SecretCollection:modified:
+ *
+ * The date and time (in seconds since the UNIX epoch) that this
+ * collection was last modified.
+ */
g_object_class_install_property (gobject_class, PROP_MODIFIED,
g_param_spec_uint64 ("modified", "Modified", "Item modified date",
0UL, G_MAXUINT64, 0UL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
@@ -1152,6 +1222,9 @@ secret_collection_set_label_sync (SecretCollection *self,
*
* Get whether the collection is locked or not.
*
+ * Use secret_service_lock() or secret_service_unlock() to lock or unlock the
+ * collection.
+ *
* Returns: whether the collection is locked or not
*/
gboolean
diff --git a/library/secret-collection.h b/library/secret-collection.h
index 8e60d22..34426e3 100644
--- a/library/secret-collection.h
+++ b/library/secret-collection.h
@@ -35,11 +35,15 @@ typedef struct _SecretCollectionPrivate SecretCollectionPrivate;
struct _SecretCollection {
GDBusProxy parent;
+
+ /*< private >*/
SecretCollectionPrivate *pv;
};
struct _SecretCollectionClass {
GDBusProxyClass parent_class;
+
+ /*< private >*/
gpointer padding[8];
};
diff --git a/library/secret-item.c b/library/secret-item.c
index 75c493e..ee4fa11 100644
--- a/library/secret-item.c
+++ b/library/secret-item.c
@@ -22,6 +22,44 @@
#include
+/**
+ * SECTION:secret-item
+ * @title: SecretItem
+ * @short_description: A secret item
+ *
+ * #SecretItem represents a secret item stored in the Secret Service.
+ *
+ * Each item has a value, represented by a #SecretValue, which can be
+ * retrieved by secret_service_get_secret() or set by secret_service_set_secret().
+ * The item is only available when the item is not locked.
+ *
+ * Items can be locked or unlocked using the secret_service_lock() or
+ * secret_service_unlock() functions. The Secret Service may not be able to
+ * unlock individual items, and may unlock an entire collection when a single
+ * item is unlocked.
+ *
+ * Each item has a set of attributes, which are used to locate the item later.
+ * These are not stored or transferred in a secure manner. Each attribute has
+ * a string name and a string value. Use secret_service_search() to search for
+ * items based on their attributes, and secret_item_set_attributes to change
+ * the attributes associated with an item.
+ *
+ * Items can be created with secret_item_create() or secret_service_store().
+ */
+
+/**
+ * SecretItem:
+ *
+ * A proxy object representing a secret item in the Secret Service.
+ */
+
+/**
+ * SecretItemClass:
+ * @parent_class: the parent class
+ *
+ * The class for #SecretItem.
+ */
+
enum {
PROP_0,
PROP_SERVICE,
@@ -240,30 +278,81 @@ secret_item_class_init (SecretItemClass *klass)
proxy_class->g_properties_changed = secret_item_properties_changed;
+ /**
+ * SecretItem:service:
+ *
+ * The #SecretService object that this item is associated with and
+ * uses to interact with the actual DBus Secret Service.
+ */
g_object_class_install_property (gobject_class, PROP_SERVICE,
g_param_spec_object ("service", "Service", "Secret Service",
SECRET_TYPE_SERVICE, G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS));
+ /**
+ * SecretItem:attributes:
+ *
+ * The attributes set on this item. Attributes are used to locate an
+ * item. They are not guaranteed to be stored or transferred securely.
+ *
+ * The schema describes which attributes should be present and their types.
+ */
g_object_class_install_property (gobject_class, PROP_ATTRIBUTES,
g_param_spec_boxed ("attributes", "Attributes", "Item attributes",
G_TYPE_HASH_TABLE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+ /**
+ * SecretItem:label:
+ *
+ * The human readable label for the item.
+ *
+ * Setting this property will result in the label of the item being
+ * set asynchronously. To properly track the changing of the label use the
+ * secret_item_set_label() function.
+ */
g_object_class_install_property (gobject_class, PROP_LABEL,
g_param_spec_string ("label", "Label", "Item label",
NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+ /**
+ * SecretItem:schema:
+ *
+ * The schema for this item. This is a dotted string that describes
+ * which attributes should be present and the types of values on
+ * those attributes.
+ */
g_object_class_install_property (gobject_class, PROP_SCHEMA,
g_param_spec_string ("schema", "Schema", "Item schema",
NULL, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
+ /**
+ * SecretItem:locked:
+ *
+ * Whether the item is locked or not. An item may not be independently
+ * lockable separate from other items in its collection.
+ *
+ * To lock or unlock a item use the secret_service_lock() or
+ * secret_service_unlock() functions.
+ */
g_object_class_install_property (gobject_class, PROP_LOCKED,
g_param_spec_boolean ("locked", "Locked", "Item locked",
TRUE, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
+ /**
+ * SecretItem:created:
+ *
+ * The date and time (in seconds since the UNIX epoch) that this
+ * item was created.
+ */
g_object_class_install_property (gobject_class, PROP_CREATED,
g_param_spec_uint64 ("created", "Created", "Item creation date",
0UL, G_MAXUINT64, 0UL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+ /**
+ * SecretItem:modified:
+ *
+ * The date and time (in seconds since the UNIX epoch) that this
+ * item was last modified.
+ */
g_object_class_install_property (gobject_class, PROP_MODIFIED,
g_param_spec_uint64 ("modified", "Modified", "Item modified date",
0UL, G_MAXUINT64, 0UL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
@@ -590,6 +679,7 @@ item_properties_new (const gchar *schema_name,
* @attributes: attributes for the new item
* @value: secret value for the new item
* @replace: whether to replace an existing item with the same attributes
+ * @cancellable: optional cancellation object
* @callback: called when the operation completes
* @user_data: data to pass to the callback
*
diff --git a/library/secret-item.h b/library/secret-item.h
index 9c4a117..645ab5c 100644
--- a/library/secret-item.h
+++ b/library/secret-item.h
@@ -37,11 +37,15 @@ typedef struct _SecretItemPrivate SecretItemPrivate;
struct _SecretItem {
GDBusProxy parent_instance;
+
+ /*< private >*/
SecretItemPrivate *pv;
};
struct _SecretItemClass {
GDBusProxyClass parent_class;
+
+ /*< private >*/
gpointer padding[4];
};
diff --git a/library/secret-methods.c b/library/secret-methods.c
index 25fd776..1f057e3 100644
--- a/library/secret-methods.c
+++ b/library/secret-methods.c
@@ -758,7 +758,7 @@ secret_service_get_secrets_for_paths (SecretService *self,
* Items that are locked will not be included the results.
*
* Returns: (transfer full): a newly allocated hash table of item_path keys to
- * #GSecretValue values.
+ * #SecretValue values.
*/
GHashTable *
secret_service_get_secrets_for_paths_finish (SecretService *self,
@@ -796,7 +796,7 @@ secret_service_get_secrets_for_paths_finish (SecretService *self,
* Items that are locked will not be included the results.
*
* Returns: (transfer full): a newly allocated hash table of item_path keys to
- * #GSecretValue values.
+ * #SecretValue values.
*/
GHashTable *
secret_service_get_secrets_for_paths_sync (SecretService *self,
@@ -894,8 +894,8 @@ secret_service_get_secrets (SecretService *self,
*
* Items that are locked will not be included the results.
*
- * Returns: (transfer full): a newly allocated hash table of #GSecretItem keys
- * to #GSecretValue values.
+ * Returns: (transfer full): a newly allocated hash table of #SecretItem keys
+ * to #SecretValue values.
*/
GHashTable *
secret_service_get_secrets_finish (SecretService *self,
@@ -953,8 +953,8 @@ secret_service_get_secrets_finish (SecretService *self,
*
* Items that are locked will not be included the results.
*
- * Returns: (transfer full): a newly allocated hash table of #GSecretItem keys
- * to #GSecretValue values.
+ * Returns: (transfer full): a newly allocated hash table of #SecretItem keys
+ * to #SecretValue values.
*/
GHashTable *
secret_service_get_secrets_sync (SecretService *self,
diff --git a/library/secret-password.c b/library/secret-password.c
index 48dfdc0..1c3edf2 100644
--- a/library/secret-password.c
+++ b/library/secret-password.c
@@ -18,6 +18,60 @@
#include
+/**
+ * SECTION:secret-password
+ * @title: Password storage
+ * @short_description: Simple password storage and lookup
+ *
+ * This is a simple API for storing passwords and retrieving passwords in the
+ * Secret Service.
+ *
+ * Each password is associated with a set of attributes. Attribute values can
+ * be either strings, integers or booleans.
+ *
+ * The names and types of allowed attributes for a given password are defined
+ * with a schema. Certain schemas are predefined. Additional schemas can be
+ * defined via the %SecretSchema structure.
+ *
+ * Each of the functions accept a variable list of attributes names and their
+ * values. Include a %NULL to terminate the list of attributes.
+ */
+
+/**
+ * SecretSchema:
+ * @schema_name: the dotted name of the schema
+ * @attributes: the attribute names and types of those attributes
+ *
+ * Represents a set of attributes that are stored with an item. These schemas
+ * are used for interoperability between various services storing the same types
+ * of items.
+ *
+ * Each schema has a name like "org.gnome.keyring.NetworkPassword", and defines
+ * a set of attributes, and types (string, integer, boolean) for those attributes.
+ *
+ * Attributes are stored as strings in the Secret Service, and the attribute
+ * types simply define standard ways to store integer and boolean values as strings.
+ */
+
+/**
+ * SecretSchemaAttribute:
+ * @name: name of the attribute
+ * @type: the type of the attribute
+ *
+ * An attribute in a #SecretSchema.
+ */
+
+/**
+ * SecretSchemaType:
+ * @SECRET_ATTRIBUTE_BOOLEAN: a boolean attribute, stored as 'true' or 'false'
+ * @SECRET_ATTRIBUTE_INTEGER: an integer attribute, stored as a decimal
+ * @SECRET_ATTRIBUTE_STRING: a utf-8 string attribute
+ *
+ * The type of an attribute in a #SecretSchema. Attributes are stored as strings
+ * in the Secret Service, and the attribute types simply define standard ways
+ * to store integer and boolean values as strings.
+ */
+
typedef struct {
const SecretSchema *schema;
GHashTable *attributes;
diff --git a/library/secret-prompt.c b/library/secret-prompt.c
index d33f6f4..5cb4ee3 100644
--- a/library/secret-prompt.c
+++ b/library/secret-prompt.c
@@ -19,7 +19,37 @@
#include
#include
-#include
+/**
+ * SECTION:secret-prompt
+ * @title: SecretPrompt
+ * @short_description: a prompt in the Service
+ *
+ * A #SecretPrompt represents a prompt in the Secret Service.
+ *
+ * Certain actions on the Secret Service require user prompting to complete,
+ * such as creating a collection, or unlocking a collection. When such a prompt
+ * is necessary, then a #SecretPrompt object is created by this library, and
+ * passed to the secret_service_prompt_async() method. In this way it is handled
+ * automatically.
+ *
+ * In order to customize prompt handling, override the
+ * SecretServiceClass::prompt_async and SecretServiceClass::prompt_finish
+ * virtual methods of the #SecretService class.
+ */
+
+/**
+ * SecretPrompt:
+ *
+ * A proxy object representing a prompt that the Secret Service will display
+ * to the user.
+ */
+
+/**
+ * SecretPromptClass:
+ * @parent_class: the parent class
+ *
+ * The class for #SecretPrompt.
+ */
typedef struct _SecretPromptPrivate {
/* Locked by mutex */
diff --git a/library/secret-prompt.h b/library/secret-prompt.h
index 2894ca9..5817378 100644
--- a/library/secret-prompt.h
+++ b/library/secret-prompt.h
@@ -35,11 +35,15 @@ typedef struct _SecretPromptPrivate SecretPromptPrivate;
struct _SecretPrompt {
GDBusProxy parent_instance;
+
+ /*< private >*/
SecretPromptPrivate *pv;
};
struct _SecretPromptClass {
GDBusProxyClass parent_class;
+
+ /*< private >*/
gpointer padding[8];
};
diff --git a/library/secret-service.c b/library/secret-service.c
index f486c05..04fd47d 100644
--- a/library/secret-service.c
+++ b/library/secret-service.c
@@ -24,6 +24,79 @@
#include "egg/egg-secure-memory.h"
+/**
+ * SECTION:secret-service
+ * @title: SecretService
+ * @short_description: the Secret Service
+ *
+ * A #SecretService object represents the Secret Service implementation which
+ * runs as a DBus service.
+ *
+ * Normally a single #SecretService object can be shared between multiple
+ * callers. The secret_service_get() method is used to access this #SecretService
+ * object. If a new independent #SecretService object is required, use
+ * secret_service_new().
+ *
+ * In order to securely transfer secrets to the Sercret Service, an session
+ * is established. This session can be established while initializing a
+ * #SecretService object by passing the %SECRET_SERVICE_OPEN_SESSION flag
+ * to the secret_service_get() or secret_service_new() functions. In order to
+ * establish a session on an already existing #SecretService, use the
+ * secret_service_ensure_session() function.
+ *
+ * To search for items, use the secret_service_search() method.
+ *
+ * Multiple collections can exist in the Secret Service, each of which contains
+ * secret items. In order to instantiate #SecretCollection objects which
+ * represent those collections while initializing a #SecretService then pass
+ * the %SECRET_SERVICE_LOAD_COLLECTIONS flag to the secret_service_get() or
+ * secret_service_new() functions. In order to establish a session on an already
+ * existing #SecretService, use the secret_service_ensure_collections() function.
+ * To access the list of collections use secret_service_get_collections().
+ *
+ * Certain actions on the Secret Service require user prompting to complete,
+ * such as creating a collection, or unlocking a collection. When such a prompt
+ * is necessary, then a #SecretPrompt object is created by this library, and
+ * passed to the secret_service_prompt_async() method. In this way it is handled
+ * automatically.
+ *
+ * In order to customize prompt handling, override the
+ * SecretServiceClass::prompt_async and SecretServiceClass::prompt_finish
+ * virtual methods of the #SecretService class.
+ */
+
+/**
+ * SecretService:
+ *
+ * A proxy object representing the Secret Service.
+ */
+
+/**
+ * SecretServiceClass:
+ * @parent_class: the parent class
+ * @collection_gtype: the #GType of the #SecretCollection objects instantiated
+ * by the #SecretService proxy
+ * @item_gtype: the #GType of the #SecretItem objects instantiated by the
+ * #SecretService proxy
+ * @prompt_async: called to perform asynchronous prompting when necessary
+ * @prompt_finish: called to complete an asynchronous prompt operation
+ * @prompt_sync: called to perform synchronous prompting when necessary
+ *
+ * The class for #SecretService.
+ */
+
+/**
+ * SecretServiceFlags:
+ * @SECRET_SERVICE_NONE: no flags for initializing the #SecretService
+ * @SECRET_SERVICE_OPEN_SESSION: establish a session for transfer of secrets
+ * while initializing the #SecretService
+ * @SECRET_SERVICE_LOAD_COLLECTIONS: load collections while initializing the
+ * #SecretService
+ *
+ * Flags which determine which parts of the #SecretService proxy are initialized
+ * during a secret_service_get() or secret_service_new() operation.
+ */
+
EGG_SECURE_GLIB_DEFINITIONS ();
static const gchar *default_bus_name = SECRET_SERVICE_BUS_NAME;
@@ -249,11 +322,29 @@ secret_service_class_init (SecretServiceClass *klass)
klass->item_gtype = SECRET_TYPE_ITEM;
klass->collection_gtype = SECRET_TYPE_COLLECTION;
+ /**
+ * SecretService:flags:
+ *
+ * A set of flags describing which parts of the secret service have
+ * been initialized.
+ */
g_object_class_install_property (object_class, PROP_FLAGS,
g_param_spec_flags ("flags", "Flags", "Service flags",
secret_service_flags_get_type (), SECRET_SERVICE_NONE,
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS));
+ /**
+ * SecretService:collections:
+ *
+ * A list of #SecretCollection objects representing the collections in
+ * the Secret Service. This list may be %NULL if the collections have
+ * not been loaded.
+ *
+ * To load the collections, specify the %SECRET_SERVICE_LOAD_COLLECTIONS
+ * initialization flag when calling the secret_service_get() or
+ * secret_service_new() functions. Or call the secret_service_ensure_collections()
+ * method.
+ */
g_object_class_install_property (object_class, PROP_COLLECTIONS,
g_param_spec_boxed ("collections", "Collections", "Secret Service Collections",
_secret_list_get_type (), G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
@@ -1319,7 +1410,7 @@ secret_service_ensure_collections_sync (SecretService *self,
* This function is called by other parts of this library to handle prompts
* for the various actions that can require prompting.
*
- * Override the #SecretService prompt_sync() virtual method
+ * Override the #SecretServiceClass::prompt_sync() virtual method
* to change the behavior of the propmting. The default behavior is to simply
* run secret_prompt_perform_sync() on the prompt.
*
diff --git a/library/secret-service.h b/library/secret-service.h
index 48af16e..5c12efd 100644
--- a/library/secret-service.h
+++ b/library/secret-service.h
@@ -44,6 +44,8 @@ typedef struct _SecretServicePrivate SecretServicePrivate;
struct _SecretService {
GDBusProxy parent;
+
+ /*< private >*/
SecretServicePrivate *pv;
};
@@ -68,6 +70,7 @@ struct _SecretServiceClass {
GAsyncResult *result,
GError **error);
+ /*< private >*/
gpointer padding[16];
};
diff --git a/library/secret-types.h b/library/secret-types.h
index ce6eb0f..b13eb78 100644
--- a/library/secret-types.h
+++ b/library/secret-types.h
@@ -35,12 +35,14 @@ typedef enum {
SECRET_ATTRIBUTE_INTEGER
} SecretSchemaType;
+typedef struct {
+ const gchar* name;
+ SecretSchemaType type;
+} SecretSchemaAttribute;
+
typedef struct {
const gchar *schema_name;
- struct {
- const gchar* name;
- SecretSchemaType type;
- } attributes[32];
+ SecretSchemaAttribute attributes[32];
/* */
gpointer reserved1;
diff --git a/library/secret-util.c b/library/secret-util.c
index b5392e7..1e80d75 100644
--- a/library/secret-util.c
+++ b/library/secret-util.c
@@ -17,6 +17,15 @@
#include
+/**
+ * SecretError:
+ * @SECRET_ERROR_PROTOCOL: received an invalid data or message from the Secret
+ * Service
+ *
+ * Errors returned by the Secret Service. None of the errors are appropriate
+ * for display to the user.
+ */
+
static void
list_unref_free (GList *reflist)
{
diff --git a/library/secret-value.c b/library/secret-value.c
index 20afd2d..87ec3ca 100644
--- a/library/secret-value.c
+++ b/library/secret-value.c
@@ -19,6 +19,30 @@
#include
+/**
+ * SECTION:secret-value
+ * @title: SecretValue
+ * @short_description: a value containing a secret
+ *
+ * A #SecretValue contains a password or other secret value.
+ *
+ * Use secret_value_get() to get the actual secret data, such as a password.
+ * The secret data is not necessarily null-terminated, unless the content type
+ * is "text/plain".
+ *
+ * Each #SecretValue has a content type. For passwords, this is "text/plain".
+ * Use secret_value_get_content_type() to look at the content type.
+ *
+ * #SecretValue is reference counted and immutable. The secret data is only
+ * freed when all references have been released via secret_value_unref().
+ */
+
+/**
+ * SecretValue:
+ *
+ * A secret value, like a password or other binary secret.
+ */
+
EGG_SECURE_DECLARE (secret_value);
struct _SecretValue {