mirror of https://github.com/MISP/misp-modules
add: [website] history collapse for query page
parent
8a1f6b1f46
commit
02fb2da389
|
@ -35,6 +35,12 @@ def get_history_session():
|
|||
return histories
|
||||
return {}
|
||||
|
||||
@history_blueprint.route("/get_current_query_history", methods=["GET"])
|
||||
def get_current_query_history():
|
||||
"""Get current query history"""
|
||||
return HistoryModel.get_current_query_history()
|
||||
|
||||
|
||||
@history_blueprint.route("/save_history/<sid>", methods=["GET"])
|
||||
def save_history(sid):
|
||||
return HistoryModel.save_history_core(sid)
|
||||
|
|
|
@ -30,7 +30,7 @@ def get_history_session():
|
|||
# If current query have no children then don't display it
|
||||
# It's already save in history
|
||||
# Only parent-child tree structure is in flask session
|
||||
current_query_value = sess.get(sess.get("current_query"))
|
||||
current_query_value = sess.get(current_query)
|
||||
if current_query_value and current_query_value["children"]:
|
||||
loc_list.append(current_query_value)
|
||||
for q in sess:
|
||||
|
@ -43,6 +43,14 @@ def get_history_session():
|
|||
|
||||
return loc_list
|
||||
|
||||
def get_current_query_history():
|
||||
current_query = sess.get("current_query")
|
||||
if current_query:
|
||||
current_query_value = sess.get(current_query)
|
||||
if current_query_value and current_query_value["children"]:
|
||||
return current_query_value
|
||||
return {}
|
||||
|
||||
|
||||
def get_history_session_uuid(history_uuid):
|
||||
for q in sess:
|
||||
|
|
|
@ -6,11 +6,6 @@ body {
|
|||
background-color: #fbfbfb;
|
||||
}
|
||||
|
||||
/* @media (min-width: 991.98px) {
|
||||
main {
|
||||
padding-left: 200px;
|
||||
}
|
||||
} */
|
||||
|
||||
span#goTop, span#project-version{
|
||||
position: fixed;
|
||||
|
|
|
@ -0,0 +1,16 @@
|
|||
export default {
|
||||
name: "History_view",
|
||||
delimiters: ['[[', ']]'],
|
||||
props: {
|
||||
history: Object,
|
||||
},
|
||||
|
||||
template: `
|
||||
<li><a :href="'/query/'+history.uuid" :title="'Attribute: \\n' +history.input+ '\\n\\nModules: \\n' + history.modules">[[history.query]]</a></li>
|
||||
<ul>
|
||||
<template v-for="child in history.children">
|
||||
<history_view :history="child"></history_view>
|
||||
</template>
|
||||
</ul>
|
||||
`
|
||||
}
|
|
@ -1,4 +1,4 @@
|
|||
import {display_toast} from './toaster.js'
|
||||
import {display_toast} from '../toaster.js'
|
||||
export default {
|
||||
name: "History_view",
|
||||
delimiters: ['[[', ']]'],
|
|
@ -33,7 +33,6 @@
|
|||
<link rel= "stylesheet" type= "text/css" href= "{{ url_for('static',filename='css/jquery-ui.css') }}">
|
||||
|
||||
<link rel= "stylesheet" type= "text/css" href= "{{ url_for('static',filename='css/core.css') }}">
|
||||
<link rel= "stylesheet" type= "text/css" href= "{{ url_for('static',filename='css/sidebar.css') }}">
|
||||
|
||||
<link rel= "stylesheet" type= "text/css" href= "{{ url_for('static',filename='css/select2-bootstrap-5-theme.min.css') }}">
|
||||
</head>
|
||||
|
|
|
@ -85,7 +85,7 @@
|
|||
<script type="module">
|
||||
const { createApp, ref, onMounted, nextTick, defineComponent} = Vue
|
||||
import {display_toast, message_list} from '/static/js/toaster.js'
|
||||
import history_view from '/static/js/history_view.js'
|
||||
import history_view from '/static/js/history/history_view.js'
|
||||
createApp({
|
||||
delimiters: ['[[', ']]'],
|
||||
components: {
|
||||
|
|
|
@ -48,6 +48,30 @@
|
|||
|
||||
<br/>
|
||||
|
||||
<button class="btn btn-outline-primary" style="position: fixed; right: 0px; top: 50%" title="Session history" data-bs-toggle="offcanvas" data-bs-target="#offcanvasScrolling" aria-controls="offcanvasScrolling">
|
||||
<i class="fa-solid fa-bars"></i>
|
||||
</button>
|
||||
|
||||
<div class="offcanvas offcanvas-end" tabindex="-1" id="offcanvasScrolling" aria-labelledby="offcanvasScrollingLabel">
|
||||
<div class="offcanvas-header">
|
||||
<h5 class="offcanvas-title" id="offcanvasScrollingLabel">Current History query</h5>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" aria-label="Close"></button>
|
||||
</div>
|
||||
<div style="margin-left: 18px;">
|
||||
<a class="btn btn-secondary btn-sm" href="/history_session">Complete view</a>
|
||||
</div>
|
||||
<div class="offcanvas-body">
|
||||
<ul>
|
||||
<li><a :href="'/query/'+history.uuid" :title="'Attribute: \n' +history.input+ '\n\nModules: \n' + history.modules">[[history.query]]</a></li>
|
||||
<ul>
|
||||
<template v-for="child in history.children">
|
||||
<history_view :history="child"></history_view>
|
||||
</template>
|
||||
</ul>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Results Part -->
|
||||
<hr>
|
||||
<ul class="nav nav-tabs" style="margin-bottom: 10px;">
|
||||
|
@ -183,8 +207,12 @@
|
|||
<script type="module">
|
||||
const { createApp, ref, onMounted, nextTick, defineComponent} = Vue
|
||||
import {message_list} from '/static/js/toaster.js'
|
||||
import history_view from '/static/js/history/history_tree_query.js'
|
||||
createApp({
|
||||
delimiters: ['[[', ']]'],
|
||||
components: {
|
||||
history_view
|
||||
},
|
||||
setup() {
|
||||
const is_searching = ref(false)
|
||||
|
||||
|
@ -194,6 +222,7 @@
|
|||
const progress = ref(0)
|
||||
const status_site = ref()
|
||||
const tab_list = ref("json")
|
||||
const history = ref({})
|
||||
|
||||
|
||||
function actionQuery(){
|
||||
|
@ -258,8 +287,15 @@
|
|||
}
|
||||
}
|
||||
|
||||
async function get_history_session(){
|
||||
let res = await fetch("/get_current_query_history")
|
||||
let loc = await res.json()
|
||||
history.value = loc
|
||||
}
|
||||
|
||||
onMounted(() => {
|
||||
actionQuery()
|
||||
get_history_session()
|
||||
})
|
||||
|
||||
return {
|
||||
|
@ -269,6 +305,7 @@
|
|||
is_searching,
|
||||
modules_res,
|
||||
tab_list,
|
||||
history,
|
||||
generateCoreFormatUI,
|
||||
active_tab
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue