| Index: chrome/common/extensions/docs/examples/apps/hello-python/oauth2/clients/smtp.py
|
| diff --git a/chrome/common/extensions/docs/examples/apps/hello-python/oauth2/clients/smtp.py b/chrome/common/extensions/docs/examples/apps/hello-python/oauth2/clients/smtp.py
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..3e7bf0b0bc22b7570daea35ebf073fbddad47976
|
| --- /dev/null
|
| +++ b/chrome/common/extensions/docs/examples/apps/hello-python/oauth2/clients/smtp.py
|
| @@ -0,0 +1,41 @@
|
| +"""
|
| +The MIT License
|
| +
|
| +Copyright (c) 2007-2010 Leah Culver, Joe Stump, Mark Paschal, Vic Fryzel
|
| +
|
| +Permission is hereby granted, free of charge, to any person obtaining a copy
|
| +of this software and associated documentation files (the "Software"), to deal
|
| +in the Software without restriction, including without limitation the rights
|
| +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
| +copies of the Software, and to permit persons to whom the Software is
|
| +furnished to do so, subject to the following conditions:
|
| +
|
| +The above copyright notice and this permission notice shall be included in
|
| +all copies or substantial portions of the Software.
|
| +
|
| +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
| +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
| +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
| +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
| +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
| +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
| +THE SOFTWARE.
|
| +"""
|
| +
|
| +import oauth2
|
| +import smtplib
|
| +import base64
|
| +
|
| +
|
| +class SMTP(smtplib.SMTP):
|
| + """SMTP wrapper for smtplib.SMTP that implements XOAUTH."""
|
| +
|
| + def authenticate(self, url, consumer, token):
|
| + if consumer is not None and not isinstance(consumer, oauth2.Consumer):
|
| + raise ValueError("Invalid consumer.")
|
| +
|
| + if token is not None and not isinstance(token, oauth2.Token):
|
| + raise ValueError("Invalid token.")
|
| +
|
| + self.docmd('AUTH', 'XOAUTH %s' % \
|
| + base64.b64encode(oauth2.build_xoauth_string(url, consumer, token)))
|
|
|