def logs(task_uid, log_type): analysis = AnalysisProxy(minio, task_uid) with NamedTemporaryFile() as f: # Copy Range header if it exists headers = {} if "Range" in request.headers: headers["Range"] = request.headers["Range"] analysis.get_log(log_type, f, headers=headers) return send_file(f.name, mimetype="text/plain")
def get_analysis_metadata(analysis_uid): db_result = db.select_metadata_by_uid(analysis_uid) if db_result is not None: return db_result # Cache miss, have to ask MinIO analysis = AnalysisProxy(minio, analysis_uid) metadata = analysis.get_metadata() try: db.insert_metadata(analysis_uid, metadata) except Exception: app.logger.exception("Failed to insert %s metadata", analysis_uid) return metadata
def update_metadata_cache(): """ Scans whole MinIO bucket and fetch missing metadata files """ for analysis in AnalysisProxy(minio, None).enumerate(): try: get_analysis_metadata(analysis.uid) except NoSuchKey: # Well, we tried. Too bad pass
def pcap_dump(task_uid): """ Return archaive containing dump.pcap along with extracted tls sessions keys in format acceptable by wireshark. """ analysis = AnalysisProxy(minio, task_uid) try: with NamedTemporaryFile() as f_pcap, NamedTemporaryFile() as f_keys, NamedTemporaryFile() as f_archive: with ZipFile(f_archive, 'w', ZIP_DEFLATED) as archive: analysis.get_pcap_dump(f_pcap) archive.write(f_pcap.name, 'dump.pcap') try: analysis.get_wireshark_key_file(f_keys) archive.write(f_keys.name, 'dump.keys') except NoSuchKey: # No dumped keys. pass f_archive.seek(0) return send_file(f_archive.name, mimetype='application/zip') except NoSuchKey: abort(404, description="No network traffic avaible.")
def graph(task_uid): analysis = AnalysisProxy(minio, task_uid) with NamedTemporaryFile() as tmp: analysis.get_graph(tmp) return send_file(tmp.name, mimetype="text/plain")
def list_logs(task_uid): analysis = AnalysisProxy(minio, task_uid) return jsonify(list(analysis.list_logs()))
def dumps(task_uid): analysis = AnalysisProxy(minio, task_uid) with NamedTemporaryFile() as tmp: analysis.get_dumps(tmp) return send_file(tmp.name, mimetype="application/zip")
def logindex(task_uid, log_type): analysis = AnalysisProxy(minio, task_uid) with NamedTemporaryFile() as f: analysis.get_log_index(log_type, f) return send_file(f.name)
def apicall(task_uid, pid): analysis = AnalysisProxy(minio, task_uid) with NamedTemporaryFile() as f: analysis.get_apicalls(f, pid) return send_file(f.name)
def processed(task_uid, which): analysis = AnalysisProxy(minio, task_uid) with NamedTemporaryFile() as f: analysis.get_processed(f, which) return send_file(f.name, mimetype="application/json")