def task_statistics(): current_time = datetime.now() previous_year = datetime(current_time.year - 1, 1, 1) current_year = datetime(current_time.year, 1, 1) all_task = Reports.objects.count() task_by_current_year = Reports.objects(Q(create_date__gte=current_year) & Q(create_date__lt=current_time)).count() previous_month = current_time.replace(day=1, hour=0, minute=0, second=0) - timedelta(days=1) previous_month = previous_month.replace(day=1) current_month = current_time.replace(day=1, hour=0, minute=0, second=0) all_task = all_task task_by_current_month = Reports.objects(Q(create_date__gte=current_month) & Q(create_date__lt=current_time)).count() previous_day = current_time.replace(hour=0, minute=0, second=0) - timedelta(days=1) all_task = all_task task_by_today = Reports.objects( Q(create_date__gte=current_time.replace(hour=0, minute=0, second=0)) & Q(create_date__ne=current_time)).count() _users = Users.objects.count() response_content = { 'year': { 'all_task': all_task, 'current_year': task_by_current_year }, 'month': { 'all_task': all_task, 'current_month': task_by_current_month }, 'day': { 'all_task': all_task, 'today': task_by_today }, 'user': _users } return jsonify(response_content), 200
def revoke_tasks(task_id): if task_id != '': celery_pipe.AsyncResult(task_id).revoke(terminate=True, wait=True, timeout=10, signal='SIGKILL') time.sleep(3) celery_pipe.AsyncResult(task_id).forget() _reports = Reports.objects(task_id=task_id) for _report in _reports: _report.delete() response_content = { 'code': '200', 'message': 'The task has been removed!' } return jsonify(response_content), 200
def tasks(): scantypes = ['-sT', '-sT', '-sS', '-sA', '-sW', '-sM', '-sN', '-sF', '-sX', '-sU'] if request.method == 'GET': skip = int(request.args['skip']) limit = int(request.args['limit']) sort_by = request.args['sort_by'] sort_context = int(request.args['sort_context']) search = request.args['search'] if sort_context == -1: sort_by = '-' + sort_by query = Reports.objects(user_id=session['current_user']).all().order_by(sort_by) if search != '': query = Reports.objects(user_id=session['current_user']).filter(targets__contains=search).all().order_by( sort_by) _nmap_tasks = [] paginator = Pagination(query, skip / limit + 1, 10) _dbreports = paginator.items for _dbreport in _dbreports: _nmap_task = celery_pipe.AsyncResult(_dbreport['task_id']) _report = { 'id': _nmap_task.id, 'targets': _dbreport['targets'], 'options': _dbreport['options'], 'create_date': _dbreport['create_date'], 'status': _nmap_task.status, 'ready': 0 } if _nmap_task.result and 'done' in _nmap_task.result: _report.update({'progress': float(_nmap_task.result['done'])}) elif _nmap_task.result and 'report' in _nmap_task.result: _report.update({'progress': 100}) else: _report.update({'progress': 0}) if _nmap_task.status in READY_STATES: _report.update({'ready': 1}) _nmap_tasks.append(_report) response_content = { 'recordsTotal': Reports.objects.count(), 'recordsFiltered': paginator.total, 'data': _nmap_tasks } return jsonify(response_content), 200 elif request.method == 'POST': data = request.get_json() if data['targets'] == '': response_content = { 'code': '403', 'message': 'The targets is not correct!' } return jsonify(response_content), 200 scani = int(data.get('scanTechniques', 0)) if data.get('ports', '') != '': portlist = '-p ' + data.get('ports') else: portlist = '' noping = '-Pn' if data.get('noping', False) else '' osdetect = '-O' if data.get('osDetection', False) else '' bannerdetect = '-sV' if data.get('bannerDetection', False) else '' nse_script = '' if data.get('scripts', '') != '': nse_script = '--script={0}'.format(data.get('scripts')) options = '{0} {1} {2} {3} {4} {5}'.format(scantypes[scani], portlist, noping, osdetect, bannerdetect, nse_script) _celery_task = celery_nmap_scan.delay(targets=str(data['targets']), options=str(options)) report = Reports(user_id=session['current_user'], task_id=_celery_task.id, targets=data['targets'], options=options) report.save() response_content = { 'code': '200', 'message': 'Successful!' } return jsonify(response_content), 200