18ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen""" 28ae428e0fb7feea16d79853f29447469a93bedffKristian MonsenThe MIT License 38ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen 48ae428e0fb7feea16d79853f29447469a93bedffKristian MonsenCopyright (c) 2007-2010 Leah Culver, Joe Stump, Mark Paschal, Vic Fryzel 58ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen 68ae428e0fb7feea16d79853f29447469a93bedffKristian MonsenPermission is hereby granted, free of charge, to any person obtaining a copy 78ae428e0fb7feea16d79853f29447469a93bedffKristian Monsenof this software and associated documentation files (the "Software"), to deal 88ae428e0fb7feea16d79853f29447469a93bedffKristian Monsenin the Software without restriction, including without limitation the rights 98ae428e0fb7feea16d79853f29447469a93bedffKristian Monsento use, copy, modify, merge, publish, distribute, sublicense, and/or sell 108ae428e0fb7feea16d79853f29447469a93bedffKristian Monsencopies of the Software, and to permit persons to whom the Software is 118ae428e0fb7feea16d79853f29447469a93bedffKristian Monsenfurnished to do so, subject to the following conditions: 128ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen 138ae428e0fb7feea16d79853f29447469a93bedffKristian MonsenThe above copyright notice and this permission notice shall be included in 148ae428e0fb7feea16d79853f29447469a93bedffKristian Monsenall copies or substantial portions of the Software. 158ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen 168ae428e0fb7feea16d79853f29447469a93bedffKristian MonsenTHE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 178ae428e0fb7feea16d79853f29447469a93bedffKristian MonsenIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 188ae428e0fb7feea16d79853f29447469a93bedffKristian MonsenFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 198ae428e0fb7feea16d79853f29447469a93bedffKristian MonsenAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 208ae428e0fb7feea16d79853f29447469a93bedffKristian MonsenLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 218ae428e0fb7feea16d79853f29447469a93bedffKristian MonsenOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 228ae428e0fb7feea16d79853f29447469a93bedffKristian MonsenTHE SOFTWARE. 238ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen""" 248ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen 258ae428e0fb7feea16d79853f29447469a93bedffKristian Monsenimport oauth2 268ae428e0fb7feea16d79853f29447469a93bedffKristian Monsenimport imaplib 278ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen 288ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen 298ae428e0fb7feea16d79853f29447469a93bedffKristian Monsenclass IMAP4_SSL(imaplib.IMAP4_SSL): 308ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen """IMAP wrapper for imaplib.IMAP4_SSL that implements XOAUTH.""" 318ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen 328ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen def authenticate(self, url, consumer, token): 338ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen if consumer is not None and not isinstance(consumer, oauth2.Consumer): 348ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen raise ValueError("Invalid consumer.") 358ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen 368ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen if token is not None and not isinstance(token, oauth2.Token): 378ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen raise ValueError("Invalid token.") 388ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen 398ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen imaplib.IMAP4_SSL.authenticate(self, 'XOAUTH', 408ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen lambda x: oauth2.build_xoauth_string(url, consumer, token)) 41