d77d3f1bf6718f799476b845d48c26fbcadd9bf4
[profile/ivi/gsignond.git] / docs / html / gsignond-GSignondPlugin.html
1 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
2 <html>
3 <head>
4 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
5 <title>GSignondPlugin</title>
6 <meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
7 <link rel="home" href="index.html" title="gsignond API Reference Manual">
8 <link rel="up" href="ch03.html" title="GSignond API for writing authentication plugins">
9 <link rel="prev" href="ch03.html" title="GSignond API for writing authentication plugins">
10 <link rel="next" href="gsignond-GSignondDictionary.html" title="GSignondDictionary">
11 <meta name="generator" content="GTK-Doc V1.19.1 (XML mode)">
12 <link rel="stylesheet" href="style.css" type="text/css">
13 </head>
14 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
15 <table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="10"><tr valign="middle">
16 <td width="100%" align="left">
17 <a href="#" class="shortcut">Top</a>
18                    | 
19                   <a href="#gsignond-GSignondPlugin.description" class="shortcut">Description</a>
20 </td>
21 <td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
22 <td><a accesskey="u" href="ch03.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
23 <td><a accesskey="p" href="ch03.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
24 <td><a accesskey="n" href="gsignond-GSignondDictionary.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
25 </tr></table>
26 <div class="refentry">
27 <a name="gsignond-GSignondPlugin"></a><div class="titlepage"></div>
28 <div class="refnamediv"><table width="100%"><tr>
29 <td valign="top">
30 <h2><span class="refentrytitle"><a name="gsignond-GSignondPlugin.top_of_page"></a>GSignondPlugin</span></h2>
31 <p>GSignondPlugin — an interface for implementing authentication plugins</p>
32 </td>
33 <td valign="top" align="right"></td>
34 </tr></table></div>
35 <div class="refsynopsisdiv">
36 <a name="gsignond-GSignondPlugin.synopsis"></a><h2>Synopsis</h2>
37 <pre class="synopsis">
38 #include &lt;gsignond/gsignond-plugin-interface.h&gt;
39
40 struct              <a class="link" href="gsignond-GSignondPlugin.html#GSignondPluginInterface" title="struct GSignondPluginInterface">GSignondPluginInterface</a>;
41 enum                <a class="link" href="gsignond-GSignondPlugin.html#GSignondPluginState" title="enum GSignondPluginState">GSignondPluginState</a>;
42 <span class="returnvalue">void</span>                <a class="link" href="gsignond-GSignondPlugin.html#gsignond-plugin-cancel" title="gsignond_plugin_cancel ()">gsignond_plugin_cancel</a>              (<em class="parameter"><code><span class="type">GSignondPlugin</span> *self</code></em>);
43 <span class="returnvalue">void</span>                <a class="link" href="gsignond-GSignondPlugin.html#gsignond-plugin-error" title="gsignond_plugin_error ()">gsignond_plugin_error</a>               (<em class="parameter"><code><span class="type">GSignondPlugin</span> *self</code></em>,
44                                                          <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> *error</code></em>);
45 <span class="returnvalue">void</span>                <a class="link" href="gsignond-GSignondPlugin.html#gsignond-plugin-refresh" title="gsignond_plugin_refresh ()">gsignond_plugin_refresh</a>             (<em class="parameter"><code><span class="type">GSignondPlugin</span> *self</code></em>,
46                                                          <em class="parameter"><code><a class="link" href="gsignond-GSignondSignonuiData.html#GSignondSignonuiData" title="GSignondSignonuiData"><span class="type">GSignondSignonuiData</span></a> *ui_data</code></em>);
47 <span class="returnvalue">void</span>                <a class="link" href="gsignond-GSignondPlugin.html#gsignond-plugin-refreshed" title="gsignond_plugin_refreshed ()">gsignond_plugin_refreshed</a>           (<em class="parameter"><code><span class="type">GSignondPlugin</span> *self</code></em>,
48                                                          <em class="parameter"><code><a class="link" href="gsignond-GSignondSignonuiData.html#GSignondSignonuiData" title="GSignondSignonuiData"><span class="type">GSignondSignonuiData</span></a> *ui_data</code></em>);
49 <span class="returnvalue">void</span>                <a class="link" href="gsignond-GSignondPlugin.html#gsignond-plugin-request" title="gsignond_plugin_request ()">gsignond_plugin_request</a>             (<em class="parameter"><code><span class="type">GSignondPlugin</span> *self</code></em>,
50                                                          <em class="parameter"><code><a class="link" href="gsignond-GSignondSessionData.html#GSignondSessionData" title="GSignondSessionData"><span class="type">GSignondSessionData</span></a> *session_data</code></em>);
51 <span class="returnvalue">void</span>                <a class="link" href="gsignond-GSignondPlugin.html#gsignond-plugin-request-initial" title="gsignond_plugin_request_initial ()">gsignond_plugin_request_initial</a>     (<em class="parameter"><code><span class="type">GSignondPlugin</span> *self</code></em>,
52                                                          <em class="parameter"><code><a class="link" href="gsignond-GSignondSessionData.html#GSignondSessionData" title="GSignondSessionData"><span class="type">GSignondSessionData</span></a> *session_data</code></em>,
53                                                          <em class="parameter"><code><a class="link" href="gsignond-GSignondDictionary.html#GSignondDictionary" title="GSignondDictionary"><span class="type">GSignondDictionary</span></a> *identity_method_cache</code></em>,
54                                                          <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *mechanism</code></em>);
55 <span class="returnvalue">void</span>                <a class="link" href="gsignond-GSignondPlugin.html#gsignond-plugin-response" title="gsignond_plugin_response ()">gsignond_plugin_response</a>            (<em class="parameter"><code><span class="type">GSignondPlugin</span> *self</code></em>,
56                                                          <em class="parameter"><code><a class="link" href="gsignond-GSignondSessionData.html#GSignondSessionData" title="GSignondSessionData"><span class="type">GSignondSessionData</span></a> *session_data</code></em>);
57 <span class="returnvalue">void</span>                <a class="link" href="gsignond-GSignondPlugin.html#gsignond-plugin-response-final" title="gsignond_plugin_response_final ()">gsignond_plugin_response_final</a>      (<em class="parameter"><code><span class="type">GSignondPlugin</span> *self</code></em>,
58                                                          <em class="parameter"><code><a class="link" href="gsignond-GSignondSessionData.html#GSignondSessionData" title="GSignondSessionData"><span class="type">GSignondSessionData</span></a> *session_data</code></em>);
59 <span class="returnvalue">void</span>                <a class="link" href="gsignond-GSignondPlugin.html#gsignond-plugin-status-changed" title="gsignond_plugin_status_changed ()">gsignond_plugin_status_changed</a>      (<em class="parameter"><code><span class="type">GSignondPlugin</span> *self</code></em>,
60                                                          <em class="parameter"><code><a class="link" href="gsignond-GSignondPlugin.html#GSignondPluginState" title="enum GSignondPluginState"><span class="type">GSignondPluginState</span></a> state</code></em>,
61                                                          <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *message</code></em>);
62 <span class="returnvalue">void</span>                <a class="link" href="gsignond-GSignondPlugin.html#gsignond-plugin-store" title="gsignond_plugin_store ()">gsignond_plugin_store</a>               (<em class="parameter"><code><span class="type">GSignondPlugin</span> *self</code></em>,
63                                                          <em class="parameter"><code><a class="link" href="gsignond-GSignondDictionary.html#GSignondDictionary" title="GSignondDictionary"><span class="type">GSignondDictionary</span></a> *identity_method_cache</code></em>);
64 <span class="returnvalue">void</span>                <a class="link" href="gsignond-GSignondPlugin.html#gsignond-plugin-user-action-finished" title="gsignond_plugin_user_action_finished ()">gsignond_plugin_user_action_finished</a>
65                                                         (<em class="parameter"><code><span class="type">GSignondPlugin</span> *self</code></em>,
66                                                          <em class="parameter"><code><a class="link" href="gsignond-GSignondSignonuiData.html#GSignondSignonuiData" title="GSignondSignonuiData"><span class="type">GSignondSignonuiData</span></a> *ui_data</code></em>);
67 <span class="returnvalue">void</span>                <a class="link" href="gsignond-GSignondPlugin.html#gsignond-plugin-user-action-required" title="gsignond_plugin_user_action_required ()">gsignond_plugin_user_action_required</a>
68                                                         (<em class="parameter"><code><span class="type">GSignondPlugin</span> *self</code></em>,
69                                                          <em class="parameter"><code><a class="link" href="gsignond-GSignondSignonuiData.html#GSignondSignonuiData" title="GSignondSignonuiData"><span class="type">GSignondSignonuiData</span></a> *ui_data</code></em>);
70 </pre>
71 </div>
72 <div class="refsect1">
73 <a name="gsignond-GSignondPlugin.description"></a><h2>Description</h2>
74 <p>
75 <span class="type">GSignondPlugin</span> is an interface for implementing authentication plugins.
76 </p>
77 <p>
78 When creating a plugin, write the <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"><span class="type">GObject</span></a> boilerplate code as usual, but
79 </p>
80 <p>
81 a) declare the type as follows:
82 </p>
83 <p>
84 </p>
85 <div class="informalexample">
86   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
87     <tbody>
88       <tr>
89         <td class="listing_lines" align="right"><pre>1
90 2
91 3
92 4</pre></td>
93         <td class="listing_code"><pre class="programlisting">G_DEFINE_TYPE_WITH_CODE (GSignondPasswordPlugin, gsignond_password_plugin,
94                         G_TYPE_OBJECT,
95                         G_IMPLEMENT_INTERFACE (GSIGNOND_TYPE_PLUGIN,
96                                                gsignond_plugin_interface_init));</pre></td>
97       </tr>
98     </tbody>
99   </table>
100 </div>
101
102 <p> 
103 </p>
104 <p>
105 b) implement <code class="function">gsignond_plugin_interface_init</code> as follows:
106 </p>
107 <p>
108 </p>
109 <div class="informalexample">
110   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
111     <tbody>
112       <tr>
113         <td class="listing_lines" align="right"><pre>1
114 2
115 3
116 4
117 5
118 6
119 7
120 8
121 9</pre></td>
122         <td class="listing_code"><pre class="programlisting"><span class="type">static</span> <span class="type">void</span>
123 gsignond_plugin_interface_init (GSignondPluginInterface *iface)
124 {
125     iface-&gt;cancel = gsignond_password_plugin_cancel;
126     iface-&gt;request_initial = gsignond_password_plugin_request_initial;
127     iface-&gt;request = gsignond_password_plugin_request;
128     iface-&gt;user_action_finished = gsignond_password_plugin_user_action_finished;
129     iface-&gt;refresh = gsignond_password_plugin_refresh;
130 }</pre></td>
131       </tr>
132     </tbody>
133   </table>
134 </div>
135
136 <p>
137 </p>
138 <p>
139 where the <code class="function">gsignond_password_plugin_cancel</code> etc. are specific implementations of
140 plugin interface methods that every plugin must provide (see below for when
141 and how they're used by the daemon).
142 </p>
143 <p>
144 c) override <span class="type">"type"</span> and <span class="type">"mechanisms"</span> property 
145 implementations in the plugin class constructor like this:
146 </p>
147 <p>
148 </p>
149 <div class="informalexample">
150   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
151     <tbody>
152       <tr>
153         <td class="listing_lines" align="right"><pre>1
154 2
155 3
156 4
157 5
158 6
159 7
160 8
161 9
162 10
163 11
164 12</pre></td>
165         <td class="listing_code"><pre class="programlisting"><span class="type">static</span> <span class="type">void</span>
166 gsignond_password_plugin_class_init (GSignondPasswordPluginClass *klass)
167 {
168     GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
169
170     gobject_class-&gt;set_property = gsignond_password_plugin_set_property;
171     gobject_class-&gt;get_property = gsignond_password_plugin_get_property;
172
173     g_object_class_override_property (gobject_class, PROP_TYPE, <span class="number">&quot;type&quot;</span>);
174     g_object_class_override_property (gobject_class, PROP_MECHANISMS,
175                                       <span class="number">&quot;mechanisms&quot;</span>);
176 }</pre></td>
177       </tr>
178     </tbody>
179   </table>
180 </div>
181
182 <p>
183 (naturally, plugin's property setter should ignore attempts to set these properties,
184 and plugin's property getter should provide their values when asked)
185 </p>
186 <p>
187 </p>
188 <div class="refsect1">
189 <a name="idp7924464"></a><h2>The plugin API</h2>
190 </div>
191 <p>
192 </p>
193 <p>
194 Plugins implement authentication sessions which are controlled through the
195 plugin API. Authentication sessions follow one another so there is only one active
196 session at a time.
197 </p>
198 <p>
199 The plugin API is a set of methods and signals that should be used in a specific
200 sequence:
201 </p>
202 <p>
203 </p>
204 <div class="itemizedlist"><ul class="itemizedlist" type="disc">
205 <li class="listitem"><p>successful authentication session begins with <a class="link" href="gsignond-GSignondPlugin.html#gsignond-plugin-request-initial" title="gsignond_plugin_request_initial ()"><code class="function">gsignond_plugin_request_initial()</code></a> and ends
206 with the plugin issuing a <span class="type">"response-final"</span> signal</p></li>
207 <li class="listitem"><p>at any point the application can cancel an active session with 
208 <a class="link" href="gsignond-GSignondPlugin.html#gsignond-plugin-cancel" title="gsignond_plugin_cancel ()"><code class="function">gsignond_plugin_cancel()</code></a></p></li>
209 <li class="listitem"><p>at any point the plugin can cancel an active session by issuing <span class="type">"error"</span>
210 signal, which also provides some details about the cancellation reason.</p></li>
211 <li class="listitem"><p>if a session is active, and the plugin has an intermediate response or needs
212 additional information, it issues <span class="type">"response"</span> signal, which the 
213 application should respond to with <a class="link" href="gsignond-GSignondPlugin.html#gsignond-plugin-request" title="gsignond_plugin_request ()"><code class="function">gsignond_plugin_request()</code></a> method. This can
214 happen more than once.</p></li>
215 <li class="listitem"><p>if the plugin needs to launch UI interaction with the user, it's issuing
216 <span class="type">"user-action-required"</span> signal, which the application should
217 follow up with <a class="link" href="gsignond-GSignondPlugin.html#gsignond-plugin-user-action-finished" title="gsignond_plugin_user_action_finished ()"><code class="function">gsignond_plugin_user_action_finished()</code></a> method. This can happen
218 more than once as well.</p></li>
219 <li class="listitem"><p>if, during an active UI session, the application needs a UI refresh 
220 (for example, to fetch a new captcha image), it's
221 requested from the plugin with <a class="link" href="gsignond-GSignondPlugin.html#gsignond-plugin-refresh" title="gsignond_plugin_refresh ()"><code class="function">gsignond_plugin_refresh()</code></a> method, followed
222 by the plugin's response via <span class="type">"refreshed"</span> signal. This can happen
223 more than once.</p></li>
224 <li class="listitem"><p>changes in plugin state are reported through <span class="type">"status-changed"</span> signal.</p></li>
225 <li class="listitem"><p>if the plugin needs to store information in persistent storage, it issues
226 <span class="type">"store"</span> signal. Later, that same information is provided as a
227 parameter to <a class="link" href="gsignond-GSignondPlugin.html#gsignond-plugin-request-initial" title="gsignond_plugin_request_initial ()"><code class="function">gsignond_plugin_request_initial()</code></a>.</p></li>
228 </ul></div>
229 <p>
230 </p>
231 <p>
232 </p>
233 <div class="refsect1">
234 <a name="idp12313904"></a><h2>Example plugins</h2>
235 </div>
236 <p>
237 </p>
238 <p>
239 See example plugin implementation here:
240 <a class="ulink" href="https://code.google.com/p/accounts-sso/source/browse/?repo=gsignond#git%2Fsrc%2Fplugins" target="_top">
241 https://code.google.com/p/accounts-sso/source/browse/?repo=gsignond#git%2Fsrc%2Fplugins</a>.
242 </p>
243 <p>
244 For examples of out of tree plugins, you can have a look at SASL or OAuth plugin
245 implementations:
246 <a class="ulink" href="http://code.google.com/p/accounts-sso/source/browse?repo=gsignond-plugin-sasl" target="_top">
247 http://code.google.com/p/accounts-sso/source/browse?repo=gsignond-plugin-sasl</a>.
248 </p>
249 <p>
250 <a class="ulink" href="http://code.google.com/p/accounts-sso/source/browse?repo=gsignond-plugin-oa" target="_top">
251 http://code.google.com/p/accounts-sso/source/browse?repo=gsignond-plugin-oa</a>.
252 </p>
253 </div>
254 <div class="refsect1">
255 <a name="gsignond-GSignondPlugin.details"></a><h2>Details</h2>
256 <div class="refsect2">
257 <a name="GSignondPluginInterface"></a><h3>struct GSignondPluginInterface</h3>
258 <pre class="programlisting">struct GSignondPluginInterface {
259     GTypeInterface parent;
260
261     void (*cancel) (GSignondPlugin *self);
262     void (*request_initial) (GSignondPlugin *self, 
263                      GSignondSessionData *session_data,
264                      GSignondDictionary *identity_method_cache, 
265                      const gchar *mechanism);
266     void (*request) (GSignondPlugin *self, 
267                      GSignondSessionData *session_data);
268     void (*user_action_finished) (GSignondPlugin *self, 
269                                   GSignondSignonuiData *session_data);
270     void (*refresh) (GSignondPlugin *self, 
271                      GSignondSignonuiData *session_data);
272 };
273 </pre>
274 <p>
275 <a class="link" href="gsignond-GSignondPlugin.html#GSignondPluginInterface" title="struct GSignondPluginInterface"><span class="type">GSignondPluginInterface</span></a> interface containing pointers to methods that all
276 plugin implementations should provide.
277 </p>
278 <div class="variablelist"><table border="0">
279 <col align="left" valign="top">
280 <tbody>
281 <tr>
282 <td><p><span class="term"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-Type-Information.html#GTypeInterface"><span class="type">GTypeInterface</span></a> <em class="structfield"><code><a name="GSignondPluginInterface.parent"></a>parent</code></em>;</span></p></td>
283 <td>parent interface type.</td>
284 </tr>
285 <tr>
286 <td><p><span class="term"><em class="structfield"><code><a name="GSignondPluginInterface.cancel"></a>cancel</code></em> ()</span></p></td>
287 <td>implementation of <a class="link" href="gsignond-GSignondPlugin.html#gsignond-plugin-cancel" title="gsignond_plugin_cancel ()"><code class="function">gsignond_plugin_cancel()</code></a>
288 </td>
289 </tr>
290 <tr>
291 <td><p><span class="term"><em class="structfield"><code><a name="GSignondPluginInterface.request-initial"></a>request_initial</code></em> ()</span></p></td>
292 <td>implementation of <a class="link" href="gsignond-GSignondPlugin.html#gsignond-plugin-request-initial" title="gsignond_plugin_request_initial ()"><code class="function">gsignond_plugin_request_initial()</code></a>
293 </td>
294 </tr>
295 <tr>
296 <td><p><span class="term"><em class="structfield"><code><a name="GSignondPluginInterface.request"></a>request</code></em> ()</span></p></td>
297 <td>implementation of <a class="link" href="gsignond-GSignondPlugin.html#gsignond-plugin-request" title="gsignond_plugin_request ()"><code class="function">gsignond_plugin_request()</code></a>
298 </td>
299 </tr>
300 <tr>
301 <td><p><span class="term"><em class="structfield"><code><a name="GSignondPluginInterface.user-action-finished"></a>user_action_finished</code></em> ()</span></p></td>
302 <td>implementation of <a class="link" href="gsignond-GSignondPlugin.html#gsignond-plugin-user-action-finished" title="gsignond_plugin_user_action_finished ()"><code class="function">gsignond_plugin_user_action_finished()</code></a>
303 </td>
304 </tr>
305 <tr>
306 <td><p><span class="term"><em class="structfield"><code><a name="GSignondPluginInterface.refresh"></a>refresh</code></em> ()</span></p></td>
307 <td>implementation of <a class="link" href="gsignond-GSignondPlugin.html#gsignond-plugin-refresh" title="gsignond_plugin_refresh ()"><code class="function">gsignond_plugin_refresh()</code></a>
308 </td>
309 </tr>
310 </tbody>
311 </table></div>
312 </div>
313 <hr>
314 <div class="refsect2">
315 <a name="GSignondPluginState"></a><h3>enum GSignondPluginState</h3>
316 <pre class="programlisting">typedef enum {
317     GSIGNOND_PLUGIN_STATE_NONE = 0,
318     GSIGNOND_PLUGIN_STATE_RESOLVING,
319     GSIGNOND_PLUGIN_STATE_CONNECTING,
320     GSIGNOND_PLUGIN_STATE_SENDING_DATA,
321     GSIGNOND_PLUGIN_STATE_WAITING,
322     GSIGNOND_PLUGIN_STATE_USER_PENDING,
323     GSIGNOND_PLUGIN_STATE_REFRESHING,
324     GSIGNOND_PLUGIN_STATE_PROCESS_PENDING,
325     GSIGNOND_PLUGIN_STATE_STARTED,
326     GSIGNOND_PLUGIN_STATE_CANCELING,
327     GSIGNOND_PLUGIN_STATE_DONE,
328     GSIGNOND_PLUGIN_STATE_HOLDING,
329 } GSignondPluginState;
330 </pre>
331 <p>
332 The plugin provides state updates by emitting <span class="type">"status-changed"</span>
333 signal with this enum and a string describing what happened.
334 </p>
335 <div class="variablelist"><table border="0">
336 <col align="left" valign="top">
337 <tbody>
338 <tr>
339 <td><p><a name="GSIGNOND-PLUGIN-STATE-NONE:CAPS"></a><span class="term"><code class="literal">GSIGNOND_PLUGIN_STATE_NONE</code></span></p></td>
340 <td>State unknown
341 </td>
342 </tr>
343 <tr>
344 <td><p><a name="GSIGNOND-PLUGIN-STATE-RESOLVING:CAPS"></a><span class="term"><code class="literal">GSIGNOND_PLUGIN_STATE_RESOLVING</code></span></p></td>
345 <td>Resolving remote server host name
346 </td>
347 </tr>
348 <tr>
349 <td><p><a name="GSIGNOND-PLUGIN-STATE-CONNECTING:CAPS"></a><span class="term"><code class="literal">GSIGNOND_PLUGIN_STATE_CONNECTING</code></span></p></td>
350 <td>Connecting to remote server
351 </td>
352 </tr>
353 <tr>
354 <td><p><a name="GSIGNOND-PLUGIN-STATE-SENDING-DATA:CAPS"></a><span class="term"><code class="literal">GSIGNOND_PLUGIN_STATE_SENDING_DATA</code></span></p></td>
355 <td>Sending data to remote server
356 </td>
357 </tr>
358 <tr>
359 <td><p><a name="GSIGNOND-PLUGIN-STATE-WAITING:CAPS"></a><span class="term"><code class="literal">GSIGNOND_PLUGIN_STATE_WAITING</code></span></p></td>
360 <td>Waiting for reply from remote server
361 </td>
362 </tr>
363 <tr>
364 <td><p><a name="GSIGNOND-PLUGIN-STATE-USER-PENDING:CAPS"></a><span class="term"><code class="literal">GSIGNOND_PLUGIN_STATE_USER_PENDING</code></span></p></td>
365 <td>Waiting for response from user
366 </td>
367 </tr>
368 <tr>
369 <td><p><a name="GSIGNOND-PLUGIN-STATE-REFRESHING:CAPS"></a><span class="term"><code class="literal">GSIGNOND_PLUGIN_STATE_REFRESHING</code></span></p></td>
370 <td>Refreshing ui request
371 </td>
372 </tr>
373 <tr>
374 <td><p><a name="GSIGNOND-PLUGIN-STATE-PROCESS-PENDING:CAPS"></a><span class="term"><code class="literal">GSIGNOND_PLUGIN_STATE_PROCESS_PENDING</code></span></p></td>
375 <td>Request has been queued
376 </td>
377 </tr>
378 <tr>
379 <td><p><a name="GSIGNOND-PLUGIN-STATE-STARTED:CAPS"></a><span class="term"><code class="literal">GSIGNOND_PLUGIN_STATE_STARTED</code></span></p></td>
380 <td>Request has been dequeued
381 </td>
382 </tr>
383 <tr>
384 <td><p><a name="GSIGNOND-PLUGIN-STATE-CANCELING:CAPS"></a><span class="term"><code class="literal">GSIGNOND_PLUGIN_STATE_CANCELING</code></span></p></td>
385 <td>Canceling current process
386 </td>
387 </tr>
388 <tr>
389 <td><p><a name="GSIGNOND-PLUGIN-STATE-DONE:CAPS"></a><span class="term"><code class="literal">GSIGNOND_PLUGIN_STATE_DONE</code></span></p></td>
390 <td>Process is finished
391 </td>
392 </tr>
393 <tr>
394 <td><p><a name="GSIGNOND-PLUGIN-STATE-HOLDING:CAPS"></a><span class="term"><code class="literal">GSIGNOND_PLUGIN_STATE_HOLDING</code></span></p></td>
395 <td>Holding long non-expired token
396 </td>
397 </tr>
398 </tbody>
399 </table></div>
400 </div>
401 <hr>
402 <div class="refsect2">
403 <a name="gsignond-plugin-cancel"></a><h3>gsignond_plugin_cancel ()</h3>
404 <pre class="programlisting"><span class="returnvalue">void</span>                gsignond_plugin_cancel              (<em class="parameter"><code><span class="type">GSignondPlugin</span> *self</code></em>);</pre>
405 <p>
406 This method cancels an ongoing authentication session. The plugin implementations
407 should issue a <span class="type">"error"</span> signal with <a class="link" href="gsignond-Errors.html#GSIGNOND-ERROR-SESSION-CANCELED:CAPS"><span class="type">GSIGNOND_ERROR_SESSION_CANCELED</span></a>
408 error, and prepare for a new authentication session.
409 </p>
410 <div class="variablelist"><table border="0">
411 <col align="left" valign="top">
412 <tbody><tr>
413 <td><p><span class="term"><em class="parameter"><code>self</code></em> :</span></p></td>
414 <td>plugin instance</td>
415 </tr></tbody>
416 </table></div>
417 </div>
418 <hr>
419 <div class="refsect2">
420 <a name="gsignond-plugin-error"></a><h3>gsignond_plugin_error ()</h3>
421 <pre class="programlisting"><span class="returnvalue">void</span>                gsignond_plugin_error               (<em class="parameter"><code><span class="type">GSignondPlugin</span> *self</code></em>,
422                                                          <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> *error</code></em>);</pre>
423 <p>
424 Plugin implementations should use this to issue <span class="type">"error"</span>
425 signal. This method should not be used otherwise.
426 </p>
427 <div class="variablelist"><table border="0">
428 <col align="left" valign="top">
429 <tbody>
430 <tr>
431 <td><p><span class="term"><em class="parameter"><code>self</code></em> :</span></p></td>
432 <td>plugin instance</td>
433 </tr>
434 <tr>
435 <td><p><span class="term"><em class="parameter"><code>error</code></em> :</span></p></td>
436 <td>the error</td>
437 </tr>
438 </tbody>
439 </table></div>
440 </div>
441 <hr>
442 <div class="refsect2">
443 <a name="gsignond-plugin-refresh"></a><h3>gsignond_plugin_refresh ()</h3>
444 <pre class="programlisting"><span class="returnvalue">void</span>                gsignond_plugin_refresh             (<em class="parameter"><code><span class="type">GSignondPlugin</span> *self</code></em>,
445                                                          <em class="parameter"><code><a class="link" href="gsignond-GSignondSignonuiData.html#GSignondSignonuiData" title="GSignondSignonuiData"><span class="type">GSignondSignonuiData</span></a> *ui_data</code></em>);</pre>
446 <p>
447 This method asks the plugin to refresh the UI. The plugin responds with
448 <span class="type">"refreshed"</span> signal.
449 </p>
450 <div class="variablelist"><table border="0">
451 <col align="left" valign="top">
452 <tbody>
453 <tr>
454 <td><p><span class="term"><em class="parameter"><code>self</code></em> :</span></p></td>
455 <td>plugin instance</td>
456 </tr>
457 <tr>
458 <td><p><span class="term"><em class="parameter"><code>ui_data</code></em> :</span></p></td>
459 <td>UI refresh parameters</td>
460 </tr>
461 </tbody>
462 </table></div>
463 </div>
464 <hr>
465 <div class="refsect2">
466 <a name="gsignond-plugin-refreshed"></a><h3>gsignond_plugin_refreshed ()</h3>
467 <pre class="programlisting"><span class="returnvalue">void</span>                gsignond_plugin_refreshed           (<em class="parameter"><code><span class="type">GSignondPlugin</span> *self</code></em>,
468                                                          <em class="parameter"><code><a class="link" href="gsignond-GSignondSignonuiData.html#GSignondSignonuiData" title="GSignondSignonuiData"><span class="type">GSignondSignonuiData</span></a> *ui_data</code></em>);</pre>
469 <p>
470 Plugin implementations should use this to issue <span class="type">"refreshed"</span>
471 signal. This method should not be used otherwise.
472 </p>
473 <div class="variablelist"><table border="0">
474 <col align="left" valign="top">
475 <tbody>
476 <tr>
477 <td><p><span class="term"><em class="parameter"><code>self</code></em> :</span></p></td>
478 <td>plugin instance</td>
479 </tr>
480 <tr>
481 <td><p><span class="term"><em class="parameter"><code>ui_data</code></em> :</span></p></td>
482 <td>UI data</td>
483 </tr>
484 </tbody>
485 </table></div>
486 </div>
487 <hr>
488 <div class="refsect2">
489 <a name="gsignond-plugin-request"></a><h3>gsignond_plugin_request ()</h3>
490 <pre class="programlisting"><span class="returnvalue">void</span>                gsignond_plugin_request             (<em class="parameter"><code><span class="type">GSignondPlugin</span> *self</code></em>,
491                                                          <em class="parameter"><code><a class="link" href="gsignond-GSignondSessionData.html#GSignondSessionData" title="GSignondSessionData"><span class="type">GSignondSessionData</span></a> *session_data</code></em>);</pre>
492 <p>
493 This method provides the plugin with additional parameters for the session
494 after the plugin has asked for it via <span class="type">"response"</span> signal.
495 </p>
496 <div class="variablelist"><table border="0">
497 <col align="left" valign="top">
498 <tbody>
499 <tr>
500 <td><p><span class="term"><em class="parameter"><code>self</code></em> :</span></p></td>
501 <td>plugin instance</td>
502 </tr>
503 <tr>
504 <td><p><span class="term"><em class="parameter"><code>session_data</code></em> :</span></p></td>
505 <td>additional parameters for the session</td>
506 </tr>
507 </tbody>
508 </table></div>
509 </div>
510 <hr>
511 <div class="refsect2">
512 <a name="gsignond-plugin-request-initial"></a><h3>gsignond_plugin_request_initial ()</h3>
513 <pre class="programlisting"><span class="returnvalue">void</span>                gsignond_plugin_request_initial     (<em class="parameter"><code><span class="type">GSignondPlugin</span> *self</code></em>,
514                                                          <em class="parameter"><code><a class="link" href="gsignond-GSignondSessionData.html#GSignondSessionData" title="GSignondSessionData"><span class="type">GSignondSessionData</span></a> *session_data</code></em>,
515                                                          <em class="parameter"><code><a class="link" href="gsignond-GSignondDictionary.html#GSignondDictionary" title="GSignondDictionary"><span class="type">GSignondDictionary</span></a> *identity_method_cache</code></em>,
516                                                          <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *mechanism</code></em>);</pre>
517 <p>
518 This method starts a new authentication session.
519 </p>
520 <div class="variablelist"><table border="0">
521 <col align="left" valign="top">
522 <tbody>
523 <tr>
524 <td><p><span class="term"><em class="parameter"><code>self</code></em> :</span></p></td>
525 <td>plugin instance</td>
526 </tr>
527 <tr>
528 <td><p><span class="term"><em class="parameter"><code>session_data</code></em> :</span></p></td>
529 <td>parameters for the session</td>
530 </tr>
531 <tr>
532 <td><p><span class="term"><em class="parameter"><code>identity_method_cache</code></em> :</span></p></td>
533 <td>data from persistent storage, saved previously via
534 <span class="type">"store"</span> signal</td>
535 </tr>
536 <tr>
537 <td><p><span class="term"><em class="parameter"><code>mechanism</code></em> :</span></p></td>
538 <td>mechanism to use for the authentication</td>
539 </tr>
540 </tbody>
541 </table></div>
542 </div>
543 <hr>
544 <div class="refsect2">
545 <a name="gsignond-plugin-response"></a><h3>gsignond_plugin_response ()</h3>
546 <pre class="programlisting"><span class="returnvalue">void</span>                gsignond_plugin_response            (<em class="parameter"><code><span class="type">GSignondPlugin</span> *self</code></em>,
547                                                          <em class="parameter"><code><a class="link" href="gsignond-GSignondSessionData.html#GSignondSessionData" title="GSignondSessionData"><span class="type">GSignondSessionData</span></a> *session_data</code></em>);</pre>
548 <p>
549 Plugin implementations should use this to issue <span class="type">"response"</span>
550 signal. This method should not be used otherwise.
551 </p>
552 <div class="variablelist"><table border="0">
553 <col align="left" valign="top">
554 <tbody>
555 <tr>
556 <td><p><span class="term"><em class="parameter"><code>self</code></em> :</span></p></td>
557 <td>plugin instance</td>
558 </tr>
559 <tr>
560 <td><p><span class="term"><em class="parameter"><code>session_data</code></em> :</span></p></td>
561 <td>session data</td>
562 </tr>
563 </tbody>
564 </table></div>
565 </div>
566 <hr>
567 <div class="refsect2">
568 <a name="gsignond-plugin-response-final"></a><h3>gsignond_plugin_response_final ()</h3>
569 <pre class="programlisting"><span class="returnvalue">void</span>                gsignond_plugin_response_final      (<em class="parameter"><code><span class="type">GSignondPlugin</span> *self</code></em>,
570                                                          <em class="parameter"><code><a class="link" href="gsignond-GSignondSessionData.html#GSignondSessionData" title="GSignondSessionData"><span class="type">GSignondSessionData</span></a> *session_data</code></em>);</pre>
571 <p>
572 Plugin implementations should use this to issue <span class="type">"response-final"</span>
573 signal. This method should not be used otherwise.
574 </p>
575 <div class="variablelist"><table border="0">
576 <col align="left" valign="top">
577 <tbody>
578 <tr>
579 <td><p><span class="term"><em class="parameter"><code>self</code></em> :</span></p></td>
580 <td>plugin instance</td>
581 </tr>
582 <tr>
583 <td><p><span class="term"><em class="parameter"><code>session_data</code></em> :</span></p></td>
584 <td>session data</td>
585 </tr>
586 </tbody>
587 </table></div>
588 </div>
589 <hr>
590 <div class="refsect2">
591 <a name="gsignond-plugin-status-changed"></a><h3>gsignond_plugin_status_changed ()</h3>
592 <pre class="programlisting"><span class="returnvalue">void</span>                gsignond_plugin_status_changed      (<em class="parameter"><code><span class="type">GSignondPlugin</span> *self</code></em>,
593                                                          <em class="parameter"><code><a class="link" href="gsignond-GSignondPlugin.html#GSignondPluginState" title="enum GSignondPluginState"><span class="type">GSignondPluginState</span></a> state</code></em>,
594                                                          <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *message</code></em>);</pre>
595 <p>
596 Plugin implementations should use this to issue <span class="type">"status-changed"</span>
597 signal. This method should not be used otherwise.
598 </p>
599 <div class="variablelist"><table border="0">
600 <col align="left" valign="top">
601 <tbody>
602 <tr>
603 <td><p><span class="term"><em class="parameter"><code>self</code></em> :</span></p></td>
604 <td>plugin instance</td>
605 </tr>
606 <tr>
607 <td><p><span class="term"><em class="parameter"><code>state</code></em> :</span></p></td>
608 <td>the new state</td>
609 </tr>
610 <tr>
611 <td><p><span class="term"><em class="parameter"><code>message</code></em> :</span></p></td>
612 <td>the message</td>
613 </tr>
614 </tbody>
615 </table></div>
616 </div>
617 <hr>
618 <div class="refsect2">
619 <a name="gsignond-plugin-store"></a><h3>gsignond_plugin_store ()</h3>
620 <pre class="programlisting"><span class="returnvalue">void</span>                gsignond_plugin_store               (<em class="parameter"><code><span class="type">GSignondPlugin</span> *self</code></em>,
621                                                          <em class="parameter"><code><a class="link" href="gsignond-GSignondDictionary.html#GSignondDictionary" title="GSignondDictionary"><span class="type">GSignondDictionary</span></a> *identity_method_cache</code></em>);</pre>
622 <p>
623 Plugin implementations should use this to issue <span class="type">"store"</span>
624 signal. This method should not be used otherwise.
625 </p>
626 <div class="variablelist"><table border="0">
627 <col align="left" valign="top">
628 <tbody>
629 <tr>
630 <td><p><span class="term"><em class="parameter"><code>self</code></em> :</span></p></td>
631 <td>plugin instance</td>
632 </tr>
633 <tr>
634 <td><p><span class="term"><em class="parameter"><code>identity_method_cache</code></em> :</span></p></td>
635 <td>data to store</td>
636 </tr>
637 </tbody>
638 </table></div>
639 </div>
640 <hr>
641 <div class="refsect2">
642 <a name="gsignond-plugin-user-action-finished"></a><h3>gsignond_plugin_user_action_finished ()</h3>
643 <pre class="programlisting"><span class="returnvalue">void</span>                gsignond_plugin_user_action_finished
644                                                         (<em class="parameter"><code><span class="type">GSignondPlugin</span> *self</code></em>,
645                                                          <em class="parameter"><code><a class="link" href="gsignond-GSignondSignonuiData.html#GSignondSignonuiData" title="GSignondSignonuiData"><span class="type">GSignondSignonuiData</span></a> *ui_data</code></em>);</pre>
646 <p>
647 This method provides the plugin with the results of UI interaction
648 after the plugin has asked for it via <span class="type">"user-action-required"</span> signal.
649 </p>
650 <div class="variablelist"><table border="0">
651 <col align="left" valign="top">
652 <tbody>
653 <tr>
654 <td><p><span class="term"><em class="parameter"><code>self</code></em> :</span></p></td>
655 <td>plugin instance</td>
656 </tr>
657 <tr>
658 <td><p><span class="term"><em class="parameter"><code>ui_data</code></em> :</span></p></td>
659 <td>results of UI interaction</td>
660 </tr>
661 </tbody>
662 </table></div>
663 </div>
664 <hr>
665 <div class="refsect2">
666 <a name="gsignond-plugin-user-action-required"></a><h3>gsignond_plugin_user_action_required ()</h3>
667 <pre class="programlisting"><span class="returnvalue">void</span>                gsignond_plugin_user_action_required
668                                                         (<em class="parameter"><code><span class="type">GSignondPlugin</span> *self</code></em>,
669                                                          <em class="parameter"><code><a class="link" href="gsignond-GSignondSignonuiData.html#GSignondSignonuiData" title="GSignondSignonuiData"><span class="type">GSignondSignonuiData</span></a> *ui_data</code></em>);</pre>
670 <p>
671 Plugin implementations should use this to issue <span class="type">"user-action-required"</span>
672 signal. This method should not be used otherwise.
673 </p>
674 <div class="variablelist"><table border="0">
675 <col align="left" valign="top">
676 <tbody>
677 <tr>
678 <td><p><span class="term"><em class="parameter"><code>self</code></em> :</span></p></td>
679 <td>plugin instance</td>
680 </tr>
681 <tr>
682 <td><p><span class="term"><em class="parameter"><code>ui_data</code></em> :</span></p></td>
683 <td>UI data</td>
684 </tr>
685 </tbody>
686 </table></div>
687 </div>
688 </div>
689 </div>
690 <div class="footer">
691 <hr>
692           Generated by GTK-Doc V1.19.1</div>
693 </body>
694 </html>