def POP_stls(self, keyfile=None, certfile=None, cert_reqs=ssl.CERT_NONE, ca_certs=None): """ Start a TLS session on the active connection as specified in RFC 2595. http://bugs.python.org/issue4473 """ if hasattr(self, '_tls_established') and self._tls_established: raise poplib.error_proto('-ERR TLS session already established') try: resp = self._shortcmd('STLS') self.sock = ssl.wrap_socket(self.sock, keyfile, certfile, cert_reqs=cert_reqs, ca_certs=ca_certs) self.file = self.sock.makefile('rb') self._tls_established = True except poplib.error_proto: raise poplib.error_proto("Couldn't establish TLS session") return resp
def _getline(self): line = self.sock.readline() if self._debugging > 1: print '*get*', `line` if not line: raise error_proto('-ERR EOF') octets = len(line) # server can send any combination of CR & LF # however, 'readline()' returns lines ending in LF # so only possibilities are ...LF, ...CRLF, CR...LF if line[-2:] == CRLF: return line[:-2], octets if line[0] == CR: return line[1:-1], octets return line[:-1], octets
def authenticate(self, request, **credentials): socket.setdefaulttimeout(5) webmail = credentials.get('webmail') password = credentials.get('password') mail_server = credentials.get('mail_server') user_model = get_user_model() try: kw = {user_model.USERNAME_FIELD: webmail} user = user_model.objects.get(**kw) except user_model.DoesNotExist: #No raise. Its perfectly fine, as user object wont exist during first time login. The view handling authentication will handle this case. return None try: conn = poplib.POP3_SSL(host=mail_server, port=poplib.POP3_SSL_PORT) conn.user(webmail) if 'OK' in conn.pass_(password): conn.quit() return user else: raise poplib.error_proto("-ERR Authentication failed.") except poplib.error_proto: #For development use only. Use logging later. print "\n" print "Poplib Error Proto" print "\n" raise #Re-Raise the exception except socket.error as e: s = e.message if e.message == "timed out": s = "Socket Timed Out." #For development use only. Use logging later. print "\n" print s print "\n" raise #Re-Raise exception
def r(rv): if isinstance(rv, (str, unicode)) and rv[0] != '+': raise poplib.error_proto(rv) return rv
def pass_(self, pswd): if pswd != self.password: raise error_proto("Wrong password.")
def user(self, user): if user != self.username: raise error_proto("Wrong username.")
def starttls(self): result = self._shortcmd('STLS') if not result.startswith('+OK'): raise poplib.error_proto('STLS failed.') self.sock = ssl.wrap_socket(self.sock) self.file = MySSLFakeFile(self.sock)