def interval(request): if request.method != 'GET': return error_page_free_format(request, 'invalid method') # activeユーザー以外はエラー if not request.user.is_active: return error_page_inactive(request) # is_admin権限なしの場合はエラー if not request.user.is_admin: return error_page_no_view_permission(request) try: interval = get_adapter_otx_detail_interval_interval(request) print(interval) # schedular からジョブを削除 otx.remove_interval_job() # mongo 格納の設定からジョブを削除 OtxAdapter.remove_internal_job() if interval != 0: # Mongo の isightAdapter に jobを追加する (設定の保存のみ) job = OtxAdapter.add_job(type_=ScheduleJobs.JOB_INTERVAL, seconds=interval) # job 動作追加 otx.add_job(job) info_msg = 'Set Interval %d sec' % (interval) else: # ジョブの追加をしない info_msg = 'Stop a job by interval' return otx_common_render(request, info_msg=info_msg) except Exception: # エラーページ return error_page(request)
def create(request): if request.method != 'POST': return error_page_free_format(request, 'invalid method') # activeユーザー以外はエラー if not request.user.is_active: return error_page_inactive(request) # is_admin権限なしの場合はエラー if not request.user.is_admin: return error_page_no_view_permission(request) try: time = get_adapter_otx_detail_create_time(request) if time is None: return error_page_free_format(request, 'Invalid Time format.') times = time.split(':') # 数値変換チェック try: int(times[0]) int(times[1]) int(times[2]) except ValueError: return error_page_free_format(request, 'Invalid Time format.') # Cron設定 # job追加 job = OtxAdapter.add_job(type_=ScheduleJobs.JOB_CRON, hour=times[0], minute=times[1], second=times[2]) otx.add_job(job) except Exception: # エラーページ return error_page(request) return otx_common_render(request)
def remove_job(self, job_id): # OtxAdapterのjobsからjob削除 otx = OtxAdapter.get() otx.remove_job(job_id) # スケジューラからjob削除 schedule_job = ScheduleJobs.objects.get(id=job_id) self._schedule.remove_job(schedule_job) # mongoのschedule_jobsからschedule_job削除 schedule_job.remove()
def get_otx_dict(replace_dict): replace_dict['otx'] = OtxAdapter.get() # communityが削除されている場合はNoneを格納する try: if replace_dict['otx'].community is None: replace_dict['otx'].community = None except DoesNotExist: replace_dict['otx'].community = None return replace_dict
def modify(request): if request.method != 'POST': return error_page_free_format(request, 'invalid method') # activeユーザー以外はエラー if not request.user.is_active: return error_page_inactive(request) try: apikey = get_adapter_otx_modify_apikey(request) community_id = get_adapter_otx_modify_community_id(request) uploader_id = int(get_adapter_otx_modify_uploader_id(request)) # 設定更新 OtxAdapter.modify_settings(apikey, community_id, uploader_id) # レンダリング replace_dict = get_replace_dict() replace_dict['info_msg_modify'] = 'Modify Success!!' return render(request, 'otx.html', replace_dict) except Exception: # エラーページ return error_page(request)
def resume_job(self, job_id): schedule_job = ScheduleJobs.objects.get(id=job_id) if schedule_job in OtxAdapter.get().jobs: if schedule_job.status == ScheduleJobs.STATUS_STOP: pass else: print('already working.') return else: raise Exception('invalid job_id') self._schedule.resume_job(schedule_job)
def pause_job(self, job_id): schedule_job = ScheduleJobs.objects.get(id=job_id) if schedule_job in OtxAdapter.get().jobs: if schedule_job.status == ScheduleJobs.STATUS_IN_OPERATION: pass else: print('not yet start.') return else: raise Exception('invalid job_id') return self._schedule.pause_job(schedule_job)
def otx_common_render(request, info_msg=None, error_msg=None): try: replace_dict = get_common_replace_dict(request) # mongoからotx情報を取得 oa = OtxAdapter.get() replace_dict['otx'] = oa if info_msg is not None: replace_dict['interval_info_msg'] = info_msg if error_msg is not None: replace_dict['interval_error_msg'] = error_msg # レンダリング return render(request, 'otx_detail.html', replace_dict) except Exception: # エラーページ return error_page(request)
def get_otx_stix(self, mtimestamp=None): # OTXアダプタの設定を取得 otx_conf = OtxAdapter.get() key = otx_conf.apikey # 登録情報を取得 community = otx_conf.community uploader = otx_conf.uploader via = Vias.get_via_adapter_otx(uploader) # otxから取得 try: proxies = System.get_request_proxies() otx = OTXv2(key, proxies) slices = otx.getsince(mtimestamp) except Exception as e: traceback.print_exc() raise e # last_requested更新 otx_conf.modify_last_requested() count = 0 # ひとつずつ取得する for slice_ in slices: try: # stix一つごとに登録処理 stix = StixExport(slice_) stix.build() content = stix.to_xml() # 取得したSTIXを登録 _regist_stix(content, community, via) count += 1 except Exception as e: # エラーが発生した場合はログを表示して処理は実行する traceback.print_exc() # 件数を返却 return count