def handle_pdf_ios(static_db): logger.info('Fetching data from DB for ' 'PDF Report Generation (IOS)') context = idb(static_db) if context['file_name'].lower().endswith('.zip'): logger.info('Generating PDF report for IOS zip') context['average_cvss'], context['security_score'] = score( context['code_analysis']) template = get_template('pdf/ios_report.html') else: logger.info('Generating PDF report for IOS ipa') context['average_cvss'], context['security_score'] = score( context['binary_analysis']) template = get_template('pdf/ios_report.html') return context, template
def pdf(request, api=False, jsonres=False): try: if api: checksum = request.POST['hash'] scan_type = request.POST['scan_type'] else: checksum = request.GET['md5'] scan_type = request.GET['type'] hash_match = re.match('^[0-9a-f]{32}$', checksum) if hash_match: if scan_type.lower() in ['apk', 'andzip']: static_db = StaticAnalyzerAndroid.objects.filter(MD5=checksum) if static_db.exists(): logger.info('Fetching data from DB for ' 'PDF Report Generation (Android)') context = adb(static_db) context['average_cvss'], context['security_score'] = score( context['code_analysis']) if scan_type.lower() == 'apk': template = get_template( 'pdf/android_binary_analysis.pdf.html') else: template = get_template( 'pdf/android_source_analysis_pdf.html') else: if api: return {'report': 'Report not Found'} else: return HttpResponse( json.dumps({'report': 'Report not Found'}), content_type='application/json; charset=utf-8', status=500) elif scan_type.lower() in ['ipa', 'ioszip']: if scan_type.lower() == 'ipa': static_db = StaticAnalyzerIOS.objects.filter(MD5=checksum) if static_db.exists(): logger.info('Fetching data from DB for ' 'PDF Report Generation (IOS IPA)') context = idb(static_db) context['average_cvss'], context[ 'security_score'] = score( context['binary_analysis']) template = get_template( 'pdf/ios_binary_analysis_pdf.html') else: if api: return {'report': 'Report not Found'} else: return HttpResponse( json.dumps({'report': 'Report not Found'}), content_type='application/json; charset=utf-8', status=500) elif scan_type.lower() == 'ioszip': static_db = StaticAnalyzerIOS.objects.filter(MD5=checksum) if static_db.exists(): logger.info('Fetching data from DB for ' 'PDF Report Generation (IOS ZIP)') context = idb(static_db) context['average_cvss'], context[ 'security_score'] = score(context['code_analysis']) template = get_template( 'pdf/ios_source_analysis_pdf.html') else: if api: return {'report': 'Report not Found'} else: return HttpResponse( json.dumps({'report': 'Report not Found'}), content_type='application/json; charset=utf-8', status=500) elif 'appx' == scan_type.lower(): if scan_type.lower() == 'appx': db_entry = StaticAnalyzerWindows.objects.filter( MD5=checksum, ) if db_entry.exists(): logger.info('Fetching data from DB for ' 'PDF Report Generation (APPX)') context = wdb(db_entry) template = get_template( 'pdf/windows_binary_analysis_pdf.html') else: if api: return {'scan_type': 'Type is not Allowed'} else: return HttpResponse( json.dumps({'type': 'Type is not Allowed'}), content_type='application/json; charset=utf-8', status=500) context['virus_total'] = None if settings.VT_ENABLED: app_dir = os.path.join(settings.UPLD_DIR, checksum + '/') vt = VirusTotal.VirusTotal() if 'zip' in scan_type.lower(): context['virus_total'] = None else: context['virus_total'] = vt.get_result( os.path.join(app_dir, checksum) + '.' + scan_type.lower(), checksum) try: if api and jsonres: return {'report_dat': context} else: options = { 'page-size': 'A4', 'quiet': '', 'no-collate': '', 'margin-top': '0.50in', 'margin-right': '0.50in', 'margin-bottom': '0.50in', 'margin-left': '0.50in', 'encoding': 'UTF-8', 'custom-header': [ ('Accept-Encoding', 'gzip'), ], 'no-outline': None, } html = template.render(context) pdf_dat = pdfkit.from_string(html, False, options=options) if api: return {'pdf_dat': pdf_dat} return HttpResponse(pdf_dat, content_type='application/pdf') except Exception as exp: logger.exception('Error Generating PDF Report') if api: return { 'error': 'Cannot Generate PDF/JSON', 'err_details': str(exp) } else: return HttpResponse( json.dumps({ 'pdf_error': 'Cannot Generate PDF', 'err_details': str(exp) }), content_type='application/json; charset=utf-8', status=500) else: if api: return {'error': 'Invalid scan hash'} else: return HttpResponse( json.dumps({'md5': 'Invalid MD5'}), content_type='application/json; charset=utf-8', status=500) except Exception as exp: logger.exception('Error Generating PDF Report') msg = str(exp) exp = exp.__doc__ if api: return print_n_send_error_response(request, msg, True, exp) else: return print_n_send_error_response(request, msg, False, exp)