Example #1
0
def upload_view():
    upload_file = request.files['file']
    file_stream = upload_file.stream.read()
    if file_stream:
        #: Collect upload file data
        sample = {
            'filename': secure_filename(upload_file.filename),
            'sha1': hashlib.sha1(file_stream).hexdigest().upper(),
            'sha256': hashlib.sha256(file_stream).hexdigest().upper(),
            'md5': hashlib.md5(file_stream).hexdigest().upper(),
            'ssdeep': pydeep.hash_buf(file_stream),
            'filesize': len(file_stream),
            'filetype': magic.from_buffer(file_stream),
            'filemime': upload_file.mimetype,
            'upload_date': r.now(),
            'uploaded_by': "api",  # g.user
            'detection_ratio': dict(infected=0, count=0),
            'filestatus': "Processing"
        }
        insert_in_samples_db(sample)
        update_upload_file_metadata(sample)
        #: Run all configured scanners
        sample['detection_ratio'] = scan_upload(file_stream, sample)
        #: Done Processing File
        sample['filestatus'] = 'Complete'
        sample['scancomplete'] = r.now()
        update_sample_in_db(sample)
        found = is_hash_in_db(sample['md5'])
        if found:
            return jsonify(found)
        else:
            return jsonify(
                dict(error='Not a valid API end point.', response=404)), 404
    else:
        return jsonify(dict(error='Missing Parameters', response=400)), 400
Example #2
0
def upload_view():
    upload_file = request.files['file']
    file_stream = upload_file.stream.read()
    if file_stream:
        #: Collect upload file data
        sample = {'filename': secure_filename(upload_file.filename),
                  'sha1': hashlib.sha1(file_stream).hexdigest().upper(),
                  'sha256': hashlib.sha256(file_stream).hexdigest().upper(),
                  'md5': hashlib.md5(file_stream).hexdigest().upper(),
                  'ssdeep': pydeep.hash_buf(file_stream),
                  'filesize': len(file_stream),
                  'filetype': magic.from_buffer(file_stream),
                  'filemime': upload_file.mimetype,
                  'upload_date': r.now(),
                  'uploaded_by': "api",  # g.user
                  'detection_ratio': dict(infected=0, count=0),
                  'filestatus': "Processing"}
        insert_in_samples_db(sample)
        update_upload_file_metadata(sample)
        #: Run all configured scanners
        sample['detection_ratio'] = scan_upload(file_stream, sample)
        #: Done Processing File
        sample['filestatus'] = 'Complete'
        sample['scancomplete'] = r.now()
        update_sample_in_db(sample)
        found = is_hash_in_db(sample['md5'])
        if found:
            return jsonify(found)
        else:
            return jsonify(dict(error='Not a valid API end point.',
                                response=404)), 404
    else:
        return jsonify(dict(error='Missing Parameters', response=400)), 400
Example #3
0
def upload():
    form = SearchForm(request.form)
    if request.method == 'POST':
        # TODO: use secure_filename
        for upload_file in request.files.getlist('files[]'):
            file_stream = upload_file.stream.read()
            file_md5 = hashlib.md5(file_stream).hexdigest().upper()
            #: Add file hash to Bloomfilter unless it is already there
            #: Check if user wishes to force a sample rescan
            if file_md5 not in bf or form.force.data:
                bf.add(file_md5)
                #: Collect upload file data
                sample = {'filename': secure_filename(upload_file.filename.encode('utf-8')),
                          'sha1': hashlib.sha1(file_stream).hexdigest().upper(),
                          'sha256': hashlib.sha256(file_stream).hexdigest().upper(),
                          'md5': file_md5,
                          'ssdeep': pydeep.hash_buf(file_stream),
                          'filesize': len(file_stream),
                          'filetype': magic.from_buffer(file_stream),
                          'filemime': upload_file.mimetype,
                          'upload_date': r.now(),
                          'uploaded_by': "jmaine", # g.user
                          'detection_ratio': dict(infected=0, count=0),
                          'filestatus': 'Processing'}
                insert_in_samples_db(sample)
                update_upload_file_metadata(sample)
                #: Run all configured scanners
                sample['detection_ratio'] = scan_upload(file_stream, sample)
                #: Done Processing File
                sample['filestatus'] = 'Complete'
                sample['scancomplete'] = r.now()
                update_sample_in_db(sample)
        #: Once Finished redirect user to the samples page
        return redirect(url_for('.samples'))
    return render_template('samples.html')
Example #4
0
def upload():
    form = SearchForm(request.form)
    if request.method == 'POST':
        # TODO: use secure_filename
        for upload_file in request.files.getlist('files[]'):
            file_stream = upload_file.stream.read()
            file_md5 = hashlib.md5(file_stream).hexdigest().upper()
            #: Add file hash to Bloomfilter unless it is already there
            #: Check if user wishes to force a sample rescan
            if file_md5 not in bf or form.force.data:
                bf.add(file_md5)
                #: Collect upload file data
                sample = {
                    'filename':
                    secure_filename(upload_file.filename.encode('utf-8')),
                    'sha1':
                    hashlib.sha1(file_stream).hexdigest().upper(),
                    'sha256':
                    hashlib.sha256(file_stream).hexdigest().upper(),
                    'md5':
                    file_md5,
                    'ssdeep':
                    pydeep.hash_buf(file_stream),
                    'filesize':
                    len(file_stream),
                    'filetype':
                    magic.from_buffer(file_stream),
                    'filemime':
                    upload_file.mimetype,
                    'upload_date':
                    r.now(),
                    'uploaded_by':
                    "anonymous",  # g.user
                    'detection_ratio':
                    dict(infected=0, count=0),
                    'filestatus':
                    'Processing'
                }
                insert_in_samples_db(sample)
                update_upload_file_metadata(sample)
                #: Run all configured scanners
                sample['detection_ratio'] = scan_upload(file_stream, sample)
                #: Done Processing File
                sample['filestatus'] = 'Complete'
                sample['scancomplete'] = r.now()
                update_sample_in_db(sample)
            else:
                # flash('File {0} already submitted. Visit: {1}'.format(secure_filename(upload_file.filename.encode('utf-8')), file_md5), 'error')
                flash(
                    'File {} already submitted.'.format(
                        secure_filename(upload_file.filename.encode('utf-8'))),
                    'error')
                return redirect(url_for('.index'))
        #: Once Finished redirect user to the samples page
        return redirect(url_for('.samples'))
        # return render_template('samples.html')
    return render_template('samples.html')