Ejemplo n.º 1
0
    def __init__(self,
                 ct_logs,
                 db,
                 cert_db,
                 temp_db_factory,
                 monitor_state_dir,
                 agent=None,
                 state_keeper_class=None):
        """Initialize from a CtLogs proto."""
        threading.Thread.__init__(self)

        self.__monitors = []
        self.__db = db
        if not agent:
            agent = twisted_client.Agent(reactor)
        if not state_keeper_class:
            state_keeper_class = state.StateKeeper

        for log in ct_logs.ctlog:
            if not log.log_server or not log.log_id or not log.public_key_info:
                raise RuntimeError("Cannot start monitor: log proto has "
                                   "missing or empty fields: %s" % log)

            try:
                temp_db = temp_db_factory.create_storage(log.log_server)
                client = async_log_client.AsyncLogClient(
                    agent, log.log_server, temp_db)
                hasher = merkle.TreeHasher()
                verifier = verify.LogVerifier(log.public_key_info,
                                              merkle.MerkleVerifier(hasher))
                # Convert from standard Base64 to URL-safe Base64 so that the
                # log ID can be used as part of a file path.
                log_id_urlsafe = log.log_id.replace('/', '_').replace('+', '-')
                state_keeper = state_keeper_class(monitor_state_dir + "/" +
                                                  log_id_urlsafe)
                log_key = db.get_log_id(log.log_server)
                self.__monitors.append(
                    monitor.Monitor(client, verifier, hasher, db, cert_db,
                                    log_key, state_keeper))
            except:
                logging.error("Error starting monitor for log: %s" % log)
                raise

        self.__last_update_start_time = 0
        self.__stopped = False
        self.__called_later = None
Ejemplo n.º 2
0
    def __init__(self, ct_logs, db, temp_db_factory, monitor_state_dir):
        """Initialize from a CtLogs proto."""
        threading.Thread.__init__(self)

        self.__monitors = []
        self.__db = db
        for log in ct_logs.ctlog:
            if not log.log_server or not log.log_id or not log.public_key_info:
                raise RuntimeError("Cannot start monitor: log proto has "
                                   "missing or empty fields: %s" % log)
            client = log_client.LogClient(log.log_server)
            hasher = merkle.TreeHasher()
            verifier = verify.LogVerifier(log.public_key_info,
                                          merkle.MerkleVerifier(hasher))
            state_keeper = state.StateKeeper(FLAGS.monitor_state_dir + "/" +
                                             log.log_id)
            temp_db = temp_db_factory.create_storage(log.log_server)
            self.__monitors.append(
                monitor.Monitor(client, verifier, hasher, db, temp_db,
                                state_keeper))

        self.__last_update_start_time = 0
        self.__stopped = False
Ejemplo n.º 3
0
 def create_monitor(self, client, skip_scan_entry=True):
     m = monitor.Monitor(client, self.verifier, self.hasher, self.db,
                         self.cert_db, 7, self.state_keeper)
     if m:
         m._scan_entries = mock.Mock()
     return m
 def create_monitor(self, client):
     return monitor.Monitor(client, self.verifier, self.hasher, self.db,
                            self.temp_db, self.state_keeper)