예제 #1
0
def edit_job(job_id):
    # TODO prefill form with current values
    job = Job.objects.get(id=job_id)
    if job:
        if not can_do_stuff_with_job(current_user, job.owner):
            flask.flash('You are not allowed to edit this job')
            return flask.redirect("/jobs/show")
        if flask.request.method == 'POST':
            data = flask.request.form
            engine = data.get('mutation_engine')
            if data.get('fuzzer') == "afl" or "syzkaller":
                engine = 'external'

            Job.objects(id=job_id).update(**{
                'name': data.get('name'),
                'description': data.get('description'),
                'fuzzer': data.get('fuzzer'),
                'mutation_engine': engine,
                'verifier': data.get('verifier'),
            })

            return flask.redirect("/jobs/show")
        else:
            engines = [x['name'] for x in f3c_global_config.mutation_engines]
            fuzzers = [x['name'] for x in f3c_global_config.fuzzers]
            verifiers = [x['name'] for x in f3c_global_config.verifiers]
            return flask.render_template('jobs_edit.html',
                                         job=job,
                                         engines=engines,
                                         fuzzers=fuzzers,
                                         verifiers=verifiers)
    else:
        flask.abort(400, description="Invalid job ID")
예제 #2
0
def get_original_and_crash_test_case_of_crash(crash):
    crash_test_case = crash.test_case
    original_test_case = list(Job.objects(id=crash.job_id))[0]["samples"]
    encoded_crash_test_case = base64.b64encode(crash_test_case).decode('ascii')

    if testcase_can_be_diffed(crash.job_id):
        if (original_test_case.startswith(b'PK')):
            original_test_case = get_original_crash_test_case_of_zipfile(
                crash_test_case, original_test_case)
        encoded_original_test_case = base64.b64encode(
            original_test_case).decode('ascii')
    else:
        encoded_original_test_case = None

    return encoded_original_test_case, encoded_crash_test_case
예제 #3
0
 def _get_active_jobs(self):
     res = Job.objects(enabled=True)
     return res
예제 #4
0
def get_job_name_of_job_id(job_id):
    return list(Job.objects(id=job_id))[0]["name"]
예제 #5
0
def testcase_can_be_diffed(job_id):
    mutation_engine = list(Job.objects(id=job_id))[0]["mutation_engine"]
    if mutation_engine == "radamsa":
        return True
    else:
        return False