Пример #1
0
def scan(file, probelist, frontend_scan):
    try:
        with session_transaction() as session:
            log.debug("scan_id: %s fileweb_id: %s received %s", frontend_scan,
                      file, probelist)
            user = User.get_by_rmqvhost(session)
            scan = scan_ctrl.new(frontend_scan, user, session)
            # Now, create one subtask per file to scan per probe
            new_jobs = []
            for probe in probelist:
                if probe in probe_ctrl.available_probes:
                    j = Job(scan.id, file, probe)
                    session.add(j)
                    new_jobs.append(j)
                else:
                    # send an error message to not stuck the scan
                    # One probe asked is no more present
                    res = probe_ctrl.create_error_results(probe,
                                                          "missing probe",
                                                          session)
                    celery_frontend.scan_result(file,
                                                probe,
                                                res)
            session.commit()
            scan_ctrl.launch(scan, new_jobs, session)
            log.info("scan_id %s: file %s received / %d active probe(s) / "
                     "%d job(s) launched",
                     scan.scan_id,
                     file,
                     len(probe_ctrl.available_probes),
                     len(scan.jobs))
    except Exception as e:
        log.exception(e)
        raise
Пример #2
0
def scan(file, probelist, frontend_scan):
    try:
        with session_transaction() as session:
            log.debug("scan_id: %s fileweb_id: %s received %s", frontend_scan,
                      file, probelist)
            user = User.get_by_rmqvhost(session)
            scan = scan_ctrl.new(frontend_scan, user, session)
            # Now, create one subtask per file to scan per probe
            new_jobs = []
            for probe in probelist:
                if probe in probe_ctrl.available_probes:
                    j = Job(scan.id, file, probe)
                    session.add(j)
                    new_jobs.append(j)
                else:
                    # send an error message to not stuck the scan
                    # One probe asked is no more present
                    res = probe_ctrl.create_error_results(
                        probe, "missing probe", session)
                    celery_frontend.scan_result(file, probe, res)
            session.commit()
            scan_ctrl.launch(scan, new_jobs, session)
            log.info(
                "scan_id %s: file %s received / %d active probe(s) / "
                "%d job(s) launched", scan.scan_id, file,
                len(probe_ctrl.available_probes), len(scan.jobs))
    except Exception as e:
        log.exception(type(e).__name__ + " : " + str(e))
        raise
Пример #3
0
def scan(frontend_scanid, scan_request_dict):
    try:
        with session_transaction() as session:
            log.debug("scanid: %s received %s", frontend_scanid,
                      scan_request_dict)
            user = User.get_by_rmqvhost(session)
            scan_request = IrmaScanRequest(scan_request_dict)
            scan = scan_ctrl.new(frontend_scanid, user, scan_request.nb_files,
                                 session)
            available_probelist = probe_ctrl.get_list(session)
            # Now, create one subtask per file to
            # scan per probe
            new_jobs = []
            for filehash in scan_request.filehashes():
                probelist = scan_request.get_probelist(filehash)
                scan_ctrl.check_probelist(scan, probelist, available_probelist,
                                          session)
                for probe in probelist:
                    j = Job(scan.id, filehash, probe)
                    session.add(j)
                    new_jobs.append(j)
            session.commit()
            scan_ctrl.launch(scan, new_jobs, session)
            celery_frontend.scan_launched(scan.scan_id, scan_request.to_dict())
            log.info(
                "scanid %s: %d file(s) received / %d active probe(s) / "
                "%d job(s) launched", scan.scan_id, scan.nb_files,
                len(available_probelist), len(scan.jobs))
    except Exception as e:
        log.exception(e)
        raise
Пример #4
0
def scan(frontend_scanid, scan_request_dict):
    try:
        with session_transaction() as session:
            log.debug("scanid: %s received %s", frontend_scanid,
                      scan_request_dict)
            user = User.get_by_rmqvhost(session)
            scan_request = IrmaScanRequest(scan_request_dict)
            scan = scan_ctrl.new(frontend_scanid, user, scan_request.nb_files,
                                 session)
            available_probelist = probe_ctrl.get_list(session)
            # Now, create one subtask per file to
            # scan per probe
            new_jobs = []
            for filehash in scan_request.filehashes():
                probelist = scan_request.get_probelist(filehash)
                scan_ctrl.check_probelist(scan, probelist,
                                          available_probelist, session)
                for probe in probelist:
                    j = Job(scan.id, filehash, probe)
                    session.add(j)
                    new_jobs.append(j)
            session.commit()
            scan_ctrl.launch(scan, new_jobs, session)
            celery_frontend.scan_launched(scan.scan_id,
                                          scan_request.to_dict())
            log.info("scanid %s: %d file(s) received / %d active probe(s) / "
                     "%d job(s) launched",
                     scan.scan_id,
                     scan.nb_files,
                     len(available_probelist),
                     len(scan.jobs))
    except Exception as e:
        log.exception(e)
        raise
Пример #5
0
def scan_flush(scan_id):
    try:
        log.info("scan %s: flush requested", scan_id)
        with session_transaction() as session:
            user = User.get_by_rmqvhost(session)
            scan = Scan.get_scan(scan_id, user.id, session)
            scan_ctrl.flush(scan, session)
    except Exception as e:
        log.exception(type(e).__name__ + " : " + str(e))
        return
Пример #6
0
def scan_flush(frontend_scan_id):
    try:
        log.info("scan_id %s: scan flush requested", frontend_scan_id)
        with session_transaction() as session:
            user = User.get_by_rmqvhost(session)
            scan = Scan.get_scan(frontend_scan_id, user.id, session)
            scan_ctrl.flush(scan, session)
    except Exception as e:
        log.exception(e)
        return
Пример #7
0
def scan_cancel(frontend_scan_id):
    try:
        with session_transaction() as session:
            user = User.get_by_rmqvhost(session)
            scan = Scan.get_scan(frontend_scan_id, user.id, session)
            res = scan_ctrl.cancel(scan, session)
            return IrmaTaskReturn.success(res)
    except Exception as e:
        log.exception(e)
        return IrmaTaskReturn.error("cancel error on brain")
Пример #8
0
def scan_flush(scan_id):
    try:
        log.info("scan %s: flush requested", scan_id)
        with session_transaction() as session:
            user = User.get_by_rmqvhost(session)
            scan = Scan.get_scan(scan_id, user.id, session)
            scan_ctrl.flush(scan, session)
    except Exception as e:
        log.exception(e)
        return
Пример #9
0
def scan_cancel(frontend_scan_id):
    try:
        with session_transaction() as session:
            user = User.get_by_rmqvhost(session)
            scan = Scan.get_scan(frontend_scan_id, user.id, session)
            res = scan_ctrl.cancel(scan, session)
            return IrmaTaskReturn.success(res)
    except Exception as e:
        log.exception(e)
        return IrmaTaskReturn.error("cancel error on brain")
Пример #10
0
def files_flush(files, scan_id):
    try:
        with session_transaction() as session:
            user = User.get_by_rmqvhost(session)
            scan = Scan.get_scan(scan_id, user.id, session)
            ftpuser = scan.user.ftpuser
            log.debug("Flushing files %s", files)
            ftp_ctrl.flush(ftpuser, files)
    except Exception as e:
        log.exception(e)
        return
Пример #11
0
def scan_cancel(scan_id):
    try:
        log.info("scan %s: cancel", scan_id)
        with session_transaction() as session:
            user = User.get_by_rmqvhost(session)
            scan = Scan.get_scan(scan_id, user.id, session)
            res = scan_ctrl.cancel(scan, session)
            return IrmaTaskReturn.success(res)
    except Exception as e:
        log.exception(type(e).__name__ + " : " + str(e))
        return IrmaTaskReturn.error("cancel error on brain")
Пример #12
0
def files_flush(files, scan_id):
    try:
        with session_transaction() as session:
            user = User.get_by_rmqvhost(session)
            scan = Scan.get_scan(scan_id, user.id, session)
            ftpuser = scan.user.ftpuser
            log.debug("Flushing files %s", files)
            ftp_ctrl.flush(ftpuser, files)
    except Exception as e:
        log.exception(type(e).__name__ + " : " + str(e))
        return
Пример #13
0
 def test004_get_by_rmqvhost_multiple_found(self):
     self.session.query.side_effect = MultipleResultsFound
     with self.assertRaises(IrmaDatabaseError):
         User.get_by_rmqvhost(self.session, rmqvhost="whatever")
Пример #14
0
 def test003_get_by_rmqvhost_not_found(self):
     self.session.query.side_effect = NoResultFound
     with self.assertRaises(IrmaDatabaseResultNotFound):
         User.get_by_rmqvhost(self.session, rmqvhost="whatever")
Пример #15
0
 def test002_get_by_rmqvhost(self):
     User.get_by_rmqvhost(self.session)
     self.session.query.assert_called_once_with(User)
     m_filter = self.session.query(User).filter
     m_filter.assert_called_once()
     m_filter().one.assert_called_once()
Пример #16
0

if len(sys.argv) not in (4, 5):
    print("usage: {0} <username> <rmqvhost> <ftpuser> [quota]\n"
          "      with <username> a string\n"
          "           <rmqvhost> the rmqvhost used for the frontend\n"
          "           <ftpuser> the ftpuser used by the frontend\n"
          "           [quota] the number of file scan quota\n"
          "example: {0} test1 mqfrontend frontend"
          "".format(sys.argv[0]))
    sys.exit(1)

name = sys.argv[1]
rmqvhost = sys.argv[2]
ftpuser = sys.argv[3]
# quota is in number of files (0 means disabled)
quota = int(sys.argv[4]) if len(sys.argv) == 5 else 0
with session_transaction() as session:
    try:
        user = User.get_by_rmqvhost(rmqvhost, session)
        print("rmqvhost {0} is already assigned to user {1}. "
              "Updating with new parameters.".format(user.name, user.rmqvhost))
        user = user.load(user.id, session)
        user.name = name
        user.ftpuser = ftpuser
        user.quota = quota
        user.update(['name', 'ftpuser', 'quota'], session)
    except IrmaDatabaseResultNotFound:
        user = User(name=name, rmqvhost=rmqvhost, ftpuser=ftpuser, quota=quota)
        user.save(session)
Пример #17
0
    print("SQL directory does not exist {0}" "..creating".format(dirname))
    os.makedirs(dirname)
    os.chmod(dirname, 0o777)
elif not (os.path.isdir(dirname)):
    print("Error. SQL directory is a not a dir {0}" "".format(dirname))
    raise IrmaDatabaseError("Can not create Brain database dir")

if not os.path.exists(db_name):
    # touch like method to create a rw-rw-rw- file for db
    open(db_name, 'a').close()
    os.chmod(db_name, 0o666)

# Retrieve database informations
url = config.get_sql_url()
engine = create_engine(url, echo=config.sql_debug_enabled())
# and create Database in case
Base.metadata.create_all(engine)

with session_transaction() as session:
    try:
        user = User.get_by_rmqvhost(session, rmqvhost=rmqvhost)
        print("rmqvhost {0} is already assigned to user {1}. "
              "Updating with new parameters.".format(user.name, user.rmqvhost))
        user = user.load(user.id, session)
        user.name = name
        user.ftpuser = ftpuser
        user.update(['name', 'ftpuser'], session)
    except IrmaDatabaseResultNotFound:
        user = User(name=name, rmqvhost=rmqvhost, ftpuser=ftpuser)
        user.save(session)
Пример #18
0
def get_userid(rmqvhost):
    with session_query() as session:
        user = User.get_by_rmqvhost(rmqvhost, session)
        return user.id
Пример #19
0
    print("SQL directory does not exist {0}"
          "..creating".format(dirname))
    os.makedirs(dirname)
    os.chmod(dirname, 0o777)
elif not (os.path.isdir(dirname)):
    print("Error. SQL directory is a not a dir {0}"
          "".format(dirname))
    raise IrmaDatabaseError("Can not create Brain database dir")

if not os.path.exists(db_name):
    # touch like method to create a rw-rw-rw- file for db
    open(db_name, 'a').close()
    os.chmod(db_name, 0o666)

# Retrieve database informations
engine = create_engine(config.sqldb.url, echo=config.sql_debug_enabled())
# and create Database in case
Base.metadata.create_all(engine)

with session_transaction() as session:
    try:
        user = User.get_by_rmqvhost(session, rmqvhost=rmqvhost)
        print("rmqvhost {0} is already assigned to user {1}. "
              "Updating with new parameters.".format(user.name, user.rmqvhost))
        session.query(User)\
            .filter_by(id=user.id)\
            .update({'name': name, 'ftpuser': ftpuser})
    except IrmaDatabaseResultNotFound:
        user = User(name=name, rmqvhost=rmqvhost, ftpuser=ftpuser)
        session.add(user)