diff options
author | Jussi Laako <jussi.laako@linux.intel.com> | 2014-03-20 16:01:42 +0200 |
---|---|---|
committer | Jussi Laako <jussi.laako@linux.intel.com> | 2014-03-20 16:30:18 +0200 |
commit | a5a3c800cecbdf2297876b77408701106e7652ee (patch) | |
tree | d8a4726c1c9cbb9f33bc921a0cab522a2506ea61 /docs | |
parent | 542c03f273e57a137382bb462e807c444b2b4d51 (diff) | |
download | gsignond-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.am | 113 | ||||
-rw-r--r-- | docs/Makefile.in | 1182 | ||||
-rw-r--r-- | docs/gsignond-plugin-oauth-docs.sgml | 36 | ||||
-rw-r--r-- | docs/gsignond-plugin-oauth-overrides.txt | 0 | ||||
-rw-r--r-- | docs/gsignond-plugin-oauth-sections.txt | 15 | ||||
-rw-r--r-- | docs/gsignond-plugin-oauth.types | 1 | ||||
-rw-r--r-- | docs/html/GSignondOauthPlugin.html | 1251 | ||||
-rw-r--r-- | docs/html/api-index-full.html | 42 | ||||
-rw-r--r-- | docs/html/ch01.html | 33 | ||||
-rw-r--r-- | docs/html/deprecated-api-index.html | 30 | ||||
-rw-r--r-- | docs/html/gsignond-plugin-oauth.devhelp2 | 28 | ||||
-rw-r--r-- | docs/html/home.png | bin | 0 -> 256 bytes | |||
-rw-r--r-- | docs/html/index.html | 40 | ||||
-rw-r--r-- | docs/html/index.sgml | 11 | ||||
-rw-r--r-- | docs/html/left-insensitive.png | bin | 0 -> 395 bytes | |||
-rw-r--r-- | docs/html/left.png | bin | 0 -> 262 bytes | |||
-rw-r--r-- | docs/html/object-tree.html | 34 | ||||
-rw-r--r-- | docs/html/right-insensitive.png | bin | 0 -> 373 bytes | |||
-rw-r--r-- | docs/html/right.png | bin | 0 -> 261 bytes | |||
-rw-r--r-- | docs/html/style.css | 461 | ||||
-rw-r--r-- | docs/html/up-insensitive.png | bin | 0 -> 374 bytes | |||
-rw-r--r-- | docs/html/up.png | bin | 0 -> 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='[0;31m'; \ + grn='[0;32m'; \ + lgn='[1;32m'; \ + blu='[1;34m'; \ + mgn='[0;35m'; \ + brg='[1m'; \ + std='[m'; \ + 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 <alex.kanavin@gmail.com></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 <gsignond/gsignond-session-data.h></span> +<span class="gtkdoc ppc">#include <gsignond/gsignond-plugin-interface.h></span> +<span class="gtkdoc ppc">#include <gsignond/gsignond-error.h></span> +<span class="gtkdoc ppc">#include <gsignond/gsignond-utils.h></span> +<span class="gtkdoc ppc">#include</span> <span class="gtkdoc pps">"gsignond-oauth-plugin.h"</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">"AccessToken"</span><span class="gtkdoc opt">,</span> <span class="string">"megaaccesstoken"</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">"TokenSecret"</span><span class="gtkdoc opt">,</span> <span class="string">"megatokensecret"</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">"Realm"</span><span class="gtkdoc opt">,</span> <span class="string">"megarealm"</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">"someotherclient"</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">"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">"</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">"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">"</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">"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">"</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">"http://somehost/somegsignondoauthcallback?oauth_token=somerandomtoken&oauth_verifier=somerandomverifier"</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">"Got an error: %s</span><span class="gtkdoc esc">\n</span><span class="string">"</span><span class="gtkdoc opt">,</span> error<span class="gtkdoc opt">-></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">"response-final"</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">"user-action-required"</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">"store"</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">"error"</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">"ConsumerKey"</span><span class="gtkdoc opt">,</span> <span class="string">"megaclient"</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">"ConsumerSecret"</span><span class="gtkdoc opt">,</span> <span class="string">"megasecret"</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">"Realm"</span><span class="gtkdoc opt">,</span> <span class="string">"megarealm"</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">"somehost"</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">"SignatureMethod"</span><span class="gtkdoc opt">,</span> <span class="string">"PLAINTEXT"</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">"RequestEndpoint"</span><span class="gtkdoc opt">,</span> <span class="string">"https://somehost/temporarytokenpath"</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">"AuthorizationEndpoint"</span><span class="gtkdoc opt">,</span> <span class="string">"https://somehost/authorization"</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">"Callback"</span><span class="gtkdoc opt">,</span> <span class="string">"http://somehost/somegsignondoauthcallback"</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">"TokenEndpoint"</span><span class="gtkdoc opt">,</span> <span class="string">"https://somehost/accesstokenpath"</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">"oauth1"</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 <alex.kanavin@gmail.com></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 <gsignond/gsignond-session-data.h></span> +<span class="gtkdoc ppc">#include <gsignond/gsignond-plugin-interface.h></span> +<span class="gtkdoc ppc">#include <gsignond/gsignond-error.h></span> +<span class="gtkdoc ppc">#include <gsignond/gsignond-utils.h></span> +<span class="gtkdoc ppc">#include</span> <span class="gtkdoc pps">"gsignond-oauth-plugin.h"</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">"AccessToken"</span><span class="gtkdoc opt">,</span> <span class="string">"megaaccesstoken"</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">"Timestamp"</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">"Duration"</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">"RefreshToken"</span><span class="gtkdoc opt">,</span> <span class="string">"megarefreshtoken"</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">"Scope"</span><span class="gtkdoc opt">,</span> <span class="string">"somescope1 somescope2 somescope3"</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">"somescope1 somescope2 somescope3"</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">"someotherclient"</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">"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">"</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">"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">"</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">"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">"</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">"http://somehost/login.html?state=somerandomstate&code=somerandomcode"</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">"Got an error: %s</span><span class="gtkdoc esc">\n</span><span class="string">"</span><span class="gtkdoc opt">,</span> error<span class="gtkdoc opt">-></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">"response-final"</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">"user-action-required"</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">"store"</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">"error"</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">"ClientId"</span><span class="gtkdoc opt">,</span> <span class="string">"megaclient"</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">"TokenHost"</span><span class="gtkdoc opt">,</span> <span class="string">"somehost"</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">"TokenPath"</span><span class="gtkdoc opt">,</span> <span class="string">"/tokenpath"</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">"Scope"</span><span class="gtkdoc opt">,</span> <span class="string">"Photos Videos"</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">"AuthHost"</span><span class="gtkdoc opt">,</span> <span class="string">"somehost"</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">"AuthPath"</span><span class="gtkdoc opt">,</span> <span class="string">"/somepath"</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">"somehost"</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">"ResponseType"</span><span class="gtkdoc opt">,</span> <span class="string">"code"</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">"RedirectUri"</span><span class="gtkdoc opt">,</span> <span class="string">"http://somehost/login.html"</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">"oauth2"</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 Binary files differnew file mode 100644 index 0000000..9346b33 --- /dev/null +++ b/docs/html/home.png 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 Binary files differnew file mode 100644 index 0000000..3269393 --- /dev/null +++ b/docs/html/left-insensitive.png diff --git a/docs/html/left.png b/docs/html/left.png Binary files differnew file mode 100644 index 0000000..2abde03 --- /dev/null +++ b/docs/html/left.png 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 Binary files differnew file mode 100644 index 0000000..4c95785 --- /dev/null +++ b/docs/html/right-insensitive.png diff --git a/docs/html/right.png b/docs/html/right.png Binary files differnew file mode 100644 index 0000000..76260ec --- /dev/null +++ b/docs/html/right.png 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 Binary files differnew file mode 100644 index 0000000..f404986 --- /dev/null +++ b/docs/html/up-insensitive.png diff --git a/docs/html/up.png b/docs/html/up.png Binary files differnew file mode 100644 index 0000000..80b4b37 --- /dev/null +++ b/docs/html/up.png |