def remove(request, taxii_id, job_id): if request.method != 'GET': return error_page_free_format(request, 'invalid method') #activeユーザー以外はエラー if request.user.is_active == False: return error_page_inactive(request) #is_admin権限なしの場合はエラー if request.user.is_admin == False: return error_page_no_view_permission(request) try: #mongoのtaxii_client情報から該当job_idを削除 taxii_client = TaxiiClients.objects.get(id=taxii_id) taxii_client.remove_job(job_id) #job停止 client = Client(taxii_id=taxii_id) client.remove_job(job_id) replace_dict = get_common_replace_dict(request) #mongoからtaxii_client情報を取得 replace_dict['client'] = TaxiiClients.objects.get(id=taxii_id) #レンダリング return render(request, 'configuration_taxii_client_detail.html', replace_dict) except Exception: #エラーページ return error_page(request)
def create(request, taxii_id): if request.method != 'POST': return error_page_free_format(request, 'invalid method') #activeユーザー以外はエラー if request.user.is_active == False: return error_page_inactive(request) #is_admin権限なしの場合はエラー if request.user.is_admin == False: return error_page_no_view_permission(request) try: time = get_configuartion_taxii_client_detail_create_time(request) #mongoからtaxii_client情報を取得 taxii_client = TaxiiClients.objects.get(id=taxii_id) #Cron設定 times = time.split(':') schedule_job = taxii_client.add_job(type_=ScheduleJobs.JOB_CRON, hour=times[0], minute=times[1], second=times[2]) #job追加 client = Client(taxii_id=taxii_id) client.add_job(schedule_job) replace_dict = get_common_replace_dict(request) replace_dict['client'] = taxii_client #レンダリング return render(request, 'configuration_taxii_client_detail.html', replace_dict) except Exception: #エラーページ return error_page(request)
def start(request, id_): if not request.user.is_active: return error_page_inactive(request) if not request.user.is_admin: return error_page_no_view_permission(request) protocol_version = get_protocol_version(request) start = get_datetime_from_string(get_start_start(request)) end = get_datetime_from_string(get_start_end(request)) try: replace_dict = get_common_replace_dict(request) if protocol_version.startswith('1.'): taxii_client = TaxiiClients.objects.get(id=id_) replace_dict['taxii'] = taxii_client cl = Client(taxii_client=taxii_client) elif protocol_version.startswith('2.'): taxii2_client = Taxii2Clients.objects.get(id=id_) replace_dict['taxii'] = taxii2_client cl = Client(taxii2_client=taxii2_client) else: raise Exception('Invalid taxii protocol version.') if cl._can_read: cl.set_start_time(start) cl.set_end_time(end) count = cl.poll() replace_dict[ 'info_msg'] = 'Poll end successfully!! (Get %d stix files.)' % ( count) else: replace_dict['error_msg'] = 'This collection is not for polling' return render(request, 'poll_detail.html', replace_dict) except Exception: return error_page(request)
def pause(request, taxii_id, job_id): if request.method != 'GET': return error_page_free_format(request, 'invalid method') if not request.user.is_active: return error_page_inactive(request) if not request.user.is_admin: return error_page_no_view_permission(request) try: taxii_client = TaxiiClients.objects.get(id=taxii_id) client = Client(taxii_client=taxii_client) client.pause_job(job_id) replace_dict = get_common_replace_dict(request) replace_dict['client'] = taxii_client return render(request, 'configuration_taxii_client_detail.html', replace_dict) except Exception: return error_page(request)
def get_clients_from_community(cls, community): l = [] for taxii_client in TaxiiClients.objects.filter(community=community, push=True): from ctirs.core.taxii.taxii import Client l.append(Client(taxii_client=taxii_client)) return l
def publish(request): # ajax parameter取得 stix_id = request.GET['stix_id'] taxii_id = request.GET['taxii_id'] # Publish (Push) する StixFile object stix = StixFiles.objects.get(id=stix_id) # Publish (Push) の時に使用する TaxiiClients object client = Client(taxii_id=taxii_id) # publish する try: client.push(stix) resp = {'status': 'OK', 'message': 'Success'} except Exception as e: # traceback.print_exc() resp = {'status': 'NG', 'message': str(e)} return JsonResponse(resp)
def init_taxii_client_scheduler(self): from ctirs.core.mongo.documents import TaxiiClients, Taxii2Clients from ctirs.core.taxii.taxii import Client for doc in TaxiiClients.objects: taxii_client = Client(taxii_client=doc) for job in doc.jobs: self.boot_scheduler(job, taxii_client) if doc.interval_schedule_job is not None: job = doc.interval_schedule_job self.boot_scheduler(job, taxii_client) for doc in Taxii2Clients.objects: taxii2_client = Client(taxii2_client=doc) for job in doc.jobs: self.boot_scheduler(job, taxii2_client) if doc.interval_schedule_job is not None: job = doc.interval_schedule_job self.boot_scheduler(job, taxii2_client)
def create(request, taxii_id): if request.method != 'POST': return error_page_free_format(request, 'invalid method') if not request.user.is_active: return error_page_inactive(request) if not request.user.is_admin: return error_page_no_view_permission(request) try: time = get_configuartion_taxii_client_detail_create_time(request) taxii_client = TaxiiClients.objects.get(id=taxii_id) times = time.split(':') schedule_job = taxii_client.add_job(type_=ScheduleJobs.JOB_CRON, hour=times[0], minute=times[1], second=times[2]) client = Client(taxii_client=taxii_client) client.add_job(schedule_job) replace_dict = get_common_replace_dict(request) replace_dict['client'] = taxii_client return render(request, 'configuration_taxii_client_detail.html', replace_dict) except Exception: return error_page(request)
def interval(request, taxii_id): if request.method != 'GET': return error_page_free_format(request, 'invalid method') if not request.user.is_active: return error_page_inactive(request) if not request.user.is_admin: return error_page_no_view_permission(request) try: interval = get_configuartion_taxii_client_detail_interval_interval(request) taxii_client = TaxiiClients.objects.get(id=taxii_id) client = Client(taxii_client=taxii_client) client.remove_interval_job() taxii_client.interval_schedule_job = None taxii_client.save() if interval != 0: schedule_job = taxii_client.add_job(type_=ScheduleJobs.JOB_INTERVAL, seconds=interval) client.add_job(schedule_job) replace_dict = get_common_replace_dict(request) replace_dict['client'] = taxii_client if interval != 0: replace_dict['interval_info_msg'] = 'Set Interval %d sec' % (interval) else: replace_dict['interval_info_msg'] = 'Stop a job by interval' return render(request, 'configuration_taxii_client_detail.html', replace_dict) except Exception: return error_page(request)
def init_taxii_client_scheduler(self): from ctirs.core.mongo.documents import TaxiiClients from ctirs.core.taxii.taxii import Client #schedulerを起動 #mongoに格納されている全TaxiiClientsドキュメントについて for doc in TaxiiClients.objects: taxii_client = Client(taxii_id=doc.id) #各job設定ごとに for job in doc.jobs: self.boot_scheduler(job, taxii_client) #interval if doc.interval_schedule_job is not None: job = doc.interval_schedule_job self.boot_scheduler(job, taxii_client)
def publish(request): stix_id = request.GET['stix_id'] taxii_id = request.GET['taxii_id'] protocol_version = request.GET['protocol_version'] stix = StixFiles.objects.get(id=stix_id) if protocol_version.startswith('1.'): taxii_client = TaxiiClients.objects.get(id=taxii_id) client = Client(taxii_client=taxii_client) else: taxii_client = Taxii2Clients.objects.get(id=taxii_id) client = Client(taxii2_client=taxii_client) if not client._can_write: resp = {'status': 'NG', 'message': 'This collection is not for publishing.'} return JsonResponse(resp) try: msg = client.push(stix) resp = {'status': 'OK', 'message': msg} except Exception as e: resp = {'status': 'NG', 'message': str(e)} return JsonResponse(resp)
def start(request, id_): # activeユーザー以外はエラー if not request.user.is_active: return error_page_inactive(request) start = get_datetime_from_string(get_start_start(request)) end = get_datetime_from_string(get_start_end(request)) try: cl = Client(taxii_id=id_) cl.set_start_time(start) cl.set_end_time(end) count = cl.poll() replace_dict = get_common_replace_dict(request) replace_dict['taxii'] = TaxiiClients.objects.get(id=id_) replace_dict[ 'info_msg'] = 'Poll end successfully!! (Get %d stix files.)' % ( count) # レンダリング return render(request, 'poll_detail.html', replace_dict) except Exception: # エラーページ return error_page(request)
def interval(request, taxii_id): if request.method != 'GET': return error_page_free_format(request, 'invalid method') #activeユーザー以外はエラー if request.user.is_active == False: return error_page_inactive(request) #is_admin権限なしの場合はエラー if request.user.is_admin == False: return error_page_no_view_permission(request) try: interval = get_configuartion_taxii_client_detail_interval_interval( request) #mongoからtaxii_client情報を取得 taxii_client = TaxiiClients.objects.get(id=taxii_id) client = Client(taxii_id=taxii_id) #稼働しているスケジューラの job があったら削除する client.remove_interval_job() #taxii_client の internal_schedule_jobs を Noneにする taxii_client.interval_schedule_job = None taxii_client.save() if interval != 0: #Cron設定 schedule_job = taxii_client.add_job( type_=ScheduleJobs.JOB_INTERVAL, seconds=interval) #job追加 client.add_job(schedule_job) replace_dict = get_common_replace_dict(request) replace_dict['client'] = taxii_client if interval != 0: replace_dict['interval_info_msg'] = 'Set Interval %d sec' % ( interval) else: replace_dict['interval_info_msg'] = 'Stop a job by interval' #レンダリング return render(request, 'configuration_taxii_client_detail.html', replace_dict) except Exception: #エラーページ return error_page(request)