Пример #1
0
 def validate(self):
     if not Form.validate(self):
         return False
     self.raw_message = flask.request.files["message"].stream.read()
     try:
         digest = pyzor.digest.DataDigester(
             email.message_from_string(self.raw_message)).value
         if digest != self.digest.data:
             self.add_error("digest", "Digest does not match message.")
             return False
         client = pyzor.client.Client(timeout=20)
         try:
             response = client.check(digest)
         except pyzor.TimeoutError as e:
             self.add_error("message", "Temporary error please try again.")
             self.logger.warn("Timeout: %s", e)
             return False
         except pyzor.CommError as e:
             self.add_error("message", "Temporary error please try again.")
             self.logger.warn("Error: %s", e)
             return False
         if not response.is_ok():
             self.add_error("message", "Temporary error please try again.")
             self.logger.warn("Invalid response from server: %s", response)
             return False
         if int(response["Count"]) == 0:
             self.add_error("message", "Message not reported as spam.")
             return False
         if int(response["WL-Count"]) != 0:
             self.add_error("message", "Message is already whitelisted.")
             return False
     except AssertionError:
         self.add_error("message", "Invalid message.")
         return False
     return True
Пример #2
0
 def validate(self):
     if not Form.validate(self):
         return False
     self.raw_message = flask.request.files["message"].stream.read()
     try:
         digest = pyzor.digest.DataDigester(
             email.message_from_string(self.raw_message)).value
         if digest != self.digest.data:
             self.add_error("digest", "Digest does not match message.")
             return False
         client = pyzor.client.Client(timeout=20)
         try:
             response = client.check(digest)
         except pyzor.TimeoutError as e:
             self.add_error("message", "Temporary error please try again.")
             self.logger.warn("Timeout: %s", e)
             return False
         except pyzor.CommError as e:
             self.add_error("message", "Temporary error please try again.")
             self.logger.warn("Error: %s", e)
             return False
         if not response.is_ok():
             self.add_error("message", "Temporary error please try again.")
             self.logger.warn("Invalid response from server: %s", response)
             return False
         if int(response["Count"]) == 0:
             self.add_error("message", "Message not reported as spam.")
             return False
         if int(response["WL-Count"]) != 0:
             self.add_error("message", "Message is already whitelisted.")
             return False
     except AssertionError:
         self.add_error("message", "Invalid message.")
         return False
     return True
Пример #3
0
    def check_pyzor(self, msg, target=None):
        """Check the message with the defined pyzor servers.
        Stores the digest so it can be later used for reporting.

        :return: True if the message is listed on Pyzor at least
          `pyzor_max` times and was never whitelisted.
        """
        if not self["use_pyzor"]:
            return False
        digest = pyzor.digest.DataDigester(msg.msg).value
        # Store the digest data in the local message context, so it can be
        # used for reporting later.
        self.set_local(msg, "digest", digest)
        msg.plugin_tags["PYZOR_DIGEST"] = digest

        client = self["client"]
        self.ctxt.log.debug("Checking digest %s with Pyzor", digest)
        for server in self["pyzor_servers"]:
            response = client.check(digest, server.rsplit(":", 1))
            r_count = int(response["Count"])
            wl_count = int(response["WL-Count"])
            self.ctxt.log.debug("Response from %s: (%s, %s)", server, r_count,
                                wl_count)
            msg.plugin_tags["PYZOR_COUNT"] = r_count
            msg.plugin_tags["PYZOR_WL_COUNT"] = wl_count
            if r_count >= self["pyzor_max"] and not wl_count:
                return True
        return False
Пример #4
0
    def check_pyzor(self, msg, target=None):
        """Check the message with the defined pyzor servers.
        Stores the digest so it can be later used for reporting.

        :return: True if the message is listed on Pyzor at least
          `pyzor_max` times and was never whitelisted.
        """
        if not self["use_pyzor"]:
            return False
        digest = pyzor.digest.DataDigester(msg.msg).value
        # Store the digest data in the local message context, so it can be
        # used for reporting later.
        self.set_local(msg, "digest", digest)
        msg.plugin_tags["PYZOR_DIGEST"] = digest

        client = self["client"]
        self.ctxt.log.debug("Checking digest %s with Pyzor", digest)
        for server in self["pyzor_servers"]:
            response = client.check(digest, server.rsplit(":", 1))
            r_count = int(response["Count"])
            wl_count = int(response["WL-Count"])
            self.ctxt.log.debug("Response from %s: (%s, %s)", server, r_count,
                                wl_count)
            msg.plugin_tags["PYZOR_COUNT"] = r_count
            msg.plugin_tags["PYZOR_WL_COUNT"] = wl_count
            if r_count >= self["pyzor_max"] and not wl_count:
                return True
        return False
Пример #5
0
    def check_pyzor(self, msg, target=None):
        """Check the message with the defined pyzor servers. Stores the
        digest so it can be used
        """
        if not self["use_pyzor"]:
            return False
        digest = pyzor.digest.DataDigester(msg.msg).value
        # Store the digest data in the local message context, so it can be
        # used for reporting later.
        self.set_local(msg, "digest", digest)

        client = self["client"]
        self.ctxt.log.debug("Checking digest %s with Pyzor", digest)
        for server in self["pyzor_servers"]:
            response = client.check(digest, server.rsplit(":", 1))
            r_count = int(response["Count"])
            wl_count = int(response["WL-Count"])
            self.ctxt.log.debug("Response from %s: (%s, %s)", server, r_count,
                                wl_count)
            if r_count >= self["pyzor_max"] and not wl_count:
                return True
        return False
Пример #6
0
    def check_pyzor(self, msg, target=None):
        """Check the message with the defined pyzor servers. Stores the
        digest so it can be used
        """
        if not self["use_pyzor"]:
            return False
        digest = pyzor.digest.DataDigester(msg.msg).value
        # Store the digest data in the local message context, so it can be
        # used for reporting later.
        self.set_local(msg, "digest", digest)

        client = self["client"]
        self.ctxt.log.debug("Checking digest %s with Pyzor", digest)
        for server in self["pyzor_servers"]:
            response = client.check(digest, server.rsplit(":", 1))
            r_count = int(response["Count"])
            wl_count = int(response["WL-Count"])
            self.ctxt.log.debug("Response from %s: (%s, %s)", server, r_count,
                                wl_count)
            if r_count >= self["pyzor_max"] and not wl_count:
                return True
        return False