blob: 5348848d340a84d7e32aad51b18e6c294dd90e1a [file] [log] [blame]
Joe Gregorio5dc0f5c2012-06-05 13:34:31 -04001<?xml version="1.0" encoding="ascii"?>
2<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
3 "DTD/xhtml1-transitional.dtd">
4<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
5<head>
6 <title>oauth2client.appengine</title>
7 <link rel="stylesheet" href="epydoc.css" type="text/css" />
8 <script type="text/javascript" src="epydoc.js"></script>
9</head>
10
11<body bgcolor="white" text="black" link="blue" vlink="#204080"
12 alink="#204080">
13<!-- ==================== NAVIGATION BAR ==================== -->
14<table class="navbar" border="0" width="100%" cellpadding="0"
15 bgcolor="#a0c0ff" cellspacing="0">
16 <tr valign="middle">
17
18 <!-- Tree link -->
19 <th>&nbsp;&nbsp;&nbsp;<a
20 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
21
22 <!-- Index link -->
23 <th>&nbsp;&nbsp;&nbsp;<a
24 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
25
26 <!-- Help link -->
27 <th>&nbsp;&nbsp;&nbsp;<a
28 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
29
30 <th class="navbar" width="100%"></th>
31 </tr>
32</table>
33<table width="100%" cellpadding="0" cellspacing="0">
34 <tr valign="top">
35 <td width="100%">
36 <span class="breadcrumbs">
37 <a href="oauth2client-module.html">Package&nbsp;oauth2client</a> ::
38 Module&nbsp;appengine
39 </span>
40 </td>
41 <td>
42 <table cellpadding="0" cellspacing="0">
43 <!-- hide/show private -->
44 <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
45 onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
46 <tr><td align="right"><span class="options"
47 >[<a href="frames.html" target="_top">frames</a
48 >]&nbsp;|&nbsp;<a href="oauth2client.appengine-module.html"
49 target="_top">no&nbsp;frames</a>]</span></td></tr>
50 </table>
51 </td>
52 </tr>
53</table>
54<!-- ==================== MODULE DESCRIPTION ==================== -->
55<h1 class="epydoc">Module appengine</h1><p class="nomargin-top"><span class="codelink"><a href="oauth2client.appengine-pysrc.html">source&nbsp;code</a></span></p>
56<pre class="literalblock">
57Utilities for Google App Engine
58
59Utilities for making it easier to use OAuth 2.0 on Google App Engine.
60
61</pre>
62
63<hr />
64<div class="fields"> <p><strong>Author:</strong>
65 jcgregorio@google.com (Joe Gregorio)
66 </p>
67</div><!-- ==================== CLASSES ==================== -->
68<a name="section-Classes"></a>
69<table class="summary" border="1" cellpadding="3"
70 cellspacing="0" width="100%" bgcolor="white">
71<tr bgcolor="#70b0f0" class="table-header">
72 <td colspan="2" class="table-header">
73 <table border="0" cellpadding="0" cellspacing="0" width="100%">
74 <tr valign="top">
75 <td align="left"><span class="table-header">Classes</span></td>
76 <td align="right" valign="top"
77 ><span class="options">[<a href="#section-Classes"
78 class="privatelink" onclick="toggle_private();"
79 >hide private</a>]</span></td>
80 </tr>
81 </table>
82 </td>
83</tr>
84<tr>
85 <td width="15%" align="right" valign="top" class="summary">
86 <span class="summary-type">&nbsp;</span>
87 </td><td class="summary">
88 <a href="oauth2client.appengine.InvalidClientSecretsError-class.html" class="summary-name">InvalidClientSecretsError</a><br />
89 The client_secrets.json file is malformed or missing required fields.
90 </td>
91 </tr>
92<tr>
93 <td width="15%" align="right" valign="top" class="summary">
94 <span class="summary-type">&nbsp;</span>
95 </td><td class="summary">
Joe Gregorio1b425aa2012-08-24 12:04:34 -040096 <a href="oauth2client.appengine.InvalidXsrfTokenError-class.html" class="summary-name">InvalidXsrfTokenError</a><br />
97 The XSRF token is invalid or expired.
98 </td>
99 </tr>
100<tr>
101 <td width="15%" align="right" valign="top" class="summary">
102 <span class="summary-type">&nbsp;</span>
103 </td><td class="summary">
104 <a href="oauth2client.appengine.SiteXsrfSecretKey-class.html" class="summary-name">SiteXsrfSecretKey</a><br />
105 Storage for the sites XSRF secret key.
106 </td>
107 </tr>
108<tr>
109 <td width="15%" align="right" valign="top" class="summary">
110 <span class="summary-type">&nbsp;</span>
111 </td><td class="summary">
Joe Gregorio52a5c532013-01-24 16:19:07 -0500112 <a href="oauth2client.appengine.SiteXsrfSecretKeyNDB-class.html" class="summary-name">SiteXsrfSecretKeyNDB</a><br />
113 NDB Model for storage for the sites XSRF secret key.
114 </td>
115 </tr>
116<tr>
117 <td width="15%" align="right" valign="top" class="summary">
118 <span class="summary-type">&nbsp;</span>
119 </td><td class="summary">
Joe Gregorio5dc0f5c2012-06-05 13:34:31 -0400120 <a href="oauth2client.appengine.AppAssertionCredentials-class.html" class="summary-name">AppAssertionCredentials</a><br />
121 Credentials object for App Engine Assertion Grants
122 </td>
123 </tr>
124<tr>
125 <td width="15%" align="right" valign="top" class="summary">
126 <span class="summary-type">&nbsp;</span>
127 </td><td class="summary">
128 <a href="oauth2client.appengine.FlowProperty-class.html" class="summary-name">FlowProperty</a><br />
129 App Engine datastore Property for Flow.
130 </td>
131 </tr>
132<tr>
133 <td width="15%" align="right" valign="top" class="summary">
134 <span class="summary-type">&nbsp;</span>
135 </td><td class="summary">
Joe Gregorio52a5c532013-01-24 16:19:07 -0500136 <a href="oauth2client.appengine.FlowNDBProperty-class.html" class="summary-name">FlowNDBProperty</a><br />
137 App Engine NDB datastore Property for Flow.
138 </td>
139 </tr>
140<tr>
141 <td width="15%" align="right" valign="top" class="summary">
142 <span class="summary-type">&nbsp;</span>
143 </td><td class="summary">
Joe Gregorio5dc0f5c2012-06-05 13:34:31 -0400144 <a href="oauth2client.appengine.CredentialsProperty-class.html" class="summary-name">CredentialsProperty</a><br />
145 App Engine datastore Property for Credentials.
146 </td>
147 </tr>
148<tr>
149 <td width="15%" align="right" valign="top" class="summary">
150 <span class="summary-type">&nbsp;</span>
151 </td><td class="summary">
Joe Gregorio52a5c532013-01-24 16:19:07 -0500152 <a href="oauth2client.appengine.CredentialsNDBProperty-class.html" class="summary-name">CredentialsNDBProperty</a><br />
153 App Engine NDB datastore Property for Credentials.
154 </td>
155 </tr>
156<tr>
157 <td width="15%" align="right" valign="top" class="summary">
158 <span class="summary-type">&nbsp;</span>
159 </td><td class="summary">
Joe Gregorio5dc0f5c2012-06-05 13:34:31 -0400160 <a href="oauth2client.appengine.StorageByKeyName-class.html" class="summary-name">StorageByKeyName</a><br />
Joe Gregorio52a5c532013-01-24 16:19:07 -0500161 Store and retrieve a credential to and from the App Engine datastore.
Joe Gregorio5dc0f5c2012-06-05 13:34:31 -0400162 </td>
163 </tr>
164<tr>
165 <td width="15%" align="right" valign="top" class="summary">
166 <span class="summary-type">&nbsp;</span>
167 </td><td class="summary">
168 <a href="oauth2client.appengine.CredentialsModel-class.html" class="summary-name">CredentialsModel</a><br />
169 Storage for OAuth 2.0 Credentials
170 </td>
171 </tr>
172<tr>
173 <td width="15%" align="right" valign="top" class="summary">
174 <span class="summary-type">&nbsp;</span>
175 </td><td class="summary">
Joe Gregorio52a5c532013-01-24 16:19:07 -0500176 <a href="oauth2client.appengine.CredentialsNDBModel-class.html" class="summary-name">CredentialsNDBModel</a><br />
177 NDB Model for storage of OAuth 2.0 Credentials
178 </td>
179 </tr>
180<tr>
181 <td width="15%" align="right" valign="top" class="summary">
182 <span class="summary-type">&nbsp;</span>
183 </td><td class="summary">
Joe Gregorio5dc0f5c2012-06-05 13:34:31 -0400184 <a href="oauth2client.appengine.OAuth2Decorator-class.html" class="summary-name">OAuth2Decorator</a><br />
185 Utility for making OAuth 2.0 easier.
186 </td>
187 </tr>
188<tr>
189 <td width="15%" align="right" valign="top" class="summary">
190 <span class="summary-type">&nbsp;</span>
191 </td><td class="summary">
192 <a href="oauth2client.appengine.OAuth2DecoratorFromClientSecrets-class.html" class="summary-name">OAuth2DecoratorFromClientSecrets</a><br />
193 An OAuth2Decorator that builds from a clientsecrets file.
194 </td>
195 </tr>
Joe Gregorio5dc0f5c2012-06-05 13:34:31 -0400196</table>
197<!-- ==================== FUNCTIONS ==================== -->
198<a name="section-Functions"></a>
199<table class="summary" border="1" cellpadding="3"
200 cellspacing="0" width="100%" bgcolor="white">
201<tr bgcolor="#70b0f0" class="table-header">
202 <td colspan="2" class="table-header">
203 <table border="0" cellpadding="0" cellspacing="0" width="100%">
204 <tr valign="top">
205 <td align="left"><span class="table-header">Functions</span></td>
206 <td align="right" valign="top"
207 ><span class="options">[<a href="#section-Functions"
208 class="privatelink" onclick="toggle_private();"
209 >hide private</a>]</span></td>
210 </tr>
211 </table>
212 </td>
213</tr>
Joe Gregorio1b425aa2012-08-24 12:04:34 -0400214<tr class="private">
Joe Gregorio5dc0f5c2012-06-05 13:34:31 -0400215 <td width="15%" align="right" valign="top" class="summary">
216 <span class="summary-type">&nbsp;</span>
217 </td><td class="summary">
218 <table width="100%" cellpadding="0" cellspacing="0" border="0">
219 <tr>
Joe Gregorio0cd347a2012-08-30 08:22:27 -0400220 <td><span class="summary-sig"><a href="oauth2client.appengine-module.html#_safe_html" class="summary-sig-name" onclick="show_private();">_safe_html</a>(<span class="summary-sig-arg">s</span>)</span><br />
221 Escape text to make it safe to display.</td>
222 <td align="right" valign="top">
223 <span class="codelink"><a href="oauth2client.appengine-pysrc.html#_safe_html">source&nbsp;code</a></span>
224
225 </td>
226 </tr>
227 </table>
228
229 </td>
230 </tr>
231<tr class="private">
232 <td width="15%" align="right" valign="top" class="summary">
233 <span class="summary-type">&nbsp;</span>
234 </td><td class="summary">
235 <table width="100%" cellpadding="0" cellspacing="0" border="0">
236 <tr>
Joe Gregorio1b425aa2012-08-24 12:04:34 -0400237 <td><span class="summary-sig"><a name="_generate_new_xsrf_secret_key"></a><span class="summary-sig-name">_generate_new_xsrf_secret_key</span>()</span><br />
238 Returns a random XSRF secret key.</td>
Joe Gregorio5dc0f5c2012-06-05 13:34:31 -0400239 <td align="right" valign="top">
Joe Gregorio1b425aa2012-08-24 12:04:34 -0400240 <span class="codelink"><a href="oauth2client.appengine-pysrc.html#_generate_new_xsrf_secret_key">source&nbsp;code</a></span>
Joe Gregorio5dc0f5c2012-06-05 13:34:31 -0400241
242 </td>
243 </tr>
244 </table>
245
246 </td>
247 </tr>
248<tr>
249 <td width="15%" align="right" valign="top" class="summary">
250 <span class="summary-type">&nbsp;</span>
251 </td><td class="summary">
252 <table width="100%" cellpadding="0" cellspacing="0" border="0">
253 <tr>
Joe Gregorio1b425aa2012-08-24 12:04:34 -0400254 <td><span class="summary-sig"><a href="oauth2client.appengine-module.html#xsrf_secret_key" class="summary-sig-name">xsrf_secret_key</a>()</span><br />
255 Return the secret key for use for XSRF protection.</td>
Joe Gregorio5dc0f5c2012-06-05 13:34:31 -0400256 <td align="right" valign="top">
Joe Gregorio1b425aa2012-08-24 12:04:34 -0400257 <span class="codelink"><a href="oauth2client.appengine-pysrc.html#xsrf_secret_key">source&nbsp;code</a></span>
258
259 </td>
260 </tr>
261 </table>
262
263 </td>
264 </tr>
265<tr class="private">
266 <td width="15%" align="right" valign="top" class="summary">
267 <span class="summary-type">&nbsp;</span>
268 </td><td class="summary">
269 <table width="100%" cellpadding="0" cellspacing="0" border="0">
270 <tr>
271 <td><span class="summary-sig"><a href="oauth2client.appengine-module.html#_build_state_value" class="summary-sig-name" onclick="show_private();">_build_state_value</a>(<span class="summary-sig-arg">request_handler</span>,
272 <span class="summary-sig-arg">user</span>)</span><br />
273 Composes the value for the 'state' parameter.</td>
274 <td align="right" valign="top">
275 <span class="codelink"><a href="oauth2client.appengine-pysrc.html#_build_state_value">source&nbsp;code</a></span>
276
277 </td>
278 </tr>
279 </table>
280
281 </td>
282 </tr>
283<tr class="private">
284 <td width="15%" align="right" valign="top" class="summary">
285 <span class="summary-type">&nbsp;</span>
286 </td><td class="summary">
287 <table width="100%" cellpadding="0" cellspacing="0" border="0">
288 <tr>
289 <td><span class="summary-sig"><a href="oauth2client.appengine-module.html#_parse_state_value" class="summary-sig-name" onclick="show_private();">_parse_state_value</a>(<span class="summary-sig-arg">state</span>,
290 <span class="summary-sig-arg">user</span>)</span><br />
291 Parse the value of the 'state' parameter.</td>
292 <td align="right" valign="top">
293 <span class="codelink"><a href="oauth2client.appengine-pysrc.html#_parse_state_value">source&nbsp;code</a></span>
Joe Gregorio5dc0f5c2012-06-05 13:34:31 -0400294
295 </td>
296 </tr>
297 </table>
298
299 </td>
300 </tr>
Joe Gregoriof4839b02012-09-06 13:47:24 -0400301<tr>
302 <td width="15%" align="right" valign="top" class="summary">
303 <span class="summary-type">&nbsp;</span>
304 </td><td class="summary">
305 <table width="100%" cellpadding="0" cellspacing="0" border="0">
306 <tr>
307 <td><span class="summary-sig"><a href="oauth2client.appengine-module.html#oauth2decorator_from_clientsecrets" class="summary-sig-name">oauth2decorator_from_clientsecrets</a>(<span class="summary-sig-arg">filename</span>,
308 <span class="summary-sig-arg">scope</span>,
309 <span class="summary-sig-arg">message</span>=<span class="summary-sig-default">None</span>,
310 <span class="summary-sig-arg">cache</span>=<span class="summary-sig-default">None</span>)</span><br />
311 Creates an OAuth2Decorator populated from a clientsecrets file.</td>
312 <td align="right" valign="top">
313 <span class="codelink"><a href="oauth2client.appengine-pysrc.html#oauth2decorator_from_clientsecrets">source&nbsp;code</a></span>
314
315 </td>
316 </tr>
317 </table>
318
319 </td>
320 </tr>
Joe Gregorio5dc0f5c2012-06-05 13:34:31 -0400321</table>
322<!-- ==================== VARIABLES ==================== -->
323<a name="section-Variables"></a>
324<table class="summary" border="1" cellpadding="3"
325 cellspacing="0" width="100%" bgcolor="white">
326<tr bgcolor="#70b0f0" class="table-header">
327 <td colspan="2" class="table-header">
328 <table border="0" cellpadding="0" cellspacing="0" width="100%">
329 <tr valign="top">
330 <td align="left"><span class="table-header">Variables</span></td>
331 <td align="right" valign="top"
332 ><span class="options">[<a href="#section-Variables"
333 class="privatelink" onclick="toggle_private();"
334 >hide private</a>]</span></td>
335 </tr>
336 </table>
337 </td>
338</tr>
339<tr>
340 <td width="15%" align="right" valign="top" class="summary">
341 <span class="summary-type">&nbsp;</span>
342 </td><td class="summary">
Joe Gregorioe7a0c472012-07-12 11:46:04 -0400343 <a name="logger"></a><span class="summary-name">logger</span> = <code title="logging.getLogger(__name__)">logging.getLogger(__name__)</code>
344 </td>
345 </tr>
346<tr>
347 <td width="15%" align="right" valign="top" class="summary">
348 <span class="summary-type">&nbsp;</span>
349 </td><td class="summary">
Joe Gregoriof4839b02012-09-06 13:47:24 -0400350 <a name="OAUTH2CLIENT_NAMESPACE"></a><span class="summary-name">OAUTH2CLIENT_NAMESPACE</span> = <code title="'oauth2client#ns'">'oauth2client#ns'</code>
Joe Gregorio5dc0f5c2012-06-05 13:34:31 -0400351 </td>
352 </tr>
353<tr>
354 <td width="15%" align="right" valign="top" class="summary">
355 <span class="summary-type">&nbsp;</span>
356 </td><td class="summary">
Joe Gregoriof4839b02012-09-06 13:47:24 -0400357 <a name="XSRF_MEMCACHE_ID"></a><span class="summary-name">XSRF_MEMCACHE_ID</span> = <code title="'xsrf_secret_key'">'xsrf_secret_key'</code>
Joe Gregorio5dc0f5c2012-06-05 13:34:31 -0400358 </td>
359 </tr>
360</table>
361<!-- ==================== FUNCTION DETAILS ==================== -->
362<a name="section-FunctionDetails"></a>
363<table class="details" border="1" cellpadding="3"
364 cellspacing="0" width="100%" bgcolor="white">
365<tr bgcolor="#70b0f0" class="table-header">
366 <td colspan="2" class="table-header">
367 <table border="0" cellpadding="0" cellspacing="0" width="100%">
368 <tr valign="top">
369 <td align="left"><span class="table-header">Function Details</span></td>
370 <td align="right" valign="top"
371 ><span class="options">[<a href="#section-FunctionDetails"
372 class="privatelink" onclick="toggle_private();"
373 >hide private</a>]</span></td>
374 </tr>
375 </table>
376 </td>
377</tr>
378</table>
Joe Gregorio0cd347a2012-08-30 08:22:27 -0400379<a name="_safe_html"></a>
380<div class="private">
381<table class="details" border="1" cellpadding="3"
382 cellspacing="0" width="100%" bgcolor="white">
383<tr><td>
384 <table width="100%" cellpadding="0" cellspacing="0" border="0">
385 <tr valign="top"><td>
386 <h3 class="epydoc"><span class="sig"><span class="sig-name">_safe_html</span>(<span class="sig-arg">s</span>)</span>
387 </h3>
388 </td><td align="right" valign="top"
389 ><span class="codelink"><a href="oauth2client.appengine-pysrc.html#_safe_html">source&nbsp;code</a></span>&nbsp;
390 </td>
391 </tr></table>
392
393 <pre class="literalblock">
394Escape text to make it safe to display.
395
396Args:
397 s: string, The text to escape.
398
399Returns:
400 The escaped text as a string.
401
402</pre>
403 <dl class="fields">
404 </dl>
405</td></tr></table>
406</div>
Joe Gregorio1b425aa2012-08-24 12:04:34 -0400407<a name="xsrf_secret_key"></a>
Joe Gregorio5dc0f5c2012-06-05 13:34:31 -0400408<div>
409<table class="details" border="1" cellpadding="3"
410 cellspacing="0" width="100%" bgcolor="white">
411<tr><td>
412 <table width="100%" cellpadding="0" cellspacing="0" border="0">
413 <tr valign="top"><td>
Joe Gregorio1b425aa2012-08-24 12:04:34 -0400414 <h3 class="epydoc"><span class="sig"><span class="sig-name">xsrf_secret_key</span>()</span>
Joe Gregorio5dc0f5c2012-06-05 13:34:31 -0400415 </h3>
416 </td><td align="right" valign="top"
Joe Gregorio1b425aa2012-08-24 12:04:34 -0400417 ><span class="codelink"><a href="oauth2client.appengine-pysrc.html#xsrf_secret_key">source&nbsp;code</a></span>&nbsp;
Joe Gregorio5dc0f5c2012-06-05 13:34:31 -0400418 </td>
419 </tr></table>
420
421 <pre class="literalblock">
Joe Gregorio1b425aa2012-08-24 12:04:34 -0400422Return the secret key for use for XSRF protection.
Joe Gregorio5dc0f5c2012-06-05 13:34:31 -0400423
Joe Gregorio1b425aa2012-08-24 12:04:34 -0400424If the Site entity does not have a secret key, this method will also create
425one and persist it.
Joe Gregorio5dc0f5c2012-06-05 13:34:31 -0400426
Joe Gregorio1b425aa2012-08-24 12:04:34 -0400427Returns:
428 The secret key.
Joe Gregorio5dc0f5c2012-06-05 13:34:31 -0400429
430</pre>
431 <dl class="fields">
432 </dl>
433</td></tr></table>
434</div>
Joe Gregorio1b425aa2012-08-24 12:04:34 -0400435<a name="_build_state_value"></a>
436<div class="private">
Joe Gregorio5dc0f5c2012-06-05 13:34:31 -0400437<table class="details" border="1" cellpadding="3"
438 cellspacing="0" width="100%" bgcolor="white">
439<tr><td>
Joe Gregorio1b425aa2012-08-24 12:04:34 -0400440 <table width="100%" cellpadding="0" cellspacing="0" border="0">
441 <tr valign="top"><td>
442 <h3 class="epydoc"><span class="sig"><span class="sig-name">_build_state_value</span>(<span class="sig-arg">request_handler</span>,
443 <span class="sig-arg">user</span>)</span>
444 </h3>
445 </td><td align="right" valign="top"
446 ><span class="codelink"><a href="oauth2client.appengine-pysrc.html#_build_state_value">source&nbsp;code</a></span>&nbsp;
447 </td>
448 </tr></table>
Joe Gregorio5dc0f5c2012-06-05 13:34:31 -0400449
Joe Gregorio1b425aa2012-08-24 12:04:34 -0400450 <pre class="literalblock">
451Composes the value for the 'state' parameter.
452
453Packs the current request URI and an XSRF token into an opaque string that
454can be passed to the authentication server via the 'state' parameter.
455
456Args:
457 request_handler: webapp.RequestHandler, The request.
458 user: google.appengine.api.users.User, The current user.
459
460Returns:
461 The state value as a string.
462
463</pre>
Joe Gregorio5dc0f5c2012-06-05 13:34:31 -0400464 <dl class="fields">
465 </dl>
Joe Gregorio1b425aa2012-08-24 12:04:34 -0400466</td></tr></table>
467</div>
468<a name="_parse_state_value"></a>
469<div class="private">
470<table class="details" border="1" cellpadding="3"
471 cellspacing="0" width="100%" bgcolor="white">
472<tr><td>
473 <table width="100%" cellpadding="0" cellspacing="0" border="0">
474 <tr valign="top"><td>
475 <h3 class="epydoc"><span class="sig"><span class="sig-name">_parse_state_value</span>(<span class="sig-arg">state</span>,
476 <span class="sig-arg">user</span>)</span>
477 </h3>
478 </td><td align="right" valign="top"
479 ><span class="codelink"><a href="oauth2client.appengine-pysrc.html#_parse_state_value">source&nbsp;code</a></span>&nbsp;
480 </td>
481 </tr></table>
482
483 <pre class="literalblock">
484Parse the value of the 'state' parameter.
485
486Parses the value and validates the XSRF token in the state parameter.
487
488Args:
489 state: string, The value of the state parameter.
490 user: google.appengine.api.users.User, The current user.
491
492Raises:
493 InvalidXsrfTokenError: if the XSRF token is invalid.
494
495Returns:
496 The redirect URI.
497
498</pre>
Joe Gregorio5dc0f5c2012-06-05 13:34:31 -0400499 <dl class="fields">
Joe Gregorio5dc0f5c2012-06-05 13:34:31 -0400500 </dl>
501</td></tr></table>
502</div>
Joe Gregoriof4839b02012-09-06 13:47:24 -0400503<a name="oauth2decorator_from_clientsecrets"></a>
504<div>
505<table class="details" border="1" cellpadding="3"
506 cellspacing="0" width="100%" bgcolor="white">
507<tr><td>
508 <table width="100%" cellpadding="0" cellspacing="0" border="0">
509 <tr valign="top"><td>
510 <h3 class="epydoc"><span class="sig"><span class="sig-name">oauth2decorator_from_clientsecrets</span>(<span class="sig-arg">filename</span>,
511 <span class="sig-arg">scope</span>,
512 <span class="sig-arg">message</span>=<span class="sig-default">None</span>,
513 <span class="sig-arg">cache</span>=<span class="sig-default">None</span>)</span>
514 </h3>
515 </td><td align="right" valign="top"
516 ><span class="codelink"><a href="oauth2client.appengine-pysrc.html#oauth2decorator_from_clientsecrets">source&nbsp;code</a></span>&nbsp;
517 </td>
518 </tr></table>
519
520 <pre class="literalblock">
521Creates an OAuth2Decorator populated from a clientsecrets file.
522
523Args:
524 filename: string, File name of client secrets.
525 scope: string or list of strings, scope(s) of the credentials being
526 requested.
527 message: string, A friendly string to display to the user if the
528 clientsecrets file is missing or invalid. The message may contain HTML and
529 will be presented on the web interface for any method that uses the
530 decorator.
531 cache: An optional cache service client that implements get() and set()
532 methods. See clientsecrets.loadfile() for details.
533
534Returns: An OAuth2Decorator
535
536</pre>
537 <dl class="fields">
538 <dt>Decorators:</dt>
539 <dd><ul class="nomargin-top">
540 <li><code>@util.positional(2)</code></li>
541 </ul></dd>
542 </dl>
543</td></tr></table>
544</div>
Joe Gregorio5dc0f5c2012-06-05 13:34:31 -0400545<br />
546<!-- ==================== NAVIGATION BAR ==================== -->
547<table class="navbar" border="0" width="100%" cellpadding="0"
548 bgcolor="#a0c0ff" cellspacing="0">
549 <tr valign="middle">
550
551 <!-- Tree link -->
552 <th>&nbsp;&nbsp;&nbsp;<a
553 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
554
555 <!-- Index link -->
556 <th>&nbsp;&nbsp;&nbsp;<a
557 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
558
559 <!-- Help link -->
560 <th>&nbsp;&nbsp;&nbsp;<a
561 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
562
563 <th class="navbar" width="100%"></th>
564 </tr>
565</table>
566<table border="0" cellpadding="0" cellspacing="0" width="100%%">
567 <tr>
568 <td align="left" class="footer">
Joe Gregorio52a5c532013-01-24 16:19:07 -0500569 Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:31 2013
Joe Gregorio5dc0f5c2012-06-05 13:34:31 -0400570 </td>
571 <td align="right" class="footer">
572 <a target="mainFrame" href="http://epydoc.sourceforge.net"
573 >http://epydoc.sourceforge.net</a>
574 </td>
575 </tr>
576</table>
577
578<script type="text/javascript">
579 <!--
580 // Private objects are initially displayed (because if
581 // javascript is turned off then we want them to be
582 // visible); but by default, we want to hide them. So hide
583 // them unless we have a cookie that says to show them.
584 checkCookie();
585 // -->
586</script>
587</body>
588</html>