This commit is contained in:
49
iris-web/source/app/blueprints/case/templates/case-nav.html
Normal file
49
iris-web/source/app/blueprints/case/templates/case-nav.html
Normal file
@@ -0,0 +1,49 @@
|
||||
<nav class="nav-bottom rounded" id="h_nav_tab">
|
||||
<div class="container-fluid" >
|
||||
<ul class="navbar-nav rounded" style="background-color:#4c72a130;">
|
||||
<li class="nav-item {{ active if page == 'case' }}">
|
||||
<a class="nav-link" href="/case?cid={{session['current_case'].case_id}}">
|
||||
<span class="menu-title">Summary</span>
|
||||
</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="/case/notes?cid={{session['current_case'].case_id}}">
|
||||
<span class="menu-title">Notes</span>
|
||||
</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="/case/assets?cid={{session['current_case'].case_id}}">
|
||||
<span class="menu-title">Assets</span>
|
||||
</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="/case/ioc?cid={{session['current_case'].case_id}}">
|
||||
<span class="menu-title">IOC</span>
|
||||
</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="/case/timeline?cid={{session['current_case'].case_id}}">
|
||||
<span class="menu-title">Timeline</span>
|
||||
</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="/case/graph?cid={{session['current_case'].case_id}}">
|
||||
<span class="menu-title">Graph</span>
|
||||
</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="/case/tasks?cid={{session['current_case'].case_id}}">
|
||||
<span class="menu-title">Tasks</span>
|
||||
</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="/case/evidences?cid={{session['current_case'].case_id}}">
|
||||
<span class="menu-title">Evidences</span>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
|
||||
|
@@ -0,0 +1,51 @@
|
||||
<div class="secondary-header">
|
||||
<div class="nav-bottom ">
|
||||
<div class="container-fluid float-left">
|
||||
<div class="row">
|
||||
<div class="col col-md-ml-12 col-sm-12">
|
||||
<ul class="nav page-navigation page-navigation-style-2 page-navigation-primary">
|
||||
<li class="nav-item {{ active if page == 'case' }}">
|
||||
<button class="btn btn-sm btn-light" href="#" onclick="case_detail('{{ case.case_id }}');">
|
||||
<i class="fa-solid fa-gear mr-1"></i>
|
||||
<span class="">Manage</span>
|
||||
</button>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<div class="dropdown">
|
||||
<button class="btn btn-sm btn-light float-left ml-2" id="dropdownMenuButton" data-toggle="dropdown" aria-haspopup="true" aria-expanded="true">
|
||||
<span aria-hidden="true"><i class="fa-solid fa-bolt mr-1"></i> Processors</span>
|
||||
</button>
|
||||
<div class="dropdown-menu pull-right" id="case_modal_quick_actions" aria-labelledby="dropdownMenuButton">
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<button class="btn btn-sm btn-light float-left ml-2" id="case_pipeline" onclick="case_pipeline_popup();">
|
||||
<span aria-hidden="true"><i class="fa-solid fa-upload mr-1"></i>Pipelines</span>
|
||||
</button>
|
||||
</li>
|
||||
<li class="nav-item ml-auto">
|
||||
{% if case.review_status.status_name == "Not reviewed" or not case.review_status %}
|
||||
<button class="btn btn-sm btn-light float-left ml-2" id="request_review">
|
||||
<span aria-hidden="true"><i class="fa-solid fa-clipboard-check mr-1"></i>Request review</span>
|
||||
</button>
|
||||
{% endif %}
|
||||
<btn href="#" onclick="report_template_selector();" class="btn btn-dark btn-sm float-right ml-2">
|
||||
<span class="btn-label">
|
||||
<i class="fa fa-file-arrow-down"></i>
|
||||
</span>
|
||||
Generate report
|
||||
</btn>
|
||||
<btn href="#" onclick="act_report_template_selector();" class="btn btn-sm btn-dark float-right ml-2">
|
||||
<span class="btn-label">
|
||||
<i class="fa fa-chart-line"></i>
|
||||
</span>
|
||||
Activity report
|
||||
</btn>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
337
iris-web/source/app/blueprints/case/templates/case.html
Normal file
337
iris-web/source/app/blueprints/case/templates/case.html
Normal file
@@ -0,0 +1,337 @@
|
||||
{% extends "layouts/default_ext.html" %} {% block title %} Case summary {% endblock title %}
|
||||
{% block stylesheets %}
|
||||
{% include 'includes/header_case.html' %}
|
||||
<link rel="stylesheet" href="/static/assets/css/select2.css">
|
||||
<link rel="stylesheet" href="/static/assets/css/bootstrap-multiselect.min.css">
|
||||
<link rel="stylesheet" href="/static/assets/css/bootstrap-select.min.css">
|
||||
{% endblock stylesheets %}
|
||||
{% block content %}
|
||||
{% if current_user.is_authenticated %}
|
||||
|
||||
{% include 'includes/navigation_ext.html' %}
|
||||
{% include 'includes/sidenav.html' %}
|
||||
|
||||
<div class="main-panel">
|
||||
|
||||
<div class="content">
|
||||
{% if case.close_date %}
|
||||
<div class="panel-header bg-close-gradient">
|
||||
{% else %}
|
||||
<div class="panel-header bg-info-gradient">
|
||||
{% endif %}
|
||||
<div class="page-inner py-5">
|
||||
<div class="d-flex align-items-left align-items-md-center flex-column flex-md-row mt--3">
|
||||
<div class="col">
|
||||
<div class="row">
|
||||
<h2 class="text-white pb-2 fw-bold case-name"> <i class="icon-big flaticon-network mr-2"></i> {{ case.name|unquote }}
|
||||
</h2>
|
||||
</div>
|
||||
<h5 class="text-white op-7 mb-1"><b>Open on</b> {{ case.open_date }} by {{ case.user.name }}</h5>
|
||||
<h5 class="text-white op-7 mb-3"><b>Owned by</b> {{ case.owner.name }}</h5>
|
||||
{% if case.close_date %}
|
||||
<h5 class="text-warning mb-1">Closed on {{ case.close_date }}</h5>
|
||||
{% endif %}
|
||||
|
||||
</div>
|
||||
<div class="col mt-4">
|
||||
<div class="row">
|
||||
<span title="Case outcome" class="float-right btn btn-rounded badge-pill hidden-caret ml-auto btn-xs mr-2 mb-2 {% if case.status_id == 1%}badge-success{% elif case.status_id == 2 %}badge-danger{% else %}btn-light{% endif %}"
|
||||
onclick="case_detail('{{ case.case_id }}', true);"
|
||||
><i class="fa-solid fa-group-arrows-rotate mr-2"></i>{{ case.status_name }}</span>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="ml-auto">
|
||||
<div class="row">
|
||||
<h5 class="text-white op-7 mb-2 float-right mr-4"><b>Customer</b> : {{ case.client.name }}</h5>
|
||||
</div>
|
||||
<div class="row">
|
||||
{% if case.soc_id %} <h5 class="text-white op-7 mb-2 mr-4"><b>SOC ID :</b> {{ case.soc_id }}</h5> {% endif %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mt-2 mb--2">
|
||||
|
||||
<div class="ml-2 col">
|
||||
<div class="row ml-1">
|
||||
{% if case.state %}<h5 title="Case state" onclick="case_detail('{{ case.case_id }}', true);" style="cursor:pointer;"><span class="btn-rounded badge-pill hidden-caret btn-sm btn-light"><i class="fa-solid fa-business-time mr-1"></i> {{ case.state.state_name }}</span></h5>{% endif %}
|
||||
{% if case.classification %}<h5 title="Classification" onclick="case_detail('{{ case.case_id }}', true);" style="cursor:pointer;"><span class="btn-rounded badge-pill hidden-caret btn-sm btn-light ml-2"><i class="fa-solid fa-shield-virus mr-1"></i>{{ case.classification.name_expanded }}</span></h5>{% endif %}
|
||||
{% if case.alerts| length > 0 %}<h5 title="Alerts"><a class="btn-rounded badge-pill hidden-caret btn-sm btn-dark ml-2 badge-warning" href="/alerts?cid={{ case.case_id }}&sort=desc&case_id={{ case.case_id }}" target="_blank" rel="noopener"><i class="fa-solid fa-bell mr-1"></i> {{ case.alerts| length }} related alerts</a></h5>{% endif %}
|
||||
{% if case.review_status.status_name == "Reviewed" %}
|
||||
<h5 title="Reviewed"> <a class="text-white btn-rounded badge-pill hidden-caret btn-sm ml-2 badge-success"><i class="fa-regular fa-circle-check mr-2"></i>Case reviewed by {% if case.reviewer.id == current_user.id %} you {% else %} {{ case.reviewer.name }} {% endif %}</a></h5>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
<div class="col mr-2">
|
||||
{% if case.case_tags %}
|
||||
{% for tag in case.case_tags %}
|
||||
<span class="badge badge-pill badge-light ml-1 pull-right"><i class="fa fa-tag mr-1"></i> {{ tag }}</span>
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="page-inner mt--5">
|
||||
<div class="row row-card-no-pd" style="padding-top: 0px;padding-bottom: 3px;">
|
||||
{% include 'case-nav_landing.html' %}
|
||||
</div>
|
||||
<div id="caseReviewState" data-review-state="{{ case.review_status.status_name }}" data-reviewer-id="{{ case.reviewer_id }}" data-reviewer-name="{{ case.reviewer.name }}" style="display: none;"></div>
|
||||
|
||||
{% if case.reviewer_id == current_user.id and case.review_status.status_name != "Reviewed" and case.review_status.status_name != "Not reviewed" %}
|
||||
<div class="row row-card-no-pd review-card mt--3 mb--3 bg-warning-gradient" style="display: none;">
|
||||
<div class="col-md-12">
|
||||
<h4 class="font-weight-bold"><i class="fa-solid fa-triangle-exclamation text-danger ml-2 mr-2"></i>Review requested
|
||||
<button class="btn btn-sm float-right btn-dark mr-3 mt-2 btn-start-review">Start review</button>
|
||||
<button class="btn btn-sm float-right btn-success mr-3 mt-2 btn-confirm-review" style="display:none">Confirm review</button>
|
||||
<button class="btn btn-sm float-right btn-light mr-3 mt-2 btn-cancel-review" style="display:none">Cancel review</button></h4>
|
||||
|
||||
<span class="ml-2" id="reviewSubtitle">You have been requested to review this case.</span>
|
||||
</div>
|
||||
</div>
|
||||
{% elif case.review_status.status_name == "Review in progress" %}
|
||||
<div class="row row-card-no-pd mt--3 mb--3 bg-warning-gradient">
|
||||
<div class="col-md-12">
|
||||
<h4 class="font-weight-bold mt-1"><i class="fa-solid fa-list-check ml-2 mr-2"></i>Review by {{ case.reviewer.name }} in progress</h4>
|
||||
</div>
|
||||
</div>
|
||||
{% elif case.review_status.status_name == "Pending review" %}
|
||||
<div class="row row-card-no-pd mt--3 mb--3 bg-warning-gradient">
|
||||
<div class="col-md-12">
|
||||
<h4 class="font-weight-bold mt-1"><i class="fa-solid fa-triangle-exclamation text-danger ml-2 mr-2"></i>Review by {{ case.reviewer.name }} pending</h4>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
<div class="row row-card-no-pd">
|
||||
<div class="col-md-12">
|
||||
<div class="card mb-4" id="rescard1">
|
||||
<div class="card-header">
|
||||
<div class="row">
|
||||
{{ form.hidden_tag() }}
|
||||
<a href="#case_summary_card" class="d-block nav-link mr-auto" data-toggle="collapse" aria-expanded="true" aria-controls="case_summary_card">
|
||||
<h4 class="m-0 font-weight-bold">Case summary {{ "(Syncing with DB )" if case.id }}</h4>
|
||||
</a>
|
||||
<div class="mr-0 float-right">
|
||||
<small id="content_typing" class="mr-3 mt-1"></small>
|
||||
<small id="content_last_saved_by" class="mr-3 mt-1"></small>
|
||||
<span id="last_saved" class="badge mr-3 ml-2"></span>
|
||||
<small id="content_last_sync"></small>
|
||||
<button class="btn btn-sm mr-2 ml-3" onclick="edit_case_summary();" id="sum_edit_btn" >Edit</button>
|
||||
<button type="button" id="sum_refresh_btn" class="btn btn-sm btn-outline-default mr-3" onclick="sync_editor();">
|
||||
Refresh
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="collapsed" id="case_summary_card">
|
||||
<div class="card-body">
|
||||
<div class="row mb-1">
|
||||
<div class="col" id="summary_edition_btn" style="display:none;">
|
||||
<div class="btn btn-sm btn-light mr-1 " title="CTRL-B" onclick="editor.insertSnippet('**${1:$SELECTION}**');editor.focus();"><i class="fa-solid fa-bold"></i></div>
|
||||
<div class="btn btn-sm btn-light mr-1" title="CTRL-I" onclick="editor.insertSnippet('*${1:$SELECTION}*');editor.focus();"><i class="fa-solid fa-italic"></i></div>
|
||||
<div class="btn btn-sm btn-light mr-1" title="CTRL-SHIFT-1" onclick="editor.insertSnippet('# ${1:$SELECTION}');editor.focus();">H1</div>
|
||||
<div class="btn btn-sm btn-light mr-1" title="CTRL-SHIFT-2" onclick="editor.insertSnippet('## ${1:$SELECTION}');editor.focus();">H2</div>
|
||||
<div class="btn btn-sm btn-light mr-1" title="CTRL-SHIFT-3" onclick="editor.insertSnippet('### ${1:$SELECTION}');editor.focus();">H3</div>
|
||||
<div class="btn btn-sm btn-light mr-1" title="CTRL-SHIFT-4" onclick="editor.insertSnippet('#### ${1:$SELECTION}');editor.focus();">H4</div>
|
||||
<div class="btn btn-sm btn-light mr-1" title="Insert code" onclick="editor.insertSnippet('```${1:$SELECTION}```');editor.focus();"><i class="fa-solid fa-code"></i></div>
|
||||
<div class="btn btn-sm btn-light mr-1" title="Insert link" onclick="editor.insertSnippet('[${1:$SELECTION}](url)');editor.focus();"><i class="fa-solid fa-link"></i></div>
|
||||
<div class="btn btn-sm btn-light mr-1" title="Insert table" onclick="editor.insertSnippet('|\t|\t|\t|\n|--|--|--|\n|\t|\t|\t|\n|\t|\t|\t|');editor.focus();"><i class="fa-solid fa-table"></i></div>
|
||||
<div class="btn btn-sm btn-light mr-1" title="Insert bullet list" onclick="editor.insertSnippet('\n- \n- \n- ');editor.focus();"><i class="fa-solid fa-list"></i></div>
|
||||
<div class="btn btn-sm btn-light mr-1" title="Insert numbered list" onclick="editor.insertSnippet('\n1. a \n2. b \n3. c ');editor.focus();"><i class="fa-solid fa-list-ol"></i></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-md-6" id="container_editor_summary">
|
||||
<div style="display: none" id="fetched_crc"></div>
|
||||
<div id="editor_summary" data-theme="{% if current_user.in_dark_mode %}dark{% else %}light{% endif %}"></div>
|
||||
<textarea id="case_summary" rows="10" cols="82" style="display: none"></textarea>
|
||||
</div>
|
||||
<div class="col-md-6" id="ctrd_casesum">
|
||||
<div id="targetDiv"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal " tabindex="-1" role="dialog" id="modal_select_report" data-backdrop="true">
|
||||
<div class="modal-lg modal-dialog" role="document">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h5>Select report template</h5>
|
||||
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span
|
||||
aria-hidden="true">×</span></button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
{% if reports| length == 0 %}
|
||||
<div class="alert alert-warning" role="alert">
|
||||
<h4 class="alert-heading">No report template found</h4>
|
||||
<p>Report templates are configured in <a href="/manage/templates?cid={{case.case_id}}">the management section</a>.</p>
|
||||
</div>
|
||||
{% else %}
|
||||
<div class="col">
|
||||
<p>Since IRIS v2.0.0, the report generation supports images. Integration of images might fail depending on the situation.<br/><code>Safe Mode</code> can be used to generate the report without them.</p>
|
||||
</div>
|
||||
|
||||
<select class="selectpicker form-control bg-outline-success dropdown-submenu" data-show-subtext="true" data-live-search="true" id="select_report">
|
||||
{% for report in reports %}
|
||||
<option data-toggle="tooltip" value="{{ report[0] }}" data-subtext="{{ report[3] }}">{{ report[1] }} ({{ report[2].capitalize() }})</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<a href="#" class="btn btn-light float-left mt-2 mr-auto" onclick="gen_report(true);">
|
||||
<span class="btn-label">
|
||||
<i class="fa fa-file-download"></i>
|
||||
</span>
|
||||
Generate in Safe Mode
|
||||
</a>
|
||||
<a href="#" class="btn btn-light float-right mt-2 ml-2" onclick="gen_report(false);">
|
||||
<span class="btn-label">
|
||||
<i class="fa fa-file-download"></i>
|
||||
</span>
|
||||
Generate
|
||||
</a>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div><!-- /.modal-content -->
|
||||
</div><!-- /.modal-dialog -->
|
||||
</div>
|
||||
<div class="modal " tabindex="-1" role="dialog" id="modal_select_report_act" data-backdrop="true">
|
||||
<div class="modal-lg modal-dialog" role="document">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h5>Select activity report template</h5>
|
||||
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span
|
||||
aria-hidden="true">×</span></button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
{% if reports| length == 0 %}
|
||||
<div class="alert alert-warning" role="alert">
|
||||
<h4 class="alert-heading">No report template found</h4>
|
||||
<p>Report templates are configured in <a href="/manage/templates?cid={{case.case_id}}">the management section</a>.</p>
|
||||
</div>
|
||||
{% else %}
|
||||
<div class="col">
|
||||
<p>Since IRIS v2.0.0, the report generation supports images. Integration of images might fail depending on the situation.<br/><code>Safe Mode</code> can be used to generate the report without them.</p>
|
||||
</div>
|
||||
<select class="selectpicker form-control bg-outline-success dropdown-submenu mb-2" data-show-subtext="true" data-live-search="true" id="select_report_act">
|
||||
{% for report in reports_act %}
|
||||
<option data-toggle="tooltip" value="{{ report[0] }}" data-subtext="{{ report[3] }}">{{ report[1] }} ({{ report[2].capitalize() }})</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="modal-footer">
|
||||
<a href="#" class="btn btn-light float-left mt-2 mr-auto" onclick="gen_act_report(true);">
|
||||
<span class="btn-label">
|
||||
<i class="fa fa-file-download"></i>
|
||||
</span>
|
||||
Generate in Safe Mode
|
||||
</a>
|
||||
<a href="#" class="btn btn-light float-right mt-2 ml-2" onclick="gen_act_report(false);">
|
||||
<span class="btn-label">
|
||||
<i class="fa fa-file-download"></i>
|
||||
</span>
|
||||
Generate
|
||||
</a>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div><!-- /.modal-content -->
|
||||
</div><!-- /.modal-dialog -->
|
||||
</div>
|
||||
<div class="modal " tabindex="-1" role="dialog" id="modal_choose_reviewer" data-backdrop="true">
|
||||
<div class="modal-lg modal-dialog" role="document">
|
||||
<div class="modal-content">
|
||||
<form method="post" action="" id="form_choose_reviewer">
|
||||
<div class="modal-header">
|
||||
<h5>Choose reviewer</h5>
|
||||
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span
|
||||
aria-hidden="true">×</span></button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<div class="row mb-2">
|
||||
<div class="col-12">
|
||||
<div class="form-group">
|
||||
<select class="selectpicker form-control" data-dropup-auto="false" data-live-search="true" id="reviewer_id">
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mt-4">
|
||||
<div class="col-12 d-flex">
|
||||
<button type="button" class="btn btn-default mr-auto" data-dismiss="modal">Cancel</button>
|
||||
<button type="button" class="btn btn-outline-success ml-auto" id="submit_set_reviewer">Request</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div><!-- /.modal-content -->
|
||||
</div><!-- /.modal-dialog -->
|
||||
</div>
|
||||
<div class="modal" tabindex="-1" role="dialog" id="modal_case_detail" data-backdrop="true">
|
||||
<div class="modal-xl modal-dialog" role="document">
|
||||
<div class="modal-content" id="info_case_modal_content">
|
||||
|
||||
</div><!-- /.modal-content -->
|
||||
</div><!-- /.modal-dialog -->
|
||||
</div>
|
||||
<div class="modal bg-shadow-gradient" tabindex="-1" role="dialog" id="modal_ac_additional" data-backdrop="true">
|
||||
</div>
|
||||
<div class="modal bg-shadow-gradient" tabindex="-1" role="dialog" id="modal_case_review" data-backdrop="static" data-keyboard="false">
|
||||
<div class="modal-dialog modal-lg" role="document">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h5 class="modal-title">Case Review</h5>
|
||||
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
||||
<span aria-hidden="true">×</span>
|
||||
</button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
<p>Do you confirm that the case has been reviewed?</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
<button type="button" class="btn btn-danger float-left" data-dismiss="modal">Cancel</button>
|
||||
<button type="button" class="btn btn-success float-right" id="confirmReview">Confirm Review</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% include 'includes/footer.html' %}
|
||||
{% endif %} {% endblock content %} {% block javascripts %}
|
||||
|
||||
<script src="/static/assets/js/plugin/ace/src-noconflict/ace.js" type="text/javascript" charset="utf-8"></script>
|
||||
<script src="/static/assets/js/plugin/ace/src-noconflict/ext-language_tools.js" type="text/javascript" charset="utf-8"></script>
|
||||
<script src="/static/assets/js/core/socket.io.js"></script>
|
||||
<script src="/static/assets/js/plugin/select/select2.js"></script>
|
||||
|
||||
<script src="/static/assets/js/plugin/showdown/showdown.min.js"></script>
|
||||
<script src="/static/assets/js/iris/crc32.js"></script>
|
||||
<script src="/static/assets/js/iris/datatablesUtils.js"></script>
|
||||
<script src="/static/assets/js/iris/case.js"></script>
|
||||
<script src="/static/assets/js/iris/manage.cases.common.js"></script>
|
||||
<script src="/static/assets/js/iris/case.summary.js"></script>
|
||||
<script src="/static/assets/js/plugin/select/bootstrap-select.min.js"></script>
|
||||
<script src="/static/assets/js/plugin/select/bootstrap-multiselect.min.js"></script>
|
||||
|
||||
<script>
|
||||
$('#modal_select_report').selectpicker();
|
||||
load_menu_mod_options_modal([{{case.case_id}}], 'case', $("#case_modal_quick_actions"));
|
||||
</script>
|
||||
|
||||
{% endblock javascripts %}
|
148
iris-web/source/app/blueprints/case/templates/case_assets.html
Normal file
148
iris-web/source/app/blueprints/case/templates/case_assets.html
Normal file
@@ -0,0 +1,148 @@
|
||||
{% extends "layouts/default_ext.html" %} {% block title %} Case Assets {% endblock title %} {% block stylesheets %}
|
||||
{% include 'includes/header_case.html' %}
|
||||
<link rel="stylesheet" href="/static/assets/css/bootstrap-select.min.css">
|
||||
{% endblock stylesheets %}
|
||||
{% block content %}
|
||||
{% include 'includes/navigation_ext.html' %}
|
||||
|
||||
{% include 'includes/sidenav.html' %}
|
||||
<div class="main-panel">
|
||||
|
||||
<div class="content">
|
||||
{% if current_user.is_authenticated %}
|
||||
{{ form.hidden_tag() }}
|
||||
<nav class="navbar navbar-header navbar-expand-lg pt-2 pb-2 bg-primary-gradient">
|
||||
<div class="container-fluid">
|
||||
<div class="collapse" id="search-nav">
|
||||
<div id="tables_button"></div>
|
||||
</div>
|
||||
<ul class="navbar-nav topbar-nav ml-md-auto align-items-center page-navigation page-navigation-style-2 page-navigation-secondary">
|
||||
<li class="nav-item ml-2">
|
||||
<span class="text-white text-sm mr-2" id="last_resfresh">Loading</span>
|
||||
<span class="text-warning text-sm mr-2" id="page_warning"></span>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<button class="btn btn-primary btn-sm" onclick="reload_assets();">
|
||||
<span class="menu-title">Refresh</span>
|
||||
</button>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<button class="btn btn-dark btn-sm" onclick="add_assets();">
|
||||
<span class="menu-title">Add assets</span>
|
||||
</button>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<div class="dropdown">
|
||||
<button class="btn btn-sm btn-border btn-black" id="dropdownMenuButton" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
|
||||
<span class="menu-title"><i class="fas fa-ellipsis-v"></i></span>
|
||||
</button>
|
||||
<div class="dropdown-menu" aria-labelledby="dropdownMenuButton">
|
||||
<a class="dropdown-item" href="#" onclick="fire_upload_assets();">Upload CSV of assets</a>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
|
||||
</nav>
|
||||
|
||||
<div class="page-inner ">
|
||||
<div class="row ">
|
||||
<div class="loader1 text-center ml-mr-auto" id="loading_msg">Loading...</div>
|
||||
<div class="col-md-12">
|
||||
<div class="card" id="card_main_load" style="display:none;">
|
||||
<div class="card-body">
|
||||
<div class="col" id="assets_table_wrapper">
|
||||
<table class="table display table-striped table-hover responsive" width="100%" cellspacing="0" id="assets_table" >
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Name</th>
|
||||
<th>Type</th>
|
||||
<th>Description</th>
|
||||
<th>IP</th>
|
||||
<th>Compromised</th>
|
||||
<th>IOC</th>
|
||||
<th>Tags</th>
|
||||
<th>Analysis</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tfoot>
|
||||
<tr>
|
||||
<th>Name</th>
|
||||
<th>Type</th>
|
||||
<th>Description</th>
|
||||
<th>IP</th>
|
||||
<th>Compromised</th>
|
||||
<th>IOC</th>
|
||||
<th>Tags</th>
|
||||
<th>Analysis</th>
|
||||
</tr>
|
||||
</tfoot>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal modal-case-focus" tabindex="-1" role="dialog" id="modal_add_asset" data-backdrop="true">
|
||||
<div class="modal-xl modal-dialog" role="document">
|
||||
<div class="modal-content" id="modal_add_asset_content">
|
||||
|
||||
</div>
|
||||
<!-- /.modal-content -->
|
||||
</div>
|
||||
<!-- /.modal-dialog -->
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
<div class="modal " tabindex="-1" role="dialog" id="modal_upload_assets" data-backdrop="true">
|
||||
<div class="modal-lg modal-dialog" role="document">
|
||||
<form method="post" action="" id="form_upload_assets">
|
||||
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h5>Upload assets list (CSV format)</h5>
|
||||
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span
|
||||
aria-hidden="true">×</span></button>
|
||||
</div>
|
||||
|
||||
<div class="modal-body">
|
||||
<div class="form-group">
|
||||
<label for="ioc_format" class="placeholder">Expected CSV File format</label>
|
||||
<textarea class="form-control col-md-12 col-sm-12 sizable-textarea" rows="2" disabled>asset_name,asset_type_name,asset_description,asset_ip,asset_domain,asset_tags (separated with "|")</textarea>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="placeholder">CSV File format example</label>
|
||||
<textarea class="form-control col-md-12 col-sm-12 sizable-textarea" rows="3" disabled>asset_name,asset_type_name,asset_description,asset_ip,asset_domain,asset_tags
|
||||
"My computer","Mac - Computer","Computer of Mme Michu","192.168.15.5","iris.local","Compta|Mac"
|
||||
"XCAS","Windows - Server","Xcas server","192.168.15.48","iris.local",""</textarea>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="placeholder">Choose CSV file to import : </label>
|
||||
<input id="input_upload_assets" type="file" accept="text/csv">
|
||||
</div>
|
||||
</div>
|
||||
<div class='invalid-feedback' id='ioc-invalid-msg'></div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-outline-dark mr-auto" onclick="generate_sample_csv();">Download sample CSV</button>
|
||||
<button type="button" class="btn btn-outline-success" onclick="upload_assets();">Upload</button>
|
||||
</div>
|
||||
</div><!-- /.modal-content -->
|
||||
</form>
|
||||
</div><!-- /.modal-dialog -->
|
||||
</div>
|
||||
{% include 'includes/footer.html' %}
|
||||
|
||||
</div>
|
||||
{% endblock content %}
|
||||
{% block javascripts %}
|
||||
{% include 'includes/footer_case.html' %}
|
||||
<script src="/static/assets/js/plugin/sortable/sortable.js "></script>
|
||||
<script src="/static/assets/js/iris/case.asset.js"></script>
|
||||
|
||||
|
||||
{% endblock javascripts %}
|
@@ -0,0 +1,71 @@
|
||||
{% extends "layouts/default_ext.html" %}
|
||||
{% block title %} Case Graph {% endblock title %}
|
||||
|
||||
{% block stylesheets %}
|
||||
<link rel="stylesheet" href="/static/assets/css/bootstrap-slider.min.css">
|
||||
<link rel="stylesheet" href="/static/assets/css/select2.css">
|
||||
<link rel="stylesheet" href="/static/assets/css/bootstrap-select.min.css">
|
||||
|
||||
<link href="/static/assets/css/vis.min.css" rel="stylesheet" type="text/css" />
|
||||
{% endblock stylesheets %}
|
||||
{% block content %}
|
||||
|
||||
{% include 'includes/navigation_ext.html' %}
|
||||
|
||||
{% include 'includes/sidenav.html' %}
|
||||
<div class="main-panel">
|
||||
|
||||
<div class="content">
|
||||
<nav class="navbar navbar-header navbar-expand-lg bg-primary-gradient">
|
||||
<ul class="container-fluid mt-3 mb--2">
|
||||
|
||||
<ul class="navbar-nav topbar-nav ml-md-auto align-items-center page-navigation page-navigation-style-2 page-navigation-secondary">
|
||||
<li class="nav-item ml-2">
|
||||
<span class="text-white text-sm mr-2" id="last_resfresh">Loading</span>
|
||||
</li>
|
||||
<li class="nav-item hidden-caret">
|
||||
<button class="btn btn-primary btn-sm" onclick="get_case_graph();">
|
||||
<span class="menu-title">Refresh</span>
|
||||
</button>
|
||||
</li>
|
||||
</ul>
|
||||
</ul>
|
||||
</nav>
|
||||
{% if current_user.is_authenticated %}
|
||||
{{ form.hidden_tag() }}
|
||||
<div class="page-inner">
|
||||
<div class="row">
|
||||
<div class="loader1 text-center ml-mr-auto" id="loading_msg">Loading...</div>
|
||||
<div class="card mb-4 col-md-12" id="card_main_load" style="display:none;">
|
||||
<div class="card-body">
|
||||
<div class="row">
|
||||
<div id='graph-container'></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
</div>
|
||||
|
||||
{% include 'includes/footer.html' %}
|
||||
</div>
|
||||
|
||||
{% endblock content %}
|
||||
|
||||
{% block javascripts %}
|
||||
|
||||
<script src="/static/assets/js/plugin/vis/vis.min.js"></script>
|
||||
<script src="/static/assets/js/plugin/vis/vis-network.min.js"></script>
|
||||
<script src="/static/assets/js/plugin/bootstrap-slider/bootstrap-slider.min.js"></script>
|
||||
|
||||
<script src="/static/assets/js/plugin/select/select2.js"></script>
|
||||
<script src="/static/assets/js/plugin/select/bootstrap-select.min.js"></script>
|
||||
|
||||
<script src="/static/assets/js/iris/case.js"></script>
|
||||
<script src="/static/assets/js/iris/case.graph.js"></script>
|
||||
{% endblock javascripts %}
|
||||
|
||||
|
||||
|
@@ -0,0 +1,86 @@
|
||||
{% extends "layouts/default_ext.html" %}
|
||||
|
||||
{% block title %} Case Graph Timeline {% endblock title %}
|
||||
|
||||
{% block stylesheets %}
|
||||
<link rel="stylesheet" href="/static/assets/css/bootstrap-datetime.css">
|
||||
<link rel="stylesheet" href="/static/assets/css/suggestags.css">
|
||||
<link rel="stylesheet" href="/static/assets/css/bootstrap-select.min.css">
|
||||
<link rel="stylesheet" href="/static/assets/css/select2.css">
|
||||
<link rel="stylesheet" href="/static/assets/css/vis.graph.css">
|
||||
|
||||
{% endblock stylesheets %}
|
||||
|
||||
{% block content %}
|
||||
|
||||
{% include 'includes/navigation_ext.html' %}
|
||||
|
||||
|
||||
{% include 'includes/sidenav.html' %}
|
||||
<div class="main-panel">
|
||||
<div class="content">
|
||||
<nav class="navbar navbar-header navbar-expand-lg bg-primary-gradient">
|
||||
<ul class="container-fluid mt-3 mb--2">
|
||||
<ul class="navbar-nav">
|
||||
<li class="nav-item hidden-caret">
|
||||
<a class="menu-title btn btn-dark btn-sm" href="visualize?cid={{session['current_case'].case_id}}">No group</a>
|
||||
</li>
|
||||
<li class="nav-item hidden-caret">
|
||||
<a class="menu-title btn btn-dark btn-sm" href="visualize?cid={{session['current_case'].case_id}}&group-by=asset"><span class="text-decoration-none">Group by asset</span></a>
|
||||
</li>
|
||||
<li class="nav-item hidden-caret">
|
||||
<a class="menu-title btn btn-dark btn-sm" href="visualize?cid={{session['current_case'].case_id}}&group-by=category">Group by category</a>
|
||||
</li>
|
||||
</ul>
|
||||
<ul class="navbar-nav topbar-nav ml-md-auto align-items-center page-navigation page-navigation-style-2 page-navigation-secondary">
|
||||
<li class="nav-item ml-2">
|
||||
<span class="text-white text-sm mr-2" id="last_resfresh">Loading</span>
|
||||
</li>
|
||||
<li class="nav-item hidden-caret">
|
||||
<button class="btn btn-primary btn-sm" onclick="refresh_timeline_graph();">
|
||||
<span class="menu-title">Refresh</span>
|
||||
</button>
|
||||
</li>
|
||||
</ul>
|
||||
</ul>
|
||||
</nav>
|
||||
|
||||
<div class="loader1 text-center ml-mr-auto" id="loading_msg">Loading...</div>
|
||||
<div class="page-inner">
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
|
||||
<div class="card" id="card_main_load" style="display:none;">
|
||||
<div class="card-body">
|
||||
<div id='visualization'></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% include 'includes/footer.html' %}
|
||||
</div>
|
||||
|
||||
{% endblock content %}
|
||||
|
||||
{% block javascripts %}
|
||||
|
||||
<script src="/static/assets/js/core/moments.min.js"></script>
|
||||
<script src="/static/assets/js/core/bootstrap-datetimepicker.min.js"></script>
|
||||
|
||||
<script src="/static/assets/js/plugin/tagsinput/suggesttag.js"></script>
|
||||
<script src="/static/assets/js/plugin/select/select2.js"></script>
|
||||
<script src="/static/assets/js/plugin/select/bootstrap-select.min.js"></script>
|
||||
|
||||
<script src="/static/assets/js/iris/case.js"></script>
|
||||
<script src="/static/assets/js/iris/case.timeline.visu.js"></script>
|
||||
<script src="/static/assets/js/plugin/vis/vis.graph.js"></script>
|
||||
<script>
|
||||
$(document).ready(function(){
|
||||
show_loader();
|
||||
refresh_timeline_graph();
|
||||
});
|
||||
</script>
|
||||
|
||||
{% endblock javascripts %}
|
149
iris-web/source/app/blueprints/case/templates/case_ioc.html
Normal file
149
iris-web/source/app/blueprints/case/templates/case_ioc.html
Normal file
@@ -0,0 +1,149 @@
|
||||
{% extends "layouts/default_ext.html" %}
|
||||
{% block title %} Case IOC {% endblock title %}
|
||||
|
||||
{% block stylesheets %}
|
||||
{% include 'includes/header_case.html' %}
|
||||
{% endblock stylesheets %}
|
||||
|
||||
{% block content %}
|
||||
|
||||
{% include 'includes/navigation_ext.html' %}
|
||||
|
||||
{% include 'includes/sidenav.html' %}
|
||||
<div class="main-panel">
|
||||
|
||||
<div class="content">
|
||||
|
||||
{% if current_user.is_authenticated %}
|
||||
{{ form.hidden_tag() }}
|
||||
<nav class="navbar navbar-header navbar-expand-lg pt-2 pb-2 bg-primary-gradient">
|
||||
<div class="container-fluid">
|
||||
<div class="collapse" id="search-nav">
|
||||
<div id="tables_button"></div>
|
||||
</div>
|
||||
<ul class="navbar-nav topbar-nav ml-md-auto align-items-center page-navigation page-navigation-style-2 page-navigation-secondary">
|
||||
<li class="nav-item ml-2">
|
||||
<span class="text-white text-sm mr-2" id="last_resfresh">Loading</span>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<button class="btn btn-primary btn-sm" onclick="reload_iocs();">
|
||||
<span class="menu-title">Refresh</span>
|
||||
</button>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<button class="btn btn-dark btn-sm" onclick="add_ioc();">
|
||||
<span class="menu-title">Add IOC</span>
|
||||
</button>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<div class="dropdown">
|
||||
<button class="btn btn-sm btn-border btn-black" id="dropdownMenuButton" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
|
||||
<span class="menu-title"><i class="fas fa-ellipsis-v"></i></span>
|
||||
</button>
|
||||
<div class="dropdown-menu" aria-labelledby="dropdownMenuButton">
|
||||
<a class="dropdown-item" href="#" onclick="fire_upload_iocs();">Upload CSV of IOCs</a>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
|
||||
</nav>
|
||||
|
||||
<div class="page-inner">
|
||||
<div class="row">
|
||||
<div class="loader1 text-center ml-mr-auto" id="loading_msg">Loading...</div>
|
||||
<div class="col-md-12">
|
||||
<div class="card" id="card_main_load" style="display:none;">
|
||||
<div class="card-body">
|
||||
<table class="table display wrap col-border table-striped table-hover" width="100%" cellspacing="0" id="ioc_table" >
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Value</th>
|
||||
<th>Type</th>
|
||||
<th>Description</th>
|
||||
<th>Tags</th>
|
||||
<th>Linked cases</th>
|
||||
<th>TLP</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tfoot>
|
||||
<tr>
|
||||
<th>Value</th>
|
||||
<th>Type</th>
|
||||
<th>Description</th>
|
||||
<th>Tags</th>
|
||||
<th>Linked cases</th>
|
||||
<th>TLP</th>
|
||||
</tr>
|
||||
</tfoot>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
</div>
|
||||
|
||||
{% include 'includes/footer.html' %}
|
||||
</div>
|
||||
<div class="modal" tabindex="-1" role="dialog" id="modal_add_ioc" data-backdrop="true">
|
||||
<div class="modal-xl modal-dialog" role="document">
|
||||
<div class="modal-content" id="modal_add_ioc_content">
|
||||
|
||||
</div>
|
||||
<!-- /.modal-content -->
|
||||
</div>
|
||||
<!-- /.modal-dialog -->
|
||||
</div>
|
||||
|
||||
<div class="modal " tabindex="-1" role="dialog" id="modal_upload_ioc" data-backdrop="true">
|
||||
<div class="modal-lg modal-dialog" role="document">
|
||||
<form method="post" action="" id="form_upload_ioc">
|
||||
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h5>Upload IOC list (CSV format)</h5>
|
||||
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span
|
||||
aria-hidden="true">×</span></button>
|
||||
</div>
|
||||
|
||||
<div class="modal-body">
|
||||
<div class="form-group">
|
||||
<label for="ioc_format" class="placeholder">Expected CSV File format</label>
|
||||
<textarea class="form-control col-md-12 col-sm-12 sizable-textarea" rows="2" disabled>ioc_value,ioc_type,ioc_description,ioc_tags,ioc_tlp
|
||||
<Value>,<Type>,<Description>,<TLP>,Tags separated with "|"</textarea>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="placeholder">CSV File format example</label>
|
||||
<textarea class="form-control col-md-12 col-sm-12 sizable-textarea" rows="3" disabled>ioc_value,ioc_type,ioc_description,ioc_tags,ioc_tlp
|
||||
1.1.1.1,IP,Cloudfare DNS IP address,Cloudfare|DNS,green
|
||||
wannacry.exe,File,Wannacry sample found,Wannacry|Malware|PE,amber</textarea>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="placeholder">Choose CSV file to import : </label>
|
||||
<input id="input_upload_ioc" type="file" accept="text/csv">
|
||||
</div>
|
||||
</div>
|
||||
<div class='invalid-feedback' id='ioc-invalid-msg'></div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-outline-dark mr-auto" onclick="generate_sample_csv();">Download sample CSV</button>
|
||||
<button type="button" class="btn btn-outline-success" onclick="upload_ioc();">Upload</button>
|
||||
</div>
|
||||
</div><!-- /.modal-content -->
|
||||
</form>
|
||||
</div><!-- /.modal-dialog -->
|
||||
</div>
|
||||
|
||||
{% endblock content %}
|
||||
|
||||
{% block javascripts %}
|
||||
|
||||
{% include 'includes/footer_case.html' %}
|
||||
<script src="/static/assets/js/iris/case.ioc.js"></script>
|
||||
|
||||
{% endblock javascripts %}
|
@@ -0,0 +1,59 @@
|
||||
<div class="modal shortcut_modal bg-shadow-gradient" id="shortcutModal" tabindex="-1" aria-labelledby="shortcutModalLabel" aria-hidden="true">
|
||||
<div class="modal-dialog modal-lg">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h5 class="modal-title" id="shortcutModalLabel">Shortcuts</h5>
|
||||
<button type="button" class="pull-right btn bg-transparent" data-dismiss="modal" aria-label="Close"><span
|
||||
aria-hidden="true"><i class="fa fa-times"></i></span></button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<table class="table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th scope="col">Shortcut</th>
|
||||
<th scope="col">Action</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>CTRL-S</td>
|
||||
<td>Save note</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>CTRL-B</td>
|
||||
<td>Bold</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>CTRL-I</td>
|
||||
<td>Italic</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>CTRL-SHIFT-1</td>
|
||||
<td>Heading 1</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>CTRL-SHIFT-2</td>
|
||||
<td>Heading 2</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>CTRL-SHIFT-3</td>
|
||||
<td>Heading 3</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>CTRL-SHIFT-4</td>
|
||||
<td>Heading 4</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>CTRL-`</td>
|
||||
<td>Insert code</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>CTRL-K</td>
|
||||
<td>Insert link</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
134
iris-web/source/app/blueprints/case/templates/case_notes.html
Normal file
134
iris-web/source/app/blueprints/case/templates/case_notes.html
Normal file
@@ -0,0 +1,134 @@
|
||||
{% extends "layouts/default_ext.html" %} {% block title %} Case notes {% endblock title %} {% block stylesheets %}
|
||||
{% include 'includes/header_case.html' %}
|
||||
<link rel="stylesheet" href="/static/assets/css/bootstrap-select.min.css">
|
||||
{% endblock stylesheets %}
|
||||
{% block content %}
|
||||
{% include 'includes/navigation_ext.html' %}
|
||||
|
||||
{% include 'includes/sidenav.html' %}
|
||||
<div class="main-panel">
|
||||
|
||||
<div class="content">
|
||||
|
||||
{% if current_user.is_authenticated %}
|
||||
{{ form.hidden_tag() }}
|
||||
<nav class="navbar navbar-header navbar-expand-lg pt-2 pb-2 bg-primary-gradient">
|
||||
<div class="container-fluid">
|
||||
<div class="collapse search-flex" id="search-nav">
|
||||
<ul class="list-group list-group-bordered hidden-caret" id="notes_search_list"></ul>
|
||||
<input type="text" class="form-control mr-3" style="max-width:400px;" id="search_note_input" onkeyup="search_notes()" placeholder="Search in notes..">
|
||||
</div>
|
||||
<ul class="navbar-nav topbar-nav ml-md-auto align-items-center page-navigation page-navigation-style-2 page-navigation-secondary">
|
||||
<li class="nav-item ml-2">
|
||||
<span class="text-white text-sm mr-2" id="last_resfresh">Loading</span>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<button class="btn btn-primary btn-sm" onclick="draw_kanban();">
|
||||
<span class="menu-title">Refresh</span>
|
||||
</button>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<button class="btn btn-dark btn-sm" onclick="add_remote_groupnote();">
|
||||
<span class="menu-title">Add notes group</span>
|
||||
</button>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
|
||||
</nav>
|
||||
<div class="page-inner">
|
||||
<div class="loader1 text-center ml-mr-auto" id="loading_msg">Loading...</div>
|
||||
<div id="empty-set-notes" style="display:none;">
|
||||
<h4 class="text-dark text-sm text-center ml-mr-auto">It looks pretty empty <i class="fa-solid fa-mug-hot ml-2"></i></h4>
|
||||
<h4 class="text-dark text-sm text-center ml-mr-auto"><a href="#" onclick="add_remote_groupnote();">Click here to add the first note group</a></h4>
|
||||
</div>
|
||||
<div class="row" id="card_main_load" style="display:none;">
|
||||
<div class="container-fluid">
|
||||
<div class="float-right mt-2 col">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div id="myKanban" class="board">
|
||||
</div>
|
||||
</div>
|
||||
<div id="side_timeline">
|
||||
<button class="btn btn-round btn-primary-success btn_over_page_i" onclick="add_remote_groupnote();"><i class="fas fa-plus-circle"></i></button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="kanban-item row" id="_subnote_" style="display: none;" onclick="edit_note(this);" title="">
|
||||
<a href="#" class="kanban-title text-truncate w-100" draggable="false">New note</a><br />
|
||||
<em><small href="#" class="text-sm text-muted kanban-info" draggable="false"><i
|
||||
class="flaticon-tool mr-1"></i>Hello</small></em>
|
||||
<iris_note style="display: none;" id="xqx00qxq">New note</iris_note>
|
||||
|
||||
<div class="kanban-badge avatar-group-note col-12" id="kanban_badge_">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div data-id="_todo" class="kanban-board" id="group_" title="" draggable="false" style="display: none;">
|
||||
<header class="kanban-board-header">
|
||||
<div class="row">
|
||||
<div class="col-8">
|
||||
<div contenteditable="true" maxlength="25" class="kanban-title-board" onclick="">Note group</div>
|
||||
</div>
|
||||
<div class="col">
|
||||
<div class="kanban-title-button">
|
||||
<div class="row mr-1">
|
||||
<button class="mr-2" onclick="" style="display: none;"><i
|
||||
class="fas fa-check-circle text-success"></i></button>
|
||||
<button class="mr-2" onclick=""><i class="fas fa-plus-circle "></i></button>
|
||||
<div class="dropdown dropdown-kanban ">
|
||||
|
||||
<button class="dropdown-toggle" type="button" id="dropdownMenuButton" data-toggle="dropdown"
|
||||
aria-haspopup="true" aria-expanded="false">
|
||||
<i class="icon-options-vertical"></i>
|
||||
</button>
|
||||
<div class="dropdown-menu" aria-labelledby="dropdownMenuButton ">
|
||||
<a class="dropdown-item" href="#" draggable="false">Delete</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
<main class="kanban-drag" id="_main">
|
||||
</main>
|
||||
</div>
|
||||
|
||||
<div class="modal modal-case-focus" tabindex="-1" role="dialog" id="modal_note_detail" data-backdrop="true">
|
||||
<div class="modal-dialog modal-xxl modal-xl" role="document">
|
||||
<div class="modal-content" id="info_note_modal_content">
|
||||
|
||||
</div><!-- /.modal-content -->
|
||||
</div><!-- /.modal-dialog -->
|
||||
</div>
|
||||
|
||||
{% endif %}
|
||||
</div>
|
||||
|
||||
{% include 'includes/footer.html' %}
|
||||
</div>
|
||||
{% endblock content %}
|
||||
{% block javascripts %}
|
||||
{% include 'includes/footer_case.html' %}
|
||||
<script src="/static/assets/js/plugin/sortable/sortable.js "></script>
|
||||
<script src="/static/assets/js/core/socket.io.js"></script>
|
||||
<script src="/static/assets/js/iris/case.notes.js "></script>
|
||||
|
||||
<script>
|
||||
/* Wait for document to be ready before loading the kanban board */
|
||||
$(document).ready(function () {
|
||||
/* load board */
|
||||
boardNotes.init();
|
||||
setInterval(function() { check_update('notes/state'); }, 3000);
|
||||
draw_kanban();
|
||||
});
|
||||
</script>
|
||||
|
||||
{% endblock javascripts %}
|
105
iris-web/source/app/blueprints/case/templates/case_rfile.html
Normal file
105
iris-web/source/app/blueprints/case/templates/case_rfile.html
Normal file
@@ -0,0 +1,105 @@
|
||||
{% extends "layouts/default_ext.html" %} {% block title %} Case Evidences {% endblock title %} {% block stylesheets %}
|
||||
{% include 'includes/header_case.html' %}
|
||||
{% endblock stylesheets %}
|
||||
{% block content %}
|
||||
|
||||
{% include 'includes/navigation_ext.html' %}
|
||||
|
||||
{% include 'includes/sidenav.html' %}
|
||||
<div class="main-panel">
|
||||
|
||||
<div class="content">
|
||||
|
||||
|
||||
{% if current_user.is_authenticated %}
|
||||
{{ form.hidden_tag() }}
|
||||
<nav class="navbar navbar-header navbar-expand-lg pt-2 pb-2 bg-primary-gradient">
|
||||
<div class="container-fluid">
|
||||
<div class="collapse" id="search-nav">
|
||||
<div id="tables_button"></div>
|
||||
</div>
|
||||
<ul class="navbar-nav topbar-nav ml-md-auto align-items-center page-navigation page-navigation-style-2 page-navigation-secondary">
|
||||
<li class="nav-item ml-2">
|
||||
<span class="text-white text-sm mr-2" id="last_resfresh">Loading</span>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<button class="btn btn-primary btn-sm" onclick="reload_rfiles(true);">
|
||||
<span class="menu-title">Refresh</span>
|
||||
</button>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<button onclick="add_modal_rfile()" class="btn btn-dark btn-sm">
|
||||
<span class="menu-title">Register Evidence</span>
|
||||
</button>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
|
||||
</nav>
|
||||
<div class="page-inner">
|
||||
<div class="row">
|
||||
<div class="loader1 text-center ml-mr-auto" id="loading_msg">Loading...</div>
|
||||
<div class="col-md-12">
|
||||
<div class="card" id="card_main_load" style="display:none;">
|
||||
<div class="card-body">
|
||||
<div class="table-responsive" id="rfiles_table_wrapper">
|
||||
<div class="selectgroup">
|
||||
<span id="table_buttons"></span>
|
||||
</div>
|
||||
<table class="table display wrap col-border table-striped table-hover dataTable" width="100%"
|
||||
cellspacing="0" id="rfiles_table">
|
||||
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Name</th>
|
||||
<th>Date</th>
|
||||
<th>Hash</th>
|
||||
<th>Size (bytes)</th>
|
||||
<th>Description</th>
|
||||
<th>Added by</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tfoot>
|
||||
<tr>
|
||||
<th>Name</th>
|
||||
<th>Date</th>
|
||||
<th>Hash</th>
|
||||
<th>Size(bytes)</th>
|
||||
<th>Description</th>
|
||||
<th>Added by</th>
|
||||
</tr>
|
||||
</tfoot>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="modal" tabindex="-1" role="dialog" id="modal_add_rfiles" data-backdrop="true">
|
||||
<div class="modal-lg modal-dialog" role="document">
|
||||
<div class="modal-content" id="modal_add_rfiles_content">
|
||||
|
||||
</div>
|
||||
<!-- /.modal-content -->
|
||||
</div>
|
||||
<!-- /.modal-dialog -->
|
||||
</div>
|
||||
|
||||
{% endif %}
|
||||
</div>
|
||||
|
||||
{% include 'includes/footer.html' %}
|
||||
</div>
|
||||
|
||||
{% endblock content %}
|
||||
{% block javascripts %}
|
||||
{% include 'includes/footer_case.html' %}
|
||||
|
||||
<script src="/static/assets/js/iris/case.rfiles.js"></script>
|
||||
<script>
|
||||
</script>
|
||||
|
||||
{% endblock javascripts %}
|
109
iris-web/source/app/blueprints/case/templates/case_tasks.html
Normal file
109
iris-web/source/app/blueprints/case/templates/case_tasks.html
Normal file
@@ -0,0 +1,109 @@
|
||||
{% extends "layouts/default_ext.html" %}
|
||||
|
||||
{% block title %} Case Tasks {% endblock title %}
|
||||
|
||||
{% block stylesheets %}
|
||||
{% include 'includes/header_case.html' %}
|
||||
<link rel="stylesheet" href="/static/assets/css/bootstrap-multiselect.min.css">
|
||||
{% endblock stylesheets %}
|
||||
|
||||
{% block content %}
|
||||
|
||||
{% include 'includes/navigation_ext.html' %}
|
||||
|
||||
|
||||
{% include 'includes/sidenav.html' %}
|
||||
<div class="main-panel">
|
||||
|
||||
<div class="content">
|
||||
|
||||
|
||||
{% if current_user.is_authenticated %}
|
||||
{{ form.hidden_tag() }}
|
||||
<nav class="navbar navbar-header navbar-expand-lg pt-2 pb-2 bg-primary-gradient">
|
||||
<div class="container-fluid">
|
||||
<div class="collapse" id="search-nav">
|
||||
<div id="tables_button"></div>
|
||||
</div>
|
||||
<ul class="navbar-nav topbar-nav ml-md-auto align-items-center page-navigation page-navigation-style-2 page-navigation-secondary">
|
||||
<li class="nav-item ml-2">
|
||||
<span class="text-white text-sm mr-2" id="last_resfresh">Loading</span>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<button class="btn btn-primary btn-sm" onclick="get_tasks();">
|
||||
<span class="menu-title">Refresh</span>
|
||||
</button>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<button class="btn btn-dark btn-sm" onclick="add_task();">
|
||||
<span class="menu-title">Add task</span>
|
||||
</button>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</nav>
|
||||
<div class="page-inner ">
|
||||
<div class="row ">
|
||||
<div class="col-md-12">
|
||||
<div class="loader1 text-center ml-mr-auto" id="loading_msg">Loading...</div>
|
||||
<section class="card" id="card_main_load" style="display:none;">
|
||||
|
||||
<div class="card-body">
|
||||
<div class="table-responsive" id="tasks_table_wrapper">
|
||||
<table class="table display wrap col-border table-striped table-hover dataTable" width="100%"
|
||||
cellspacing="0" id="tasks_table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Title</th>
|
||||
<th>Description</th>
|
||||
<th>Status</th>
|
||||
<th>Assigned to</th>
|
||||
<th>Open date</th>
|
||||
<th>Tags</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tfoot>
|
||||
<tr>
|
||||
<th>Title</th>
|
||||
<th>Description</th>
|
||||
<th>Status</th>
|
||||
<th>Assigned to</th>
|
||||
<th>Open date</th>
|
||||
<th>Tags</th>
|
||||
</tr>
|
||||
</tfoot>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="modal " tabindex="-1" role="dialog" id="modal_add_task" data-backdrop="true">
|
||||
<div class="modal-xxl modal-dialog" role="document">
|
||||
<div class="modal-content" id="modal_add_task_content">
|
||||
|
||||
</div>
|
||||
<!-- /.modal-content -->
|
||||
</div>
|
||||
<!-- /.modal-dialog -->
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
</div>
|
||||
|
||||
{% include 'includes/footer.html' %}
|
||||
</div>
|
||||
|
||||
{% endblock content %}
|
||||
|
||||
{% block javascripts %}
|
||||
{% include 'includes/footer_case.html' %}
|
||||
|
||||
<script src="/static/assets/js/plugin/datatables/dataTables.cellEdit.js"></script>
|
||||
<script src="/static/assets/js/plugin/select/bootstrap-multiselect.min.js"></script>
|
||||
<script src="/static/assets/js/iris/case.tasks.js"></script>
|
||||
|
||||
|
||||
{% endblock javascripts %}
|
178
iris-web/source/app/blueprints/case/templates/case_timeline.html
Normal file
178
iris-web/source/app/blueprints/case/templates/case_timeline.html
Normal file
@@ -0,0 +1,178 @@
|
||||
{% extends "layouts/default_ext.html" %}
|
||||
|
||||
{% block title %} Case Timeline {% endblock title %}
|
||||
|
||||
{% block stylesheets %}
|
||||
<link rel="stylesheet" href="/static/assets/css/bootstrap-datetime.css">
|
||||
<link rel="stylesheet" href="/static/assets/css/suggestags.css">
|
||||
<link rel="stylesheet" href="/static/assets/css/bootstrap-select.min.css">
|
||||
<link rel="stylesheet" href="/static/assets/css/select2.css">
|
||||
|
||||
{% endblock stylesheets %}
|
||||
|
||||
{% block content %}
|
||||
|
||||
{% include 'includes/navigation_ext.html' %}
|
||||
|
||||
|
||||
{% include 'includes/sidenav.html' %}
|
||||
<div class="main-panel">
|
||||
|
||||
<div class="content">
|
||||
<!-- Navbar Header -->
|
||||
<nav class="navbar navbar-header navbar-expand-lg bg-primary-gradient">
|
||||
{{ form.hidden_tag() }}
|
||||
<ul class="container-fluid mt-3 mb--2">
|
||||
<ul class="navbar-nav col-8">
|
||||
<li class="nav-item hidden-caret col-12">
|
||||
<div class="row">
|
||||
<div id='timeline_filtering' class="col-9 pt-2 pl-2" style="border-radius:3px;" ></div>
|
||||
<button class="btn btn-sm btn-light ml-2 pt-2" onclick="filter_timeline();">
|
||||
Apply filter
|
||||
</button>
|
||||
<button class="btn btn-sm btn-light ml-1 pt-2" onclick="reset_filters();">
|
||||
Reset
|
||||
</button>
|
||||
<i class="ml-1 mt-1 fa-regular text-white fa-circle-question" title="Filter help" style="cursor:pointer;" onclick="show_timeline_filter_help();"></i>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
<ul class="navbar-nav topbar-nav ml-md-auto align-items-center page-navigation page-navigation-style-2 page-navigation-secondary">
|
||||
<li class="nav-item ml-2">
|
||||
<span class="text-white text-sm mr-2" id="last_resfresh">Loading</span>
|
||||
</li>
|
||||
<li class="nav-item hidden-caret">
|
||||
<button class="btn btn-primary btn-sm" onclick="get_or_filter_tm();">
|
||||
<span class="menu-title">Refresh</span>
|
||||
</button>
|
||||
</li>
|
||||
|
||||
<li class="nav-item hidden-caret">
|
||||
<button class="btn btn-dark btn-sm" onclick="add_event();">
|
||||
<span class="menu-title">Add event</span>
|
||||
</button>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<div class="dropdown">
|
||||
<button class="btn btn-sm btn-border btn-black" id="dropdownMenuButton" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
|
||||
<span class="menu-title"><i class="fas fa-ellipsis-v"></i></span>
|
||||
</button>
|
||||
<div class="dropdown-menu" aria-labelledby="dropdownMenuButton">
|
||||
<a class="dropdown-item" href="timeline/visualize?cid={{session['current_case'].case_id}}"> Visualize</a>
|
||||
<a class="dropdown-item" href="timeline/visualize?cid={{session['current_case'].case_id}}&group-by=asset"> Visualize by asset</a>
|
||||
<a class="dropdown-item" href="timeline/visualize?cid={{session['current_case'].case_id}}&group-by=category">Visualize by category</a>
|
||||
<div class="dropdown-divider"></div>
|
||||
<a class="dropdown-item" href="#" onclick="timelineToCsv();"><small class="fa fa-download mr-2"></small> Download as CSV</a>
|
||||
<a class="dropdown-item" href="#" onclick="timelineToCsvWithUI();"><small class="fa fa-download mr-2"></small> Download as CSV with user info</a>
|
||||
<!-- BEGIN_RS_CODE -->
|
||||
<div class="dropdown-divider"></div>
|
||||
<a class="dropdown-item" href="#" onclick="fire_upload_csv_events();"><small class="fa fa-upload mr-2"></small> Upload CSV of events</a>
|
||||
<!-- END_RS_CODE -->
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</ul>
|
||||
</nav>
|
||||
|
||||
{% if current_user.is_authenticated %}
|
||||
|
||||
<div class="page-inner">
|
||||
<div class="row">
|
||||
<div class="loader1 text-center ml-mr-auto" id="loading_msg">Loading...</div>
|
||||
<div class="col-md-12" id="card_main_load" style="display:none;">
|
||||
<div id="paginator"></div>
|
||||
<ul class="timeline" id="timeline_list">
|
||||
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div id="side_timeline">
|
||||
|
||||
<div class="btn_over_page_a">
|
||||
<button class="btn btn-round btn-light btn-conditional-2 colorinput-color bg-white" title="color1" onclick="events_set_attribute('event_color', '#fff')"></button>
|
||||
<button class="btn btn-round btn-light btn-conditional-2 colorinput-color bg-primary" title="color2" onclick="events_set_attribute('event_color', '#1572E899')"></button>
|
||||
<button class="btn btn-round btn-light btn-conditional-2 colorinput-color bg-secondary" title="color3" onclick="events_set_attribute('event_color', '#6861CE99')"></button>
|
||||
<button class="btn btn-round btn-light btn-conditional-2 colorinput-color bg-info" title="color4" onclick="events_set_attribute('event_color', '#48ABF799')"></button>
|
||||
<button class="btn btn-round btn-light btn-conditional-2 colorinput-color bg-success" title="color5" onclick="events_set_attribute('event_color', '#31CE3699')"></button>
|
||||
<button class="btn btn-round btn-light btn-conditional-2 colorinput-color bg-danger" title="color5" onclick="events_set_attribute('event_color', '#F2596199')"></button>
|
||||
<button class="btn btn-round btn-light btn-conditional-2 colorinput-color bg-warning" title="color5" onclick="events_set_attribute('event_color', '#FFAD4699')"></button>
|
||||
<button class="btn btn-round btn-light btn-conditional" title="Change color" onclick="toggle_colors()"><i class="fas fa-tint"></i></button>
|
||||
</div>
|
||||
<button class="btn btn-round btn-light btn_over_page_delete btn-conditional" title="Delete selected events" onclick="events_bulk_delete();"><i class="fas fa-trash text-danger"></i></button>
|
||||
<button class="btn btn-round btn-light btn_over_page_b btn-conditional" title="Toggle Summary" onclick="events_set_attribute('event_in_summary')"><i class="fas fa-newspaper"></i></button>
|
||||
<button class="btn btn-round btn-light btn_over_page_c btn-conditional" title="Toggle Graph" onclick="events_set_attribute('event_in_graph')"><i class="fas fa-share-alt"></i></button>
|
||||
<button class="btn btn-round btn-light btn_over_page_d" title="Select rows" onclick="toggle_selector();" id="selector-btn"><i class="fas fa-check"></i></button>
|
||||
<button class="btn btn-round btn-light btn_over_page_e" title="Add new event" onclick="add_event();"><i class="fas fa-plus-circle"></i></button>
|
||||
<button class="btn btn-round btn-light btn_over_page_f" title="Refresh" onclick="get_or_filter_tm();"><i class="fas fa-redo-alt"></i></button>
|
||||
<button class="btn btn-round btn-light btn_over_page_g" title="Go at the top" onclick="to_page_up();"><i class="fas fa-arrow-up"></i></button>
|
||||
<button class="btn btn-round btn-light btn_over_page_h" title="Go at the bottom" onclick="to_page_down();"><i class="fas fa-arrow-down"></i></button>
|
||||
<button class="btn btn-round btn-light btn_over_page_i" title="Toggle compact view" onclick="toggle_compact_view();"><i class="fas fa-list"></i></button>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<div class="modal shadow-lg" tabindex="-1" id="modal_add_event" data-backdrop="true">
|
||||
<div class="modal-xl modal-dialog" role="document">
|
||||
<div class="modal-content" id="modal_add_event_content">
|
||||
|
||||
</div>
|
||||
<!-- /.modal-content -->
|
||||
</div>
|
||||
<!-- /.modal-dialog -->
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
|
||||
<!-- BEGIN RS_CODE -->
|
||||
<div class="modal " tabindex="-1" role="dialog" id="modal_upload_csv_events" data-backdrop="true">
|
||||
<div class="modal-lg modal-dialog" role="document">
|
||||
<form method="post" action="" id="form_upload_csv_events">
|
||||
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h5>Upload events list (CSV format)</h5>
|
||||
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span
|
||||
aria-hidden="true">×</span></button>
|
||||
</div>
|
||||
|
||||
<div class="modal-body">
|
||||
<div class="form-group">
|
||||
<label for="csv_format" class="placeholder">Expected Events CSV File format</label>
|
||||
<textarea id="csv_format" class="form-control col-md-12 col-sm-12 sizable-textarea" rows="2" disabled>event_timestamp,event_title,event_description,linked_assets,linked_IoCs,event_tags (separated with "|"),event_color,event_raw_data</textarea>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="placeholder">Events CSV File format example</label>
|
||||
<textarea class="form-control col-md-12 col-sm-12 sizable-textarea" rows="3" disabled>
|
||||
event_date,event_tz,event_title,event_category,event_content,event_raw,event_source,event_assets,event_iocs,event_tags
|
||||
"2023-03-26T03:00:30.000","+00:00","An event","Unspecified","Event description","raw","source","","","defender|malicious"
|
||||
"2023-03-23T12:00:35.000","+00:00","An event","Legitimate","Event description","raw","source","","","admin_action"
|
||||
</textarea>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="placeholder">Choose CSV file to import : </label>
|
||||
<input id="input_upload_csv_events" type="file" accept="text/csv">
|
||||
</div>
|
||||
</div>
|
||||
<div class='invalid-feedback' id='ioc-invalid-msg'></div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-outline-dark mr-auto" onclick="generate_events_sample_csv();">Download sample CSV</button>
|
||||
<button type="button" class="btn btn-outline-success" onclick="upload_csv_events();">Upload</button>
|
||||
</div>
|
||||
</div><!-- /.modal-content -->
|
||||
</form>
|
||||
</div><!-- /.modal-dialog -->
|
||||
</div>
|
||||
<!-- END_RS_CODE -->
|
||||
{% include 'includes/footer.html' %}
|
||||
</div>
|
||||
|
||||
{% endblock content %}
|
||||
{% block javascripts %}
|
||||
|
||||
{% include 'includes/footer_case.html' %}
|
||||
<script src="/static/assets/js/iris/case.timeline.js"></script>
|
||||
<script src="/static/assets/js/timeline.js"></script>
|
||||
|
||||
{% endblock javascripts %}
|
@@ -0,0 +1,201 @@
|
||||
<div class="modal-header">
|
||||
<div class="col md-12">
|
||||
<div class="row">
|
||||
<div class="col align-self-center">
|
||||
<h4 class="modal-title mr-4">{{ "Asset #{}".format(asset.asset_id) if asset.asset_name else "Add asset" }}</h4>
|
||||
<small><a class="text-muted">{{ "#{}".format(asset.asset_uuid) if asset.asset_uuid else "" }}</a></small>
|
||||
</div>
|
||||
{% include 'modals/modal_attributes_nav.html' %}
|
||||
<div class="col">
|
||||
<div class="row float-right">
|
||||
{% if asset.asset_id %}
|
||||
<div class="dropdown">
|
||||
<button class="btn bg-transparent pull-right" id="dropdownMenuButton" data-toggle="dropdown" aria-haspopup="true" aria-expanded="true">
|
||||
<span aria-hidden="true"><i class="fas fa-ellipsis-v"></i></span>
|
||||
</button>
|
||||
<div class="dropdown-menu pull-right" id="asset_modal_quick_actions" aria-labelledby="dropdownMenuButton">
|
||||
<a class="dropdown-item" href="#" onclick='copy_object_link({{asset.asset_id}});return false;'><i class="fa fa-share mr-2"></i>Share</a>
|
||||
<a class="dropdown-item" href="#" onclick='copy_object_link_md("asset", {{asset.asset_id}});return false;'><i class="fa-brands fa-markdown mr-2"></i>Markdown Link</a>
|
||||
</div>
|
||||
</div>
|
||||
<button type="button" class="btn bg-transparent btn-xs" onclick="comment_element({{ asset.asset_id }}, 'assets')" title="Comments">
|
||||
<span class="btn-label">
|
||||
<i class="fa-solid fa-comments"></i><span class="notification" id="object_comments_number">{{ comments_map|length }}</span>
|
||||
</span>
|
||||
</button>
|
||||
{% endif %}
|
||||
<button class="float-right btn bg-transparent" title="Minimize" onclick="modal_minimized('modal_add_asset', '{{ "Asset {}".format(asset.asset_name) if asset.asset_name else "Add asset" }}');"> <i class='fa fa-minus'></i> </button>
|
||||
<button type="button" class="pull-right btn bg-transparent" data-dismiss="modal" aria-label="Close"><span
|
||||
aria-hidden="true"><i class="fa fa-times"></i></span></button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<div role="tabpanel">
|
||||
<div class="tab-content">
|
||||
<div class="tab-pane active" id="details">
|
||||
<div class="container col-md-12">
|
||||
<form method="post" action="" id="form_new_asset">
|
||||
<div class="col-md-12 col-lg-12 col-sm-12">
|
||||
{{ form.hidden_tag() }}
|
||||
<div class="form-row ml-2">
|
||||
<div class="form-group col-6">
|
||||
<label for="name" class="placeholder">Asset Name *</label>
|
||||
{{ form.asset_name(class='form-control', autocomplete="off") }}
|
||||
</div>
|
||||
<div class="form-group col-6">
|
||||
<label for="asset_type" class="placeholder">Asset Type *</label>
|
||||
{{ form.asset_type_id(class="selectpicker form-control") }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group mt-3">
|
||||
<label for="asset_description" class="placeholder">Description</label>
|
||||
<div class="md_description_field">
|
||||
<div class="form-group mt--2">
|
||||
<button type="button" class="float-right icon-note btn btn-circle btn-sm mt-2" onclick="edit_in_asset_desc();">
|
||||
</button>
|
||||
<button type="button" style="display: none;" class="btn btn-dark btn-sm float-right mr-2 mt-2" onclick="preview_asset_description();" id="asset_preview_button"><i class="fa-solid fa-eye"></i></button>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col mb--2 ml--2" id="asset_edition_btn" style="display:none;">
|
||||
</div>
|
||||
</div>
|
||||
<div class="row" style="margin-left:0px;">
|
||||
<div class="col-12" id="container_asset_desc_content">
|
||||
<div id="asset_description" class="mr-2" data-theme="{% if current_user.in_dark_mode %}dark{% else %}light{% endif %}">{% if asset %}{{ asset.asset_description }}{% endif %}</div>
|
||||
<textarea id="asset_desc_content" rows="10" cols="82" style="display: none"></textarea>
|
||||
</div>
|
||||
<div class="col-12" id="container_asset_description" style="display:none">
|
||||
<div id="target_asset_desc"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-row ml-2">
|
||||
<div class="form-group col-6">
|
||||
<label for="asset_domain" class="placeholder">Domain</label>
|
||||
{{ form.asset_domain(class='form-control', autocomplete="off") }}
|
||||
</div>
|
||||
<div class="form-group col-6">
|
||||
<label for="asset_ip" class="placeholder">IP</label>
|
||||
{{ form.asset_ip(class='form-control', autocomplete="off") }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<a class="btn btn-light btn-sm" data-toggle="collapse" href="#collapseAddInfo" role="button" aria-expanded="false" aria-controls="collapseAddInfo">> Additional information</a>
|
||||
<div class="collapse" id="collapseAddInfo">
|
||||
<div class="card card-body">
|
||||
<label for="asset_info" class="placeholder">Additional information</label>
|
||||
{{ form.asset_info(class='form-control col-md-12 col-sm-12 sizable-textarea', autocomplete="off") }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-row ml-2">
|
||||
<div class="form-group col-6">
|
||||
<label for="asset_compromise_status_id" class="placeholder mt-2">Compromise Status </label>
|
||||
{{ form.asset_compromise_status_id(class="selectpicker col-9") }}
|
||||
</div>
|
||||
<div class="form-group col-6">
|
||||
<label for="analysis_status_id" class="placeholder mt-2">Analysis Status </label>
|
||||
{{ form.analysis_status_id(class="selectpicker col-9 float-right") }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="asset_tags">Asset tags
|
||||
</label>
|
||||
<input type="text" id="asset_tags"
|
||||
class="form-control col-md-12" {% if asset.asset_tags %} value="{{ asset.asset_tags }}" {% endif %}/>
|
||||
</div>
|
||||
<div class="form-group" data-select2-id="7">
|
||||
<label>Related IOC</label>
|
||||
<div class="select2-input ml-12" data-select2-id="6">
|
||||
<select id="ioc_links" name="ioc_links" class="form-control select2-hidden-accessible ml-12" multiple="" data-select2-id="ioc_links" tabindex="-1" aria-hidden="true" style="width: 100%">
|
||||
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
{% include 'modals/modal_attributes_tabs.html' %}
|
||||
</div>
|
||||
{% if asset.asset_id %}
|
||||
<button type="button" class="btn btn-outline-danger ml-4 mt-5"
|
||||
onclick="delete_asset({{ asset.asset_id }});">Delete</button>
|
||||
<button type="button" class="btn btn-outline-success ml-4 mt-5 float-right" id="submit_new_asset">Update</button>
|
||||
{% else %}
|
||||
<button type="button" class="btn btn-outline-success ml-4 mt-5 float-right" id="submit_new_asset">Save</button>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
<script>
|
||||
$('form#form_new_case').validate();
|
||||
$('#asset_tags').amsifySuggestags({
|
||||
printValues: false,
|
||||
suggestions: [ {% for tag in tags %} '{{ tag }}', {% endfor %} ]
|
||||
});
|
||||
$('#asset_type_id').selectpicker({
|
||||
liveSearch: true,
|
||||
title: "None",
|
||||
style: "btn-outline-white",
|
||||
|
||||
});
|
||||
$('#analysis_status_id').selectpicker({
|
||||
liveSearch: true,
|
||||
title: "None",
|
||||
style: "btn-outline-white"
|
||||
});
|
||||
$('#analysis_status_id').selectpicker('val', '1');
|
||||
|
||||
$('#asset_compromise_status_id').selectpicker({
|
||||
liveSearch: true,
|
||||
title: "To be determined",
|
||||
style: "btn-outline-white"
|
||||
});
|
||||
$('#asset_compromise_status_id').selectpicker('val', '0');
|
||||
</script>
|
||||
|
||||
{% if asset.asset_id %}
|
||||
<script>
|
||||
$('#asset_type_id').selectpicker('val', '{{ asset.asset_type_id }}');
|
||||
</script>
|
||||
{% endif %}
|
||||
|
||||
{% if asset.analysis_status_id %}
|
||||
<script>
|
||||
$('#analysis_status_id').selectpicker('val', '{{ asset.analysis_status_id }}');
|
||||
</script>
|
||||
{% endif %}
|
||||
|
||||
{% if asset.asset_compromise_status_id %}
|
||||
<script>
|
||||
$('#asset_compromise_status_id').selectpicker('val', '{{ asset.asset_compromise_status_id }}');
|
||||
</script>
|
||||
{% endif %}
|
||||
|
||||
{% if ioc %}
|
||||
<script>
|
||||
var data = [
|
||||
{% for e in ioc %}
|
||||
{
|
||||
id: {{ e.ioc_id }},
|
||||
text: {{ e.ioc_value| tojson }}
|
||||
},
|
||||
{% endfor %}
|
||||
];
|
||||
$('#ioc_links').select2({ data: data });
|
||||
</script>
|
||||
{% endif %}
|
||||
|
||||
{% if ioc_prefill %}
|
||||
<script>
|
||||
$('#ioc_links').val([
|
||||
{% for ioc in ioc_prefill %} {{ ioc[0] }}, {% endfor %}
|
||||
]);
|
||||
$('#ioc_links').trigger('change');
|
||||
</script>
|
||||
{% endif %}
|
@@ -0,0 +1,327 @@
|
||||
<div class="modal-header">
|
||||
<div class="col md-12">
|
||||
<div class="row">
|
||||
<div class="col align-self-center">
|
||||
<h4 class="modal-title mr-4">{% if event.event_id %} Event ID #{{ event.event_id }} {% else %} Add event {% endif %}
|
||||
{% if event.modification_history %}
|
||||
<i class="fa-solid fa-clock-rotate-left ml-3 mt-2" data-toggle="popover" data-html="true" id="pop_history" style="cursor: pointer;"
|
||||
title="Modifications history"
|
||||
data-content="<small>{% for mod in event.modification_history %}<code>{{ mod|format_datetime('%Y-%m-%d %H:%M') }}</code> - {{ event.modification_history[mod].action }} by {{ event.modification_history[mod].user }}<br/>{% endfor %}</small>">
|
||||
</i>
|
||||
{% endif %}
|
||||
</h4>
|
||||
<small><i class="text-muted">{% if event.event_uuid %}#{{ event.event_uuid }}{% endif %}</i></small>
|
||||
</div>
|
||||
{% include 'modals/modal_attributes_nav.html' %}
|
||||
<div class="col ">
|
||||
<div class="row float-right">
|
||||
{% if event.event_id %}
|
||||
<div class="dropdown">
|
||||
<button class="btn bg-transparent pull-right" id="dropdownMenuButton" data-toggle="dropdown" aria-haspopup="true" aria-expanded="true">
|
||||
<span aria-hidden="true"><i class="fas fa-ellipsis-v"></i></span>
|
||||
</button>
|
||||
<div class="dropdown-menu pull-right" id="event_modal_quick_actions" aria-labelledby="dropdownMenuButton">
|
||||
<a class="dropdown-item" href="#" onclick='copy_object_link({{event.event_id}});return false;'><i class="fa fa-share mr-2"></i>Share</a>
|
||||
<a class="dropdown-item" href="#" onclick='copy_object_link_md("event", {{event.event_id}});return false;'><i class="fa-brands fa-markdown mr-2"></i>Markdown Link</a>
|
||||
<a class="dropdown-item" href="#" onclick='duplicate_event({{event.event_id}});return false;'><i class="fa fa-clone mr-2"></i>Duplicate</a>
|
||||
</div>
|
||||
</div>
|
||||
<button type="button" class="btn bg-transparent btn-xs" onclick="comment_element({{ event.event_id }}, 'timeline/events')" title="Comments">
|
||||
<span class="btn-label">
|
||||
<i class="fa-solid fa-comments"></i><span class="notification" id="object_comments_number">{{ comments_map|length }}</span>
|
||||
</span>
|
||||
</button>
|
||||
{% endif %}
|
||||
|
||||
<button class="float-right btn bg-transparent" title="Minimize" onclick="modal_minimized('modal_add_event', '{% if event.event_id %} Event ID #{{ event.event_id }} {% else %} Add event {% endif %}');"> <i class='fa fa-minus'></i> </button>
|
||||
<button type="button" class="float-right btn bg-transparent" data-dismiss="modal" aria-label="Close"><span
|
||||
aria-hidden="true"><i class="fa fa-times"></i></span></button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<div role="tabpanel">
|
||||
<div class="tab-content">
|
||||
<div class="tab-pane active" id="details">
|
||||
<div class="container col-md-12">
|
||||
<form method="post" action="" id="form_new_event">
|
||||
<div class="col-md-12 col-lg-12 col-sm-12">
|
||||
{{ form.hidden_tag() }}
|
||||
<div class="row">
|
||||
<div class="form-group col-xl-5 col-md-12">
|
||||
<label for="event_title" class="placeholder">{{ form.event_title.label.text }} *</label>
|
||||
{{ form.event_title(class='form-control col-md-12 col-sm-12', autocomplete="off") }}
|
||||
</div>
|
||||
<div class="form-group col-xl-7 col-md-12">
|
||||
<label for="event_timetitle" class="placeholder ml-2">Event Time *</label>
|
||||
<div class="row ml-2" id="event_date_inputs">
|
||||
<input class="form-control col-5 mr-2" type="date" id="event_date" {% if event.event_date_wtz %} value="{{ event.event_date_wtz.strftime('%Y-%m-%d') }}"{% endif %}>
|
||||
<span></span>
|
||||
<input class="form-control col-4" type="time" step="0.001" id="event_time" {% if event.event_date_wtz %} value="{{ event.event_date_wtz.strftime('%H:%M:%S.%f')[:-3] }}" {% else %} value="00:00:00.000" {% endif %}>
|
||||
<span></span>
|
||||
<input class="form-control col-2" type="text" id="event_tz" {% if event.event_tz %} value="{{ event.event_tz }}" {% else %} value="+00:00" {% endif %}>
|
||||
<button class="btn btn-sm btn-outline-white" type="button" onclick="show_time_converter();return false;"><i class="fas fa-magic"></i></button>
|
||||
</div>
|
||||
<div class="row ml-2" id="event_date_convert" style="display:none;">
|
||||
<div class="input-group ">
|
||||
<input class="form-control col-9" type="text" id="event_date_convert_input" placeholder="Enter date in any format and submit to try auto-parsing">
|
||||
<div class="input-group-append">
|
||||
<button class="btn btn-sm btn-outline-secondary mr-2" type="button" onclick="time_converter();return false;">Submit</button>
|
||||
<button class="btn btn-sm btn-outline" type="button" onclick="hide_time_converter();return false;"><i class="fas fa-magic"></i></button>
|
||||
</div>
|
||||
</div>
|
||||
<span id="convert_bad_feedback" class="text-danger"></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="form-group mt-3 col-12">
|
||||
<label for="event_content" class="placeholder">Event description</label>
|
||||
<div class="md_description_field">
|
||||
<div class="form-group mt--2">
|
||||
<button type="button" class="float-right icon-note btn btn-circle btn-sm mt-2" onclick="edit_in_event_desc();" >
|
||||
</button>
|
||||
<button type="button" style="display: none;" class="btn btn-dark btn-sm float-right mr-2 mt-2"
|
||||
onclick="preview_event_description();" id="event_preview_button"><i class="fa-solid fa-eye"></i></button>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col mb--2 ml--2" id="event_edition_btn" style="display:none;">
|
||||
</div>
|
||||
</div>
|
||||
<div class="row" style="margin-left:0px;">
|
||||
<div class="col-12" id="container_event_desc_content">
|
||||
<div id="event_description" class="mr-2" data-theme="{% if current_user.in_dark_mode %}dark{% else %}light{% endif %}">{% if event.event_content %}{{ event.event_content }}{% endif %}</div>
|
||||
<textarea id="event_desc_content" rows="10" cols="82" style="display: none"></textarea>
|
||||
</div>
|
||||
<div class="col-12" id="container_event_description" style="display:none">
|
||||
<div id="target_event_desc"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="form-group col-12 mt-1">
|
||||
<a class="btn btn-light btn-sm" data-toggle="collapse" href="#collapseRawEvent" role="button" aria-expanded="false" aria-controls="collapseRawEvent">> Edit raw event data</a>
|
||||
<div class="collapse" id="collapseRawEvent">
|
||||
<div class="card card-body">
|
||||
<label for="event_raw" class="placeholder">{{ form.event_raw.label.text }}</label>
|
||||
{{ form.event_raw(class='form-control sizable-textarea', autocomplete="off") }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="form-group col-xl-6 col-md-12">
|
||||
<label for="event_title" class="placeholder">{{ form.event_source.label.text }}</label>
|
||||
{{ form.event_source(class='form-control col-md-12 col-sm-12', autocomplete="off") }}
|
||||
</div>
|
||||
<div class="form-group col-xl-6 col-md-12">
|
||||
<label for="event_tags">Event tags
|
||||
</label>
|
||||
<input type="text" id="event_tags"
|
||||
class="form-control col-md-12" {% if event.event_tags %} value="{{ event.event_tags }}" {% endif %}/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="form-group col-12">
|
||||
<label for="event_assets">Link to assets
|
||||
</label>
|
||||
<div class="select2-input ml-12" data-select2-id="6">
|
||||
<select id="event_assets" name="event_assets" class="form-control select2-hidden-accessible ml-12" multiple="" data-select2-id="event_assets" tabindex="-1" aria-hidden="true" style="width: 100%">
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="form-group col-10">
|
||||
<label for="event_assets">Link to IOCs
|
||||
</label>
|
||||
<div class="select2-input ml-12" data-select2-id="6">
|
||||
<select id="event_iocs" name="event_iocs" class="form-control select2-hidden-accessible ml-12" multiple="" data-select2-id="event_iocs" tabindex="-1" aria-hidden="true" style="width: 100%">
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group col-2">
|
||||
<div class="form-check">
|
||||
<label class="form-check-label mt-3">
|
||||
<input class="form-check-input" type="checkbox" id="event_sync_iocs_assets" checked>
|
||||
<span class="form-check-sign"> Push IOCs to assets
|
||||
<i class="ml-1 mt-1 fa-regular fa-circle-question" title="If checked, the IOCs related to this event will be associated with the specified assets" style="cursor:pointer;"></i>
|
||||
</span>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="form-group col-5">
|
||||
<label for="event_category_id" class="form-label">{{ form.event_category_id.label.text }}</label>
|
||||
<div class="row col-12">
|
||||
{{ form.event_category_id(class="selectpicker") }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group col-xl-2 col-md-12">
|
||||
<div class="form-check">
|
||||
<label class="form-check-label mt-3">
|
||||
{{ form.event_in_summary(class="form-check-input", type="checkbox") }}
|
||||
<span class="form-check-sign"> Add to summary
|
||||
<i class="ml-1 mt-1 fa-regular fa-circle-question" title="If checked, the event will be integrated in the Timeline Visualization" style="cursor:pointer;"></i>
|
||||
</span>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group col-xl-2 col-md-12">
|
||||
<div class="form-check">
|
||||
<label class="form-check-label mt-3">
|
||||
{{ form.event_in_graph(class="form-check-input", type="checkbox") }}
|
||||
<span class="form-check-sign"> Display in graph
|
||||
<i class="ml-1 mt-1 fa-regular fa-circle-question" title="If checked, the event will be integrated in the Graph section of the case" style="cursor:pointer;"></i>
|
||||
</span>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group col-xl-3 col-md-12">
|
||||
<label class="form-label">Event color</label>
|
||||
<div class="row gutters-xs">
|
||||
<div class="col-auto">
|
||||
<label class="selectgroup-item">
|
||||
<input name="event_color" type="radio" value="#fff" {% if event.event_color == "#fff" %} checked="checked" {% endif %} class="colorinput-input">
|
||||
<span class="colorinput-color bg-white"></span>
|
||||
</label>
|
||||
</div>
|
||||
<div class="col-auto">
|
||||
<label class="selectgroup-item">
|
||||
<input name="event_color" type="radio" value="#1572E899" {% if event.event_color == "#1572E899" %} checked="checked" {% endif %} class="colorinput-input">
|
||||
<span class="colorinput-color bg-primary"></span>
|
||||
</label>
|
||||
</div>
|
||||
<div class="col-auto">
|
||||
<label class="selectgroup-item">
|
||||
<input name="event_color" type="radio" value="#6861CE99" {% if event.event_color == "#6861CE99" %} checked="checked" {% endif %} class="colorinput-input">
|
||||
<span class="colorinput-color bg-secondary"></span>
|
||||
</label>
|
||||
</div>
|
||||
<div class="col-auto">
|
||||
<label class="selectgroup-item">
|
||||
<input name="event_color" type="radio" value="#48ABF799" {% if event.event_color == "#48ABF799" %} checked="checked" {% endif %}class="colorinput-input">
|
||||
<span class="colorinput-color bg-info"></span>
|
||||
</label>
|
||||
</div>
|
||||
<div class="col-auto">
|
||||
<label class="selectgroup-item">
|
||||
<input name="event_color" type="radio" value="#31CE3699" {% if event.event_color == "#31CE3699" %} checked="checked" {% endif %} class="colorinput-input">
|
||||
<span class="colorinput-color bg-success"></span>
|
||||
</label>
|
||||
</div>
|
||||
<div class="col-auto">
|
||||
<label class="selectgroup-item">
|
||||
<input name="event_color" type="radio" value="#F2596199" {% if event.event_color == "#F2596199" %} checked="checked" {% endif %} class="colorinput-input">
|
||||
<span class="colorinput-color bg-danger"></span>
|
||||
</label>
|
||||
</div>
|
||||
<div class="col-auto">
|
||||
<label class="selectgroup-item">
|
||||
<input name="event_color" type="radio" value="#FFAD4699" {% if event.event_color == "#FFAD4699" %} checked="checked" {% endif %} class="colorinput-input">
|
||||
<span class="colorinput-color bg-warning"></span>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
{% include 'modals/modal_attributes_tabs.html' %}
|
||||
</div>
|
||||
{% if event.event_id %}
|
||||
<button type="button" class="btn btn-outline-danger mt-5"
|
||||
onclick="delete_event({{ event.event_id }} );">Delete</button>
|
||||
<button type="button" class="btn btn-outline-success ml-4 mt-5 float-right" id="submit_new_event"
|
||||
onclick="update_event({{ event.event_id }} );">Update</button>
|
||||
|
||||
{% else %}
|
||||
|
||||
<button type="button" class="btn btn-outline-success ml-4 mt-5 float-right"
|
||||
id="submit_new_event">Save</button>
|
||||
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
<script>
|
||||
$('#event_tags').amsifySuggestags({
|
||||
printValues: true,
|
||||
suggestions: [ {% for tag in tags %} '{{ tag }}', {% endfor %} ],
|
||||
whiteList: false,
|
||||
selectOnHover: false,
|
||||
});
|
||||
$('[data-toggle="popover"]').popover();
|
||||
$('#event_category_id').selectpicker({
|
||||
width:"100%",
|
||||
liveSearch: true,
|
||||
title: "None",
|
||||
style: "btn-outline-white",
|
||||
});
|
||||
</script>
|
||||
|
||||
{% if assets %}
|
||||
<script>
|
||||
var data = [
|
||||
{% for e in assets %}
|
||||
{
|
||||
id: {{ e.asset_id }},
|
||||
text: {{ e.asset_name| tojson }}
|
||||
},
|
||||
{% endfor %}
|
||||
];
|
||||
$('#event_assets').select2({ data: data });
|
||||
</script>
|
||||
{% endif %}
|
||||
|
||||
{% if iocs %}
|
||||
<script>
|
||||
var data = [
|
||||
{% for e in iocs %}
|
||||
{
|
||||
id: {{ e.ioc_id }},
|
||||
text: {{ e.ioc_value| tojson }}
|
||||
},
|
||||
{% endfor %}
|
||||
];
|
||||
$('#event_iocs').select2({ data: data });
|
||||
</script>
|
||||
{% endif %}
|
||||
|
||||
{% if category %}
|
||||
<script>
|
||||
$('#event_category_id').val([
|
||||
{{ category[0].id }},
|
||||
]);
|
||||
$('#event_category_id').trigger('change');
|
||||
</script>
|
||||
{% else %}
|
||||
<script>
|
||||
$('#event_category_id').val(1);
|
||||
$('#event_category_id').trigger('change');
|
||||
</script>
|
||||
{% endif %}
|
||||
|
||||
{% if assets_prefill %}
|
||||
<script>
|
||||
$('#event_assets').val([
|
||||
{% for asset in assets_prefill %} {{ asset }}, {% endfor %}
|
||||
]);
|
||||
$('#event_assets').trigger('change');
|
||||
</script>
|
||||
{% endif %}
|
||||
|
||||
{% if iocs_prefill %}
|
||||
<script>
|
||||
$('#event_iocs').val([
|
||||
{% for ioc in iocs_prefill %} {{ ioc }}, {% endfor %}
|
||||
]);
|
||||
$('#event_iocs').trigger('change');
|
||||
</script>
|
||||
{% endif %}
|
@@ -0,0 +1,150 @@
|
||||
<div class="modal-header">
|
||||
<div class="col md-12">
|
||||
<div class="row">
|
||||
<div class="col align-self-center">
|
||||
<h4 class="modal-title mr-4">{% if ioc.ioc_id %}Edit IOC #{{ ioc.ioc_id }}{% else %} Add IOC {% endif %}</h4>
|
||||
<small><i class="text-muted">{% if ioc.ioc_uuid %}#{{ ioc.ioc_uuid }}{% endif %}</i></small>
|
||||
</div>
|
||||
{% include 'modals/modal_attributes_nav.html' %}
|
||||
<div class="col">
|
||||
<div class="row float-right">
|
||||
{% if ioc.ioc_id %}
|
||||
<div class="dropdown">
|
||||
<button class="btn bg-transparent pull-right" id="dropdownMenuButton" data-toggle="dropdown" aria-haspopup="true" aria-expanded="true">
|
||||
<span aria-hidden="true"><i class="fas fa-ellipsis-v"></i></span>
|
||||
</button>
|
||||
<div class="dropdown-menu pull-right" id="ioc_modal_quick_actions" aria-labelledby="dropdownMenuButton">
|
||||
<a class="dropdown-item" href="#" onclick='copy_object_link({{ioc.ioc_id}});return false;'><i class="fa fa-share mr-2"></i>Share</a>
|
||||
<a class="dropdown-item" href="#" onclick='copy_object_link_md("ioc", {{ioc.ioc_id}});return false;'><i class="fa-brands fa-markdown mr-2"></i>Markdown Link</a>
|
||||
</div>
|
||||
<div class="dropdown-menu pull-right" aria-labelledby="dropdownMenuButton">
|
||||
</div>
|
||||
</div>
|
||||
<button type="button" class="btn bg-transparent btn-xs" onclick="comment_element({{ ioc.ioc_id }}, 'ioc')" title="Comments">
|
||||
<span class="btn-label">
|
||||
<i class="fa-solid fa-comments"></i><span class="notification" id="object_comments_number">{{ comments_map|length }}</span>
|
||||
</span>
|
||||
</button>
|
||||
{% endif %}
|
||||
<button class="float-right btn bg-transparent" title="Minimize" onclick="modal_minimized('modal_add_ioc', '{% if ioc.ioc_id %}Edit IOC #{{ ioc.ioc_id }} {% else %} Add IOC {% endif %}');"> <i class='fa fa-minus'></i> </button>
|
||||
<button type="button" class="float-right btn bg-transparent" data-dismiss="modal" aria-label="Close"><span
|
||||
aria-hidden="true"><i class="fa fa-times"></i></span></button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<div role="tabpanel">
|
||||
<div class="tab-content">
|
||||
<div class="tab-pane active" id="details">
|
||||
<div class="container col-md-12">
|
||||
<form method="post" action="" id="form_new_ioc">
|
||||
<div class="col-md-12 col-lg-12 col-sm-12">
|
||||
{{ form.hidden_tag() }}
|
||||
<div class="form-group row">
|
||||
<div class="col-6">
|
||||
<label for="ioc_type" class="mr-4">Type *
|
||||
</label>
|
||||
{{ form.ioc_type_id(class="selectpicker pl--6 col-10") }}
|
||||
</div>
|
||||
<div class="col-6">
|
||||
<label for="ioc_type" class="mr-4">TLP *
|
||||
</label>
|
||||
{{ form.ioc_tlp_id(class="selectpicker pl--6 col-10") }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="ioc_value" class="placeholder">{{ form.ioc_value.label.text }} *</label>
|
||||
{{ form.ioc_value(class='form-control col-md-12 col-sm-12 sizable-textarea', autocomplete="off") }}
|
||||
</div>
|
||||
{% if not ioc.ioc_id %}
|
||||
<div class="form-group col-2">
|
||||
<div class="form-check">
|
||||
<label class="form-check-label mt-3">
|
||||
<input class="form-check-input" type="checkbox" id="ioc_one_per_line" checked>
|
||||
<span class="form-check-sign"> One IOC per line
|
||||
<i class="ml-1 mt-1 fa-regular fa-circle-question" title="If checked, each new line will create a new IOC" style="cursor:pointer;"></i>
|
||||
</span>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
<div class="form-group mt-3">
|
||||
<label for="ioc_description" class="placeholder">Description</label>
|
||||
<div class="md_description_field">
|
||||
<div class="form-group mt--2">
|
||||
<button type="button" class="float-right icon-note btn btn-circle btn-sm mt-2" onclick="edit_in_ioc_desc();">
|
||||
</button>
|
||||
<button type="button" style="display: none;" class="btn btn-dark btn-sm float-right mr-2 mt-2"
|
||||
onclick="preview_ioc_description();" id="ioc_preview_button"><i class="fa-solid fa-eye"></i></button>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col mb--2 ml--2" id="ioc_edition_btn" style="display:none;">
|
||||
</div>
|
||||
</div>
|
||||
<div class="row" style="margin-left:0px;">
|
||||
<div class="col-12" id="container_ioc_desc_content">
|
||||
<div id="ioc_description" class="mr-2" data-theme="{% if current_user.in_dark_mode %}dark{% else %}light{% endif %}">{% if ioc and ioc.ioc_description %}{{ ioc.ioc_description }}{% endif %}</div>
|
||||
<textarea id="ioc_desc_content" rows="10" cols="82" style="display: none"></textarea>
|
||||
</div>
|
||||
<div class="col-12" id="container_ioc_description" style="display:none">
|
||||
<div id="target_ioc_desc"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="ioc_tags">IOC tags
|
||||
</label>
|
||||
<input type="text" id="ioc_tags"
|
||||
class="form-control col-md-12" {% if ioc.ioc_tags %} value="{{ ioc.ioc_tags }}" {% endif %}/>
|
||||
</div>
|
||||
|
||||
<div class='invalid-feedback' id='ioc-invalid-msg'></div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
{% include 'modals/modal_attributes_tabs.html' %}
|
||||
</div>
|
||||
{% if ioc.ioc_id %}
|
||||
<button type="button" class="btn btn-outline-danger mt-5"
|
||||
onclick="delete_ioc('{{ ioc.ioc_id }}');">Delete</button>
|
||||
<button type="button" class="btn btn-outline-success ml-4 mt-5 float-right" id="submit_new_ioc"
|
||||
onclick="update_ioc('{{ ioc.ioc_id }}');">Update</button>
|
||||
|
||||
{% else %}
|
||||
|
||||
<button type="button" class="btn btn-outline-success ml-4 mt-5 float-right"
|
||||
id="submit_new_ioc">Save</button>
|
||||
|
||||
{% endif %}
|
||||
</div>
|
||||
<script>
|
||||
$('form#form_new_ioc').validate();
|
||||
$('#ioc_tags').amsifySuggestags({
|
||||
printValues: false,
|
||||
suggestions: [ {% for tag in tags %} '{{ tag }}', {% endfor %} ]
|
||||
});
|
||||
|
||||
$('#ioc_type_id').selectpicker({
|
||||
liveSearch: true,
|
||||
title: "None",
|
||||
style: "btn-outline-white",
|
||||
size: 10
|
||||
});
|
||||
|
||||
$('#ioc_tlp_id').selectpicker({
|
||||
liveSearch: true,
|
||||
title: "None",
|
||||
style: "btn-outline-white",
|
||||
});
|
||||
|
||||
{% if ioc.ioc_id %}
|
||||
$('#ioc_type_id').selectpicker('val', '{{ioc.ioc_type_id}}');
|
||||
$('#ioc_tlp_id').selectpicker('val', '{{ioc.ioc_tlp_id}}');
|
||||
{% else %}
|
||||
$('#ioc_tlp_id').selectpicker('val', '2');
|
||||
{% endif %}
|
||||
</script>
|
@@ -0,0 +1,162 @@
|
||||
<div class="modal-header">
|
||||
<div class="col md-12">
|
||||
<div class="row">
|
||||
<div class="col align-self-center">
|
||||
<h4 class="modal-title mr-4">Add multiple assets</h4>
|
||||
<small><a class="text-muted"></a></small>
|
||||
</div>
|
||||
{% include 'modals/modal_attributes_nav.html' %}
|
||||
<div class="col">
|
||||
<div class="row float-right">
|
||||
<button class="float-right btn bg-transparent" title="Minimize" onclick="modal_minimized('modal_add_asset', 'Add asset');"> <i class='fa fa-minus'></i> </button>
|
||||
<button type="button" class="pull-right btn bg-transparent" data-dismiss="modal" aria-label="Close"><span
|
||||
aria-hidden="true"><i class="fa fa-times"></i></span></button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<div role="tabpanel">
|
||||
<div class="tab-content">
|
||||
<div class="tab-pane active" id="details">
|
||||
<div class="container col-md-12">
|
||||
<form method="post" action="" id="form_new_assets">
|
||||
<div class="col-md-12 col-lg-12 col-sm-12">
|
||||
{{ form.hidden_tag() }}
|
||||
<div class="form-row ml-2">
|
||||
<div class="form-group col-12">
|
||||
<label for="asset_type" class="placeholder">Assets Type *</label>
|
||||
{{ form.asset_type_id(class="selectpicker form-control") }}
|
||||
</div>
|
||||
<div class="form-group col-12">
|
||||
<label for="name" class="placeholder">Assets Name *</label>
|
||||
<textarea class="form-control sizable-textarea" autocomplete="off" rows="1" name="assets_name" id="assets_name" placeholder="One asset per line"></textarea>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group mt-3">
|
||||
<label for="asset_description" class="placeholder">Description</label>
|
||||
<div class="md_description_field">
|
||||
<div class="form-group mt--2">
|
||||
<button type="button" class="float-right icon-note btn btn-circle btn-sm mt-2" onclick="edit_in_asset_desc();">
|
||||
</button>
|
||||
<button type="button" style="display: none;" class="btn btn-dark btn-sm float-right mr-2 mt-2" onclick="preview_asset_description();" id="asset_preview_button"><i class="fa-solid fa-eye"></i></button>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col mb--2 ml--2" id="asset_edition_btn" style="display:none;">
|
||||
</div>
|
||||
</div>
|
||||
<div class="row" style="margin-left:0px;">
|
||||
<div class="col-12" id="container_asset_desc_content">
|
||||
<div id="asset_description" class="mr-2" data-theme="{% if current_user.in_dark_mode %}dark{% else %}light{% endif %}">{% if asset %}{{ asset.asset_description }}{% endif %}</div>
|
||||
<textarea id="asset_desc_content" rows="10" cols="82" style="display: none"></textarea>
|
||||
</div>
|
||||
<div class="col-12" id="container_asset_description" style="display:none">
|
||||
<div id="target_asset_desc"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-row ml-2">
|
||||
<div class="form-group col-6">
|
||||
<label for="asset_domain" class="placeholder">Domain</label>
|
||||
{{ form.asset_domain(class='form-control', autocomplete="off") }}
|
||||
</div>
|
||||
<div class="form-group col-6">
|
||||
<label for="asset_ip" class="placeholder">IP</label>
|
||||
{{ form.asset_ip(class='form-control', autocomplete="off") }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<a class="btn btn-light btn-sm" data-toggle="collapse" href="#collapseAddInfo" role="button" aria-expanded="false" aria-controls="collapseAddInfo">> Additional information</a>
|
||||
<div class="collapse" id="collapseAddInfo">
|
||||
<div class="card card-body">
|
||||
<label for="asset_info" class="placeholder">Additional information</label>
|
||||
{{ form.asset_info(class='form-control col-md-12 col-sm-12 sizable-textarea', autocomplete="off") }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-row ml-2">
|
||||
<div class="form-group col-6">
|
||||
<label for="asset_compromise_status_id" class="placeholder mt-2">Compromise Status </label>
|
||||
{{ form.asset_compromise_status_id(class="selectpicker col-9") }}
|
||||
</div>
|
||||
<div class="form-group col-6">
|
||||
<label for="analysis_status_id" class="placeholder mt-2">Analysis Status </label>
|
||||
{{ form.analysis_status_id(class="selectpicker col-9 float-right") }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="asset_tags">Asset tags
|
||||
</label>
|
||||
<input type="text" id="asset_tags"
|
||||
class="form-control col-md-12"/>
|
||||
</div>
|
||||
<div class="form-group" data-select2-id="7">
|
||||
<label>Related IOC</label>
|
||||
<div class="select2-input ml-12" data-select2-id="6">
|
||||
<select id="ioc_links" name="ioc_links" class="form-control select2-hidden-accessible ml-12" multiple="" data-select2-id="ioc_links" tabindex="-1" aria-hidden="true" style="width: 100%">
|
||||
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
{% include 'modals/modal_attributes_tabs.html' %}
|
||||
</div>
|
||||
<button type="button" class="btn btn-outline-success ml-4 mt-5 float-right" id="submit_new_assets">Save</button>
|
||||
</div>
|
||||
</div>
|
||||
<script>
|
||||
$('form#form_new_case').validate();
|
||||
$('#asset_tags').amsifySuggestags({
|
||||
printValues: false,
|
||||
suggestions: [ {% for tag in tags %} '{{ tag }}', {% endfor %} ]
|
||||
});
|
||||
$('#asset_type_id').selectpicker({
|
||||
liveSearch: true,
|
||||
title: "None",
|
||||
style: "btn-outline-white",
|
||||
|
||||
});
|
||||
$('#analysis_status_id').selectpicker({
|
||||
liveSearch: true,
|
||||
title: "None",
|
||||
style: "btn-outline-white"
|
||||
});
|
||||
$('#analysis_status_id').selectpicker('val', '1');
|
||||
|
||||
$('#asset_compromise_status_id').selectpicker({
|
||||
liveSearch: true,
|
||||
title: "To be determined",
|
||||
style: "btn-outline-white"
|
||||
});
|
||||
$('#asset_compromise_status_id').selectpicker('val', '0');
|
||||
</script>
|
||||
|
||||
|
||||
{% if ioc %}
|
||||
<script>
|
||||
var data = [
|
||||
{% for e in ioc %}
|
||||
{
|
||||
id: {{ e.ioc_id }},
|
||||
text: {{ e.ioc_value| tojson }}
|
||||
},
|
||||
{% endfor %}
|
||||
];
|
||||
$('#ioc_links').select2({ data: data });
|
||||
</script>
|
||||
{% endif %}
|
||||
|
||||
{% if ioc_prefill %}
|
||||
<script>
|
||||
$('#ioc_links').val([
|
||||
{% for ioc in ioc_prefill %} {{ ioc[0] }}, {% endfor %}
|
||||
]);
|
||||
$('#ioc_links').trigger('change');
|
||||
</script>
|
||||
{% endif %}
|
@@ -0,0 +1,98 @@
|
||||
<div class="modal-header">
|
||||
<div class="col md-12">
|
||||
<div class="row">
|
||||
<div class="col align-self-center">
|
||||
<h4 class="modal-title mr-4">{% if rfile.id %}Edit evidence #{{rfile.id}}{% else %}Register evidence{% endif %}</h4>
|
||||
{% if rfile.id %}<small><i class="text-muted">#{{ rfile.file_uuid }}</i></small>{% endif %}
|
||||
</div>
|
||||
{% include 'modals/modal_attributes_nav.html' %}
|
||||
<div class="col">
|
||||
<div class="row float-right">
|
||||
{% if rfile.id %}
|
||||
<div class="dropdown">
|
||||
<button class="btn bg-transparent pull-right" id="dropdownMenuButton" data-toggle="dropdown" aria-haspopup="true" aria-expanded="true">
|
||||
<span aria-hidden="true"><i class="fas fa-ellipsis-v"></i></span>
|
||||
</button>
|
||||
<div class="dropdown-menu pull-right" id="evidence_modal_quick_actions" aria-labelledby="dropdownMenuButton">
|
||||
<a class="dropdown-item" href="#" onclick='copy_object_link({{rfile.id}});return false;'><i class="fa fa-share mr-2"></i>Share</a>
|
||||
<a class="dropdown-item" href="#" onclick='copy_object_link_md("evidence", {{rfile.id}});return false;'><i class="fa-brands fa-markdown mr-2"></i>Markdown Link</a>
|
||||
</div>
|
||||
</div>
|
||||
<button type="button" class="btn bg-transparent btn-xs" onclick="comment_element({{ rfile.id }}, 'evidences')" title="Comments">
|
||||
<span class="btn-label">
|
||||
<i class="fa-solid fa-comments"></i><span class="notification" id="object_comments_number">{{ comments_map|length }}</span>
|
||||
</span>
|
||||
</button>
|
||||
{% endif %}
|
||||
<button class="float-right btn bg-transparent" title="Minimize" onclick="modal_minimized('modal_add_rfiles', 'Edit evidence #{{rfile.id}}');"> <i class='fa fa-minus'></i> </button>
|
||||
<button type="button" class="pull-right btn bg-transparent" data-dismiss="modal" aria-label="Close"><span
|
||||
aria-hidden="true"><i class="fa fa-times"></i></span></button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<div role="tabpanel">
|
||||
<div class="tab-content">
|
||||
<div class="tab-pane active" id="details">
|
||||
<div class="container col-md-12">
|
||||
<form method="post" action="" id="form_edit_rfile">
|
||||
<div class="col-md-12 col-lg-12 col-sm-12">
|
||||
<div class="form-group">
|
||||
<label for="rfile_filename" class="placeholder">Filename *</label>
|
||||
<input class="form-control" placeholder="Filename" id="filename" required name="filename" value="{{ rfile.filename }}"/>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="rfile_size" class="placeholder">File size (bytes) *</label>
|
||||
<input class="form-control" placeholder="Size in bytes" id="file_size" name="file_size" value="{{ rfile.file_size }}"/>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="rfile_hash" class="placeholder">File Hash</label>
|
||||
<input class="form-control" placeholder="Hash" id="file_hash" name="file_hash" value="{{ rfile.file_hash }}"/>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="rfile_desc" class="placeholder">File description</label>
|
||||
<div class="md_description_field">
|
||||
<div class="form-group mt--2">
|
||||
<button type="button" class="float-right icon-note btn btn-circle btn-sm mt-2" onclick="edit_in_evidence_desc();" >
|
||||
</button>
|
||||
<button type="button" style="display: none;" class="btn btn-dark btn-sm float-right mr-2 mt-2"
|
||||
onclick="preview_evidence_description();" id="evidence_preview_button"><i class="fa-solid fa-eye"></i></button>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col mb--2 ml--2" id="evidence_edition_btn" style="display:none;">
|
||||
</div>
|
||||
</div>
|
||||
<div class="row" style="margin-left:0px;">
|
||||
<div class="col-12" id="container_evidence_desc_content">
|
||||
<div id="evidence_description" class="mr-2" data-theme="{% if current_user.in_dark_mode %}dark{% else %}light{% endif %}">{% if rfile %}{{ rfile.file_description }}{% endif %}</div>
|
||||
<textarea id="evidence_desc_content" rows="10" cols="82" style="display: none"></textarea>
|
||||
</div>
|
||||
<div class="col-12" id="container_evidence_description" style="display:none">
|
||||
<div id="target_evidence_desc"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<p>Automatically compute file information by selecting it below. The file will not be uploaded nor saved.</p>
|
||||
<input id="input_autofill" type="file">
|
||||
<button class="btn btn-sm" type="button" onclick="get_hash()" id="btn_rfile_proc">Process</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
{% include 'modals/modal_attributes_tabs.html' %}
|
||||
</div>
|
||||
{% if rfile.id %}
|
||||
<button type="button" class="btn btn-outline-danger mt-5"
|
||||
onclick="delete_rfile('{{ rfile.id }}');">Delete</button>
|
||||
<button type="button" class="btn btn-outline-success ml-4 mt-5 float-right"
|
||||
onclick="update_rfile('{{ rfile.id }}');" id="submit_new_rfiles">Update</button>
|
||||
{% else %}
|
||||
<button type="button" class="btn btn-outline-success float-right" onclick="add_rfile();">Register</button>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
@@ -0,0 +1,139 @@
|
||||
<div class="modal-header">
|
||||
<div class="col md-12">
|
||||
<div class="row">
|
||||
<div class="col align-self-center">
|
||||
<h4 class="modal-title mr-4">{% if task.id %} Task ID #{{ task.id }}{% else %} Add task {% endif %}</h4>
|
||||
<small><i class="text-muted">#{{ task.task_uuid }}</i></small>
|
||||
</div>
|
||||
{% include 'modals/modal_attributes_nav.html' %}
|
||||
<div class="col">
|
||||
<div class="row float-right">
|
||||
{% if task.id %}
|
||||
<div class="dropdown">
|
||||
<button class="btn bg-transparent pull-right" id="dropdownMenuButton" data-toggle="dropdown" aria-haspopup="true" aria-expanded="true">
|
||||
<span aria-hidden="true"><i class="fas fa-ellipsis-v"></i></span>
|
||||
</button>
|
||||
<div class="dropdown-menu pull-right" id="task_modal_quick_actions" aria-labelledby="dropdownMenuButton">
|
||||
<a class="dropdown-item" href="#" onclick='copy_object_link({{task.id}});return false;'><i class="fa fa-share mr-2"></i>Share</a>
|
||||
<a class="dropdown-item" href="#" onclick='copy_object_link_md("task", {{task.id}});return false;'><i class="fa-brands fa-markdown mr-2"></i>Markdown Link</a>
|
||||
</div>
|
||||
</div>
|
||||
<button type="button" class="btn bg-transparent btn-xs" onclick="comment_element({{ task.id }}, 'tasks')" title="Comments">
|
||||
<span class="btn-label">
|
||||
<i class="fa-solid fa-comments"></i><span class="notification" id="object_comments_number">{{ comments_map|length }}</span>
|
||||
</span>
|
||||
</button>
|
||||
{% endif %}
|
||||
<button class="float-right btn bg-transparent" title="Minimize" onclick="modal_minimized('modal_add_task', '{% if task.id %} Task ID #{{ task.id }}{% else %} Add task {% endif %}');"> <i class='fa fa-minus'></i> </button>
|
||||
<button type="button" class="pull-right btn bg-transparent" data-dismiss="modal" aria-label="Close"><span
|
||||
aria-hidden="true"><i class="fa fa-times"></i></span></button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="modal-body">
|
||||
<div role="tabpanel">
|
||||
<div class="tab-content">
|
||||
<div class="tab-pane active" id="details">
|
||||
<div class="container col-md-12">
|
||||
<form method="post" action="" id="form_new_task">
|
||||
<div class="col-md-12 col-lg-12 col-sm-12">
|
||||
{{ form.hidden_tag() }}
|
||||
<div class="form-group mt-3 row">
|
||||
<div class="col-6 col-xs-12">
|
||||
<label for="task_assignee_id" class="placeholder">Assigned to *</label>
|
||||
{{ form.task_assignees_id(class="selectpicker col-12", data_actions_box="true", data_dropup_auto="false") }}
|
||||
|
||||
</div>
|
||||
<div class="col-6 col-xs-12">
|
||||
<label for="task_status_id" class="placeholder">Status *</label>
|
||||
{{ form.task_status_id(class="selectpicker col-12") }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="task_title" class="placeholder">{{ form.task_title.label.text }} *</label>
|
||||
{{ form.task_title(class='form-control col-md-12 col-sm-12', autocomplete="off") }}
|
||||
</div>
|
||||
<div class="form-group mt-3">
|
||||
<label for="task_description" class="placeholder">Description</label>
|
||||
<div class="md_description_field">
|
||||
<div class="form-group mt--2">
|
||||
<button type="button" class="float-right icon-note btn btn-circle btn-sm mt-2" onclick="edit_in_task_desc();">
|
||||
</button>
|
||||
<button type="button" style="display: none;" class="btn btn-dark btn-sm float-right mr-2 mt-2"
|
||||
onclick="preview_task_description();" id="task_preview_button"><i class="fa-solid fa-eye"></i></button>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col mb--2 ml--2" id="task_edition_btn" style="display:none;">
|
||||
</div>
|
||||
</div>
|
||||
<div class="row" style="margin-left:0px;">
|
||||
<div class="col-12" id="container_task_desc_content">
|
||||
<div id="task_description" class="mr-2" data-theme="{% if current_user.in_dark_mode %}dark{% else %}light{% endif %}">{% if task.task_description %}{{ task.task_description }}{% endif %}</div>
|
||||
<textarea id="task_desc_content" rows="10" cols="82" style="display: none"></textarea>
|
||||
</div>
|
||||
<div class="col-12" id="container_task_description" style="display:none">
|
||||
<div id="target_task_desc"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group mt-3">
|
||||
<label for="task_tags">Task tags
|
||||
</label>
|
||||
<input type="text" id="task_tags"
|
||||
class="form-control col-md-12" {% if task.task_tags %} value="{{ task.task_tags }}" {% endif %}/>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
{% include 'modals/modal_attributes_tabs.html' %}
|
||||
</div>
|
||||
</div>
|
||||
{% if task.id %}
|
||||
<button type="button" class="btn btn-outline-danger mt-5"
|
||||
onclick="delete_task({{ task.id }});">Delete</button>
|
||||
|
||||
<button type="button" class="btn btn-outline-success ml-4 mt-5 float-right" id="submit_new_task"
|
||||
onclick="update_task({{ task.id }});">Update</button>
|
||||
|
||||
{% else %}
|
||||
|
||||
<button type="button" class="btn btn-outline-success ml-4 mt-5 float-right"
|
||||
id="submit_new_task">Save</button>
|
||||
|
||||
{% endif %}
|
||||
</div>
|
||||
|
||||
<script>
|
||||
|
||||
var data = [];
|
||||
if (current_users_list.length === 0) {
|
||||
refresh_users(do_list_users, [{% for assignee in task.task_assignees %} {{ assignee.id }}, {% endfor %}]);
|
||||
} else {
|
||||
do_list_users(current_users_list, [{% for assignee in task.task_assignees %} {{ assignee.id }}, {% endfor %}]);
|
||||
}
|
||||
|
||||
$('form#form_new_task').validate();
|
||||
|
||||
$('#task_tags').amsifySuggestags({
|
||||
printValues: false,
|
||||
suggestions: [ {% for tag in tags %} '{{ tag }}', {% endfor %} ]
|
||||
});
|
||||
|
||||
$('#task_status_id').selectpicker({
|
||||
liveSearch: true,
|
||||
title: "Select task status"
|
||||
});
|
||||
|
||||
{% if task.task_status_id %}
|
||||
$('#task_status_id').selectpicker('val', '{{task.task_status_id}}');
|
||||
{% else %}
|
||||
$('#task_status_id').selectpicker('val', 'To do');
|
||||
{% endif %}
|
||||
$('[data-toggle="popover"]').popover();
|
||||
</script>
|
||||
|
@@ -0,0 +1,33 @@
|
||||
|
||||
<div class="modal-content">
|
||||
<form method="post" action="" id="form_add_asset">
|
||||
<div class="modal-header">
|
||||
<h5>Add asset to graph</h5>
|
||||
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span
|
||||
aria-hidden="true">×</span></button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<div class="form-group">
|
||||
<label for="asset" class="mr-4">Add an existing asset to the case graph.<br>If you want to create a new asset, please go to the Asset tab.
|
||||
</label>
|
||||
|
||||
<select class="selectpicker form-control bg-outline-success dropdown-submenu" data-show-subtext="true" data-live-search="true" id="asset">
|
||||
{% for asset in assets_list %}
|
||||
<option value="{{ asset.IP }}">{{ asset.Name }} </option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-success float-right" id="submit_add_asset">Add</button>
|
||||
</div>
|
||||
</form>
|
||||
</div><!-- /.modal-content -->
|
||||
<script>
|
||||
$('#asset').selectpicker({
|
||||
liveSearch: true,
|
||||
title: "None",
|
||||
style: "Bootstrap 4: 'btn-outline-primary'",
|
||||
|
||||
});
|
||||
</script>
|
@@ -0,0 +1,54 @@
|
||||
<link rel="stylesheet" href="/static/assets/css/dropzone.css">
|
||||
<div class="modal-header">
|
||||
<h4 class="modal-title mt-2 mr-4">Processing pipelines</h4>
|
||||
<button type="button" class="pull-right btn btn-white" data-dismiss="modal" aria-label="Close"><span
|
||||
aria-hidden="true"><i class="fa fa-times"></i></span></button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<div class="container col-md-12">
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
<p>Select processing pipeline and drop analysis files below. Press Process to start the processing. Do not close the page until the upload is finished.<br/>
|
||||
Supports up to 40 files and 10GB at once.</p>
|
||||
|
||||
<div class="form-group">
|
||||
<div class="form-group">
|
||||
<label for="import_pipeline" class="placeholder">Processing pipeline</label>
|
||||
<i class="fas fa-question-circle mr-2" data-toggle="popover"
|
||||
title="Pipelines"
|
||||
data-content="Pipelines are the way files dropped below are processed. Each pipelines handles a different type of file."></i>
|
||||
|
||||
{{ form.pipeline(class="selectpicker pl--6 btn-outline-white", id="update_pipeline_selector") }}
|
||||
</div>
|
||||
<div class="form-group col-md-6 mb-2">
|
||||
{% for itm in pipeline_args %}
|
||||
{% for tm in itm[2] %}
|
||||
<div class="input-group mb-4 control-update-pipeline-args control-update-pipeline-{{itm[0]}}">
|
||||
<div class="input-group-prepend">
|
||||
<span class="input-group-text">{{tm[0]}} ({{tm[1]}})</span>
|
||||
</div>
|
||||
<input class="form-control update-{{itm[0]}}" id="{{tm[0]}}" name="{{tm[0]}}" type="text" value="" {{tm[1]}}>
|
||||
</div>
|
||||
{% endfor %}
|
||||
|
||||
{% endfor %}
|
||||
</div>
|
||||
<div class="tab-content col-md-12">
|
||||
<div class="dropzone col-md-12" id="files_drop_1">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<span id="msg_submit" class="ml-4"></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-default float-left" data-dismiss="modal">Dismiss</button>
|
||||
|
||||
<button type="button" class="btn btn-outline-success float-right"
|
||||
id="submit_update_case" onclick="submit_update_casefn();">Process</button>
|
||||
</div>
|
||||
<script src="/static/assets/js/plugin/dropzone/dropzone.js"></script>
|
||||
<script src="/static/assets/js/iris/case.pipelines.js"></script>
|
@@ -0,0 +1,52 @@
|
||||
|
||||
<div class="modal-header">
|
||||
<div style="display:none;" id="current_username">{{current_user.user}}</div>
|
||||
<div class="col md-12">
|
||||
<div class="row">
|
||||
<div class="col-8">
|
||||
<h4 class="modal-title mt-2 mr-4 text-truncate">Comments on <i>{{ title }}</i></h4>
|
||||
</div>
|
||||
<div class="col">
|
||||
<div class="row float-right">
|
||||
<button class="btn bg-transparent" title="Minimize" onclick="modal_minimized('modal_comment', 'Comment {{ element_type }}');"> <i class='fa fa-minus'></i> </button>
|
||||
<button type="button" class="float-right btn bg-transparent" data-dismiss="modal" aria-label="Close"><span
|
||||
aria-hidden="true"><i class="fa fa-times"></i></span></button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-body comments-listing">
|
||||
<div id="comments_list">
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<div class="col">
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
<div class="row">
|
||||
<div class="col mb--2 ml--2" id="comment_edition_btn">
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-3">
|
||||
<div class="col-12 comment-content" id="container_comment_content">
|
||||
<div id="comment_message" data-theme="{% if current_user.in_dark_mode %}dark{% else %}light{% endif %}"></div>
|
||||
<textarea id="comment_content" rows="2" style="display: none"></textarea>
|
||||
</div>
|
||||
<div class="col-12 comment-content" id="container_comment_preview" style="display:none;">
|
||||
<div id="target_comment_content"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-12" id="container_comment_submit">
|
||||
<button type="button" class="btn btn-primary btn-sm float-right ml-2" id="comment_submit" onclick="save_comment({{ element_id }}, '{{ element_type }}');"><i class="fa-regular fa-paper-plane"></i> Comment</button>
|
||||
<button type="button" class="btn btn-primary btn-sm float-right ml-2" id="comment_edition" style="display: none;" onclick="save_edit_comment({{ element_id }}, '{{ element_type }}');"><i class="fa-regular fa-paper-plane"></i> Save</button>
|
||||
<button type="button" class="btn btn-danger btn-sm float-right ml-2" id="cancel_edition" style="display: none;" onclick="cancel_edition();"><i class="fa-solid fa-xmark"></i> Cancel</button>
|
||||
<button type="button" class="btn btn-dark btn-sm float-right ml-2" onclick="preview_comment();" id="comment_preview_button"><i class="fa-solid fa-eye"></i> Preview</button>
|
||||
<button type="button" class="btn btn-light btn-sm float-left" onclick="load_comments({{ element_id }}, '{{ element_type }}', null, true);"><i class="fa-solid fa-refresh"></i> Refresh</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
@@ -0,0 +1,33 @@
|
||||
<div class="modal-xl modal-dialog" role="document">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h4 class="modal-title mt-1 mr-4">Timeline filtering help</h4>
|
||||
<button type="button" class="float-right btn bg-transparent" data-dismiss="modal" aria-label="Close"><span
|
||||
aria-hidden="true"><i class="fa fa-times"></i></span></button>
|
||||
</div>
|
||||
<div class="modal-body mb-2">
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
<p>The timeline can be filtered thanks to simple queries. The query schema is : <code>target_element:search_value AND target_element2:search_value2</code>.<br/>
|
||||
There is no <code>OR</code> condition and searching without target does not work.
|
||||
<p>The following target elements can be used to filter :</p>
|
||||
<ul>
|
||||
<li><code>asset</code>: Asset linked to the event</li>
|
||||
<li><code>ioc</code>: IOC linked to the event</li>
|
||||
<li><code>tag</code>: Tag within the event</li>
|
||||
<li><code>title</code>: Title of the event</li>
|
||||
<li><code>description</code>: Description of the event</li>
|
||||
<li><code>raw</code> : Raw event content</li>
|
||||
<li><code>category</code>: Category of the event</li>
|
||||
<li><code>source</code>: Source of the event</li>
|
||||
<li><code>startDate</code>: Start date to filter with</li>
|
||||
<li><code>endDate</code>: End date to filter with</li>
|
||||
</ul>
|
||||
The dates filters uses the same guessing as the date parser in events, so a lots of format are handled.<br/>
|
||||
Example of filter :
|
||||
<code>asset: DESKTOP-X5487 AND description: rdp connection to AND source: Windows Security</code>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
@@ -0,0 +1,98 @@
|
||||
<div class="modal-header">
|
||||
<div class="col md-12">
|
||||
<div class="row">
|
||||
<div class="col align-self-center">
|
||||
<h4 class="modal-title mr-4">Note #{{ note.note_id }}</h4>
|
||||
<small><i class="text-muted">#{{ note.note_uuid }}</i></small>
|
||||
</div>
|
||||
{% include 'modals/modal_attributes_nav.html' %}
|
||||
<div class="col">
|
||||
<div class="row float-right">
|
||||
<div class="avatar-group-note mt-2 float-right" id="ppl_list_viewing">
|
||||
</div>
|
||||
<button class="btn bg-transparent pull-right" title="Toggle focus mode" id="focus_mode" onclick="toggle_focus_mode();return false;">
|
||||
<span aria-hidden="true"><i class="fas fas fa-coffee"></i></span>
|
||||
</button>
|
||||
<button type="button" class="btn bg-transparent btn-xs" onclick="comment_element({{ note.note_id }}, 'notes')" title="Comments">
|
||||
<span class="btn-label">
|
||||
<i class="fa-solid fa-comments"></i><span class="notification" id="object_comments_number">{{ comments_map|length }}</span>
|
||||
</span>
|
||||
</button>
|
||||
<div class="dropdown">
|
||||
<button class="btn bg-transparent pull-right" id="dropdownMenuButton" data-toggle="dropdown" aria-haspopup="true" aria-expanded="true">
|
||||
<span aria-hidden="true"><i class="fas fa-ellipsis-v"></i></span>
|
||||
</button>
|
||||
<div class="dropdown-menu pull-right" id="note_modal_quick_actions" aria-labelledby="dropdownMenuButton">
|
||||
<a class="dropdown-item" href="#" onclick='copy_object_link({{ note.note_id }});return false;'><i class="fa fa-share mr-2"></i>Share</a>
|
||||
<a class="dropdown-item" href="#" onclick='copy_object_link_md("note",{{ note.note_id }});return false;'><i class="fa-brands fa-markdown mr-2"></i>Markdown Link</a>
|
||||
</div>
|
||||
</div>
|
||||
<button class="float-right btn bg-transparent" title="Minimize" onclick="modal_minimized('modal_note_detail', '{{ note.title }}');"> <i class='fa fa-minus'></i> </button>
|
||||
<button type="button" class="pull-right btn bg-transparent" data-dismiss="modal" aria-label="Close"><span
|
||||
aria-hidden="true"><i class="fa fa-times"></i></span></button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<div role="tabpanel">
|
||||
<div class="tab-content">
|
||||
<div class="tab-pane active" id="details">
|
||||
<form method="post" action="" id="form_note">
|
||||
<iris_notein style="display: none;">{{ note.note_id }}</iris_notein>
|
||||
|
||||
{{ note.hidden_tag() }}
|
||||
<div class="container col-md-12">
|
||||
<div class="form-group">
|
||||
<label>Note title *</label>
|
||||
{{ note.note_title(class='form-control input') }}
|
||||
</div>
|
||||
<div class="row mb-1 mt-3">
|
||||
<div class="col">
|
||||
<span class="badge badge-light" id="content_typing"></span>
|
||||
<span class="badge badge-light" id="content_last_saved_by"></span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-1 mt-3">
|
||||
<div class="col-10" id="notes_edition_btn">
|
||||
<div class="btn btn-sm btn-light mr-1 " title="CTRL-S" id="last_saved" onclick="save_note( this );"><i class="fa-solid fa-file-circle-check"></i></div>
|
||||
<div class="btn btn-sm btn-light mr-1 " title="CTRL-B" onclick="note_editor.insertSnippet('**${1:$SELECTION}**');note_editor.focus();"><i class="fa-solid fa-bold"></i></div>
|
||||
<div class="btn btn-sm btn-light mr-1" title="CTRL-I" onclick="note_editor.insertSnippet('*${1:$SELECTION}*');note_editor.focus();"><i class="fa-solid fa-italic"></i></div>
|
||||
<div class="btn btn-sm btn-light mr-1" title="CTRL-SHIFT-1" onclick="note_editor.insertSnippet('# ${1:$SELECTION}');note_editor.focus();">H1</div>
|
||||
<div class="btn btn-sm btn-light mr-1" title="CTRL-SHIFT-2" onclick="note_editor.insertSnippet('## ${1:$SELECTION}');note_editor.focus();">H2</div>
|
||||
<div class="btn btn-sm btn-light mr-1" title="CTRL-SHIFT-3" onclick="note_editor.insertSnippet('### ${1:$SELECTION}');note_editor.focus();">H3</div>
|
||||
<div class="btn btn-sm btn-light mr-1" title="CTRL-SHIFT-4" onclick="note_editor.insertSnippet('#### ${1:$SELECTION}');note_editor.focus();">H4</div>
|
||||
<div class="btn btn-sm btn-light mr-1" title="CTRL+\`" onclick="note_editor.insertSnippet('```${1:$SELECTION}```');note_editor.focus();"><i class="fa-solid fa-code"></i></div>
|
||||
<div class="btn btn-sm btn-light mr-1" title="CTRL-K" onclick="note_editor.insertSnippet('[${1:$SELECTION}](url)');note_editor.focus();"><i class="fa-solid fa-link"></i></div>
|
||||
<div class="btn btn-sm btn-light mr-1" title="Insert table" onclick="note_editor.insertSnippet('|\t|\t|\t|\n|--|--|--|\n|\t|\t|\t|\n|\t|\t|\t|');note_editor.focus();"><i class="fa-solid fa-table"></i></div>
|
||||
<div class="btn btn-sm btn-light mr-1" title="Insert bullet list" onclick="note_editor.insertSnippet('\n- \n- \n- ');note_editor.focus();"><i class="fa-solid fa-list"></i></div>
|
||||
<div class="btn btn-sm btn-light mr-1" title="Insert numbered list" onclick="note_editor.insertSnippet('\n1. a \n2. b \n3. c ');note_editor.focus();"><i class="fa-solid fa-list-ol"></i></div>
|
||||
<div class="btn btn-sm btn-light mr-1" title="Toggle editor expansion" onclick="toggle_max_editor();"><i class="fa-solid fa-maximize"></i></div>
|
||||
<div class="btn btn-sm btn-transparent mr-1" title="Help" onclick="get_md_helper_modal();"><i class="fa-solid fa-question-circle"></i></div>
|
||||
</div>
|
||||
<div class="col">
|
||||
<button type="button" class="float-right icon-note btn btn-circle btn-sm" onclick="edit_innote();"></button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-md-6" id="container_note_content">
|
||||
<div style="display: none" id="fetched_crc"></div>
|
||||
<div id="editor_detail" data-theme="{% if current_user.in_dark_mode %}dark{% else %}light{% endif %}">{{ note.content }}</div>
|
||||
<textarea id="note_content" rows="10" cols="82" style="display: none"></textarea>
|
||||
</div>
|
||||
<div class="col-md-6" id="ctrd_notesum">
|
||||
<div id="targetDiv"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
{% include 'modals/modal_attributes_tabs.html' %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-outline-danger mr-auto" onclick="delete_note(this, {{ ncid }});">Delete note</button>
|
||||
<button type="button" class="btn btn-default" onclick="save_note( this, {{ ncid }} );" id="btn_save_note">Save </button>
|
||||
</div>
|
@@ -0,0 +1,24 @@
|
||||
|
||||
{% extends "layouts/default.html" %}
|
||||
|
||||
{% block title %} Case Error {% endblock title %}
|
||||
|
||||
{% block stylesheets %}
|
||||
|
||||
{% endblock stylesheets %}
|
||||
|
||||
{% block content %}
|
||||
|
||||
<br />
|
||||
<br />
|
||||
|
||||
<h2 class="mx-5">No case found for you !</h2><br/><br/>
|
||||
<h3 class="font-weight-light mx-5">The page you’re looking for is only available when a case is selected.</h3><br/>
|
||||
|
||||
<h3 class="font-weight-light mx-5">Please press the <b><i class="flaticon-repeat"></i></b> button on the top right to select one.</h3>
|
||||
|
||||
{% endblock content %}
|
||||
|
||||
{% block javascripts %}
|
||||
|
||||
{% endblock javascripts %}
|
Reference in New Issue
Block a user