def basic_upload_view(request): if request.method == 'POST': form = BasicUploadForm(request.POST, request.FILES) if form.is_valid(): apk = request.FILES['apk'] if apk.size > settings.MAX_APK_UPLOAD_SIZE: messages.warning(request, 'Submitted file is too large.') return redirect(reverse_lazy('front:home')) with NamedTemporaryFile() as tmp: for chunk in apk.chunks(): tmp.write(chunk) tmp.seek(0) if is_android(tmp.name) != 'APK': messages.warning(request, 'Submitted file is not a valid APK.') return redirect(reverse_lazy('front:home')) sha256 = get_sha256_of_file(tmp) if default_storage.exists(sha256): # analyze(sha256, force=True) return redirect(reverse_lazy('front:report', [sha256])) else: default_storage.save(sha256, tmp) analyze(sha256) return redirect(reverse_lazy('front:report', [sha256])) return redirect(reverse_lazy('front:home'))
def get(self, request, *args, **kwargs): # Gets the latest complete report as an example es = Elasticsearch(settings.ELASTICSEARCH_HOSTS) q = { "size": 1, "sort": { "analysis_date": "desc" }, "query": { "match_all": {} }, "_source": ["handle", "apk_hash", "quark"] } report_example = es.search(index=settings.ELASTICSEARCH_APK_INDEX, body=q) tmp = transform_results(report_example) if tmp: report_example = tmp[0] else: report_example = tmp q = None matrix = None results = None list_results = False aggregations = [] genetic_analysis = None f = SearchForm(request.GET) form_to_show = f if not request.GET: form_to_show = SearchForm() if f.is_valid(): results, aggregations, genetic_analysis = f.do_search() list_results = True q = f.cleaned_data['q'] matrix = get_similarity_matrix(results) return render( request, 'front/index.html', { 'form': form_to_show, 'results': results, 'aggregations': aggregations, 'genetic_analysis': genetic_analysis, 'upload_form': BasicUploadForm(), 'list_results': list_results, 'report_example': report_example, 'q': q, 'matrix': matrix, 'max_size': settings.MAX_APK_UPLOAD_SIZE })