summaryrefslogtreecommitdiff
path: root/docs
diff options
context:
space:
mode:
authorJussi Laako <jussi.laako@linux.intel.com>2014-03-20 16:01:42 +0200
committerJussi Laako <jussi.laako@linux.intel.com>2014-03-20 16:30:18 +0200
commita5a3c800cecbdf2297876b77408701106e7652ee (patch)
treed8a4726c1c9cbb9f33bc921a0cab522a2506ea61 /docs
parent542c03f273e57a137382bb462e807c444b2b4d51 (diff)
downloadgsignond-plugin-oauth-a5a3c800cecbdf2297876b77408701106e7652ee.tar.gz
gsignond-plugin-oauth-a5a3c800cecbdf2297876b77408701106e7652ee.tar.bz2
gsignond-plugin-oauth-a5a3c800cecbdf2297876b77408701106e7652ee.zip
Release OAuth plugin version 1.0.0
Change-Id: I5c7b222a047312731293ab90ea70c5de48a7d8af
Diffstat (limited to 'docs')
-rw-r--r--docs/Makefile.am113
-rw-r--r--docs/Makefile.in1182
-rw-r--r--docs/gsignond-plugin-oauth-docs.sgml36
-rw-r--r--docs/gsignond-plugin-oauth-overrides.txt0
-rw-r--r--docs/gsignond-plugin-oauth-sections.txt15
-rw-r--r--docs/gsignond-plugin-oauth.types1
-rw-r--r--docs/html/GSignondOauthPlugin.html1251
-rw-r--r--docs/html/api-index-full.html42
-rw-r--r--docs/html/ch01.html33
-rw-r--r--docs/html/deprecated-api-index.html30
-rw-r--r--docs/html/gsignond-plugin-oauth.devhelp228
-rw-r--r--docs/html/home.pngbin0 -> 256 bytes
-rw-r--r--docs/html/index.html40
-rw-r--r--docs/html/index.sgml11
-rw-r--r--docs/html/left-insensitive.pngbin0 -> 395 bytes
-rw-r--r--docs/html/left.pngbin0 -> 262 bytes
-rw-r--r--docs/html/object-tree.html34
-rw-r--r--docs/html/right-insensitive.pngbin0 -> 373 bytes
-rw-r--r--docs/html/right.pngbin0 -> 261 bytes
-rw-r--r--docs/html/style.css461
-rw-r--r--docs/html/up-insensitive.pngbin0 -> 374 bytes
-rw-r--r--docs/html/up.pngbin0 -> 260 bytes
22 files changed, 3277 insertions, 0 deletions
diff --git a/docs/Makefile.am b/docs/Makefile.am
new file mode 100644
index 0000000..dc3dcbe
--- /dev/null
+++ b/docs/Makefile.am
@@ -0,0 +1,113 @@
+## 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 of the module, e.g. 'glib'.
+DOC_MODULE=gsignond-plugin-oauth
+
+# Uncomment for versioned docs and specify the version of the module, e.g. '2'.
+#DOC_MODULE_VERSION=2
+
+
+# The top-level SGML file. You can change this if you want to.
+DOC_MAIN_SGML_FILE=$(DOC_MODULE)-docs.sgml
+
+# Directories containing the source code.
+# gtk-doc will search all .c and .h files beneath these paths
+# for inline comments documenting functions and macros.
+# e.g. DOC_SOURCE_DIR=$(top_srcdir)/gtk $(top_srcdir)/gdk
+DOC_SOURCE_DIR=$(top_srcdir)/src
+
+# 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=
+
+# Extra options to supply to gtkdoc-mkdb.
+# e.g. MKDB_OPTIONS=--xml-mode --output-format=xml
+MKDB_OPTIONS=--xml-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=--extra-dir=../../accounts-sso.gsignond/docs/html
+
+# 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=
+CFILE_GLOB=
+
+# 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 or dirs to ignore when scanning. Use base file/dir names
+# e.g. IGNORE_HFILES=gtkdebug.h gtkintl.h private_code
+IGNORE_HFILES= gsignond-oauth-plugin-oauth1.h \
+ gsignond-oauth-plugin-oauth2.h \
+ gsignond-oauth-plugin-utils.h
+
+# 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=\
+ $(GSIGNON_CFLAGS) \
+ $(LIBSOUP_CFLAGS)
+GTKDOC_LIBS=\
+ $(top_builddir)/src/liboauth.la \
+ $(GSIGNON_LIBS) \
+ $(LIBSOUP_LIBS)
+
+# 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 +=
+
+# Comment this out if you want 'make check' to test you doc status
+# and run some sanity checks
+if ENABLE_GTK_DOC
+TESTS_ENVIRONMENT = \
+ DOC_MODULE=$(DOC_MODULE) DOC_MAIN_SGML_FILE=$(DOC_MAIN_SGML_FILE) \
+ SRCDIR=$(abs_srcdir) BUILDDIR=$(abs_builddir)
+TESTS = $(GTKDOC_CHECK)
+endif
+
+CLEANFILES += $(DOC_MODULE)-*.txt $(DOC_MODULE).types
+
diff --git a/docs/Makefile.in b/docs/Makefile.in
new file mode 100644
index 0000000..dd5c0ec
--- /dev/null
+++ b/docs/Makefile.in
@@ -0,0 +1,1182 @@
+# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+# -*- mode: makefile -*-
+
+####################################
+# Everything below here is generic #
+####################################
+VPATH = @srcdir@
+am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+DIST_COMMON = $(top_srcdir)/gtk-doc.make $(srcdir)/Makefile.in \
+ $(srcdir)/Makefile.am $(top_srcdir)/build-aux/test-driver
+subdir = docs
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/gtk-doc.m4 \
+ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+SOURCES =
+DIST_SOURCES =
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+am__tty_colors_dummy = \
+ mgn= red= grn= lgn= blu= brg= std=; \
+ am__color_tests=no
+am__tty_colors = { \
+ $(am__tty_colors_dummy); \
+ if test "X$(AM_COLOR_TESTS)" = Xno; then \
+ am__color_tests=no; \
+ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \
+ am__color_tests=yes; \
+ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \
+ am__color_tests=yes; \
+ fi; \
+ if test $$am__color_tests = yes; then \
+ red=''; \
+ grn=''; \
+ lgn=''; \
+ blu=''; \
+ mgn=''; \
+ brg=''; \
+ std=''; \
+ fi; \
+}
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
+am__recheck_rx = ^[ ]*:recheck:[ ]*
+am__global_test_result_rx = ^[ ]*:global-test-result:[ ]*
+am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]*
+# A command that, given a newline-separated list of test names on the
+# standard input, print the name of the tests that are to be re-run
+# upon "make recheck".
+am__list_recheck_tests = $(AWK) '{ \
+ recheck = 1; \
+ while ((rc = (getline line < ($$0 ".trs"))) != 0) \
+ { \
+ if (rc < 0) \
+ { \
+ if ((getline line2 < ($$0 ".log")) < 0) \
+ recheck = 0; \
+ break; \
+ } \
+ else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \
+ { \
+ recheck = 0; \
+ break; \
+ } \
+ else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \
+ { \
+ break; \
+ } \
+ }; \
+ if (recheck) \
+ print $$0; \
+ close ($$0 ".trs"); \
+ close ($$0 ".log"); \
+}'
+# A command that, given a newline-separated list of test names on the
+# standard input, create the global log from their .trs and .log files.
+am__create_global_log = $(AWK) ' \
+function fatal(msg) \
+{ \
+ print "fatal: making $@: " msg | "cat >&2"; \
+ exit 1; \
+} \
+function rst_section(header) \
+{ \
+ print header; \
+ len = length(header); \
+ for (i = 1; i <= len; i = i + 1) \
+ printf "="; \
+ printf "\n\n"; \
+} \
+{ \
+ copy_in_global_log = 1; \
+ global_test_result = "RUN"; \
+ while ((rc = (getline line < ($$0 ".trs"))) != 0) \
+ { \
+ if (rc < 0) \
+ fatal("failed to read from " $$0 ".trs"); \
+ if (line ~ /$(am__global_test_result_rx)/) \
+ { \
+ sub("$(am__global_test_result_rx)", "", line); \
+ sub("[ ]*$$", "", line); \
+ global_test_result = line; \
+ } \
+ else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \
+ copy_in_global_log = 0; \
+ }; \
+ if (copy_in_global_log) \
+ { \
+ rst_section(global_test_result ": " $$0); \
+ while ((rc = (getline line < ($$0 ".log"))) != 0) \
+ { \
+ if (rc < 0) \
+ fatal("failed to read from " $$0 ".log"); \
+ print line; \
+ }; \
+ printf "\n"; \
+ }; \
+ close ($$0 ".trs"); \
+ close ($$0 ".log"); \
+}'
+# Restructured Text title.
+am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; }
+# Solaris 10 'make', and several other traditional 'make' implementations,
+# pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it
+# by disabling -e (using the XSI extension "set +e") if it's set.
+am__sh_e_setup = case $$- in *e*) set +e;; esac
+# Default flags passed to test drivers.
+am__common_driver_flags = \
+ --color-tests "$$am__color_tests" \
+ --enable-hard-errors "$$am__enable_hard_errors" \
+ --expect-failure "$$am__expect_failure"
+# To be inserted before the command running the test. Creates the
+# directory for the log if needed. Stores in $dir the directory
+# containing $f, in $tst the test, in $log the log. Executes the
+# developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and
+# passes TESTS_ENVIRONMENT. Set up options for the wrapper that
+# will run the test scripts (or their associated LOG_COMPILER, if
+# thy have one).
+am__check_pre = \
+$(am__sh_e_setup); \
+$(am__vpath_adj_setup) $(am__vpath_adj) \
+$(am__tty_colors); \
+srcdir=$(srcdir); export srcdir; \
+case "$@" in \
+ */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \
+ *) am__odir=.;; \
+esac; \
+test "x$$am__odir" = x"." || test -d "$$am__odir" \
+ || $(MKDIR_P) "$$am__odir" || exit $$?; \
+if test -f "./$$f"; then dir=./; \
+elif test -f "$$f"; then dir=; \
+else dir="$(srcdir)/"; fi; \
+tst=$$dir$$f; log='$@'; \
+if test -n '$(DISABLE_HARD_ERRORS)'; then \
+ am__enable_hard_errors=no; \
+else \
+ am__enable_hard_errors=yes; \
+fi; \
+case " $(XFAIL_TESTS) " in \
+ *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \
+ am__expect_failure=yes;; \
+ *) \
+ am__expect_failure=no;; \
+esac; \
+$(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT)
+# A shell command to get the names of the tests scripts with any registered
+# extension removed (i.e., equivalently, the names of the test logs, with
+# the '.log' extension removed). The result is saved in the shell variable
+# '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly,
+# we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)",
+# since that might cause problem with VPATH rewrites for suffix-less tests.
+# See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'.
+am__set_TESTS_bases = \
+ bases='$(TEST_LOGS)'; \
+ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \
+ bases=`echo $$bases`
+RECHECK_LOGS = $(TEST_LOGS)
+AM_RECURSIVE_TARGETS = check recheck
+TEST_SUITE_LOG = test-suite.log
+TEST_EXTENSIONS = @EXEEXT@ .test
+am__test_logs1 = $(TESTS:=.log)
+am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log)
+TEST_LOGS = $(am__test_logs2:.test.log=.log)
+TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/build-aux/test-driver
+TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \
+ $(TEST_LOG_FLAGS)
+am__set_b = \
+ case '$@' in \
+ */*) \
+ case '$*' in \
+ */*) b='$*';; \
+ *) b=`echo '$@' | sed 's/\.log$$//'`; \
+ esac;; \
+ *) \
+ b='$*';; \
+ esac
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CHECK_CFLAGS = @CHECK_CFLAGS@
+CHECK_LIBS = @CHECK_LIBS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+EXTENSIONSDIR = @EXTENSIONSDIR@
+FGREP = @FGREP@
+GREP = @GREP@
+GSIGNON_CFLAGS = @GSIGNON_CFLAGS@
+GSIGNON_LIBS = @GSIGNON_LIBS@
+GTKDOC_CHECK = @GTKDOC_CHECK@
+GTKDOC_CHECK_PATH = @GTKDOC_CHECK_PATH@
+GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@
+GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@
+GTKDOC_MKPDF = @GTKDOC_MKPDF@
+GTKDOC_REBASE = @GTKDOC_REBASE@
+HTML_DIR = @HTML_DIR@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@
+LIBSOUP_LIBS = @LIBSOUP_LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+PLUGINSDIR = @PLUGINSDIR@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+
+# 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 of the module, e.g. 'glib'.
+DOC_MODULE = gsignond-plugin-oauth
+
+# Uncomment for versioned docs and specify the version of the module, e.g. '2'.
+#DOC_MODULE_VERSION=2
+
+# The top-level SGML file. You can change this if you want to.
+DOC_MAIN_SGML_FILE = $(DOC_MODULE)-docs.sgml
+
+# Directories containing the source code.
+# gtk-doc will search all .c and .h files beneath these paths
+# for inline comments documenting functions and macros.
+# e.g. DOC_SOURCE_DIR=$(top_srcdir)/gtk $(top_srcdir)/gdk
+DOC_SOURCE_DIR = $(top_srcdir)/src
+
+# 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 =
+
+# Extra options to supply to gtkdoc-mkdb.
+# e.g. MKDB_OPTIONS=--xml-mode --output-format=xml
+MKDB_OPTIONS = --xml-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 = --extra-dir=../../accounts-sso.gsignond/docs/html
+
+# 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 =
+CFILE_GLOB =
+
+# 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 or dirs to ignore when scanning. Use base file/dir names
+# e.g. IGNORE_HFILES=gtkdebug.h gtkintl.h private_code
+IGNORE_HFILES = gsignond-oauth-plugin-oauth1.h \
+ gsignond-oauth-plugin-oauth2.h \
+ gsignond-oauth-plugin-utils.h
+
+
+# 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 = \
+ $(GSIGNON_CFLAGS) \
+ $(LIBSOUP_CFLAGS)
+
+GTKDOC_LIBS = \
+ $(top_builddir)/src/liboauth.la \
+ $(GSIGNON_LIBS) \
+ $(LIBSOUP_LIBS)
+
+@GTK_DOC_USE_LIBTOOL_FALSE@GTKDOC_CC = $(CC) $(INCLUDES) $(GTKDOC_DEPS_CFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+@GTK_DOC_USE_LIBTOOL_TRUE@GTKDOC_CC = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(INCLUDES) $(GTKDOC_DEPS_CFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+@GTK_DOC_USE_LIBTOOL_FALSE@GTKDOC_LD = $(CC) $(GTKDOC_DEPS_LIBS) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS)
+@GTK_DOC_USE_LIBTOOL_TRUE@GTKDOC_LD = $(LIBTOOL) --tag=CC --mode=link $(CC) $(GTKDOC_DEPS_LIBS) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS)
+@GTK_DOC_USE_LIBTOOL_FALSE@GTKDOC_RUN =
+@GTK_DOC_USE_LIBTOOL_TRUE@GTKDOC_RUN = $(LIBTOOL) --mode=execute
+
+# We set GPATH here; this gives us semantics for GNU make
+# which are more like other make's VPATH, when it comes to
+# whether a source that is a target of one rule is then
+# searched for in VPATH/GPATH.
+#
+GPATH = $(srcdir)
+TARGET_DIR = $(HTML_DIR)/$(DOC_MODULE)
+SETUP_FILES = \
+ $(content_files) \
+ $(DOC_MAIN_SGML_FILE) \
+ $(DOC_MODULE)-sections.txt \
+ $(DOC_MODULE)-overrides.txt
+
+
+# This includes the standard gtk-doc make rules, copied by gtkdocize.
+
+# Other files to distribute
+# e.g. EXTRA_DIST += version.xml.in
+EXTRA_DIST = $(HTML_IMAGES) $(SETUP_FILES)
+DOC_STAMPS = setup-build.stamp scan-build.stamp sgml-build.stamp \
+ html-build.stamp pdf-build.stamp \
+ sgml.stamp html.stamp pdf.stamp
+
+SCANOBJ_FILES = \
+ $(DOC_MODULE).args \
+ $(DOC_MODULE).hierarchy \
+ $(DOC_MODULE).interfaces \
+ $(DOC_MODULE).prerequisites \
+ $(DOC_MODULE).signals
+
+REPORT_FILES = \
+ $(DOC_MODULE)-undocumented.txt \
+ $(DOC_MODULE)-undeclared.txt \
+ $(DOC_MODULE)-unused.txt
+
+CLEANFILES = $(SCANOBJ_FILES) $(REPORT_FILES) $(DOC_STAMPS) \
+ gtkdoc-check.test $(DOC_MODULE)-*.txt $(DOC_MODULE).types
+@GTK_DOC_BUILD_HTML_FALSE@HTML_BUILD_STAMP =
+@GTK_DOC_BUILD_HTML_TRUE@HTML_BUILD_STAMP = html-build.stamp
+@GTK_DOC_BUILD_PDF_FALSE@PDF_BUILD_STAMP =
+@GTK_DOC_BUILD_PDF_TRUE@PDF_BUILD_STAMP = pdf-build.stamp
+
+#### setup ####
+GTK_DOC_V_SETUP = $(GTK_DOC_V_SETUP_$(V))
+GTK_DOC_V_SETUP_ = $(GTK_DOC_V_SETUP_$(AM_DEFAULT_VERBOSITY))
+GTK_DOC_V_SETUP_0 = @echo " DOC Preparing build";
+
+#### scan ####
+GTK_DOC_V_SCAN = $(GTK_DOC_V_SCAN_$(V))
+GTK_DOC_V_SCAN_ = $(GTK_DOC_V_SCAN_$(AM_DEFAULT_VERBOSITY))
+GTK_DOC_V_SCAN_0 = @echo " DOC Scanning header files";
+GTK_DOC_V_INTROSPECT = $(GTK_DOC_V_INTROSPECT_$(V))
+GTK_DOC_V_INTROSPECT_ = $(GTK_DOC_V_INTROSPECT_$(AM_DEFAULT_VERBOSITY))
+GTK_DOC_V_INTROSPECT_0 = @echo " DOC Introspecting gobjects";
+
+#### xml ####
+GTK_DOC_V_XML = $(GTK_DOC_V_XML_$(V))
+GTK_DOC_V_XML_ = $(GTK_DOC_V_XML_$(AM_DEFAULT_VERBOSITY))
+GTK_DOC_V_XML_0 = @echo " DOC Building XML";
+
+#### html ####
+GTK_DOC_V_HTML = $(GTK_DOC_V_HTML_$(V))
+GTK_DOC_V_HTML_ = $(GTK_DOC_V_HTML_$(AM_DEFAULT_VERBOSITY))
+GTK_DOC_V_HTML_0 = @echo " DOC Building HTML";
+GTK_DOC_V_XREF = $(GTK_DOC_V_XREF_$(V))
+GTK_DOC_V_XREF_ = $(GTK_DOC_V_XREF_$(AM_DEFAULT_VERBOSITY))
+GTK_DOC_V_XREF_0 = @echo " DOC Fixing cross-references";
+
+#### pdf ####
+GTK_DOC_V_PDF = $(GTK_DOC_V_PDF_$(V))
+GTK_DOC_V_PDF_ = $(GTK_DOC_V_PDF_$(AM_DEFAULT_VERBOSITY))
+GTK_DOC_V_PDF_0 = @echo " DOC Building PDF";
+
+# 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 +=
+
+# Comment this out if you want 'make check' to test you doc status
+# and run some sanity checks
+@ENABLE_GTK_DOC_TRUE@TESTS_ENVIRONMENT = \
+@ENABLE_GTK_DOC_TRUE@ DOC_MODULE=$(DOC_MODULE) DOC_MAIN_SGML_FILE=$(DOC_MAIN_SGML_FILE) \
+@ENABLE_GTK_DOC_TRUE@ SRCDIR=$(abs_srcdir) BUILDDIR=$(abs_builddir)
+
+@ENABLE_GTK_DOC_TRUE@TESTS = $(GTKDOC_CHECK)
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .log .test .test$(EXEEXT) .trs
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/gtk-doc.make $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu docs/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu docs/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+$(top_srcdir)/gtk-doc.make:
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+tags TAGS:
+
+ctags CTAGS:
+
+cscope cscopelist:
+
+
+# Recover from deleted '.trs' file; this should ensure that
+# "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create
+# both 'foo.log' and 'foo.trs'. Break the recipe in two subshells
+# to avoid problems with "make -n".
+.log.trs:
+ rm -f $< $@
+ $(MAKE) $(AM_MAKEFLAGS) $<
+
+# Leading 'am--fnord' is there to ensure the list of targets does not
+# expand to empty, as could happen e.g. with make check TESTS=''.
+am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck)
+am--force-recheck:
+ @:
+
+$(TEST_SUITE_LOG): $(TEST_LOGS)
+ @$(am__set_TESTS_bases); \
+ am__f_ok () { test -f "$$1" && test -r "$$1"; }; \
+ redo_bases=`for i in $$bases; do \
+ am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \
+ done`; \
+ if test -n "$$redo_bases"; then \
+ redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \
+ redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \
+ if $(am__make_dryrun); then :; else \
+ rm -f $$redo_logs && rm -f $$redo_results || exit 1; \
+ fi; \
+ fi; \
+ if test -n "$$am__remaking_logs"; then \
+ echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \
+ "recursion detected" >&2; \
+ else \
+ am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \
+ fi; \
+ if $(am__make_dryrun); then :; else \
+ st=0; \
+ errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \
+ for i in $$redo_bases; do \
+ test -f $$i.trs && test -r $$i.trs \
+ || { echo "$$errmsg $$i.trs" >&2; st=1; }; \
+ test -f $$i.log && test -r $$i.log \
+ || { echo "$$errmsg $$i.log" >&2; st=1; }; \
+ done; \
+ test $$st -eq 0 || exit 1; \
+ fi
+ @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \
+ ws='[ ]'; \
+ results=`for b in $$bases; do echo $$b.trs; done`; \
+ test -n "$$results" || results=/dev/null; \
+ all=` grep "^$$ws*:test-result:" $$results | wc -l`; \
+ pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \
+ fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \
+ skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \
+ xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \
+ xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \
+ error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \
+ if test `expr $$fail + $$xpass + $$error` -eq 0; then \
+ success=true; \
+ else \
+ success=false; \
+ fi; \
+ br='==================='; br=$$br$$br$$br$$br; \
+ result_count () \
+ { \
+ if test x"$$1" = x"--maybe-color"; then \
+ maybe_colorize=yes; \
+ elif test x"$$1" = x"--no-color"; then \
+ maybe_colorize=no; \
+ else \
+ echo "$@: invalid 'result_count' usage" >&2; exit 4; \
+ fi; \
+ shift; \
+ desc=$$1 count=$$2; \
+ if test $$maybe_colorize = yes && test $$count -gt 0; then \
+ color_start=$$3 color_end=$$std; \
+ else \
+ color_start= color_end=; \
+ fi; \
+ echo "$${color_start}# $$desc $$count$${color_end}"; \
+ }; \
+ create_testsuite_report () \
+ { \
+ result_count $$1 "TOTAL:" $$all "$$brg"; \
+ result_count $$1 "PASS: " $$pass "$$grn"; \
+ result_count $$1 "SKIP: " $$skip "$$blu"; \
+ result_count $$1 "XFAIL:" $$xfail "$$lgn"; \
+ result_count $$1 "FAIL: " $$fail "$$red"; \
+ result_count $$1 "XPASS:" $$xpass "$$red"; \
+ result_count $$1 "ERROR:" $$error "$$mgn"; \
+ }; \
+ { \
+ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \
+ $(am__rst_title); \
+ create_testsuite_report --no-color; \
+ echo; \
+ echo ".. contents:: :depth: 2"; \
+ echo; \
+ for b in $$bases; do echo $$b; done \
+ | $(am__create_global_log); \
+ } >$(TEST_SUITE_LOG).tmp || exit 1; \
+ mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \
+ if $$success; then \
+ col="$$grn"; \
+ else \
+ col="$$red"; \
+ test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \
+ fi; \
+ echo "$${col}$$br$${std}"; \
+ echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \
+ echo "$${col}$$br$${std}"; \
+ create_testsuite_report --maybe-color; \
+ echo "$$col$$br$$std"; \
+ if $$success; then :; else \
+ echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \
+ if test -n "$(PACKAGE_BUGREPORT)"; then \
+ echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \
+ fi; \
+ echo "$$col$$br$$std"; \
+ fi; \
+ $$success || exit 1
+
+check-TESTS:
+ @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list
+ @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list
+ @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+ @set +e; $(am__set_TESTS_bases); \
+ log_list=`for i in $$bases; do echo $$i.log; done`; \
+ trs_list=`for i in $$bases; do echo $$i.trs; done`; \
+ log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \
+ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \
+ exit $$?;
+recheck: all
+ @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+ @set +e; $(am__set_TESTS_bases); \
+ bases=`for i in $$bases; do echo $$i; done \
+ | $(am__list_recheck_tests)` || exit 1; \
+ log_list=`for i in $$bases; do echo $$i.log; done`; \
+ log_list=`echo $$log_list`; \
+ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \
+ am__force_recheck=am--force-recheck \
+ TEST_LOGS="$$log_list"; \
+ exit $$?
+.test.log:
+ @p='$<'; \
+ $(am__set_b); \
+ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \
+ --log-file $$b.log --trs-file $$b.trs \
+ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \
+ "$$tst" $(AM_TESTS_FD_REDIRECT)
+@am__EXEEXT_TRUE@.test$(EXEEXT).log:
+@am__EXEEXT_TRUE@ @p='$<'; \
+@am__EXEEXT_TRUE@ $(am__set_b); \
+@am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \
+@am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \
+@am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \
+@am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT)
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+ $(MAKE) $(AM_MAKEFLAGS) \
+ top_distdir="$(top_distdir)" distdir="$(distdir)" \
+ dist-hook
+check-am: all-am
+ $(MAKE) $(AM_MAKEFLAGS) check-TESTS
+check: check-am
+@ENABLE_GTK_DOC_FALSE@all-local:
+all-am: Makefile all-local
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+ -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS)
+ -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs)
+ -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+
+clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-local mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-local
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-data-local
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic \
+ maintainer-clean-local
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-local
+
+.MAKE: check-am install-am install-strip
+
+.PHONY: all all-am all-local check check-TESTS check-am clean \
+ clean-generic clean-libtool clean-local cscopelist-am ctags-am \
+ dist-hook distclean distclean-generic distclean-libtool \
+ distclean-local distdir dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am \
+ install-data-local install-dvi install-dvi-am install-exec \
+ install-exec-am install-html install-html-am install-info \
+ install-info-am install-man install-pdf install-pdf-am \
+ install-ps install-ps-am install-strip installcheck \
+ installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic maintainer-clean-local mostlyclean \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ recheck tags-am uninstall uninstall-am uninstall-local
+
+
+gtkdoc-check.test: Makefile
+ $(AM_V_GEN)echo "#!/bin/sh -e" > $@; \
+ echo "$(GTKDOC_CHECK_PATH) || exit 1" >> $@; \
+ chmod +x $@
+
+all-gtk-doc: $(HTML_BUILD_STAMP) $(PDF_BUILD_STAMP)
+.PHONY: all-gtk-doc
+
+@ENABLE_GTK_DOC_TRUE@all-local: all-gtk-doc
+
+docs: $(HTML_BUILD_STAMP) $(PDF_BUILD_STAMP)
+
+$(REPORT_FILES): sgml-build.stamp
+
+setup-build.stamp:
+ -$(GTK_DOC_V_SETUP)if test "$(abs_srcdir)" != "$(abs_builddir)" ; then \
+ files=`echo $(SETUP_FILES) $(expand_content_files) $(DOC_MODULE).types`; \
+ if test "x$$files" != "x" ; then \
+ for file in $$files ; do \
+ destdir=`dirname $(abs_builddir)/$$file`; \
+ test -d "$$destdir" || mkdir -p "$$destdir"; \
+ test -f $(abs_srcdir)/$$file && \
+ cp -pf $(abs_srcdir)/$$file $(abs_builddir)/$$file || true; \
+ done; \
+ fi; \
+ fi
+ $(AM_V_at)touch setup-build.stamp
+
+scan-build.stamp: setup-build.stamp $(HFILE_GLOB) $(CFILE_GLOB)
+ $(GTK_DOC_V_SCAN)_source_dir='' ; \
+ for i in $(DOC_SOURCE_DIR) ; do \
+ _source_dir="$${_source_dir} --source-dir=$$i" ; \
+ done ; \
+ gtkdoc-scan --module=$(DOC_MODULE) --ignore-headers="$(IGNORE_HFILES)" $${_source_dir} $(SCAN_OPTIONS) $(EXTRA_HFILES)
+ $(GTK_DOC_V_INTROSPECT)if grep -l '^..*$$' $(DOC_MODULE).types > /dev/null 2>&1 ; then \
+ scanobj_options=""; \
+ gtkdoc-scangobj 2>&1 --help | grep >/dev/null "\-\-verbose"; \
+ if test "$(?)" = "0"; then \
+ if test "x$(V)" = "x1"; then \
+ scanobj_options="--verbose"; \
+ fi; \
+ fi; \
+ CC="$(GTKDOC_CC)" LD="$(GTKDOC_LD)" RUN="$(GTKDOC_RUN)" CFLAGS="$(GTKDOC_CFLAGS) $(CFLAGS)" LDFLAGS="$(GTKDOC_LIBS) $(LDFLAGS)" \
+ gtkdoc-scangobj $(SCANGOBJ_OPTIONS) $$scanobj_options --module=$(DOC_MODULE); \
+ else \
+ for i in $(SCANOBJ_FILES) ; do \
+ test -f $$i || touch $$i ; \
+ done \
+ fi
+ $(AM_V_at)touch scan-build.stamp
+
+$(DOC_MODULE)-decl.txt $(SCANOBJ_FILES) $(DOC_MODULE)-sections.txt $(DOC_MODULE)-overrides.txt: scan-build.stamp
+ @true
+
+sgml-build.stamp: setup-build.stamp $(DOC_MODULE)-decl.txt $(SCANOBJ_FILES) $(DOC_MODULE)-sections.txt $(DOC_MODULE)-overrides.txt $(expand_content_files)
+ $(GTK_DOC_V_XML)_source_dir='' ; \
+ for i in $(DOC_SOURCE_DIR) ; do \
+ _source_dir="$${_source_dir} --source-dir=$$i" ; \
+ done ; \
+ gtkdoc-mkdb --module=$(DOC_MODULE) --output-format=xml --expand-content-files="$(expand_content_files)" --main-sgml-file=$(DOC_MAIN_SGML_FILE) $${_source_dir} $(MKDB_OPTIONS)
+ $(AM_V_at)touch sgml-build.stamp
+
+sgml.stamp: sgml-build.stamp
+ @true
+
+html-build.stamp: sgml.stamp $(DOC_MAIN_SGML_FILE) $(content_files)
+ $(GTK_DOC_V_HTML)rm -rf html && mkdir html && \
+ mkhtml_options=""; \
+ gtkdoc-mkhtml 2>&1 --help | grep >/dev/null "\-\-verbose"; \
+ if test "$(?)" = "0"; then \
+ if test "x$(V)" = "x1"; then \
+ mkhtml_options="$$mkhtml_options --verbose"; \
+ fi; \
+ fi; \
+ gtkdoc-mkhtml 2>&1 --help | grep >/dev/null "\-\-path"; \
+ if test "$(?)" = "0"; then \
+ mkhtml_options="$$mkhtml_options --path=\"$(abs_srcdir)\""; \
+ fi; \
+ cd html && gtkdoc-mkhtml $$mkhtml_options $(MKHTML_OPTIONS) $(DOC_MODULE) ../$(DOC_MAIN_SGML_FILE)
+ -@test "x$(HTML_IMAGES)" = "x" || \
+ for file in $(HTML_IMAGES) ; do \
+ if test -f $(abs_srcdir)/$$file ; then \
+ cp $(abs_srcdir)/$$file $(abs_builddir)/html; \
+ fi; \
+ if test -f $(abs_builddir)/$$file ; then \
+ cp $(abs_builddir)/$$file $(abs_builddir)/html; \
+ fi; \
+ done;
+ $(GTK_DOC_V_XREF)gtkdoc-fixxref --module=$(DOC_MODULE) --module-dir=html --html-dir=$(HTML_DIR) $(FIXXREF_OPTIONS)
+ $(AM_V_at)touch html-build.stamp
+
+pdf-build.stamp: sgml.stamp $(DOC_MAIN_SGML_FILE) $(content_files)
+ $(GTK_DOC_V_PDF)rm -f $(DOC_MODULE).pdf && \
+ mkpdf_options=""; \
+ gtkdoc-mkpdf 2>&1 --help | grep >/dev/null "\-\-verbose"; \
+ if test "$(?)" = "0"; then \
+ if test "x$(V)" = "x1"; then \
+ mkpdf_options="$$mkpdf_options --verbose"; \
+ fi; \
+ fi; \
+ if test "x$(HTML_IMAGES)" != "x"; then \
+ for img in $(HTML_IMAGES); do \
+ part=`dirname $$img`; \
+ echo $$mkpdf_options | grep >/dev/null "\-\-imgdir=$$part "; \
+ if test $$? != 0; then \
+ mkpdf_options="$$mkpdf_options --imgdir=$$part"; \
+ fi; \
+ done; \
+ fi; \
+ gtkdoc-mkpdf --path="$(abs_srcdir)" $$mkpdf_options $(DOC_MODULE) $(DOC_MAIN_SGML_FILE) $(MKPDF_OPTIONS)
+ $(AM_V_at)touch pdf-build.stamp
+
+##############
+
+clean-local:
+ @rm -f *~ *.bak
+ @rm -rf .libs
+ @if echo $(SCAN_OPTIONS) | grep -q "\-\-rebuild-types" ; then \
+ rm -f $(DOC_MODULE).types; \
+ fi
+
+distclean-local:
+ @rm -rf xml html $(REPORT_FILES) $(DOC_MODULE).pdf \
+ $(DOC_MODULE)-decl-list.txt $(DOC_MODULE)-decl.txt
+ @if test "$(abs_srcdir)" != "$(abs_builddir)" ; then \
+ rm -f $(SETUP_FILES) $(expand_content_files) $(DOC_MODULE).types; \
+ fi
+
+maintainer-clean-local:
+ @rm -rf xml html
+
+install-data-local:
+ @installfiles=`echo $(builddir)/html/*`; \
+ if test "$$installfiles" = '$(builddir)/html/*'; \
+ then echo 1>&2 'Nothing to install' ; \
+ else \
+ if test -n "$(DOC_MODULE_VERSION)"; then \
+ installdir="$(DESTDIR)$(TARGET_DIR)-$(DOC_MODULE_VERSION)"; \
+ else \
+ installdir="$(DESTDIR)$(TARGET_DIR)"; \
+ fi; \
+ $(mkinstalldirs) $${installdir} ; \
+ for i in $$installfiles; do \
+ echo ' $(INSTALL_DATA) '$$i ; \
+ $(INSTALL_DATA) $$i $${installdir}; \
+ done; \
+ if test -n "$(DOC_MODULE_VERSION)"; then \
+ mv -f $${installdir}/$(DOC_MODULE).devhelp2 \
+ $${installdir}/$(DOC_MODULE)-$(DOC_MODULE_VERSION).devhelp2; \
+ fi; \
+ $(GTKDOC_REBASE) --relative --dest-dir=$(DESTDIR) --html-dir=$${installdir}; \
+ fi
+
+uninstall-local:
+ @if test -n "$(DOC_MODULE_VERSION)"; then \
+ installdir="$(DESTDIR)$(TARGET_DIR)-$(DOC_MODULE_VERSION)"; \
+ else \
+ installdir="$(DESTDIR)$(TARGET_DIR)"; \
+ fi; \
+ rm -rf $${installdir}
+
+#
+# Require gtk-doc when making dist
+#
+@HAVE_GTK_DOC_TRUE@dist-check-gtkdoc: docs
+@HAVE_GTK_DOC_FALSE@dist-check-gtkdoc:
+@HAVE_GTK_DOC_FALSE@ @echo "*** gtk-doc is needed to run 'make dist'. ***"
+@HAVE_GTK_DOC_FALSE@ @echo "*** gtk-doc was not found when 'configure' ran. ***"
+@HAVE_GTK_DOC_FALSE@ @echo "*** please install gtk-doc and rerun 'configure'. ***"
+@HAVE_GTK_DOC_FALSE@ @false
+
+dist-hook: dist-check-gtkdoc all-gtk-doc dist-hook-local
+ @mkdir $(distdir)/html
+ @cp ./html/* $(distdir)/html
+ @-cp ./$(DOC_MODULE).pdf $(distdir)/
+ @-cp ./$(DOC_MODULE).types $(distdir)/
+ @-cp ./$(DOC_MODULE)-sections.txt $(distdir)/
+ @cd $(distdir) && rm -f $(DISTCLEANFILES)
+ @$(GTKDOC_REBASE) --online --relative --html-dir=$(distdir)/html
+
+.PHONY : dist-hook-local docs
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/docs/gsignond-plugin-oauth-docs.sgml b/docs/gsignond-plugin-oauth-docs.sgml
new file mode 100644
index 0000000..91d808c
--- /dev/null
+++ b/docs/gsignond-plugin-oauth-docs.sgml
@@ -0,0 +1,36 @@
+<?xml version="1.0"?>
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
+ "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd"
+[
+ <!ENTITY % local.common.attrib "xmlns:xi CDATA #FIXED 'http://www.w3.org/2003/XInclude'">
+]>
+<book id="index">
+ <bookinfo>
+ <title>gsignond-plugin-oauth Reference Manual</title>
+ <releaseinfo>
+ for gsignond-plugin-oauth.
+ The latest version of this documentation can be found on-line at
+ <ulink role="online-location" url="http://gsignon-docs.accounts-sso.googlecode.com/git/gsignond-plugin-oauth/index.html">
+ http://gsignon-docs.accounts-sso.googlecode.com/git/gsignond-plugin-oauth/index.html</ulink>.
+ </releaseinfo>
+ </bookinfo>
+
+ <chapter>
+ <title>Plugin reference</title>
+ <xi:include href="xml/gsignond-oauth-plugin.xml"/>
+
+ </chapter>
+ <chapter id="object-tree">
+ <title>Object Hierarchy</title>
+ <xi:include href="xml/tree_index.sgml"/>
+ </chapter>
+ <index id="api-index-full">
+ <title>API Index</title>
+ <xi:include href="xml/api-index-full.xml"><xi:fallback /></xi:include>
+ </index>
+ <index id="deprecated-api-index" role="deprecated">
+ <title>Index of deprecated API</title>
+ <xi:include href="xml/api-index-deprecated.xml"><xi:fallback /></xi:include>
+ </index>
+
+</book>
diff --git a/docs/gsignond-plugin-oauth-overrides.txt b/docs/gsignond-plugin-oauth-overrides.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/docs/gsignond-plugin-oauth-overrides.txt
diff --git a/docs/gsignond-plugin-oauth-sections.txt b/docs/gsignond-plugin-oauth-sections.txt
new file mode 100644
index 0000000..0cb36b2
--- /dev/null
+++ b/docs/gsignond-plugin-oauth-sections.txt
@@ -0,0 +1,15 @@
+<SECTION>
+<FILE>gsignond-oauth-plugin</FILE>
+<TITLE>GSignondOauthPlugin</TITLE>
+GSignondOauthPlugin
+GSignondOauthPluginClass
+<SUBSECTION Standard>
+GSIGNOND_IS_OAUTH_PLUGIN
+GSIGNOND_IS_OAUTH_PLUGIN_CLASS
+GSIGNOND_OAUTH_PLUGIN
+GSIGNOND_OAUTH_PLUGIN_CLASS
+GSIGNOND_OAUTH_PLUGIN_GET_CLASS
+GSIGNOND_TYPE_OAUTH_PLUGIN
+gsignond_oauth_plugin_get_type
+</SECTION>
+
diff --git a/docs/gsignond-plugin-oauth.types b/docs/gsignond-plugin-oauth.types
new file mode 100644
index 0000000..b7bc601
--- /dev/null
+++ b/docs/gsignond-plugin-oauth.types
@@ -0,0 +1 @@
+gsignond_oauth_plugin_get_type
diff --git a/docs/html/GSignondOauthPlugin.html b/docs/html/GSignondOauthPlugin.html
new file mode 100644
index 0000000..31dcd3b
--- /dev/null
+++ b/docs/html/GSignondOauthPlugin.html
@@ -0,0 +1,1251 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>gsignond-plugin-oauth Reference Manual: GSignondOauthPlugin</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="index.html" title="gsignond-plugin-oauth Reference Manual">
+<link rel="up" href="ch01.html" title="Plugin reference">
+<link rel="prev" href="ch01.html" title="Plugin reference">
+<link rel="next" href="object-tree.html" title="Object Hierarchy">
+<meta name="generator" content="GTK-Doc V1.20 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="10"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts">
+<a href="#" class="shortcut">Top</a><span id="nav_description"> <span class="dim">|</span> 
+ <a href="#GSignondOauthPlugin.description" class="shortcut">Description</a></span><span id="nav_hierarchy"> <span class="dim">|</span> 
+ <a href="#GSignondOauthPlugin.object-hierarchy" class="shortcut">Object Hierarchy</a></span><span id="nav_interfaces"> <span class="dim">|</span> 
+ <a href="#GSignondOauthPlugin.implemented-interfaces" class="shortcut">Implemented Interfaces</a></span>
+</td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
+<td><a accesskey="p" href="ch01.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="object-tree.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="GSignondOauthPlugin"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="GSignondOauthPlugin.top_of_page"></a>GSignondOauthPlugin</span></h2>
+<p>GSignondOauthPlugin — OAuth1/OAuth2 authentication plugin for gSSO single sign-on service</p>
+</td>
+<td class="gallery_image" valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="GSignondOauthPlugin.other"></a><h2>Types and Values</h2>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="name">
+<col class="description">
+</colgroup>
+<tbody>
+<tr>
+<td class="datatype_keyword">struct</td>
+<td class="function_name"><a class="link" href="GSignondOauthPlugin.html#GSignondOauthPlugin-struct" title="struct GSignondOauthPlugin">GSignondOauthPlugin</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword">struct</td>
+<td class="function_name"><a class="link" href="GSignondOauthPlugin.html#GSignondOauthPluginClass" title="struct GSignondOauthPluginClass">GSignondOauthPluginClass</a></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="GSignondOauthPlugin.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="screen"> <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+ <span class="lineart">╰──</span> GSignondOauthPlugin
+</pre>
+</div>
+<div class="refsect1">
+<a name="GSignondOauthPlugin.implemented-interfaces"></a><h2>Implemented Interfaces</h2>
+<p>
+GSignondOauthPlugin implements
+ <a href="http://gsignon-docs.accounts-sso.googlecode.com/git/gsignond/GSignondPlugin.html">GSignondPlugin</a>.</p>
+</div>
+<div class="refsect1">
+<a name="GSignondOauthPlugin.description"></a><h2>Description</h2>
+<p>The OAuth plugin provides a client-side implementation of OAuth 1 and OAuth 2
+authorization protocols. The overall flow is that the plugin is requested to
+perform authorization using supplied authorization parameters, and if it has
+succeeded in doing so, it returns a token string to the application that can
+be used to access protected resources over https. The plugin is not involved
+in accessing protected resources, only in initial authorization.</p>
+<p>OAuth1 is specified in <a class="ulink" href="http://tools.ietf.org/html/rfc5849" target="_top">RFC 5849</a>,
+OAuth2 is specified in <a class="ulink" href="http://tools.ietf.org/html/rfc6749" target="_top">RFC 6749</a>
+(with additional info regarding the basic bearer token type in <a class="ulink" href="http://tools.ietf.org/html/rfc6750" target="_top">RFC6750</a>). The two versions are
+not compatible and specify significantly different authorization sequences, for
+that reason they are implemented as separate mechanisms in the plugin.</p>
+<p>The plugin implements the standard <a href="http://gsignon-docs.accounts-sso.googlecode.com/git/gsignond/GSignondPlugin.html"><span class="type">GSignondPlugin</span></a> interface, and after instantiating
+a plugin object all interactions happen through that interface.</p>
+<p><a href="http://gsignon-docs.accounts-sso.googlecode.com/git/gsignond/GSignondPlugin.html#GSignondPlugin--type"><span class="type">“type”</span></a> property of the plugin object is set to "oauth".</p>
+<p><a href="http://gsignon-docs.accounts-sso.googlecode.com/git/gsignond/GSignondPlugin.html#GSignondPlugin--mechanisms"><span class="type">“mechanisms”</span></a> property of the plugin object is a list of "oauth1" and "oauth2".</p>
+<div class="refsect1">
+<a name="id-1.2.2.6.7"></a><h2>Authorization sequence</h2>
+</div>
+<p>The authorization sequence begins with issuing <a href="http://gsignon-docs.accounts-sso.googlecode.com/git/gsignond/GSignondPlugin.html#gsignond-plugin-request-initial"><code class="function">gsignond_plugin_request_initial()</code></a>.
+The <em class="parameter"><code>mechanism</code></em>
+ parameter should be set to "oauth1" or "oauth2", and
+the contents of <em class="parameter"><code>session_data</code></em>
+ and <em class="parameter"><code>identity_method_cache</code></em>
+ parameters depend
+on the mechanism and are described in detail below.</p>
+<p>The plugin responds to the request with one of the following signals:</p>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<li class="listitem"><p><a href="http://gsignon-docs.accounts-sso.googlecode.com/git/gsignond/GSignondPlugin.html#GSignondPlugin-response-final"><span class="type">“response-final”</span></a> This means the authorization sequence ended
+successfully, and the authorization token is delivered in <em class="parameter"><code>session_data</code></em>
+ parameter
+of the signal. This signal concludes the sequence.</p></li>
+<li class="listitem"><p><a href="http://gsignon-docs.accounts-sso.googlecode.com/git/gsignond/GSignondPlugin.html#GSignondPlugin-user-action-required"><span class="type">“user-action-required”</span></a> The plugin is requesting to perform a
+user authorization procedure by opening a webpage in a user-agent (browser) where the user is expected
+to enter her credentials. Parameters for this step are specified in <em class="parameter"><code>ui_data</code></em>
+.
+After the user interaction has completed, the results are returned to the
+plugin with <a href="http://gsignon-docs.accounts-sso.googlecode.com/git/gsignond/GSignondPlugin.html#gsignond-plugin-user-action-finished"><code class="function">gsignond_plugin_user_action_finished()</code></a> method, and the authorization
+process continues.</p></li>
+<li class="listitem"><p><a href="http://gsignon-docs.accounts-sso.googlecode.com/git/gsignond/GSignondPlugin.html#GSignondPlugin-store"><span class="type">“store”</span></a> The plugin is requesting to replace the token cache
+with the contents of <em class="parameter"><code>identity_method_cache</code></em>
+ parameter. There is no need to respond to this
+signal; the authorization process continues immediately.</p></li>
+<li class="listitem"><p><a href="http://gsignon-docs.accounts-sso.googlecode.com/git/gsignond/GSignondPlugin.html#GSignondPlugin-error"><span class="type">“error”</span></a> An error has happened in the authorization sequence
+and it stops.
+Typical errors are <code class="literal">GSIGNOND_ERROR_MISSING_DATA</code> which means there wasn't enough
+data provided in <a href="http://gsignon-docs.accounts-sso.googlecode.com/git/gsignond/GSignondPlugin.html#gsignond-plugin-request-initial"><code class="function">gsignond_plugin_request_initial()</code></a> to perform the authorization,
+<code class="literal">GSIGNOND_ERROR_NOT_AUTHORIZED</code> which means the server rejected the
+authorization attempt, <code class="literal">GSIGNOND_ERROR_USER_INTERACTION</code> which means there
+was an error during interaction with the user.</p></li>
+</ul></div>
+<p>At any point the application can request to stop the authorization by calling
+<a href="http://gsignon-docs.accounts-sso.googlecode.com/git/gsignond/GSignondPlugin.html#gsignond-plugin-cancel"><code class="function">gsignond_plugin_cancel()</code></a>. The plugin responds with an <a href="http://gsignon-docs.accounts-sso.googlecode.com/git/gsignond/GSignondPlugin.html#GSignondPlugin-error"><span class="type">“error”</span></a> signal
+containing a <code class="literal">GSIGNOND_ERROR_SESSION_CANCELED</code> error.</p>
+<div class="refsect1">
+<a name="id-1.2.2.6.12"></a><h2>Code examples</h2>
+</div>
+<div class="example">
+<a name="id-1.2.2.6.13"></a><p class="title"><b>Example 1. Using OAuth1</b></p>
+<div class="example-contents">
+ <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
+ <tbody>
+ <tr>
+ <td class="listing_lines" align="right"><pre>1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+91
+92
+93
+94
+95
+96
+97
+98
+99
+100
+101
+102
+103
+104
+105
+106
+107
+108
+109
+110
+111
+112
+113
+114
+115
+116
+117
+118
+119
+120
+121
+122
+123
+124
+125
+126
+127
+128
+129
+130
+131
+132
+133
+134
+135
+136
+137
+138
+139
+140
+141
+142
+143
+144
+145
+146
+147
+148
+149
+150
+151
+152
+153
+154
+155
+156
+157
+158
+159
+160
+161
+162
+163
+164
+165
+166
+167
+168
+169</pre></td>
+ <td class="listing_code"><pre class="programlisting"><span class="comment">/* PLEASE NOTE: this example is meant for OAuth plugin developers. If you're</span>
+<span class="comment"> * an application developer who wants to use this plugin, please refer to</span>
+<span class="comment"> * libgsignon-glib documentation here:</span>
+<span class="comment"> * http://gsignon-docs.accounts-sso.googlecode.com/git/libgsignon-glib/index.html</span>
+<span class="comment"> */</span>
+<span class="comment">/*</span>
+<span class="comment"> * Copyright (C) 2012 Intel Corporation.</span>
+<span class="comment"> *</span>
+<span class="comment"> * Contact: Alexander Kanavin &lt;alex.kanavin&#64;gmail.com&gt;</span>
+<span class="comment"> *</span>
+<span class="comment"> * This library is free software; you can redistribute it and/or</span>
+<span class="comment"> * modify it under the terms of the GNU Lesser General Public</span>
+<span class="comment"> * License as published by the Free Software Foundation; either</span>
+<span class="comment"> * version 2.1 of the License, or (at your option) any later version.</span>
+<span class="comment"> *</span>
+<span class="comment"> * This library is distributed in the hope that it will be useful,</span>
+<span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU</span>
+<span class="comment"> * Lesser General Public License for more details.</span>
+<span class="comment"> *</span>
+<span class="comment"> * You should have received a copy of the GNU Lesser General Public</span>
+<span class="comment"> * License along with this library; if not, write to the Free Software</span>
+<span class="comment"> * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA</span>
+<span class="comment"> * 02110-1301 USA</span>
+<span class="comment"> */</span>
+
+<span class="gtkdoc ppc">#include &lt;gsignond/gsignond-session-data.h&gt;</span>
+<span class="gtkdoc ppc">#include &lt;gsignond/gsignond-plugin-interface.h&gt;</span>
+<span class="gtkdoc ppc">#include &lt;gsignond/gsignond-error.h&gt;</span>
+<span class="gtkdoc ppc">#include &lt;gsignond/gsignond-utils.h&gt;</span>
+<span class="gtkdoc ppc">#include</span> <span class="gtkdoc pps">&quot;gsignond-oauth-plugin.h&quot;</span><span class="gtkdoc ppc"></span>
+
+<span class="gtkdoc slc">// this function returns a token for the token cache</span>
+<span class="gtkdoc kwb">static</span> GVariant<span class="gtkdoc opt">*</span> <span class="function">make_normal_token</span><span class="gtkdoc opt">()</span>
+<span class="gtkdoc opt">{</span>
+ GSignondDictionary<span class="gtkdoc opt">*</span> token <span class="gtkdoc opt">=</span> <span class="function"><a href="http://gsignon-docs.accounts-sso.googlecode.com/git/gsignond/gsignond-GSignondDictionary.html#gsignond-dictionary-new">gsignond_dictionary_new</a></span><span class="gtkdoc opt">();</span>
+ <span class="function"><a href="http://gsignon-docs.accounts-sso.googlecode.com/git/gsignond/gsignond-GSignondDictionary.html#gsignond-dictionary-set-string">gsignond_dictionary_set_string</a></span><span class="gtkdoc opt">(</span>token<span class="gtkdoc opt">,</span> <span class="string">&quot;AccessToken&quot;</span><span class="gtkdoc opt">,</span> <span class="string">&quot;megaaccesstoken&quot;</span><span class="gtkdoc opt">);</span>
+ <span class="function"><a href="http://gsignon-docs.accounts-sso.googlecode.com/git/gsignond/gsignond-GSignondDictionary.html#gsignond-dictionary-set-string">gsignond_dictionary_set_string</a></span><span class="gtkdoc opt">(</span>token<span class="gtkdoc opt">,</span> <span class="string">&quot;TokenSecret&quot;</span><span class="gtkdoc opt">,</span> <span class="string">&quot;megatokensecret&quot;</span><span class="gtkdoc opt">);</span>
+ <span class="function"><a href="http://gsignon-docs.accounts-sso.googlecode.com/git/gsignond/gsignond-GSignondDictionary.html#gsignond-dictionary-set-string">gsignond_dictionary_set_string</a></span><span class="gtkdoc opt">(</span>token<span class="gtkdoc opt">,</span> <span class="string">&quot;Realm&quot;</span><span class="gtkdoc opt">,</span> <span class="string">&quot;megarealm&quot;</span><span class="gtkdoc opt">);</span>
+ GVariant<span class="gtkdoc opt">*</span> token_var <span class="gtkdoc opt">=</span> <span class="function"><a href="http://gsignon-docs.accounts-sso.googlecode.com/git/gsignond/gsignond-GSignondDictionary.html#gsignond-dictionary-to-variant">gsignond_dictionary_to_variant</a></span><span class="gtkdoc opt">(</span>token<span class="gtkdoc opt">);</span>
+ <span class="function"><a href="http://gsignon-docs.accounts-sso.googlecode.com/git/gsignond/gsignond-GSignondDictionary.html#gsignond-dictionary-unref">gsignond_dictionary_unref</a></span><span class="gtkdoc opt">(</span>token<span class="gtkdoc opt">);</span>
+ <span class="keyword">return</span> token_var<span class="gtkdoc opt">;</span>
+<span class="gtkdoc opt">}</span>
+
+<span class="gtkdoc slc">//this function makes a token cache with one unrelated token</span>
+<span class="gtkdoc slc">//(because it belongs to a different consumer key)</span>
+<span class="gtkdoc kwb">static</span> GSignondDictionary<span class="gtkdoc opt">*</span> <span class="function">make_token_cache</span><span class="gtkdoc opt">()</span>
+<span class="gtkdoc opt">{</span>
+ GSignondDictionary<span class="gtkdoc opt">*</span> tokens <span class="gtkdoc opt">=</span> <span class="function"><a href="http://gsignon-docs.accounts-sso.googlecode.com/git/gsignond/gsignond-GSignondDictionary.html#gsignond-dictionary-new">gsignond_dictionary_new</a></span><span class="gtkdoc opt">();</span>
+ <span class="function"><a href="http://gsignon-docs.accounts-sso.googlecode.com/git/gsignond/gsignond-GSignondDictionary.html#gsignond-dictionary-set">gsignond_dictionary_set</a></span><span class="gtkdoc opt">(</span>tokens<span class="gtkdoc opt">,</span> <span class="string">&quot;someotherclient&quot;</span><span class="gtkdoc opt">,</span> <span class="function">make_normal_token</span><span class="gtkdoc opt">());</span>
+ <span class="keyword">return</span> tokens<span class="gtkdoc opt">;</span>
+<span class="gtkdoc opt">}</span>
+
+<span class="gtkdoc slc">//this callback prints the received token and exits the mainloop</span>
+<span class="gtkdoc kwb">static void</span> <span class="function">response_callback</span><span class="gtkdoc opt">(</span>GSignondPlugin<span class="gtkdoc opt">*</span> plugin<span class="gtkdoc opt">,</span> GSignondSessionData<span class="gtkdoc opt">*</span> result<span class="gtkdoc opt">,</span>
+ gpointer user_data<span class="gtkdoc opt">)</span>
+<span class="gtkdoc opt">{</span>
+ GVariant<span class="gtkdoc opt">*</span> token_variant <span class="gtkdoc opt">=</span> <span class="function"><a href="http://gsignon-docs.accounts-sso.googlecode.com/git/gsignond/gsignond-GSignondDictionary.html#gsignond-dictionary-to-variant">gsignond_dictionary_to_variant</a></span><span class="gtkdoc opt">(</span>result<span class="gtkdoc opt">);</span>
+ gchar<span class="gtkdoc opt">*</span> token_str <span class="gtkdoc opt">=</span> <span class="function"><a href="http://library.gnome.org/devel/glib/unstable/glib-GVariant.html#g-variant-print">g_variant_print</a></span><span class="gtkdoc opt">(</span>token_variant<span class="gtkdoc opt">,</span> TRUE<span class="gtkdoc opt">);</span>
+ <span class="function"><a href="http://library.gnome.org/devel/glib/unstable/glib-Warnings-and-Assertions.html#g-print">g_print</a></span><span class="gtkdoc opt">(</span><span class="string">&quot;Authenticated successfully, got token:</span><span class="gtkdoc esc">\n</span><span class="string">%s</span><span class="gtkdoc esc">\n</span><span class="string">&quot;</span><span class="gtkdoc opt">,</span>
+ token_str<span class="gtkdoc opt">);</span>
+ <span class="function"><a href="http://library.gnome.org/devel/glib/unstable/glib-Memory-Allocation.html#g-free">g_free</a></span><span class="gtkdoc opt">(</span>token_str<span class="gtkdoc opt">);</span>
+ <span class="function"><a href="http://library.gnome.org/devel/glib/unstable/glib-GVariant.html#g-variant-unref">g_variant_unref</a></span><span class="gtkdoc opt">(</span>token_variant<span class="gtkdoc opt">);</span>
+ <span class="function"><a href="http://library.gnome.org/devel/glib/unstable/glib-The-Main-Event-Loop.html#g-main-loop-quit">g_main_loop_quit</a></span><span class="gtkdoc opt">(</span>user_data<span class="gtkdoc opt">);</span>
+<span class="gtkdoc opt">}</span>
+
+<span class="gtkdoc slc">//this function prints the content of the updated token cache</span>
+<span class="gtkdoc kwb">static void</span> <span class="function">store_callback</span><span class="gtkdoc opt">(</span>GSignondPlugin<span class="gtkdoc opt">*</span> plugin<span class="gtkdoc opt">,</span> GSignondSessionData<span class="gtkdoc opt">*</span> result<span class="gtkdoc opt">,</span>
+ gpointer user_data<span class="gtkdoc opt">)</span>
+<span class="gtkdoc opt">{</span>
+ GVariant<span class="gtkdoc opt">*</span> token_variant <span class="gtkdoc opt">=</span> <span class="function"><a href="http://gsignon-docs.accounts-sso.googlecode.com/git/gsignond/gsignond-GSignondDictionary.html#gsignond-dictionary-to-variant">gsignond_dictionary_to_variant</a></span><span class="gtkdoc opt">(</span>result<span class="gtkdoc opt">);</span>
+ gchar<span class="gtkdoc opt">*</span> token_str <span class="gtkdoc opt">=</span> <span class="function"><a href="http://library.gnome.org/devel/glib/unstable/glib-GVariant.html#g-variant-print">g_variant_print</a></span><span class="gtkdoc opt">(</span>token_variant<span class="gtkdoc opt">,</span> TRUE<span class="gtkdoc opt">);</span>
+ <span class="function"><a href="http://library.gnome.org/devel/glib/unstable/glib-Warnings-and-Assertions.html#g-print">g_print</a></span><span class="gtkdoc opt">(</span><span class="string">&quot;Should replace the token cache with the following:</span><span class="gtkdoc esc">\n</span><span class="string">%s</span><span class="gtkdoc esc">\n</span><span class="string">&quot;</span><span class="gtkdoc opt">,</span>
+ token_str<span class="gtkdoc opt">);</span>
+ <span class="function"><a href="http://library.gnome.org/devel/glib/unstable/glib-Memory-Allocation.html#g-free">g_free</a></span><span class="gtkdoc opt">(</span>token_str<span class="gtkdoc opt">);</span>
+ <span class="function"><a href="http://library.gnome.org/devel/glib/unstable/glib-GVariant.html#g-variant-unref">g_variant_unref</a></span><span class="gtkdoc opt">(</span>token_variant<span class="gtkdoc opt">);</span>
+<span class="gtkdoc opt">}</span>
+
+<span class="gtkdoc slc">//this function shows what the UI interaction component needs to do</span>
+<span class="gtkdoc kwb">static void</span> <span class="function">user_action_required_callback</span><span class="gtkdoc opt">(</span>GSignondPlugin<span class="gtkdoc opt">*</span> plugin<span class="gtkdoc opt">,</span>
+ GSignondSignonuiData<span class="gtkdoc opt">*</span> ui_request<span class="gtkdoc opt">,</span>
+ gpointer user_data<span class="gtkdoc opt">)</span>
+<span class="gtkdoc opt">{</span>
+ <span class="gtkdoc slc">// ui_request typically contains a URI that needs to be opened, </span>
+ <span class="gtkdoc slc">// and a redirect URI that needs to be 'captured' by the user-agent and </span>
+ <span class="gtkdoc slc">// reported back to the plugin</span>
+ <span class="gtkdoc slc">// in practice the ui_request needs to be handed over to a user-agent</span>
+ <span class="gtkdoc slc">// but here we simply print it </span>
+ GVariant<span class="gtkdoc opt">*</span> token_variant <span class="gtkdoc opt">=</span> <span class="function"><a href="http://gsignon-docs.accounts-sso.googlecode.com/git/gsignond/gsignond-GSignondDictionary.html#gsignond-dictionary-to-variant">gsignond_dictionary_to_variant</a></span><span class="gtkdoc opt">(</span>ui_request<span class="gtkdoc opt">);</span>
+ gchar<span class="gtkdoc opt">*</span> token_str <span class="gtkdoc opt">=</span> <span class="function"><a href="http://library.gnome.org/devel/glib/unstable/glib-GVariant.html#g-variant-print">g_variant_print</a></span><span class="gtkdoc opt">(</span>token_variant<span class="gtkdoc opt">,</span> TRUE<span class="gtkdoc opt">);</span>
+ <span class="function"><a href="http://library.gnome.org/devel/glib/unstable/glib-Warnings-and-Assertions.html#g-print">g_print</a></span><span class="gtkdoc opt">(</span><span class="string">&quot;Got a UI interaction request:</span><span class="gtkdoc esc">\n</span><span class="string">%s</span><span class="gtkdoc esc">\n</span><span class="string">&quot;</span><span class="gtkdoc opt">,</span>
+ token_str<span class="gtkdoc opt">);</span>
+ <span class="function"><a href="http://library.gnome.org/devel/glib/unstable/glib-Memory-Allocation.html#g-free">g_free</a></span><span class="gtkdoc opt">(</span>token_str<span class="gtkdoc opt">);</span>
+ <span class="function"><a href="http://library.gnome.org/devel/glib/unstable/glib-GVariant.html#g-variant-unref">g_variant_unref</a></span><span class="gtkdoc opt">(</span>token_variant<span class="gtkdoc opt">);</span>
+
+ <span class="gtkdoc slc">// in practice the following should be received from a user-agent,</span>
+ <span class="gtkdoc slc">// but in this example for the sake of simplicity we report the hardcoded redirect</span>
+ <span class="gtkdoc slc">// URI (with additional parameters) immidiately back to the plugin</span>
+ GSignondSignonuiData<span class="gtkdoc opt">*</span> ui_data <span class="gtkdoc opt">=</span> <span class="function"><a href="http://gsignon-docs.accounts-sso.googlecode.com/git/gsignond/gsignond-GSignondDictionary.html#gsignond-dictionary-new">gsignond_dictionary_new</a></span><span class="gtkdoc opt">();</span>
+ <span class="function"><a href="http://gsignon-docs.accounts-sso.googlecode.com/git/gsignond/gsignond-GSignondSignonuiData.html#gsignond-signonui-data-set-url-response">gsignond_signonui_data_set_url_response</a></span><span class="gtkdoc opt">(</span>ui_data<span class="gtkdoc opt">,</span>
+<span class="string">&quot;http://somehost/somegsignondoauthcallback?oauth_token=somerandomtoken&amp;oauth_verifier=somerandomverifier&quot;</span><span class="gtkdoc opt">);</span>
+ <span class="function"><a href="http://gsignon-docs.accounts-sso.googlecode.com/git/gsignond/gsignond-GSignondSignonuiData.html#gsignond-signonui-data-set-query-error">gsignond_signonui_data_set_query_error</a></span><span class="gtkdoc opt">(</span>ui_data<span class="gtkdoc opt">,</span> SIGNONUI_ERROR_NONE<span class="gtkdoc opt">);</span>
+
+ <span class="function"><a href="http://gsignon-docs.accounts-sso.googlecode.com/git/gsignond/GSignondPlugin.html#gsignond-plugin-user-action-finished">gsignond_plugin_user_action_finished</a></span><span class="gtkdoc opt">(</span>plugin<span class="gtkdoc opt">,</span> ui_data<span class="gtkdoc opt">);</span>
+ <span class="function"><a href="http://gsignon-docs.accounts-sso.googlecode.com/git/gsignond/gsignond-GSignondDictionary.html#gsignond-dictionary-unref">gsignond_dictionary_unref</a></span><span class="gtkdoc opt">(</span>ui_data<span class="gtkdoc opt">);</span>
+<span class="gtkdoc opt">}</span>
+
+<span class="gtkdoc slc">// print an error and exit the mainloop</span>
+<span class="gtkdoc kwb">static void</span> <span class="function">error_callback</span><span class="gtkdoc opt">(</span>GSignondPlugin<span class="gtkdoc opt">*</span> plugin<span class="gtkdoc opt">,</span> GError<span class="gtkdoc opt">*</span> error<span class="gtkdoc opt">,</span>
+ gpointer user_data<span class="gtkdoc opt">)</span>
+<span class="gtkdoc opt">{</span>
+ <span class="function"><a href="http://library.gnome.org/devel/glib/unstable/glib-Warnings-and-Assertions.html#g-print">g_print</a></span><span class="gtkdoc opt">(</span><span class="string">&quot;Got an error: %s</span><span class="gtkdoc esc">\n</span><span class="string">&quot;</span><span class="gtkdoc opt">,</span> error<span class="gtkdoc opt">-&gt;</span>message<span class="gtkdoc opt">);</span>
+ <span class="function"><a href="http://library.gnome.org/devel/glib/unstable/glib-The-Main-Event-Loop.html#g-main-loop-quit">g_main_loop_quit</a></span><span class="gtkdoc opt">(</span>user_data<span class="gtkdoc opt">);</span>
+<span class="gtkdoc opt">}</span>
+
+
+<span class="gtkdoc kwb">int</span> <span class="function">main</span> <span class="gtkdoc opt">(</span><span class="gtkdoc kwb">void</span><span class="gtkdoc opt">)</span>
+<span class="gtkdoc opt">{</span>
+<span class="gtkdoc ppc">#if !GLIB_CHECK_VERSION (2, 36, 0)</span>
+ <span class="function"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-Type-Information.html#g-type-init">g_type_init</a></span> <span class="gtkdoc opt">();</span>
+<span class="gtkdoc ppc">#endif</span>
+
+ gpointer plugin <span class="gtkdoc opt">=</span> <span class="function"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#g-object-new">g_object_new</a></span><span class="gtkdoc opt">(</span><span class="function">gsignond_oauth_plugin_get_type</span><span class="gtkdoc opt">(),</span> NULL<span class="gtkdoc opt">);</span>
+
+ GMainLoop <span class="gtkdoc opt">*</span>main_loop <span class="gtkdoc opt">=</span> <span class="function"><a href="http://library.gnome.org/devel/glib/unstable/glib-The-Main-Event-Loop.html#g-main-loop-new">g_main_loop_new</a></span> <span class="gtkdoc opt">(</span>NULL<span class="gtkdoc opt">,</span> FALSE<span class="gtkdoc opt">);</span>
+
+ <span class="gtkdoc slc">//connect to various signals of the plugin object</span>
+ <span class="function"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#g-signal-connect">g_signal_connect</a></span><span class="gtkdoc opt">(</span>plugin<span class="gtkdoc opt">,</span> <span class="string">&quot;response-final&quot;</span><span class="gtkdoc opt">,</span> <span class="function"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-Closures.html#G-CALLBACK:CAPS">G_CALLBACK</a></span><span class="gtkdoc opt">(</span>response_callback<span class="gtkdoc opt">),</span> main_loop<span class="gtkdoc opt">);</span>
+ <span class="function"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#g-signal-connect">g_signal_connect</a></span><span class="gtkdoc opt">(</span>plugin<span class="gtkdoc opt">,</span> <span class="string">&quot;user-action-required&quot;</span><span class="gtkdoc opt">,</span>
+ <span class="function"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-Closures.html#G-CALLBACK:CAPS">G_CALLBACK</a></span><span class="gtkdoc opt">(</span>user_action_required_callback<span class="gtkdoc opt">),</span> NULL<span class="gtkdoc opt">);</span>
+ <span class="function"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#g-signal-connect">g_signal_connect</a></span><span class="gtkdoc opt">(</span>plugin<span class="gtkdoc opt">,</span> <span class="string">&quot;store&quot;</span><span class="gtkdoc opt">,</span> <span class="function"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-Closures.html#G-CALLBACK:CAPS">G_CALLBACK</a></span><span class="gtkdoc opt">(</span>store_callback<span class="gtkdoc opt">),</span> NULL<span class="gtkdoc opt">);</span>
+ <span class="function"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#g-signal-connect">g_signal_connect</a></span><span class="gtkdoc opt">(</span>plugin<span class="gtkdoc opt">,</span> <span class="string">&quot;error&quot;</span><span class="gtkdoc opt">,</span> <span class="function"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-Closures.html#G-CALLBACK:CAPS">G_CALLBACK</a></span><span class="gtkdoc opt">(</span>error_callback<span class="gtkdoc opt">),</span> main_loop<span class="gtkdoc opt">);</span>
+
+ GSignondSessionData<span class="gtkdoc opt">*</span> data <span class="gtkdoc opt">=</span> <span class="function"><a href="http://gsignon-docs.accounts-sso.googlecode.com/git/gsignond/gsignond-GSignondDictionary.html#gsignond-dictionary-new">gsignond_dictionary_new</a></span><span class="gtkdoc opt">();</span>
+ GSignondDictionary<span class="gtkdoc opt">*</span> token_cache <span class="gtkdoc opt">=</span> <span class="function">make_token_cache</span><span class="gtkdoc opt">();</span>
+
+ <span class="gtkdoc slc">//fill in necessary data for OAuth1 authorization</span>
+ <span class="function"><a href="http://gsignon-docs.accounts-sso.googlecode.com/git/gsignond/gsignond-GSignondDictionary.html#gsignond-dictionary-set-string">gsignond_dictionary_set_string</a></span><span class="gtkdoc opt">(</span>data<span class="gtkdoc opt">,</span> <span class="string">&quot;ConsumerKey&quot;</span><span class="gtkdoc opt">,</span> <span class="string">&quot;megaclient&quot;</span><span class="gtkdoc opt">);</span>
+ <span class="function"><a href="http://gsignon-docs.accounts-sso.googlecode.com/git/gsignond/gsignond-GSignondDictionary.html#gsignond-dictionary-set-string">gsignond_dictionary_set_string</a></span><span class="gtkdoc opt">(</span>data<span class="gtkdoc opt">,</span> <span class="string">&quot;ConsumerSecret&quot;</span><span class="gtkdoc opt">,</span> <span class="string">&quot;megasecret&quot;</span><span class="gtkdoc opt">);</span>
+ <span class="function"><a href="http://gsignon-docs.accounts-sso.googlecode.com/git/gsignond/gsignond-GSignondDictionary.html#gsignond-dictionary-set-string">gsignond_dictionary_set_string</a></span><span class="gtkdoc opt">(</span>data<span class="gtkdoc opt">,</span> <span class="string">&quot;Realm&quot;</span><span class="gtkdoc opt">,</span> <span class="string">&quot;megarealm&quot;</span><span class="gtkdoc opt">);</span>
+ <span class="function"><a href="http://gsignon-docs.accounts-sso.googlecode.com/git/gsignond/gsignond-GSignondSessionData.html#gsignond-session-data-set-ui-policy">gsignond_session_data_set_ui_policy</a></span><span class="gtkdoc opt">(</span>data<span class="gtkdoc opt">,</span> GSIGNOND_UI_POLICY_DEFAULT<span class="gtkdoc opt">);</span>
+
+ <span class="gtkdoc kwb">const</span> gchar <span class="gtkdoc opt">*</span>realm_list<span class="gtkdoc opt">[] = {</span> <span class="string">&quot;somehost&quot;</span><span class="gtkdoc opt">,</span> NULL <span class="gtkdoc opt">};</span>
+ GSequence <span class="gtkdoc opt">*</span>allowed_realms <span class="gtkdoc opt">=</span> <span class="function"><a href="http://gsignon-docs.accounts-sso.googlecode.com/git/gsignond/gsignond-Utility-functions.html#gsignond-copy-array-to-sequence">gsignond_copy_array_to_sequence</a></span><span class="gtkdoc opt">(</span>realm_list<span class="gtkdoc opt">);</span>
+ <span class="function"><a href="http://gsignon-docs.accounts-sso.googlecode.com/git/gsignond/gsignond-GSignondSessionData.html#gsignond-session-data-set-allowed-realms">gsignond_session_data_set_allowed_realms</a></span><span class="gtkdoc opt">(</span>data<span class="gtkdoc opt">,</span> allowed_realms<span class="gtkdoc opt">);</span>
+ <span class="function"><a href="http://library.gnome.org/devel/glib/unstable/glib-Sequences.html#g-sequence-free">g_sequence_free</a></span><span class="gtkdoc opt">(</span>allowed_realms<span class="gtkdoc opt">);</span>
+
+ <span class="gtkdoc slc">// can also be HMAC-SHA1, or RSA-SHA1 (in the latter case, also RSAPrivateKey</span>
+ <span class="gtkdoc slc">// needs to be set</span>
+ <span class="function"><a href="http://gsignon-docs.accounts-sso.googlecode.com/git/gsignond/gsignond-GSignondDictionary.html#gsignond-dictionary-set-string">gsignond_dictionary_set_string</a></span><span class="gtkdoc opt">(</span>data<span class="gtkdoc opt">,</span> <span class="string">&quot;SignatureMethod&quot;</span><span class="gtkdoc opt">,</span> <span class="string">&quot;PLAINTEXT&quot;</span><span class="gtkdoc opt">);</span>
+
+ <span class="function"><a href="http://gsignon-docs.accounts-sso.googlecode.com/git/gsignond/gsignond-GSignondDictionary.html#gsignond-dictionary-set-string">gsignond_dictionary_set_string</a></span><span class="gtkdoc opt">(</span>data<span class="gtkdoc opt">,</span> <span class="string">&quot;RequestEndpoint&quot;</span><span class="gtkdoc opt">,</span> <span class="string">&quot;https://somehost/temporarytokenpath&quot;</span><span class="gtkdoc opt">);</span>
+ <span class="function"><a href="http://gsignon-docs.accounts-sso.googlecode.com/git/gsignond/gsignond-GSignondDictionary.html#gsignond-dictionary-set-string">gsignond_dictionary_set_string</a></span><span class="gtkdoc opt">(</span>data<span class="gtkdoc opt">,</span> <span class="string">&quot;AuthorizationEndpoint&quot;</span><span class="gtkdoc opt">,</span> <span class="string">&quot;https://somehost/authorization&quot;</span><span class="gtkdoc opt">);</span>
+ <span class="function"><a href="http://gsignon-docs.accounts-sso.googlecode.com/git/gsignond/gsignond-GSignondDictionary.html#gsignond-dictionary-set-string">gsignond_dictionary_set_string</a></span><span class="gtkdoc opt">(</span>data<span class="gtkdoc opt">,</span> <span class="string">&quot;Callback&quot;</span><span class="gtkdoc opt">,</span> <span class="string">&quot;http://somehost/somegsignondoauthcallback&quot;</span><span class="gtkdoc opt">);</span>
+ <span class="function"><a href="http://gsignon-docs.accounts-sso.googlecode.com/git/gsignond/gsignond-GSignondDictionary.html#gsignond-dictionary-set-string">gsignond_dictionary_set_string</a></span><span class="gtkdoc opt">(</span>data<span class="gtkdoc opt">,</span> <span class="string">&quot;TokenEndpoint&quot;</span><span class="gtkdoc opt">,</span> <span class="string">&quot;https://somehost/accesstokenpath&quot;</span><span class="gtkdoc opt">);</span>
+
+ <span class="gtkdoc slc">//start the authorization and run the mainloop</span>
+ <span class="gtkdoc slc">//any further processing happens in signal callbacks</span>
+ <span class="function"><a href="http://gsignon-docs.accounts-sso.googlecode.com/git/gsignond/GSignondPlugin.html#gsignond-plugin-request-initial">gsignond_plugin_request_initial</a></span><span class="gtkdoc opt">(</span>plugin<span class="gtkdoc opt">,</span> data<span class="gtkdoc opt">,</span> token_cache<span class="gtkdoc opt">,</span> <span class="string">&quot;oauth1&quot;</span><span class="gtkdoc opt">);</span>
+ <span class="function"><a href="http://gsignon-docs.accounts-sso.googlecode.com/git/gsignond/gsignond-GSignondDictionary.html#gsignond-dictionary-unref">gsignond_dictionary_unref</a></span><span class="gtkdoc opt">(</span>data<span class="gtkdoc opt">);</span>
+ <span class="function"><a href="http://gsignon-docs.accounts-sso.googlecode.com/git/gsignond/gsignond-GSignondDictionary.html#gsignond-dictionary-unref">gsignond_dictionary_unref</a></span><span class="gtkdoc opt">(</span>token_cache<span class="gtkdoc opt">);</span>
+
+ <span class="function"><a href="http://library.gnome.org/devel/glib/unstable/glib-The-Main-Event-Loop.html#g-main-loop-run">g_main_loop_run</a></span> <span class="gtkdoc opt">(</span>main_loop<span class="gtkdoc opt">);</span>
+
+ <span class="function"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#g-object-unref">g_object_unref</a></span><span class="gtkdoc opt">(</span>plugin<span class="gtkdoc opt">);</span>
+ <span class="function"><a href="http://library.gnome.org/devel/glib/unstable/glib-The-Main-Event-Loop.html#g-main-loop-unref">g_main_loop_unref</a></span><span class="gtkdoc opt">(</span>main_loop<span class="gtkdoc opt">);</span>
+
+ <span class="keyword">return</span> <span class="number">0</span><span class="gtkdoc opt">;</span>
+<span class="gtkdoc opt">}</span></pre></td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+</div>
+<br class="example-break"><div class="example">
+<a name="id-1.2.2.6.14"></a><p class="title"><b>Example 2. Using OAuth2</b></p>
+<div class="example-contents">
+ <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
+ <tbody>
+ <tr>
+ <td class="listing_lines" align="right"><pre>1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+91
+92
+93
+94
+95
+96
+97
+98
+99
+100
+101
+102
+103
+104
+105
+106
+107
+108
+109
+110
+111
+112
+113
+114
+115
+116
+117
+118
+119
+120
+121
+122
+123
+124
+125
+126
+127
+128
+129
+130
+131
+132
+133
+134
+135
+136
+137
+138
+139
+140
+141
+142
+143
+144
+145
+146
+147
+148
+149
+150
+151
+152
+153
+154
+155
+156
+157
+158
+159
+160
+161
+162
+163
+164
+165
+166
+167
+168
+169
+170
+171
+172
+173
+174
+175
+176
+177</pre></td>
+ <td class="listing_code"><pre class="programlisting"><span class="comment">/* PLEASE NOTE: this example is meant for OAuth plugin developers. If you're</span>
+<span class="comment"> * an application developer who wants to use this plugin, please refer to</span>
+<span class="comment"> * libgsignon-glib documentation here:</span>
+<span class="comment"> * http://gsignon-docs.accounts-sso.googlecode.com/git/libgsignon-glib/index.html</span>
+<span class="comment"> */</span>
+<span class="comment">/*</span>
+<span class="comment"> * Copyright (C) 2012 Intel Corporation.</span>
+<span class="comment"> *</span>
+<span class="comment"> * Contact: Alexander Kanavin &lt;alex.kanavin&#64;gmail.com&gt;</span>
+<span class="comment"> *</span>
+<span class="comment"> * This library is free software; you can redistribute it and/or</span>
+<span class="comment"> * modify it under the terms of the GNU Lesser General Public</span>
+<span class="comment"> * License as published by the Free Software Foundation; either</span>
+<span class="comment"> * version 2.1 of the License, or (at your option) any later version.</span>
+<span class="comment"> *</span>
+<span class="comment"> * This library is distributed in the hope that it will be useful,</span>
+<span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU</span>
+<span class="comment"> * Lesser General Public License for more details.</span>
+<span class="comment"> *</span>
+<span class="comment"> * You should have received a copy of the GNU Lesser General Public</span>
+<span class="comment"> * License along with this library; if not, write to the Free Software</span>
+<span class="comment"> * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA</span>
+<span class="comment"> * 02110-1301 USA</span>
+<span class="comment"> */</span>
+
+<span class="gtkdoc ppc">#include &lt;gsignond/gsignond-session-data.h&gt;</span>
+<span class="gtkdoc ppc">#include &lt;gsignond/gsignond-plugin-interface.h&gt;</span>
+<span class="gtkdoc ppc">#include &lt;gsignond/gsignond-error.h&gt;</span>
+<span class="gtkdoc ppc">#include &lt;gsignond/gsignond-utils.h&gt;</span>
+<span class="gtkdoc ppc">#include</span> <span class="gtkdoc pps">&quot;gsignond-oauth-plugin.h&quot;</span><span class="gtkdoc ppc"></span>
+
+
+<span class="gtkdoc slc">// this function returns a token for the token cache</span>
+<span class="gtkdoc kwb">static</span> GVariant<span class="gtkdoc opt">*</span> <span class="function">make_normal_token</span><span class="gtkdoc opt">()</span>
+<span class="gtkdoc opt">{</span>
+ GSignondDictionary<span class="gtkdoc opt">*</span> token <span class="gtkdoc opt">=</span> <span class="function"><a href="http://gsignon-docs.accounts-sso.googlecode.com/git/gsignond/gsignond-GSignondDictionary.html#gsignond-dictionary-new">gsignond_dictionary_new</a></span><span class="gtkdoc opt">();</span>
+ <span class="function"><a href="http://gsignon-docs.accounts-sso.googlecode.com/git/gsignond/gsignond-GSignondDictionary.html#gsignond-dictionary-set-string">gsignond_dictionary_set_string</a></span><span class="gtkdoc opt">(</span>token<span class="gtkdoc opt">,</span> <span class="string">&quot;AccessToken&quot;</span><span class="gtkdoc opt">,</span> <span class="string">&quot;megaaccesstoken&quot;</span><span class="gtkdoc opt">);</span>
+ GDateTime<span class="gtkdoc opt">*</span> now <span class="gtkdoc opt">=</span> <span class="function"><a href="http://library.gnome.org/devel/glib/unstable/glib-GDateTime.html#g-date-time-new-now-utc">g_date_time_new_now_utc</a></span><span class="gtkdoc opt">();</span>
+ <span class="function"><a href="http://gsignon-docs.accounts-sso.googlecode.com/git/gsignond/gsignond-GSignondDictionary.html#gsignond-dictionary-set-int64">gsignond_dictionary_set_int64</a></span><span class="gtkdoc opt">(</span>token<span class="gtkdoc opt">,</span> <span class="string">&quot;Timestamp&quot;</span><span class="gtkdoc opt">,</span>
+ <span class="function"><a href="http://library.gnome.org/devel/glib/unstable/glib-GDateTime.html#g-date-time-to-unix">g_date_time_to_unix</a></span><span class="gtkdoc opt">(</span>now<span class="gtkdoc opt">));</span>
+ <span class="function"><a href="http://library.gnome.org/devel/glib/unstable/glib-GDateTime.html#g-date-time-unref">g_date_time_unref</a></span><span class="gtkdoc opt">(</span>now<span class="gtkdoc opt">);</span>
+ <span class="function"><a href="http://gsignon-docs.accounts-sso.googlecode.com/git/gsignond/gsignond-GSignondDictionary.html#gsignond-dictionary-set-int64">gsignond_dictionary_set_int64</a></span><span class="gtkdoc opt">(</span>token<span class="gtkdoc opt">,</span> <span class="string">&quot;Duration&quot;</span><span class="gtkdoc opt">,</span> <span class="number">3600</span><span class="gtkdoc opt">);</span>
+ <span class="function"><a href="http://gsignon-docs.accounts-sso.googlecode.com/git/gsignond/gsignond-GSignondDictionary.html#gsignond-dictionary-set-string">gsignond_dictionary_set_string</a></span><span class="gtkdoc opt">(</span>token<span class="gtkdoc opt">,</span> <span class="string">&quot;RefreshToken&quot;</span><span class="gtkdoc opt">,</span> <span class="string">&quot;megarefreshtoken&quot;</span><span class="gtkdoc opt">);</span>
+ <span class="function"><a href="http://gsignon-docs.accounts-sso.googlecode.com/git/gsignond/gsignond-GSignondDictionary.html#gsignond-dictionary-set-string">gsignond_dictionary_set_string</a></span><span class="gtkdoc opt">(</span>token<span class="gtkdoc opt">,</span> <span class="string">&quot;Scope&quot;</span><span class="gtkdoc opt">,</span> <span class="string">&quot;somescope1 somescope2 somescope3&quot;</span><span class="gtkdoc opt">);</span>
+ GVariant<span class="gtkdoc opt">*</span> token_var <span class="gtkdoc opt">=</span> <span class="function"><a href="http://gsignon-docs.accounts-sso.googlecode.com/git/gsignond/gsignond-GSignondDictionary.html#gsignond-dictionary-to-variant">gsignond_dictionary_to_variant</a></span><span class="gtkdoc opt">(</span>token<span class="gtkdoc opt">);</span>
+ <span class="function"><a href="http://gsignon-docs.accounts-sso.googlecode.com/git/gsignond/gsignond-GSignondDictionary.html#gsignond-dictionary-unref">gsignond_dictionary_unref</a></span><span class="gtkdoc opt">(</span>token<span class="gtkdoc opt">);</span>
+ <span class="keyword">return</span> token_var<span class="gtkdoc opt">;</span>
+<span class="gtkdoc opt">}</span>
+
+<span class="gtkdoc slc">//this function makes a token cache with one unrelated token</span>
+<span class="gtkdoc slc">//(because it belongs to a different client id)</span>
+<span class="gtkdoc kwb">static</span> GSignondDictionary<span class="gtkdoc opt">*</span> <span class="function">make_token_cache</span><span class="gtkdoc opt">()</span>
+<span class="gtkdoc opt">{</span>
+ GSignondDictionary<span class="gtkdoc opt">*</span> tokens <span class="gtkdoc opt">=</span> <span class="function"><a href="http://gsignon-docs.accounts-sso.googlecode.com/git/gsignond/gsignond-GSignondDictionary.html#gsignond-dictionary-new">gsignond_dictionary_new</a></span><span class="gtkdoc opt">();</span>
+ GSignondDictionary<span class="gtkdoc opt">*</span> client_tokens <span class="gtkdoc opt">=</span> <span class="function"><a href="http://gsignon-docs.accounts-sso.googlecode.com/git/gsignond/gsignond-GSignondDictionary.html#gsignond-dictionary-new">gsignond_dictionary_new</a></span><span class="gtkdoc opt">();</span>
+ <span class="function"><a href="http://gsignon-docs.accounts-sso.googlecode.com/git/gsignond/gsignond-GSignondDictionary.html#gsignond-dictionary-set">gsignond_dictionary_set</a></span><span class="gtkdoc opt">(</span>client_tokens<span class="gtkdoc opt">,</span> <span class="string">&quot;somescope1 somescope2 somescope3&quot;</span><span class="gtkdoc opt">,</span> <span class="function">make_normal_token</span><span class="gtkdoc opt">());</span>
+ <span class="function"><a href="http://gsignon-docs.accounts-sso.googlecode.com/git/gsignond/gsignond-GSignondDictionary.html#gsignond-dictionary-set">gsignond_dictionary_set</a></span><span class="gtkdoc opt">(</span>tokens<span class="gtkdoc opt">,</span> <span class="string">&quot;someotherclient&quot;</span><span class="gtkdoc opt">,</span> <span class="function"><a href="http://gsignon-docs.accounts-sso.googlecode.com/git/gsignond/gsignond-GSignondDictionary.html#gsignond-dictionary-to-variant">gsignond_dictionary_to_variant</a></span><span class="gtkdoc opt">(</span>client_tokens<span class="gtkdoc opt">));</span>
+ <span class="function"><a href="http://gsignon-docs.accounts-sso.googlecode.com/git/gsignond/gsignond-GSignondDictionary.html#gsignond-dictionary-unref">gsignond_dictionary_unref</a></span><span class="gtkdoc opt">(</span>client_tokens<span class="gtkdoc opt">);</span>
+ <span class="keyword">return</span> tokens<span class="gtkdoc opt">;</span>
+<span class="gtkdoc opt">}</span>
+
+<span class="gtkdoc slc">//this callback prints the received token and exits the mainloop</span>
+<span class="gtkdoc kwb">static void</span> <span class="function">response_callback</span><span class="gtkdoc opt">(</span>GSignondPlugin<span class="gtkdoc opt">*</span> plugin<span class="gtkdoc opt">,</span> GSignondSessionData<span class="gtkdoc opt">*</span> result<span class="gtkdoc opt">,</span>
+ gpointer user_data<span class="gtkdoc opt">)</span>
+<span class="gtkdoc opt">{</span>
+ GVariant<span class="gtkdoc opt">*</span> token_variant <span class="gtkdoc opt">=</span> <span class="function"><a href="http://gsignon-docs.accounts-sso.googlecode.com/git/gsignond/gsignond-GSignondDictionary.html#gsignond-dictionary-to-variant">gsignond_dictionary_to_variant</a></span><span class="gtkdoc opt">(</span>result<span class="gtkdoc opt">);</span>
+ gchar<span class="gtkdoc opt">*</span> token_str <span class="gtkdoc opt">=</span> <span class="function"><a href="http://library.gnome.org/devel/glib/unstable/glib-GVariant.html#g-variant-print">g_variant_print</a></span><span class="gtkdoc opt">(</span>token_variant<span class="gtkdoc opt">,</span> TRUE<span class="gtkdoc opt">);</span>
+ <span class="function"><a href="http://library.gnome.org/devel/glib/unstable/glib-Warnings-and-Assertions.html#g-print">g_print</a></span><span class="gtkdoc opt">(</span><span class="string">&quot;Authenticated successfully, got token:</span><span class="gtkdoc esc">\n</span><span class="string">%s</span><span class="gtkdoc esc">\n</span><span class="string">&quot;</span><span class="gtkdoc opt">,</span>
+ token_str<span class="gtkdoc opt">);</span>
+ <span class="function"><a href="http://library.gnome.org/devel/glib/unstable/glib-Memory-Allocation.html#g-free">g_free</a></span><span class="gtkdoc opt">(</span>token_str<span class="gtkdoc opt">);</span>
+ <span class="function"><a href="http://library.gnome.org/devel/glib/unstable/glib-GVariant.html#g-variant-unref">g_variant_unref</a></span><span class="gtkdoc opt">(</span>token_variant<span class="gtkdoc opt">);</span>
+ <span class="function"><a href="http://library.gnome.org/devel/glib/unstable/glib-The-Main-Event-Loop.html#g-main-loop-quit">g_main_loop_quit</a></span><span class="gtkdoc opt">(</span>user_data<span class="gtkdoc opt">);</span>
+<span class="gtkdoc opt">}</span>
+
+<span class="gtkdoc slc">//this function prints the content of the updated token cache</span>
+<span class="gtkdoc kwb">static void</span> <span class="function">store_callback</span><span class="gtkdoc opt">(</span>GSignondPlugin<span class="gtkdoc opt">*</span> plugin<span class="gtkdoc opt">,</span> GSignondSessionData<span class="gtkdoc opt">*</span> result<span class="gtkdoc opt">,</span>
+ gpointer user_data<span class="gtkdoc opt">)</span>
+<span class="gtkdoc opt">{</span>
+ GVariant<span class="gtkdoc opt">*</span> token_variant <span class="gtkdoc opt">=</span> <span class="function"><a href="http://gsignon-docs.accounts-sso.googlecode.com/git/gsignond/gsignond-GSignondDictionary.html#gsignond-dictionary-to-variant">gsignond_dictionary_to_variant</a></span><span class="gtkdoc opt">(</span>result<span class="gtkdoc opt">);</span>
+ gchar<span class="gtkdoc opt">*</span> token_str <span class="gtkdoc opt">=</span> <span class="function"><a href="http://library.gnome.org/devel/glib/unstable/glib-GVariant.html#g-variant-print">g_variant_print</a></span><span class="gtkdoc opt">(</span>token_variant<span class="gtkdoc opt">,</span> TRUE<span class="gtkdoc opt">);</span>
+ <span class="function"><a href="http://library.gnome.org/devel/glib/unstable/glib-Warnings-and-Assertions.html#g-print">g_print</a></span><span class="gtkdoc opt">(</span><span class="string">&quot;Should replace the token cache with the following:</span><span class="gtkdoc esc">\n</span><span class="string">%s</span><span class="gtkdoc esc">\n</span><span class="string">&quot;</span><span class="gtkdoc opt">,</span>
+ token_str<span class="gtkdoc opt">);</span>
+ <span class="function"><a href="http://library.gnome.org/devel/glib/unstable/glib-Memory-Allocation.html#g-free">g_free</a></span><span class="gtkdoc opt">(</span>token_str<span class="gtkdoc opt">);</span>
+ <span class="function"><a href="http://library.gnome.org/devel/glib/unstable/glib-GVariant.html#g-variant-unref">g_variant_unref</a></span><span class="gtkdoc opt">(</span>token_variant<span class="gtkdoc opt">);</span>
+<span class="gtkdoc opt">}</span>
+
+<span class="gtkdoc slc">//this function shows what the UI interaction component needs to do</span>
+<span class="gtkdoc kwb">static void</span> <span class="function">user_action_required_callback</span><span class="gtkdoc opt">(</span>GSignondPlugin<span class="gtkdoc opt">*</span> plugin<span class="gtkdoc opt">,</span>
+ GSignondSignonuiData<span class="gtkdoc opt">*</span> ui_request<span class="gtkdoc opt">,</span>
+ gpointer user_data<span class="gtkdoc opt">)</span>
+<span class="gtkdoc opt">{</span>
+ <span class="gtkdoc slc">// ui_request typically contains a URI that needs to be opened, </span>
+ <span class="gtkdoc slc">// and a redirect URI that needs to be 'captured' by the user-agent and </span>
+ <span class="gtkdoc slc">// reported back to the plugin</span>
+ <span class="gtkdoc slc">// in practice the ui_request needs to be handed over to a user-agent</span>
+ <span class="gtkdoc slc">// but here we simply print it</span>
+ GVariant<span class="gtkdoc opt">*</span> token_variant <span class="gtkdoc opt">=</span> <span class="function"><a href="http://gsignon-docs.accounts-sso.googlecode.com/git/gsignond/gsignond-GSignondDictionary.html#gsignond-dictionary-to-variant">gsignond_dictionary_to_variant</a></span><span class="gtkdoc opt">(</span>ui_request<span class="gtkdoc opt">);</span>
+ gchar<span class="gtkdoc opt">*</span> token_str <span class="gtkdoc opt">=</span> <span class="function"><a href="http://library.gnome.org/devel/glib/unstable/glib-GVariant.html#g-variant-print">g_variant_print</a></span><span class="gtkdoc opt">(</span>token_variant<span class="gtkdoc opt">,</span> TRUE<span class="gtkdoc opt">);</span>
+ <span class="function"><a href="http://library.gnome.org/devel/glib/unstable/glib-Warnings-and-Assertions.html#g-print">g_print</a></span><span class="gtkdoc opt">(</span><span class="string">&quot;Got a UI interaction request:</span><span class="gtkdoc esc">\n</span><span class="string">%s</span><span class="gtkdoc esc">\n</span><span class="string">&quot;</span><span class="gtkdoc opt">,</span>
+ token_str<span class="gtkdoc opt">);</span>
+ <span class="function"><a href="http://library.gnome.org/devel/glib/unstable/glib-Memory-Allocation.html#g-free">g_free</a></span><span class="gtkdoc opt">(</span>token_str<span class="gtkdoc opt">);</span>
+ <span class="function"><a href="http://library.gnome.org/devel/glib/unstable/glib-GVariant.html#g-variant-unref">g_variant_unref</a></span><span class="gtkdoc opt">(</span>token_variant<span class="gtkdoc opt">);</span>
+
+ <span class="gtkdoc slc">// in practice the following should be received from a user-agent,</span>
+ <span class="gtkdoc slc">// but in this example for the sake of simplicity we report the hardcoded redirect</span>
+ <span class="gtkdoc slc">// URI (with additional parameters) immidiately back to the plugin</span>
+ GSignondSignonuiData<span class="gtkdoc opt">*</span> ui_data <span class="gtkdoc opt">=</span> <span class="function"><a href="http://gsignon-docs.accounts-sso.googlecode.com/git/gsignond/gsignond-GSignondDictionary.html#gsignond-dictionary-new">gsignond_dictionary_new</a></span><span class="gtkdoc opt">();</span>
+ <span class="function"><a href="http://gsignon-docs.accounts-sso.googlecode.com/git/gsignond/gsignond-GSignondSignonuiData.html#gsignond-signonui-data-set-url-response">gsignond_signonui_data_set_url_response</a></span><span class="gtkdoc opt">(</span>ui_data<span class="gtkdoc opt">,</span>
+<span class="string">&quot;http://somehost/login.html?state=somerandomstate&amp;code=somerandomcode&quot;</span><span class="gtkdoc opt">);</span>
+ <span class="function"><a href="http://gsignon-docs.accounts-sso.googlecode.com/git/gsignond/gsignond-GSignondSignonuiData.html#gsignond-signonui-data-set-query-error">gsignond_signonui_data_set_query_error</a></span><span class="gtkdoc opt">(</span>ui_data<span class="gtkdoc opt">,</span> SIGNONUI_ERROR_NONE<span class="gtkdoc opt">);</span>
+
+ <span class="function"><a href="http://gsignon-docs.accounts-sso.googlecode.com/git/gsignond/GSignondPlugin.html#gsignond-plugin-user-action-finished">gsignond_plugin_user_action_finished</a></span><span class="gtkdoc opt">(</span>plugin<span class="gtkdoc opt">,</span> ui_data<span class="gtkdoc opt">);</span>
+ <span class="function"><a href="http://gsignon-docs.accounts-sso.googlecode.com/git/gsignond/gsignond-GSignondDictionary.html#gsignond-dictionary-unref">gsignond_dictionary_unref</a></span><span class="gtkdoc opt">(</span>ui_data<span class="gtkdoc opt">);</span>
+<span class="gtkdoc opt">}</span>
+
+<span class="gtkdoc slc">// print an error and exit the mainloop</span>
+<span class="gtkdoc kwb">static void</span> <span class="function">error_callback</span><span class="gtkdoc opt">(</span>GSignondPlugin<span class="gtkdoc opt">*</span> plugin<span class="gtkdoc opt">,</span> GError<span class="gtkdoc opt">*</span> error<span class="gtkdoc opt">,</span>
+ gpointer user_data<span class="gtkdoc opt">)</span>
+<span class="gtkdoc opt">{</span>
+ <span class="function"><a href="http://library.gnome.org/devel/glib/unstable/glib-Warnings-and-Assertions.html#g-print">g_print</a></span><span class="gtkdoc opt">(</span><span class="string">&quot;Got an error: %s</span><span class="gtkdoc esc">\n</span><span class="string">&quot;</span><span class="gtkdoc opt">,</span> error<span class="gtkdoc opt">-&gt;</span>message<span class="gtkdoc opt">);</span>
+ <span class="function"><a href="http://library.gnome.org/devel/glib/unstable/glib-The-Main-Event-Loop.html#g-main-loop-quit">g_main_loop_quit</a></span><span class="gtkdoc opt">(</span>user_data<span class="gtkdoc opt">);</span>
+<span class="gtkdoc opt">}</span>
+
+<span class="gtkdoc kwb">int</span> <span class="function">main</span> <span class="gtkdoc opt">(</span><span class="gtkdoc kwb">void</span><span class="gtkdoc opt">)</span>
+<span class="gtkdoc opt">{</span>
+<span class="gtkdoc ppc">#if !GLIB_CHECK_VERSION (2, 36, 0)</span>
+ <span class="function"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-Type-Information.html#g-type-init">g_type_init</a></span> <span class="gtkdoc opt">();</span>
+<span class="gtkdoc ppc">#endif</span>
+
+ gpointer plugin <span class="gtkdoc opt">=</span> <span class="function"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#g-object-new">g_object_new</a></span><span class="gtkdoc opt">(</span><span class="function">gsignond_oauth_plugin_get_type</span><span class="gtkdoc opt">(),</span> NULL<span class="gtkdoc opt">);</span>
+
+ GMainLoop <span class="gtkdoc opt">*</span>main_loop <span class="gtkdoc opt">=</span> <span class="function"><a href="http://library.gnome.org/devel/glib/unstable/glib-The-Main-Event-Loop.html#g-main-loop-new">g_main_loop_new</a></span> <span class="gtkdoc opt">(</span>NULL<span class="gtkdoc opt">,</span> FALSE<span class="gtkdoc opt">);</span>
+
+ <span class="gtkdoc slc">//connect to various signals of the plugin object</span>
+ <span class="function"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#g-signal-connect">g_signal_connect</a></span><span class="gtkdoc opt">(</span>plugin<span class="gtkdoc opt">,</span> <span class="string">&quot;response-final&quot;</span><span class="gtkdoc opt">,</span> <span class="function"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-Closures.html#G-CALLBACK:CAPS">G_CALLBACK</a></span><span class="gtkdoc opt">(</span>response_callback<span class="gtkdoc opt">),</span> main_loop<span class="gtkdoc opt">);</span>
+ <span class="function"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#g-signal-connect">g_signal_connect</a></span><span class="gtkdoc opt">(</span>plugin<span class="gtkdoc opt">,</span> <span class="string">&quot;user-action-required&quot;</span><span class="gtkdoc opt">,</span>
+ <span class="function"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-Closures.html#G-CALLBACK:CAPS">G_CALLBACK</a></span><span class="gtkdoc opt">(</span>user_action_required_callback<span class="gtkdoc opt">),</span> NULL<span class="gtkdoc opt">);</span>
+ <span class="function"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#g-signal-connect">g_signal_connect</a></span><span class="gtkdoc opt">(</span>plugin<span class="gtkdoc opt">,</span> <span class="string">&quot;store&quot;</span><span class="gtkdoc opt">,</span> <span class="function"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-Closures.html#G-CALLBACK:CAPS">G_CALLBACK</a></span><span class="gtkdoc opt">(</span>store_callback<span class="gtkdoc opt">),</span> NULL<span class="gtkdoc opt">);</span>
+ <span class="function"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#g-signal-connect">g_signal_connect</a></span><span class="gtkdoc opt">(</span>plugin<span class="gtkdoc opt">,</span> <span class="string">&quot;error&quot;</span><span class="gtkdoc opt">,</span> <span class="function"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-Closures.html#G-CALLBACK:CAPS">G_CALLBACK</a></span><span class="gtkdoc opt">(</span>error_callback<span class="gtkdoc opt">),</span> main_loop<span class="gtkdoc opt">);</span>
+
+ GSignondSessionData<span class="gtkdoc opt">*</span> data <span class="gtkdoc opt">=</span> <span class="function"><a href="http://gsignon-docs.accounts-sso.googlecode.com/git/gsignond/gsignond-GSignondDictionary.html#gsignond-dictionary-new">gsignond_dictionary_new</a></span><span class="gtkdoc opt">();</span>
+ GSignondDictionary<span class="gtkdoc opt">*</span> token_cache <span class="gtkdoc opt">=</span> <span class="function">make_token_cache</span><span class="gtkdoc opt">();</span>
+
+ <span class="gtkdoc slc">//fill in necessary data for OAuth2 authorization</span>
+ <span class="function"><a href="http://gsignon-docs.accounts-sso.googlecode.com/git/gsignond/gsignond-GSignondDictionary.html#gsignond-dictionary-set-string">gsignond_dictionary_set_string</a></span><span class="gtkdoc opt">(</span>data<span class="gtkdoc opt">,</span> <span class="string">&quot;ClientId&quot;</span><span class="gtkdoc opt">,</span> <span class="string">&quot;megaclient&quot;</span><span class="gtkdoc opt">);</span>
+ <span class="function"><a href="http://gsignon-docs.accounts-sso.googlecode.com/git/gsignond/gsignond-GSignondSessionData.html#gsignond-session-data-set-ui-policy">gsignond_session_data_set_ui_policy</a></span><span class="gtkdoc opt">(</span>data<span class="gtkdoc opt">,</span> GSIGNOND_UI_POLICY_DEFAULT<span class="gtkdoc opt">);</span>
+ <span class="function"><a href="http://gsignon-docs.accounts-sso.googlecode.com/git/gsignond/gsignond-GSignondDictionary.html#gsignond-dictionary-set-string">gsignond_dictionary_set_string</a></span><span class="gtkdoc opt">(</span>data<span class="gtkdoc opt">,</span> <span class="string">&quot;TokenHost&quot;</span><span class="gtkdoc opt">,</span> <span class="string">&quot;somehost&quot;</span><span class="gtkdoc opt">);</span>
+ <span class="function"><a href="http://gsignon-docs.accounts-sso.googlecode.com/git/gsignond/gsignond-GSignondDictionary.html#gsignond-dictionary-set-string">gsignond_dictionary_set_string</a></span><span class="gtkdoc opt">(</span>data<span class="gtkdoc opt">,</span> <span class="string">&quot;TokenPath&quot;</span><span class="gtkdoc opt">,</span> <span class="string">&quot;/tokenpath&quot;</span><span class="gtkdoc opt">);</span>
+ <span class="function"><a href="http://gsignon-docs.accounts-sso.googlecode.com/git/gsignond/gsignond-GSignondDictionary.html#gsignond-dictionary-set-string">gsignond_dictionary_set_string</a></span><span class="gtkdoc opt">(</span>data<span class="gtkdoc opt">,</span> <span class="string">&quot;Scope&quot;</span><span class="gtkdoc opt">,</span> <span class="string">&quot;Photos Videos&quot;</span><span class="gtkdoc opt">);</span>
+
+ <span class="function"><a href="http://gsignon-docs.accounts-sso.googlecode.com/git/gsignond/gsignond-GSignondDictionary.html#gsignond-dictionary-set-string">gsignond_dictionary_set_string</a></span><span class="gtkdoc opt">(</span>data<span class="gtkdoc opt">,</span> <span class="string">&quot;AuthHost&quot;</span><span class="gtkdoc opt">,</span> <span class="string">&quot;somehost&quot;</span><span class="gtkdoc opt">);</span>
+ <span class="function"><a href="http://gsignon-docs.accounts-sso.googlecode.com/git/gsignond/gsignond-GSignondDictionary.html#gsignond-dictionary-set-string">gsignond_dictionary_set_string</a></span><span class="gtkdoc opt">(</span>data<span class="gtkdoc opt">,</span> <span class="string">&quot;AuthPath&quot;</span><span class="gtkdoc opt">,</span> <span class="string">&quot;/somepath&quot;</span><span class="gtkdoc opt">);</span>
+
+ <span class="gtkdoc kwb">const</span> gchar <span class="gtkdoc opt">*</span>realm_list<span class="gtkdoc opt">[] = {</span> <span class="string">&quot;somehost&quot;</span><span class="gtkdoc opt">,</span> NULL <span class="gtkdoc opt">};</span>
+ GSequence <span class="gtkdoc opt">*</span>allowed_realms <span class="gtkdoc opt">=</span> <span class="function"><a href="http://gsignon-docs.accounts-sso.googlecode.com/git/gsignond/gsignond-Utility-functions.html#gsignond-copy-array-to-sequence">gsignond_copy_array_to_sequence</a></span><span class="gtkdoc opt">(</span>realm_list<span class="gtkdoc opt">);</span>
+ <span class="function"><a href="http://gsignon-docs.accounts-sso.googlecode.com/git/gsignond/gsignond-GSignondSessionData.html#gsignond-session-data-set-allowed-realms">gsignond_session_data_set_allowed_realms</a></span><span class="gtkdoc opt">(</span>data<span class="gtkdoc opt">,</span> allowed_realms<span class="gtkdoc opt">);</span>
+ <span class="function"><a href="http://library.gnome.org/devel/glib/unstable/glib-Sequences.html#g-sequence-free">g_sequence_free</a></span><span class="gtkdoc opt">(</span>allowed_realms<span class="gtkdoc opt">);</span>
+
+ <span class="gtkdoc slc">//use authorization code grant for this example as it's the most complex</span>
+ <span class="gtkdoc slc">//of those provided in OAuth2 spec</span>
+ <span class="function"><a href="http://gsignon-docs.accounts-sso.googlecode.com/git/gsignond/gsignond-GSignondDictionary.html#gsignond-dictionary-set-string">gsignond_dictionary_set_string</a></span><span class="gtkdoc opt">(</span>data<span class="gtkdoc opt">,</span> <span class="string">&quot;ResponseType&quot;</span><span class="gtkdoc opt">,</span> <span class="string">&quot;code&quot;</span><span class="gtkdoc opt">);</span>
+ <span class="function"><a href="http://gsignon-docs.accounts-sso.googlecode.com/git/gsignond/gsignond-GSignondDictionary.html#gsignond-dictionary-set-string">gsignond_dictionary_set_string</a></span><span class="gtkdoc opt">(</span>data<span class="gtkdoc opt">,</span> <span class="string">&quot;RedirectUri&quot;</span><span class="gtkdoc opt">,</span> <span class="string">&quot;http://somehost/login.html&quot;</span><span class="gtkdoc opt">);</span>
+
+ <span class="gtkdoc slc">//start the authorization and run the mainloop</span>
+ <span class="gtkdoc slc">//any further processing happens in signal callbacks</span>
+ <span class="function"><a href="http://gsignon-docs.accounts-sso.googlecode.com/git/gsignond/GSignondPlugin.html#gsignond-plugin-request-initial">gsignond_plugin_request_initial</a></span><span class="gtkdoc opt">(</span>plugin<span class="gtkdoc opt">,</span> data<span class="gtkdoc opt">,</span> token_cache<span class="gtkdoc opt">,</span> <span class="string">&quot;oauth2&quot;</span><span class="gtkdoc opt">);</span>
+ <span class="function"><a href="http://gsignon-docs.accounts-sso.googlecode.com/git/gsignond/gsignond-GSignondDictionary.html#gsignond-dictionary-unref">gsignond_dictionary_unref</a></span><span class="gtkdoc opt">(</span>data<span class="gtkdoc opt">);</span>
+ <span class="function"><a href="http://gsignon-docs.accounts-sso.googlecode.com/git/gsignond/gsignond-GSignondDictionary.html#gsignond-dictionary-unref">gsignond_dictionary_unref</a></span><span class="gtkdoc opt">(</span>token_cache<span class="gtkdoc opt">);</span>
+
+ <span class="function"><a href="http://library.gnome.org/devel/glib/unstable/glib-The-Main-Event-Loop.html#g-main-loop-run">g_main_loop_run</a></span> <span class="gtkdoc opt">(</span>main_loop<span class="gtkdoc opt">);</span>
+
+ <span class="function"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#g-object-unref">g_object_unref</a></span><span class="gtkdoc opt">(</span>plugin<span class="gtkdoc opt">);</span>
+ <span class="function"><a href="http://library.gnome.org/devel/glib/unstable/glib-The-Main-Event-Loop.html#g-main-loop-unref">g_main_loop_unref</a></span><span class="gtkdoc opt">(</span>main_loop<span class="gtkdoc opt">);</span>
+
+ <span class="keyword">return</span> <span class="number">0</span><span class="gtkdoc opt">;</span>
+<span class="gtkdoc opt">}</span></pre></td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+</div>
+<br class="example-break"><div class="refsect1">
+<a name="id-1.2.2.6.15"></a><h2>HTTP-related parameters in requests</h2>
+</div>
+<p>Both OAuth1 and OAuth2 are using HTTP requests for authorization. It's possible
+to use the following entries in <a href="http://gsignon-docs.accounts-sso.googlecode.com/git/gsignond/GSignondPlugin.html#gsignond-plugin-request-initial"><code class="function">gsignond_plugin_request_initial()</code></a> <em class="parameter"><code>session_data</code></em>
+
+parameter to influence those requests:</p>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<li class="listitem"><p>gsignond_session_data_set_network_proxy() provides a HTTP proxy to use.
+If this parameter is not set, the system proxy configuration is used.</p></li>
+<li class="listitem"><p>"SslStrict" key whose value is a gboolean. If set to FALSE, then server
+certificates which are invalid (for example, expired, or self-signed)
+will not be rejected. If set to TRUE or not set, then server certificates
+have to be valid.</p></li>
+</ul></div>
+<div class="refsect1">
+<a name="id-1.2.2.6.18"></a><h2>OAuth version 1 parameters for authorization</h2>
+</div>
+<p>Where not specified otherwise, parameters are strings.</p>
+<div class="refsect2">
+<a name="id-1.2.2.6.20"></a><h3>Parameters in <a href="http://gsignon-docs.accounts-sso.googlecode.com/git/gsignond/GSignondPlugin.html#gsignond-plugin-request-initial"><code class="function">gsignond_plugin_request_initial()</code></a> <em class="parameter"><code>identity_method_cache</code></em>
+</h3>
+</div>
+<p>This parameter contains a cache of previously received tokens in the form of
+a <span class="type">GSignondDictionary</span>. Tokens are indexed by a ConsumerKey in the dictionary,
+and each token is itself a <span class="type">GSignondDictionary</span>, with keys and values described
+below in the token format section.</p>
+<hr>
+<div class="refsect2">
+<a name="id-1.2.2.6.22"></a><h3>Parameters in <a href="http://gsignon-docs.accounts-sso.googlecode.com/git/gsignond/GSignondPlugin.html#gsignond-plugin-request-initial"><code class="function">gsignond_plugin_request_initial()</code></a> <em class="parameter"><code>session_data</code></em>
+</h3>
+</div>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<li class="listitem"><p>"ConsumerKey" (mandatory) - the identifier portion of the client
+credentials (equivalent to a username). Refer to <a class="ulink" href="http://tools.ietf.org/html/rfc5849#section-3.1" target="_top">RFC5849 section 3.1</a></p></li>
+<li class="listitem"><p>gsignond_session_data_set_ui_policy() (mandatory) - if set to <code class="literal">GSIGNOND_UI_POLICY_DEFAULT</code>
+a default authorization sequence is used, which may involve re-using a
+previously cached token without making any authorization server requests at all.
+If set to <code class="literal">GSIGNOND_UI_POLICY_REQUEST_PASSWORD</code> any cached token corresponding
+to the ConsumerKey is discarded and the authorization procedure is started
+from the beginning.</p></li>
+<li class="listitem"><p>gsignond_session_data_set_allowed_realms (mandatory) - a list of domains that
+RequestEndpoint, AuthorizationEndpoint and TokenEndpoint hosts must be in. There
+authorization sequence will fail if any of the endpoints is not in this list.</p></li>
+<li class="listitem">
+<p>"Realm" (optional) - a requested realm for the token, as specified in</p>
+<a class="ulink" href="http://tools.ietf.org/html/rfc5849#section-3.5.1" target="_top">RFC5849 section 3.5.1.</a>
+</li>
+<li class="listitem">
+<p>"RequestEndpoint" (mandatory) - a URL that specifies an endpoint used by
+the plugin to obtain a set of temporary credentials, as specified in </p>
+<a class="ulink" href="http://tools.ietf.org/html/rfc5849#section-2" target="_top">RFC5849 section 2.</a><p>The endpoint must use HTTPS scheme.</p>
+</li>
+<li class="listitem">
+<p>"Callback" (mandatory) - a callback URI where the user is redirected after
+completing the Resource Owner Authorization step, as specified in </p>
+<a class="ulink" href="http://tools.ietf.org/html/rfc5849#section-2" target="_top">RFC5849 section 2.</a>
+</li>
+<li class="listitem"><p>"SignatureMethod" (mandatory) - one of "PLAINTEXT", "HMAC-SHA1", or
+"RSA-SHA1" - a method used used by the plugin to sign the requests.
+Specified in <a class="ulink" href="http://tools.ietf.org/html/rfc5849#section-3.4" target="_top">RFC5849 section 3.4.</a></p></li>
+<li class="listitem"><p>"ConsumerSecret" (optional) - the shared secret portion of the client
+credentials, used to sign requests to the server when using PLAINTEXT or
+HMAC-SHA1 signature methods. An empty consumer secret is used if it's not supplied.</p></li>
+<li class="listitem"><p>"RSAPrivateKey" (mandatory, if RSA-SHA1 signature method is used) - PEM
+formatted X.509 private key, used to sign requests to the server when using
+RSA-SHA1 signature methods.</p></li>
+<li class="listitem">
+<p>"AuthorizationEndpoint" (mandatory) - Resource Owner Authorization endpoint,
+to which the user (resource owner) is redirected to grant authorization, as specified in </p>
+<a class="ulink" href="http://tools.ietf.org/html/rfc5849#section-2" target="_top">RFC5849 section 2.</a>
+</li>
+<li class="listitem"><p>gsignond_session_data_set_username() and <a href="http://gsignon-docs.accounts-sso.googlecode.com/git/gsignond/gsignond-GSignondSessionData.html#gsignond-session-data-set-secret"><code class="function">gsignond_session_data_set_secret()</code></a>
+(optional) - these two parameters may be used when opening the authorization
+endpoint URI to initialize corresponding fields on the webpage.</p></li>
+<li class="listitem">
+<p>"TokenEndpoint" (mandatory) - a URL that specifies an endpoint used by
+the plugin to obtain a set of access credentials, as specified in </p>
+<a class="ulink" href="http://tools.ietf.org/html/rfc5849#section-2" target="_top">RFC5849 section 2.</a>
+</li>
+</ul></div>
+<hr>
+<div class="refsect2">
+<a name="id-1.2.2.6.24"></a><h3>Parameters for <a href="http://gsignon-docs.accounts-sso.googlecode.com/git/gsignond/GSignondPlugin.html#GSignondPlugin-user-action-required"><span class="type">“user-action-required”</span></a> signal issued by plugin</h3>
+</div>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<li class="listitem"><p>gsignond_signonui_data_set_open_url() (mandatory) - a URI that should be opened in a
+user-agent (browser) for the user (resource owner) to authenticate herself.
+This URI is taken from "AuthorizationEndpoint" parameter of <a href="http://gsignon-docs.accounts-sso.googlecode.com/git/gsignond/GSignondPlugin.html#gsignond-plugin-request-initial"><code class="function">gsignond_plugin_request_initial()</code></a>
+and additional parameters may be appended to the query component.</p></li>
+<li class="listitem"><p>gsignond_signonui_data_set_final_url() (mandatory) - a URI where the user-agent should
+be redirected after a successfull authentication by the resource owner. This
+expected URI is taken from the "Callback" parameter of <a href="http://gsignon-docs.accounts-sso.googlecode.com/git/gsignond/GSignondPlugin.html#gsignond-plugin-request-initial"><code class="function">gsignond_plugin_request_initial()</code></a> call
+to the plugin.The actual (vs. expected) URI may contain additional parameters in the query
+component of the URI that are used to continue the authorization process.</p></li>
+<li class="listitem"><p>gsignond_signonui_data_set_username() and <a href="http://gsignon-docs.accounts-sso.googlecode.com/git/gsignond/gsignond-GSignondSignonuiData.html#gsignond-signonui-data-set-password"><code class="function">gsignond_signonui_data_set_password()</code></a>
+(optional) - these two parameters may be used when opening the URI to initialize
+corresponding fields on the webpage.</p></li>
+</ul></div>
+<hr>
+<div class="refsect2">
+<a name="id-1.2.2.6.26"></a><h3>Parameters in <a href="http://gsignon-docs.accounts-sso.googlecode.com/git/gsignond/GSignondPlugin.html#gsignond-plugin-user-action-finished"><code class="function">gsignond_plugin_user_action_finished()</code></a> <em class="parameter"><code>ui_data</code></em> </h3>
+</div>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<li class="listitem"><p>gsignond_signonui_data_set_query_error() (mandatory) - indicates if there
+was an error in UI interaction and what it was. May be <code class="literal">SIGNONUI_ERROR_NONE</code>
+(which means no error), <code class="literal">SIGNONUI_ERROR_CANCELED</code> or any other error.</p></li>
+<li class="listitem"><p>gsignond_signonui_data_get_url_response() (mandatory) - the URI that the user-agent
+was redirected to. The callback URI supplied in parameters of
+<a href="http://gsignon-docs.accounts-sso.googlecode.com/git/gsignond/GSignondPlugin.html#gsignond-plugin-request-initial"><code class="function">gsignond_plugin_request_initial()</code></a> must be a prefix of this URI. The URI also
+has to contain parameters in the query component that are necessary to continue
+the authorization sequence.</p></li>
+</ul></div>
+<hr>
+<div class="refsect2">
+<a name="id-1.2.2.6.28"></a><h3>Token and its parameters in <a href="http://gsignon-docs.accounts-sso.googlecode.com/git/gsignond/GSignondPlugin.html#GSignondPlugin-response-final"><span class="type">“response-final”</span></a> signal</h3>
+</div>
+<p>gsignond_plugin_response_final() signal concludes the authorization process
+and returns a <span class="type">GSignondDictionary</span> parameter that contains the access token
+and some token parameters:</p>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<li class="listitem"><p>"AccessToken" (mandatory) - the token itself</p></li>
+<li class="listitem"><p>"TokenSecret" (mandatory) - the token shared-secret, used by the application
+to sign requests for protected resources</p></li>
+<li class="listitem">
+<p>"Realm" (optional) - the token realm, as specified in</p>
+<a class="ulink" href="http://tools.ietf.org/html/rfc5849#section-3.5.1" target="_top">RFC5849 section 3.5.1.</a>
+</li>
+<li class="listitem"><p>"TokenParameters" (mandatory) - a <span class="type">GSignondDictionary</span> containing any
+additional parameters returned by the server together with the access token.
+This dictionary may be empty, or
+if it's not, it typically contains service-specific, non-standardized keys and
+values.</p></li>
+</ul></div>
+<div class="refsect1">
+<a name="id-1.2.2.6.31"></a><h2>OAuth version 2 parameters for authorization</h2>
+</div>
+<p>Where not specified otherwise, parameters are strings.</p>
+<hr>
+<div class="refsect2">
+<a name="id-1.2.2.6.33"></a><h3>Parameters in <a href="http://gsignon-docs.accounts-sso.googlecode.com/git/gsignond/GSignondPlugin.html#gsignond-plugin-request-initial"><code class="function">gsignond_plugin_request_initial()</code></a> <em class="parameter"><code>identity_method_cache</code></em>
+</h3>
+</div>
+<p>This parameter contains a cache of previously received tokens in the form of
+a <span class="type">GSignondDictionary</span>. The keys are tokens' ClientId and values are also
+<span class="type">GSignondDictionary</span>. Those second-level dictionaries contain token scopes as keys
+and tokens as values. This two-level approach is done to allow caching several
+tokens with unrelated scopes per client.</p>
+<p>Finally, each token is itself a <span class="type">GSignondDictionary</span>, with keys and values described
+below in the token format section.</p>
+<hr>
+<div class="refsect2">
+<a name="id-1.2.2.6.36"></a><h3>Parameters in <a href="http://gsignon-docs.accounts-sso.googlecode.com/git/gsignond/GSignondPlugin.html#gsignond-plugin-request-initial"><code class="function">gsignond_plugin_request_initial()</code></a> <em class="parameter"><code>session_data</code></em>
+</h3>
+</div>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<li class="listitem">
+<p>"ClientId" (mandatory) - client identifier as described in </p>
+<a class="ulink" href="http://tools.ietf.org/html/rfc6749#section-2.2" target="_top">RFC6749 section 2.2.</a>
+</li>
+<li class="listitem">
+<p>"ClientSecret" (optional) - client password as described in</p>
+<a class="ulink" href="http://tools.ietf.org/html/rfc6749#section-2.3" target="_top">RFC6749 section 2.3.</a>
+</li>
+<li class="listitem"><p>gsignond_session_data_set_ui_policy() (mandatory) - if set to <code class="literal">GSIGNOND_UI_POLICY_DEFAULT</code>
+a default authorization sequence is used, which may involve re-using a
+previously cached token without making any authorization server requests at all.
+If set to <code class="literal">GSIGNOND_UI_POLICY_REQUEST_PASSWORD</code> any cached token information
+(including a refresh token) corresponding to the ClientId is discarded and
+the authorization procedure is started from the beginning.</p></li>
+<li class="listitem"><p>gsignond_session_data_set_allowed_realms (mandatory) - a list of domains that
+AuthHost and TokenHost must be in. The authorization sequence will fail if
+either of the hosts is not in this list.</p></li>
+<li class="listitem">
+<p>"Scope" (optional) - a space-separated list of scopes that are requested
+for the token, as specified in </p>
+<a class="ulink" href="http://tools.ietf.org/html/rfc6749#section-3.3" target="_top">RFC6749 section 3.3.</a>
+</li>
+<li class="listitem">
+<p>"ForceClientAuthViaRequestBody" (optional) - by default the clients are authenticated via
+HTTP Basic authorization mechanism, as described in </p>
+<a class="ulink" href="http://tools.ietf.org/html/rfc6749#section-2.3.1" target="_top">RFC6749 section 2.3.1.</a><p>The RFC stipulates that all OAuth 2 servers must support this, however, it
+was discovered that at least Google and Facebook require
+client authorization in the request body (which is, according to standard,
+optional and not recommended). If set to TRUE, this parameter forces this
+non-compliant client authorization to be used.</p>
+</li>
+<li class="listitem"><p>"ForceTokenRefresh" (optional) - normally if the token cache contains a
+suitable token, it is returned immediately. If this parameter is set to TRUE,
+then a refresh token is always used instead to obtain a new token.</p></li>
+</ul></div>
+<div class="refsect3">
+<a name="id-1.2.2.6.38"></a><h4>Parameters used for authorization code grant or implicit grant flows</h4>
+</div>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<li class="listitem">
+<p>"ResponseType" (mandatory) - should be set to "code" or "token" as described in </p>
+<a class="ulink" href="http://tools.ietf.org/html/rfc6749#section-3.1.1" target="_top">RFC6749 section 3.1.1.</a>
+</li>
+<li class="listitem">
+<p>"AuthHost" (mandatory) - hostname component of the authorization endpoint URI, as described in</p>
+<a class="ulink" href="http://tools.ietf.org/html/rfc6749#section-3.1" target="_top">RFC6749 section 3.1.</a>
+</li>
+<li class="listitem">
+<p>"AuthPath" (mandatory) - pathname component of the authorization endpoint URI, as described in</p>
+<a class="ulink" href="http://tools.ietf.org/html/rfc6749#section-3.1" target="_top">RFC6749 section 3.1.</a>
+</li>
+<li class="listitem">
+<p>"AuthPort" (optional) - port component of the authorization endpoint URI, as described in</p>
+<a class="ulink" href="http://tools.ietf.org/html/rfc6749#section-3.1" target="_top">RFC6749 section 3.1.</a><p>If not specified, standard https port is used.</p>
+</li>
+<li class="listitem">
+<p>"AuthQuery" (optional) - query component of the authorization endpoint URI, as described in</p>
+<a class="ulink" href="http://tools.ietf.org/html/rfc6749#section-3.1" target="_top">RFC6749 section 3.1.</a>
+</li>
+<li class="listitem">
+<p>"RedirectUri" (optional) - redirection endpoint as described in</p>
+<a class="ulink" href="http://tools.ietf.org/html/rfc6749#section-3.1.2" target="_top">RFC6749 section 3.1.2.</a>
+</li>
+<li class="listitem"><p>gsignond_session_data_set_username() and <a href="http://gsignon-docs.accounts-sso.googlecode.com/git/gsignond/gsignond-GSignondSessionData.html#gsignond-session-data-set-secret"><code class="function">gsignond_session_data_set_secret()</code></a>
+(optional) - these two parameters may be used by UI implementation to
+initialize corresponding fields on the webpage when opening the authorization
+endpoint URI. Also see "UseLoginHint".</p></li>
+<li class="listitem">
+<p>"UseLoginHint" (optional) - if set to TRUE, add the username (see above) to
+the authorization URI as a "login_hint" parameter, so that the authorization
+endpoint can pre-fill the login box, or selecte the proper multi-login session.
+This is a Google extension specified at </p>
+<a class="ulink" href="https://developers.google.com/accounts/docs/OAuth2InstalledApp#formingtheurl" target="_top">
+https://developers.google.com/accounts/docs/OAuth2InstalledApp#formingtheurl</a>.
+</li>
+<li class="listitem">
+<p>"UseDisplay" (optional) - if set to a string, the parameter value is added to the authorization
+URI as a "display" parameter. This is a Facebook extension specified at</p>
+<a class="ulink" href="https://developers.facebook.com/docs/reference/dialogs/oauth/" target="_top">
+https://developers.facebook.com/docs/reference/dialogs/oauth/</a><p>and it affects the way the authorization page looks. Typical values are "page",
+"popup" and "touch".</p>
+</li>
+</ul></div>
+<div class="refsect3">
+<a name="id-1.2.2.6.40"></a><h4>Parameters used for resource owner password credentials grant flow</h4>
+</div>
+<p>Refer to <a class="ulink" href="http://tools.ietf.org/html/rfc6749#section-4.3" target="_top">RFC6749 section 4.3.</a></p>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<li class="listitem"><p>"GrantType" (mandatory) - must be set to "password"</p></li>
+<li class="listitem"><p>gsignond_session_data_set_username() and <a href="http://gsignon-docs.accounts-sso.googlecode.com/git/gsignond/gsignond-GSignondSessionData.html#gsignond-session-data-set-secret"><code class="function">gsignond_session_data_set_secret()</code></a>
+(mandatory) - resource owner username and password</p></li>
+</ul></div>
+<div class="refsect3">
+<a name="id-1.2.2.6.43"></a><h4>Parameters used for client credentials grant flow</h4>
+</div>
+<p>Refer to <a class="ulink" href="http://tools.ietf.org/html/rfc6749#section-4.4" target="_top">RFC6749 section 4.4.</a></p>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>"GrantType" (mandatory) - must be set to "client_credentials"</p></li></ul></div>
+<div class="refsect3">
+<a name="id-1.2.2.6.46"></a><h4>Parameters used for authorization code, resource owner
+password or client credentials grant flows (but not implicit grant flow) </h4>
+</div>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<li class="listitem">
+<p>"TokenHost" (mandatory) - hostname component of the token endpoint URI, as described in</p>
+<a class="ulink" href="http://tools.ietf.org/html/rfc6749#section-3.2" target="_top">RFC6749 section 3.2.</a>
+</li>
+<li class="listitem">
+<p>"TokenPath" (mandatory) - pathname component of the token endpoint URI, as described in</p>
+<a class="ulink" href="http://tools.ietf.org/html/rfc6749#section-3.2" target="_top">RFC6749 section 3.2.</a>
+</li>
+<li class="listitem">
+<p>"TokenPort" (optional) - port component of the token endpoint URI, as described in</p>
+<a class="ulink" href="http://tools.ietf.org/html/rfc6749#section-3.2" target="_top">RFC6749 section 3.2.</a><p>If not specified, standard https port is used.</p>
+</li>
+<li class="listitem">
+<p>"TokenQuery" (optional) - query component of the token endpoint URI, as described in</p>
+<a class="ulink" href="http://tools.ietf.org/html/rfc6749#section-3.2" target="_top">RFC6749 section 3.2.</a>
+</li>
+</ul></div>
+<hr>
+<div class="refsect2">
+<a name="id-1.2.2.6.48"></a><h3>Parameters for <a href="http://gsignon-docs.accounts-sso.googlecode.com/git/gsignond/GSignondPlugin.html#GSignondPlugin-user-action-required"><span class="type">“user-action-required”</span></a> signal issued by plugin</h3>
+</div>
+<p>This signal is issued only when using authorization code grant or implicit code grant flows,
+and contains the following parameters:</p>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<li class="listitem"><p>gsignond_signonui_data_set_open_url() (mandatory) - an authorization endpoint URI that should be opened in a
+user-agent (browser) for the user (resource owner) to authenticate herself.
+This URI is constructed using parameters of <a href="http://gsignon-docs.accounts-sso.googlecode.com/git/gsignond/GSignondPlugin.html#gsignond-plugin-request-initial"><code class="function">gsignond_plugin_request_initial()</code></a>
+and additional parameters may be appended to the query component.</p></li>
+<li class="listitem"><p>gsignond_signonui_data_set_final_url() (optional) - a redirection endpoint URI where the user-agent should
+be redirected after authentication by the resource owner has finished. This
+expected URI is taken from the "RedirectUri" parameter of <a href="http://gsignon-docs.accounts-sso.googlecode.com/git/gsignond/GSignondPlugin.html#gsignond-plugin-request-initial"><code class="function">gsignond_plugin_request_initial()</code></a> call
+to the plugin. The actual (vs. expected) URI may contain additional parameters in the query or fragment
+components of the URI that are used to determine the outcome of the authorization process.</p></li>
+<li class="listitem"><p>gsignond_signonui_data_set_username() and <a href="http://gsignon-docs.accounts-sso.googlecode.com/git/gsignond/gsignond-GSignondSignonuiData.html#gsignond-signonui-data-set-password"><code class="function">gsignond_signonui_data_set_password()</code></a>
+(optional) - these two parameters may be used when opening the authorization endpoint URI to initialize
+corresponding fields on the webpage.</p></li>
+</ul></div>
+<hr>
+<div class="refsect2">
+<a name="id-1.2.2.6.51"></a><h3>Parameters in <a href="http://gsignon-docs.accounts-sso.googlecode.com/git/gsignond/GSignondPlugin.html#gsignond-plugin-user-action-finished"><code class="function">gsignond_plugin_user_action_finished()</code></a> <em class="parameter"><code>ui_data</code></em> </h3>
+</div>
+<p>This function is called when UI interaction has completed and only when using
+authorization code grant or implicit code grant flows.</p>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<li class="listitem"><p>gsignond_signonui_data_set_query_error() (mandatory) - indicates if there
+was an error in UI interaction and what it was. May be <code class="literal">SIGNONUI_ERROR_NONE</code>
+(which means no error), <code class="literal">SIGNONUI_ERROR_CANCELED</code> or any other error.</p></li>
+<li class="listitem">
+<p>gsignond_signonui_data_get_url_response() (mandatory) - the URI that the user-agent
+was redirected to. The redirection endpoint URI supplied in parameters of
+<a href="http://gsignon-docs.accounts-sso.googlecode.com/git/gsignond/GSignondPlugin.html#gsignond-plugin-request-initial"><code class="function">gsignond_plugin_request_initial()</code></a> must be a prefix of this URI. The URI also
+has to contain parameters in the query component (if using authorization code grant)
+or in the fragment component (if using implicit code grant) that are necessary to continue
+the authorization sequence. Specific information is provided at </p>
+<a class="ulink" href="http://tools.ietf.org/html/rfc6749#section-4.1.2" target="_top">RFC6749 section 4.1.2</a><p>and <a class="ulink" href="http://tools.ietf.org/html/rfc6749#section-4.2.2" target="_top">RFC6749 section 4.2.2</a>
+respectively.</p>
+</li>
+</ul></div>
+<hr>
+<div class="refsect2">
+<a name="id-1.2.2.6.54"></a><h3>Token and its parameters in <a href="http://gsignon-docs.accounts-sso.googlecode.com/git/gsignond/GSignondPlugin.html#GSignondPlugin-response-final"><span class="type">“response-final”</span></a> signal</h3>
+</div>
+<p>gsignond_plugin_response_final() signal concludes the authorization process
+and returns a <span class="type">GSignondDictionary</span> parameter that contains the access token
+and some token parameters:</p>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<li class="listitem"><p>"AccessToken" (mandatory) - the token itself</p></li>
+<li class="listitem">
+<p>"TokenType" (mandatory) - the token type, as specified in</p>
+<a class="ulink" href="http://tools.ietf.org/html/rfc6749#section-7.1" target="_top">RFC6749 section 7.1</a>.
+<p>Currently only one token type is supported (the bearer token, standardizied in</p>
+<a class="ulink" href="http://tools.ietf.org/html/rfc6750" target="_top">RFC6750</a>).
+</li>
+<li class="listitem"><p>"TokenParameters" (mandatory) - a <span class="type">GSignondDictionary</span> containing any
+additional parameters returned by the server together with the access token.
+The contents of this parameter is specific to the token type, and for bearer
+tokens it's empty.</p></li>
+<li class="listitem">
+<p>"Scope" (optional) - the scopes of the issued token, a space separated list
+as specified in </p>
+<a class="ulink" href="http://tools.ietf.org/html/rfc6749#section-3.3" target="_top">RFC6749 section 3.3.</a>
+</li>
+<li class="listitem"><p>"Timestamp" (mandatory) - a gint64 Unix time specifying the time when token was issued.
+A Unix time is the number of seconds that have elapsed since 1970-01-01 00:00:00 UTC.</p></li>
+<li class="listitem"><p>"Duration" (optional) - the lifetime in seconds of the access token. If specified, the token
+will expire at Timestamp+Duration point in time.</p></li>
+<li class="listitem">
+<p>"RefreshToken" (optional) - refresh token as specified in</p>
+<a class="ulink" href="http://tools.ietf.org/html/rfc6749#section-6" target="_top">RFC6749 section 6.</a>
+</li>
+</ul></div>
+<div class="refsect1">
+<a name="id-1.2.2.6.57"></a><h2>Plugin API common to OAuth1 and Oauth2</h2>
+</div>
+<hr>
+<div class="refsect2">
+<a name="id-1.2.2.6.58"></a><h3>Parameters of <a href="http://gsignon-docs.accounts-sso.googlecode.com/git/gsignond/GSignondPlugin.html#GSignondPlugin-store"><span class="type">“store”</span></a> signal</h3>
+</div>
+<p>This signal is issued by the plugin when the token cache needs to be updated.
+The parameter is a <span class="type">GSignondDictionary</span> of tokens. The specific cache format
+is same as <em class="parameter"><code>identity_method_cache</code></em>
+ parameter of <a href="http://gsignon-docs.accounts-sso.googlecode.com/git/gsignond/GSignondPlugin.html#gsignond-plugin-request-initial"><code class="function">gsignond_plugin_request_initial()</code></a>
+and is desribed in detail in corresponding OAuth1 and OAuth2 sections.</p>
+<p>The token cache should be entirely replaced with the parameter of the signal;
+the plugin preserves existing tokens that were supplied to
+<a href="http://gsignon-docs.accounts-sso.googlecode.com/git/gsignond/GSignondPlugin.html#gsignond-plugin-request-initial"><code class="function">gsignond_plugin_request_initial()</code></a> in <em class="parameter"><code>identity_method_cache</code></em>
+ parameter.</p>
+<hr>
+<div class="refsect2">
+<a name="id-1.2.2.6.61"></a><h3>Errors issued via <a href="http://gsignon-docs.accounts-sso.googlecode.com/git/gsignond/GSignondPlugin.html#GSignondPlugin-error"><span class="type">“error”</span></a> signal</h3>
+</div>
+<p>At any point in the authorization process the plugin may issue this signal
+with an <em class="parameter"><code>error</code></em>
+ parameter that is a <a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a>. The <em class="parameter"><code>error</code></em>
+ has <code class="literal">domain</code> field set to
+<a href="http://gsignon-docs.accounts-sso.googlecode.com/git/gsignond/gsignond-Errors.html#GSIGNOND-ERROR:CAPS"><code class="literal">GSIGNOND_ERROR</code></a>. <code class="literal">code</code> field can be one of <code class="literal">GSIGNOND_ERROR_MISSING_DATA</code>
+(not enough data was supplied in <a href="http://gsignon-docs.accounts-sso.googlecode.com/git/gsignond/GSignondPlugin.html#gsignond-plugin-request-initial"><code class="function">gsignond_plugin_request_initial()</code></a>),
+<code class="literal">GSIGNOND_ERROR_NOT_AUTHORIZED</code> (there was an error in the authorization
+process), <code class="literal">GSIGNOND_ERROR_USER_INTERACTION</code> (there was an error in the interaction
+with the user), <code class="literal">GSIGNOND_ERROR_SESSION_CANCELED</code> (the authorization process
+was canceled). <code class="literal">message</code> field tells additional details about the exact cause of the
+error, and it's intended to help programming and debugging, but not meant
+to be understood by end users directly (although it can be shown to them).</p>
+</div>
+<div class="refsect1">
+<a name="GSignondOauthPlugin.functions_details"></a><h2>Functions</h2>
+</div>
+<div class="refsect1">
+<a name="GSignondOauthPlugin.other_details"></a><h2>Types and Values</h2>
+<div class="refsect2">
+<a name="GSignondOauthPlugin-struct"></a><h3>struct GSignondOauthPlugin</h3>
+<pre class="programlisting">struct GSignondOauthPlugin;</pre>
+<p>Opaque structure for the OAuth plugin object</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GSignondOauthPluginClass"></a><h3>struct GSignondOauthPluginClass</h3>
+<pre class="programlisting">struct GSignondOauthPluginClass {
+};
+</pre>
+<p>Opaque structure for the OAuth plugin class</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="GSignondOauthPlugin.see-also"></a><h2>See Also</h2>
+<p><a href="http://gsignon-docs.accounts-sso.googlecode.com/git/gsignond/GSignondPlugin.html"><span class="type">GSignondPlugin</span></a></p>
+</div>
+</div>
+<div class="footer">
+<hr>
+ Generated by GTK-Doc V1.20</div>
+</body>
+</html> \ No newline at end of file
diff --git a/docs/html/api-index-full.html b/docs/html/api-index-full.html
new file mode 100644
index 0000000..50b4c16
--- /dev/null
+++ b/docs/html/api-index-full.html
@@ -0,0 +1,42 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>gsignond-plugin-oauth Reference Manual: API Index</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="index.html" title="gsignond-plugin-oauth Reference Manual">
+<link rel="up" href="index.html" title="gsignond-plugin-oauth Reference Manual">
+<link rel="prev" href="object-tree.html" title="Object Hierarchy">
+<link rel="next" href="deprecated-api-index.html" title="Index of deprecated API">
+<meta name="generator" content="GTK-Doc V1.20 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="10"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts"><span id="nav_index"><a class="shortcut" href="#idx"></a>
+  <span class="dim">|</span> 
+ <a class="shortcut" href="#idxG">G</a></span></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><img src="up-insensitive.png" width="16" height="16" border="0"></td>
+<td><a accesskey="p" href="object-tree.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="deprecated-api-index.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="index">
+<div class="titlepage"><div><div><h1 class="title">
+<a name="api-index-full"></a>API Index</h1></div></div></div>
+<a name="idx"></a><a name="idx"></a><h3 class="title"></h3>
+<dt>
+<a class="link" href="GSignondOauthPlugin.html#GSignondOauthPluginClass" title="struct GSignondOauthPluginClass">GSignondOauthPluginClass</a>, struct in <a class="link" href="GSignondOauthPlugin.html" title="GSignondOauthPlugin">GSignondOauthPlugin</a>
+</dt>
+<dd></dd>
+<a name="idxG"></a><h3 class="title">G</h3>
+<dt>
+<a class="link" href="GSignondOauthPlugin.html#GSignondOauthPlugin-struct" title="struct GSignondOauthPlugin">GSignondOauthPlugin</a>, struct in <a class="link" href="GSignondOauthPlugin.html" title="GSignondOauthPlugin">GSignondOauthPlugin</a>
+</dt>
+<dd></dd>
+</div>
+<div class="footer">
+<hr>
+ Generated by GTK-Doc V1.20</div>
+</body>
+</html> \ No newline at end of file
diff --git a/docs/html/ch01.html b/docs/html/ch01.html
new file mode 100644
index 0000000..f1b56d4
--- /dev/null
+++ b/docs/html/ch01.html
@@ -0,0 +1,33 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>gsignond-plugin-oauth Reference Manual: Plugin reference</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="index.html" title="gsignond-plugin-oauth Reference Manual">
+<link rel="up" href="index.html" title="gsignond-plugin-oauth Reference Manual">
+<link rel="prev" href="index.html" title="gsignond-plugin-oauth Reference Manual">
+<link rel="next" href="GSignondOauthPlugin.html" title="GSignondOauthPlugin">
+<meta name="generator" content="GTK-Doc V1.20 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="10"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts"></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><img src="up-insensitive.png" width="16" height="16" border="0"></td>
+<td><a accesskey="p" href="index.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="GSignondOauthPlugin.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="chapter">
+<div class="titlepage"><div><div><h1 class="title">
+<a name="id-1.2"></a>Plugin reference</h1></div></div></div>
+<div class="toc"><dl class="toc"><dt>
+<span class="refentrytitle"><a href="GSignondOauthPlugin.html">GSignondOauthPlugin</a></span><span class="refpurpose"> — OAuth1/OAuth2 authentication plugin for gSSO single sign-on service</span>
+</dt></dl></div>
+</div>
+<div class="footer">
+<hr>
+ Generated by GTK-Doc V1.20</div>
+</body>
+</html> \ No newline at end of file
diff --git a/docs/html/deprecated-api-index.html b/docs/html/deprecated-api-index.html
new file mode 100644
index 0000000..261702a
--- /dev/null
+++ b/docs/html/deprecated-api-index.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>gsignond-plugin-oauth Reference Manual: Index of deprecated API</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="index.html" title="gsignond-plugin-oauth Reference Manual">
+<link rel="up" href="index.html" title="gsignond-plugin-oauth Reference Manual">
+<link rel="prev" href="api-index-full.html" title="API Index">
+<meta name="generator" content="GTK-Doc V1.20 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="10"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts"></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><img src="up-insensitive.png" width="16" height="16" border="0"></td>
+<td><a accesskey="p" href="api-index-full.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><img src="right-insensitive.png" width="16" height="16" border="0"></td>
+</tr></table>
+<div class="index">
+<div class="titlepage"><div><div><h1 class="title">
+<a name="deprecated-api-index"></a>Index of deprecated API</h1></div></div></div>
+<a name="idx"></a>
+</div>
+<div class="footer">
+<hr>
+ Generated by GTK-Doc V1.20</div>
+</body>
+</html> \ No newline at end of file
diff --git a/docs/html/gsignond-plugin-oauth.devhelp2 b/docs/html/gsignond-plugin-oauth.devhelp2
new file mode 100644
index 0000000..0143be8
--- /dev/null
+++ b/docs/html/gsignond-plugin-oauth.devhelp2
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="utf-8" standalone="no"?>
+<!DOCTYPE book PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "">
+<book xmlns="http://www.devhelp.net/book" title="gsignond-plugin-oauth Reference Manual" link="index.html" author="" name="gsignond-plugin-oauth" version="2" language="c">
+ <chapters>
+ <sub name="Plugin reference" link="ch01.html">
+ <sub name="GSignondOauthPlugin" link="GSignondOauthPlugin.html"/>
+ </sub>
+ <sub name="Object Hierarchy" link="object-tree.html"/>
+ <sub name="API Index" link="api-index-full.html"/>
+ <sub name="Index of deprecated API" link="deprecated-api-index.html"/>
+ </chapters>
+ <functions>
+ <keyword type="" name="Parameters in gsignond_plugin_request_initial() identity_method_cache" link="GSignondOauthPlugin.html#id-1.2.2.6.20"/>
+ <keyword type="" name="Parameters in gsignond_plugin_request_initial() session_data" link="GSignondOauthPlugin.html#id-1.2.2.6.22"/>
+ <keyword type="" name="Parameters for “user-action-required” signal issued by plugin" link="GSignondOauthPlugin.html#id-1.2.2.6.24"/>
+ <keyword type="" name="Parameters in gsignond_plugin_user_action_finished() ui_data " link="GSignondOauthPlugin.html#id-1.2.2.6.26"/>
+ <keyword type="" name="Token and its parameters in “response-final” signal" link="GSignondOauthPlugin.html#id-1.2.2.6.28"/>
+ <keyword type="" name="Parameters in gsignond_plugin_request_initial() identity_method_cache" link="GSignondOauthPlugin.html#id-1.2.2.6.33"/>
+ <keyword type="" name="Parameters in gsignond_plugin_request_initial() session_data" link="GSignondOauthPlugin.html#id-1.2.2.6.36"/>
+ <keyword type="" name="Parameters for “user-action-required” signal issued by plugin" link="GSignondOauthPlugin.html#id-1.2.2.6.48"/>
+ <keyword type="" name="Parameters in gsignond_plugin_user_action_finished() ui_data " link="GSignondOauthPlugin.html#id-1.2.2.6.51"/>
+ <keyword type="" name="Token and its parameters in “response-final” signal" link="GSignondOauthPlugin.html#id-1.2.2.6.54"/>
+ <keyword type="" name="Parameters of “store” signal" link="GSignondOauthPlugin.html#id-1.2.2.6.58"/>
+ <keyword type="" name="Errors issued via “error” signal" link="GSignondOauthPlugin.html#id-1.2.2.6.61"/>
+ <keyword type="struct" name="struct GSignondOauthPlugin" link="GSignondOauthPlugin.html#GSignondOauthPlugin-struct"/>
+ <keyword type="struct" name="struct GSignondOauthPluginClass" link="GSignondOauthPlugin.html#GSignondOauthPluginClass"/>
+ </functions>
+</book>
diff --git a/docs/html/home.png b/docs/html/home.png
new file mode 100644
index 0000000..9346b33
--- /dev/null
+++ b/docs/html/home.png
Binary files differ
diff --git a/docs/html/index.html b/docs/html/index.html
new file mode 100644
index 0000000..c64a03b
--- /dev/null
+++ b/docs/html/index.html
@@ -0,0 +1,40 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>gsignond-plugin-oauth Reference Manual: gsignond-plugin-oauth Reference Manual</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="index.html" title="gsignond-plugin-oauth Reference Manual">
+<link rel="next" href="ch01.html" title="Plugin reference">
+<meta name="generator" content="GTK-Doc V1.20 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<div class="book">
+<div class="titlepage">
+<div>
+<div><table class="navigation" id="top" width="100%" cellpadding="2" cellspacing="0"><tr><th valign="middle"><p class="title">gsignond-plugin-oauth Reference Manual</p></th></tr></table></div>
+<div><p class="releaseinfo">
+ for gsignond-plugin-oauth.
+ The latest version of this documentation can be found on-line at
+ <a class="ulink" href="http://gsignon-docs.accounts-sso.googlecode.com/git/gsignond-plugin-oauth/index.html" target="_top">
+ http://gsignon-docs.accounts-sso.googlecode.com/git/gsignond-plugin-oauth/index.html</a>.
+ </p></div>
+</div>
+<hr>
+</div>
+<div class="toc"><dl class="toc">
+<dt><span class="chapter"><a href="ch01.html">Plugin reference</a></span></dt>
+<dd><dl><dt>
+<span class="refentrytitle"><a href="GSignondOauthPlugin.html">GSignondOauthPlugin</a></span><span class="refpurpose"> — OAuth1/OAuth2 authentication plugin for gSSO single sign-on service</span>
+</dt></dl></dd>
+<dt><span class="chapter"><a href="object-tree.html">Object Hierarchy</a></span></dt>
+<dt><span class="index"><a href="api-index-full.html">API Index</a></span></dt>
+<dt><span class="index"><a href="deprecated-api-index.html">Index of deprecated API</a></span></dt>
+</dl></div>
+</div>
+<div class="footer">
+<hr>
+ Generated by GTK-Doc V1.20</div>
+</body>
+</html> \ No newline at end of file
diff --git a/docs/html/index.sgml b/docs/html/index.sgml
new file mode 100644
index 0000000..906b245
--- /dev/null
+++ b/docs/html/index.sgml
@@ -0,0 +1,11 @@
+<ONLINE href="http://gsignon-docs.accounts-sso.googlecode.com/git/gsignond-plugin-oauth/index.html">
+<ANCHOR id="GSignondOauthPlugin" href="gsignond-plugin-oauth/GSignondOauthPlugin.html">
+<ANCHOR id="GSignondOauthPlugin.other" href="gsignond-plugin-oauth/GSignondOauthPlugin.html#GSignondOauthPlugin.other">
+<ANCHOR id="GSignondOauthPlugin.object-hierarchy" href="gsignond-plugin-oauth/GSignondOauthPlugin.html#GSignondOauthPlugin.object-hierarchy">
+<ANCHOR id="GSignondOauthPlugin.implemented-interfaces" href="gsignond-plugin-oauth/GSignondOauthPlugin.html#GSignondOauthPlugin.implemented-interfaces">
+<ANCHOR id="GSignondOauthPlugin.description" href="gsignond-plugin-oauth/GSignondOauthPlugin.html#GSignondOauthPlugin.description">
+<ANCHOR id="GSignondOauthPlugin.functions_details" href="gsignond-plugin-oauth/GSignondOauthPlugin.html#GSignondOauthPlugin.functions_details">
+<ANCHOR id="GSignondOauthPlugin.other_details" href="gsignond-plugin-oauth/GSignondOauthPlugin.html#GSignondOauthPlugin.other_details">
+<ANCHOR id="GSignondOauthPlugin-struct" href="gsignond-plugin-oauth/GSignondOauthPlugin.html#GSignondOauthPlugin-struct">
+<ANCHOR id="GSignondOauthPluginClass" href="gsignond-plugin-oauth/GSignondOauthPlugin.html#GSignondOauthPluginClass">
+<ANCHOR id="GSignondOauthPlugin.see-also" href="gsignond-plugin-oauth/GSignondOauthPlugin.html#GSignondOauthPlugin.see-also">
diff --git a/docs/html/left-insensitive.png b/docs/html/left-insensitive.png
new file mode 100644
index 0000000..3269393
--- /dev/null
+++ b/docs/html/left-insensitive.png
Binary files differ
diff --git a/docs/html/left.png b/docs/html/left.png
new file mode 100644
index 0000000..2abde03
--- /dev/null
+++ b/docs/html/left.png
Binary files differ
diff --git a/docs/html/object-tree.html b/docs/html/object-tree.html
new file mode 100644
index 0000000..a475525
--- /dev/null
+++ b/docs/html/object-tree.html
@@ -0,0 +1,34 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>gsignond-plugin-oauth Reference Manual: Object Hierarchy</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="index.html" title="gsignond-plugin-oauth Reference Manual">
+<link rel="up" href="index.html" title="gsignond-plugin-oauth Reference Manual">
+<link rel="prev" href="GSignondOauthPlugin.html" title="GSignondOauthPlugin">
+<link rel="next" href="api-index-full.html" title="API Index">
+<meta name="generator" content="GTK-Doc V1.20 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="10"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts"></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><img src="up-insensitive.png" width="16" height="16" border="0"></td>
+<td><a accesskey="p" href="GSignondOauthPlugin.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="api-index-full.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="chapter">
+<div class="titlepage"><div><div><h1 class="title">
+<a name="object-tree"></a>Object Hierarchy</h1></div></div></div>
+<pre class="screen">
+ <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+ <span class="lineart">╰──</span> <a class="link" href="GSignondOauthPlugin.html" title="GSignondOauthPlugin">GSignondOauthPlugin</a>
+</pre>
+</div>
+<div class="footer">
+<hr>
+ Generated by GTK-Doc V1.20</div>
+</body>
+</html> \ No newline at end of file
diff --git a/docs/html/right-insensitive.png b/docs/html/right-insensitive.png
new file mode 100644
index 0000000..4c95785
--- /dev/null
+++ b/docs/html/right-insensitive.png
Binary files differ
diff --git a/docs/html/right.png b/docs/html/right.png
new file mode 100644
index 0000000..76260ec
--- /dev/null
+++ b/docs/html/right.png
Binary files differ
diff --git a/docs/html/style.css b/docs/html/style.css
new file mode 100644
index 0000000..705a5c9
--- /dev/null
+++ b/docs/html/style.css
@@ -0,0 +1,461 @@
+body
+{
+ font-family: cantarell, sans-serif;
+}
+.synopsis, .classsynopsis
+{
+ /* tango:aluminium 1/2 */
+ background: #eeeeec;
+ background: rgba(238, 238, 236, 0.5);
+ border: solid 1px rgb(238, 238, 236);
+ padding: 0.5em;
+}
+.programlisting
+{
+ /* tango:sky blue 0/1 */
+ /* fallback for no rgba support */
+ background: #e6f3ff;
+ border: solid 1px #729fcf;
+ background: rgba(114, 159, 207, 0.1);
+ border: solid 1px rgba(114, 159, 207, 0.2);
+ padding: 0.5em;
+}
+.variablelist
+{
+ padding: 4px;
+ margin-left: 3em;
+}
+.variablelist td:first-child
+{
+ vertical-align: top;
+}
+
+@media screen {
+ sup a.footnote
+ {
+ position: relative;
+ top: 0em ! important;
+ }
+ /* this is needed so that the local anchors are displayed below the naviagtion */
+ div.footnote a[name], div.refnamediv a[name], div.refsect1 a[name], div.refsect2 a[name], div.index a[name], div.glossary a[name], div.sect1 a[name]
+ {
+ display: inline-block;
+ position: relative;
+ top:-5em;
+ }
+ /* this seems to be a bug in the xsl style sheets when generating indexes */
+ div.index div.index
+ {
+ top: 0em;
+ }
+ /* make space for the fixed navigation bar and add space at the bottom so that
+ * link targets appear somewhat close to top
+ */
+ body
+ {
+ padding-top: 5em;
+ padding-bottom: 500px;
+ max-width: 60em;
+ }
+ p
+ {
+ max-width: 60em;
+ }
+ /* style and size the navigation bar */
+ table.navigation#top
+ {
+ position: fixed;
+ background: #e2e2e2;
+ border-bottom: solid 1px #babdb6;
+ margin-top: 0;
+ margin-bottom: 0;
+ top: 0;
+ left: 0;
+ height: 3em;
+ z-index: 10;
+ }
+ .navigation a, .navigation a:visited
+ {
+ /* tango:sky blue 3 */
+ color: #204a87;
+ }
+ .navigation a:hover
+ {
+ /* tango:sky blue 2 */
+ color: #3465a4;
+ }
+ td.shortcuts
+ {
+ /* tango:sky blue 2 */
+ color: #3465a4;
+ font-size: 80%;
+ white-space: nowrap;
+ }
+ td.shortcuts .dim
+ {
+ color: #babdb6;
+ }
+}
+@media screen and (min-width: 60em) {
+ /* screen larger than 60em */
+ body { margin: auto; }
+}
+@media screen and (max-width: 60em) {
+ /* screen less than 60em */
+ #nav_hierarchy { display: none; }
+ #nav_interfaces { display: none; }
+ #nav_prerequisites { display: none; }
+ #nav_derived_interfaces { display: none; }
+ #nav_implementations { display: none; }
+ #nav_child_properties { display: none; }
+ #nav_style_properties { display: none; }
+ #nav_index { display: none; }
+ #nav_glossary { display: none; }
+ .gallery_image { display: none; }
+ .property_flags { display: none; }
+ .signal_flags { display: none; }
+ .parameter_annotations { display: none; }
+ .enum_member_annotations { display: none; }
+ .struct_member_annotations { display: none; }
+ .union_member_annotations { display: none; }
+ /* now that a column is hidden, optimize space */
+ col.parameters_name { width: auto; }
+ col.parameters_description { width: auto; }
+ col.struct_members_name { width: auto; }
+ col.struct_members_description { width: auto; }
+ col.enum_members_name { width: auto; }
+ col.enum_members_description { width: auto; }
+ col.union_members_name { width: auto; }
+ col.union_members_description { width: auto; }
+}
+@media print {
+ table.navigation {
+ visibility: collapse;
+ display: none;
+ }
+ div.titlepage table.navigation {
+ visibility: visible;
+ display: table;
+ background: #e2e2e2;
+ border: solid 1px #babdb6;
+ margin-top: 0;
+ margin-bottom: 0;
+ top: 0;
+ left: 0;
+ height: 3em;
+ }
+}
+
+.navigation .title
+{
+ font-size: 120%;
+}
+
+div.gallery-float
+{
+ float: left;
+ padding: 10px;
+}
+div.gallery-float img
+{
+ border-style: none;
+}
+div.gallery-spacer
+{
+ clear: both;
+}
+
+a, a:visited
+{
+ text-decoration: none;
+ /* tango:sky blue 2 */
+ color: #3465a4;
+}
+a:hover
+{
+ text-decoration: underline;
+ /* tango:sky blue 1 */
+ color: #729fcf;
+}
+
+div.informaltable table
+{
+ border-collapse: separate;
+ border-spacing: 20px 3px;
+ border: none;
+}
+
+div.informaltable table td, div.informaltable table th
+{
+ vertical-align: top;
+}
+
+.function_type,
+.variable_type,
+.property_type,
+.signal_type,
+.parameter_name,
+.struct_member_name,
+.union_member_name,
+.define_keyword,
+.datatype_keyword,
+.typedef_keyword
+{
+ text-align: right;
+}
+
+/* dim non-primary columns */
+.c_punctuation,
+.function_type,
+.variable_type,
+.property_type,
+.signal_type,
+.define_keyword,
+.datatype_keyword,
+.typedef_keyword,
+.property_flags,
+.signal_flags,
+.parameter_annotations,
+.enum_member_annotations,
+.struct_member_annotations,
+.union_member_annotations
+{
+ color: #888a85;
+}
+
+.function_type a,
+.function_type a:visited,
+.function_type a:hover,
+.property_type a,
+.property_type a:visited,
+.property_type a:hover,
+.signal_type a,
+.signal_type a:visited,
+.signal_type a:hover,
+.signal_flags a,
+.signal_flags a:visited,
+.signal_flags a:hover
+{
+ color: #729fcf;
+}
+
+div.table table
+{
+ border-collapse: collapse;
+ border-spacing: 0px;
+ /* tango:aluminium 3 */
+ border: solid 1px #babdb6;
+}
+
+div.table table td, div.table table th
+{
+ /* tango:aluminium 3 */
+ border: solid 1px #babdb6;
+ padding: 3px;
+ vertical-align: top;
+}
+
+div.table table th
+{
+ /* tango:aluminium 2 */
+ background-color: #d3d7cf;
+}
+
+h4
+{
+ color: #555753;
+}
+
+hr
+{
+ /* tango:aluminium 1 */
+ color: #d3d7cf;
+ background: #d3d7cf;
+ border: none 0px;
+ height: 1px;
+ clear: both;
+ margin: 2.0em 0em 2.0em 0em;
+}
+
+dl.toc dt
+{
+ padding-bottom: 0.25em;
+}
+
+dl.toc > dd > dl > dt
+{
+ padding-top: 0.25em;
+ padding-bottom: 0.25em;
+}
+
+dl.toc > dt
+{
+ padding-top: 1em;
+ padding-bottom: 0.5em;
+ font-weight: bold;
+}
+
+.parameter
+{
+ font-style: normal;
+}
+
+.footer
+{
+ padding-top: 3.5em;
+ /* tango:aluminium 3 */
+ color: #babdb6;
+ text-align: center;
+ font-size: 80%;
+}
+
+.informalfigure,
+.figure
+{
+ margin: 1em;
+}
+
+.informalexample,
+.example
+{
+ margin-top: 1em;
+ margin-bottom: 1em;
+}
+
+.warning
+{
+ /* tango:orange 0/1 */
+ background: #ffeed9;
+ background: rgba(252, 175, 62, 0.1);
+ border-color: #ffb04f;
+ border-color: rgba(252, 175, 62, 0.2);
+}
+.note
+{
+ /* tango:chameleon 0/0.5 */
+ background: #d8ffb2;
+ background: rgba(138, 226, 52, 0.1);
+ border-color: #abf562;
+ border-color: rgba(138, 226, 52, 0.2);
+}
+div.blockquote
+{
+ border-color: #eeeeec;
+}
+.note, .warning, div.blockquote
+{
+ padding: 0.5em;
+ border-width: 1px;
+ border-style: solid;
+ margin: 2em;
+}
+.note p, .warning p
+{
+ margin: 0;
+}
+
+div.warning h3.title,
+div.note h3.title
+{
+ display: none;
+}
+
+p + div.section
+{
+ margin-top: 1em;
+}
+
+div.refnamediv,
+div.refsynopsisdiv,
+div.refsect1,
+div.refsect2,
+div.toc,
+div.section
+{
+ margin-bottom: 1em;
+}
+
+/* blob links */
+h2 .extralinks, h3 .extralinks
+{
+ float: right;
+ /* tango:aluminium 3 */
+ color: #babdb6;
+ font-size: 80%;
+ font-weight: normal;
+}
+
+.lineart
+{
+ color: #d3d7cf;
+ font-weight: normal;
+}
+
+.annotation
+{
+ /* tango:aluminium 5 */
+ color: #555753;
+ font-weight: normal;
+}
+
+.structfield
+{
+ font-style: normal;
+ font-weight: normal;
+}
+
+/* code listings */
+
+.listing_code .programlisting .cbracket { color: #a40000; } /* tango: scarlet red 3 */
+.listing_code .programlisting .comment { color: #a1a39d; } /* tango: aluminium 4 */
+.listing_code .programlisting .function { color: #000000; font-weight: bold; }
+.listing_code .programlisting .function a { color: #11326b; font-weight: bold; } /* tango: sky blue 4 */
+.listing_code .programlisting .keyword { color: #4e9a06; } /* tango: chameleon 3 */
+.listing_code .programlisting .linenum { color: #babdb6; } /* tango: aluminium 3 */
+.listing_code .programlisting .normal { color: #000000; }
+.listing_code .programlisting .number { color: #75507b; } /* tango: plum 2 */
+.listing_code .programlisting .preproc { color: #204a87; } /* tango: sky blue 3 */
+.listing_code .programlisting .string { color: #c17d11; } /* tango: chocolate 2 */
+.listing_code .programlisting .type { color: #000000; }
+.listing_code .programlisting .type a { color: #11326b; } /* tango: sky blue 4 */
+.listing_code .programlisting .symbol { color: #ce5c00; } /* tango: orange 3 */
+
+.listing_frame {
+ /* tango:sky blue 1 */
+ border: solid 1px #729fcf;
+ border: solid 1px rgba(114, 159, 207, 0.2);
+ padding: 0px;
+}
+
+.listing_lines, .listing_code {
+ margin-top: 0px;
+ margin-bottom: 0px;
+ padding: 0.5em;
+}
+.listing_lines {
+ /* this just adds visual clutter and
+ takes precious room from small screens */
+ display: none;
+}
+.listing_lines {
+ /* tango:sky blue 0.5 */
+ background: #a6c5e3;
+ background: rgba(114, 159, 207, 0.2);
+ /* tango:aluminium 6 */
+ color: #2e3436;
+}
+.listing_code {
+ /* tango:sky blue 0 */
+ background: #e6f3ff;
+ background: rgba(114, 159, 207, 0.1);
+}
+.listing_code .programlisting {
+ /* override from previous */
+ border: none 0px;
+ padding: 0px;
+ background: none;
+}
+.listing_lines pre, .listing_code pre {
+ margin: 0px;
+}
+
diff --git a/docs/html/up-insensitive.png b/docs/html/up-insensitive.png
new file mode 100644
index 0000000..f404986
--- /dev/null
+++ b/docs/html/up-insensitive.png
Binary files differ
diff --git a/docs/html/up.png b/docs/html/up.png
new file mode 100644
index 0000000..80b4b37
--- /dev/null
+++ b/docs/html/up.png
Binary files differ