Exemple #1
0
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
Exemple #2
0
 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 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
Exemple #4
0
 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
Exemple #5
0
    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
Exemple #6
0
 def r(rv):
     if isinstance(rv, (str, unicode)) and rv[0] != '+':
         raise poplib.error_proto(rv)
     return rv
Exemple #7
0
 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.")
Exemple #10
0
 def pass_(self, pswd):
     if pswd != self.password:
         raise error_proto("Wrong password.")
Exemple #11
0
 def user(self, user):
     if user != self.username:
         raise error_proto("Wrong username.")
Exemple #12
0
 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)