chg: [website] mardown source, download, result view

pull/592/merge
David Cruciani 2024-02-23 14:54:51 +01:00
parent 10cf1e4a32
commit 7e3ead7b9e
No known key found for this signature in database
GPG Key ID: 8690CDE1E3994B9B
2 changed files with 130 additions and 84 deletions

View File

@ -135,6 +135,28 @@ def result(sid):
@home_blueprint.route("/download/<sid>")
def download(sid):
"""Download a module result as json"""
sess = HomeModel.get_session(sid)
if "module" in request.args:
if sess:
loc = json.loads(sess.result)
module = request.args.get("module")
if module in loc:
return jsonify(loc[module]), 200, {'Content-Disposition': f'attachment; filename={sess.query_enter.replace(".", "_")}-{module}.json'}
return {"message": "Module not in result", "toast_class": "danger-subtle"}, 400
else:
for s in SessionModel.sessions:
if s.uuid == sid:
module = request.args.get("module")
if module in s.result:
return jsonify(s.result[module]), 200, {'Content-Disposition': f'attachment; filename={s.query}-{module}.json'}
return {"message": "Module not in result", "toast_class": "danger-subtle"}, 400
return {"message": "Session not found", 'toast_class': "danger-subtle"}, 404
return {"message": "Need to pass a module", "toast_class": "warning-subtle"}, 400

View File

@ -25,7 +25,7 @@
</div> </div>
<div class="col"> <div class="col">
<h4>Modules:</h4> <h4>Modules:</h4>
{%for module in modules%} {{module}}, {%endfor%} {{", ".join(modules)}}
</div> </div>
</div> </div>
<div class="d-flex w-100 justify-content-between"> <div class="d-flex w-100 justify-content-between">
@ -43,7 +43,7 @@
<br/> <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"> <button class="btn btn-outline-primary" style="position: fixed; right: 0px; margin-top:30px" title="Session history" data-bs-toggle="offcanvas" data-bs-target="#offcanvasScrolling" aria-controls="offcanvasScrolling">
<i class="fa-solid fa-bars"></i> <i class="fa-solid fa-bars"></i>
</button> </button>
@ -81,33 +81,81 @@
</li> </li>
</ul> </ul>
<template v-if="tab_list == 'visual'"> <div class="row">
<div class="accordion" v-if="Object.keys(modules_res).length" style="width: 95%"> <div class="col-10">
<div class="accordion-item" v-for="result, key in modules_res"> <template v-if="tab_list == 'visual'">
<template v-if="!('error' in result)"> <div data-bs-spy="scroll" data-bs-target="#list-result" data-bs-smooth-scroll="true" class="scrollspy-example" tabindex="0">
<h2 class="accordion-header"> <div class="accordion" v-if="Object.keys(modules_res).length" style="width: 95%">
<button class="accordion-button" type="button" data-bs-toggle="collapse" :data-bs-target="'#panelsStayOpen-'+key" aria-expanded="true" :aria-controls="'panelsStayOpen-'+key"> <div class="accordion-item" :id="'list-item-'+key" v-for="result, key in modules_res">
[[key]] <template v-if="!('error' in result)">
</button> <h2 class="accordion-header">
</h2> <button class="accordion-button" type="button" data-bs-toggle="collapse" :data-bs-target="'#panelsStayOpen-'+key" aria-expanded="true" :aria-controls="'panelsStayOpen-'+key">
<div :id="'panelsStayOpen-'+key" class="accordion-collapse collapse show"> [[key]]
<div class="accordion-body row"> </button>
<template v-for="obj in result.results.Object"> </h2>
<div v-html="parseMispObject(obj, '/home/{{sid}}?query=', query_as_same)[0].outerHTML"></div> <div :id="'panelsStayOpen-'+key" class="accordion-collapse collapse show">
<div class="accordion-body row">
<template v-for="obj in result.results.Object">
<div v-html="parseMispObject(obj, '/home/{{sid}}?query=', query_as_same)[0].outerHTML"></div>
</template>
</div>
</div>
</template> </template>
</div> </div>
</div> </div>
</template> </div>
</div> </template>
</div>
</template>
<template v-else-if="tab_list == 'json'"> <template v-else-if="tab_list == 'json'">
<div class="row" v-if="Object.keys(modules_res).length"> <div class="row" v-if="Object.keys(modules_res).length">
<div class="col-10"> <div class="col-10">
<h3 id="results_part">Results</h3> <h3 id="results_part">Results</h3>
<div class="accordion"> <div data-bs-spy="scroll" data-bs-target="#list-result" data-bs-smooth-scroll="true" class="scrollspy-example" tabindex="0">
<div class="accordion-item" v-for="result, key in modules_res"> <div class="accordion">
<div class="accordion-item" :id="'list-item-'+key" v-for="result, key in modules_res">
<template v-if="!('error' in result)">
<h2 class="accordion-header">
<button class="accordion-button" type="button" data-bs-toggle="collapse" :data-bs-target="'#panelsStayOpen-'+key" aria-expanded="true" :aria-controls="'panelsStayOpen-'+key">
[[key]]
</button>
</h2>
<div :id="'panelsStayOpen-'+key" class="accordion-collapse collapse show">
<a class="btn btn-primary" :href="`/download/${sid}?module=${key}`" title="Download the json" style="padding: 5px; margin-left: 5px; margin-top: 5px;">Download</a>
<div class="accordion-body" v-html="generateCoreFormatUI(result)[0].outerHTML"></div>
</div>
</template>
</div>
</div>
</div>
<!-- Errors Part -->
<hr style="margin-top: 50px">
<h3 id="errors_part">Errors</h3>
<div data-bs-spy="scroll" data-bs-target="#list-error" data-bs-smooth-scroll="true" class="scrollspy-example" tabindex="0">
<div class="accordion">
<div class="accordion-item" :id="'list-item-'+key" v-for="result, key in modules_res">
<template v-if="'error' in result">
<h2 class="accordion-header">
<button class="accordion-button" type="button" data-bs-toggle="collapse" :data-bs-target="'#panelsStayOpen-'+key" aria-expanded="true" :aria-controls="'panelsStayOpen-'+key">
[[key]]
<span style="margin-left: 5px;" title="Error"></span>
</button>
</h2>
<div :id="'panelsStayOpen-'+key" class="accordion-collapse collapse show">
<div class="accordion-body" v-html="generateCoreFormatUI(result)[0].outerHTML"></div>
</div>
</template>
</div>
</div>
</div>
</div>
</div>
</template>
<template v-else-if="tab_list == 'markdown'">
<div v-if="Object.keys(modules_res).length" class="accordion" style="width: 95%">
<div class="accordion-item" :id="'list-item-'+key" v-for="result, key in modules_res">
<template v-if="!('error' in result)"> <template v-if="!('error' in result)">
<h2 class="accordion-header"> <h2 class="accordion-header">
<button class="accordion-button" type="button" data-bs-toggle="collapse" :data-bs-target="'#panelsStayOpen-'+key" aria-expanded="true" :aria-controls="'panelsStayOpen-'+key"> <button class="accordion-button" type="button" data-bs-toggle="collapse" :data-bs-target="'#panelsStayOpen-'+key" aria-expanded="true" :aria-controls="'panelsStayOpen-'+key">
@ -115,68 +163,43 @@
</button> </button>
</h2> </h2>
<div :id="'panelsStayOpen-'+key" class="accordion-collapse collapse show"> <div :id="'panelsStayOpen-'+key" class="accordion-collapse collapse show">
<div class="accordion-body" v-html="generateCoreFormatUI(result)[0].outerHTML"></div> <div class="accordion-body row">
</div> <template v-for="obj, key_obj in result.results.Object">
</template> <pre>
</div> #### [[obj.name]]
</div> <template v-for="attr, key_attr in obj.Attribute">
###### [[attr.object_relation]]
<!-- Errors Part --> Type: [[attr.type]]
<hr style="margin-top: 50px"> Value: [[attr.value]]
<h3 id="errors_part">Errors</h3> </template>
<div class="accordion"> </pre>
<div class="accordion-item" v-for="result, key in modules_res"> <hr>
<template v-if="'error' in result"> </template>
<h2 class="accordion-header">
<button class="accordion-button" type="button" data-bs-toggle="collapse" :data-bs-target="'#panelsStayOpen-'+key" aria-expanded="true" :aria-controls="'panelsStayOpen-'+key">
[[key]]
<span style="margin-left: 5px;" title="Error"></span>
</button>
</h2>
<div :id="'panelsStayOpen-'+key" class="accordion-collapse collapse show">
<div class="accordion-body" v-html="generateCoreFormatUI(result)[0].outerHTML"></div>
</div>
</template>
</div>
</div>
</div>
<div class="col-1" style="position: fixed; right: 0px; box-shadow: 0 2px 5px 0 rgb(0 0 0 / 5%), 0 2px 10px 0 rgb(0 0 0 / 5%);">
<div style="padding: 10px;"><a style="text-decoration: none;" href="#results_part">Results</a></div>
<div style="padding: 10px;"><a style="text-decoration: none;" href="#errors_part">Errors</a></div>
</div>
</div>
</template>
<template v-else-if="tab_list == 'markdown'">
<div v-if="Object.keys(modules_res).length" class="accordion" style="width: 95%">
<div class="accordion-item" v-for="result, key in modules_res">
<template v-if="!('error' in result)">
<h2 class="accordion-header">
<button class="accordion-button" type="button" data-bs-toggle="collapse" :data-bs-target="'#panelsStayOpen-'+key" aria-expanded="true" :aria-controls="'panelsStayOpen-'+key">
[[key]]
</button>
</h2>
<div :id="'panelsStayOpen-'+key" class="accordion-collapse collapse show">
<div class="accordion-body row">
<template v-for="obj, key_obj in result.results.Object">
<h4>Object #[[key_obj+1]] - <small>[[obj.name]]</small></h4>
<div style="margin-bottom: 10px;" v-for="attr, key_attr in obj.Attribute">
<h6>Attributes #[[key_attr+1]]</h6>
<div>
Type: [[attr.type]]
</div>
<div>
Value: [[attr.value]]
</div>
</div> </div>
<hr> </div>
</template> </template>
</div>
</div> </div>
</template> </div>
</div> </template>
</div> </div>
</template>
<div id="list-result" class="list-group col-2" style="position: fixed; right: 0px;">
<a class="list-group-item list-group-item-action" v-if="tab_list == 'json'" style="background-color: #0d6efd; color:white" href="#results_part">Results</a>
<template v-for="result, key in modules_res">
<a class="list-group-item list-group-item-action" v-if="!('error' in result)" :href="'#list-item-'+key">[[key]]</a>
</template>
<template v-if="tab_list == 'json'">
<a class="list-group-item list-group-item-action" style="background-color: #0d6efd; color:white" href="#errors_part">Errors</a>
<div id="list-error" class="list-group">
<template v-for="result, key in modules_res">
<a class="list-group-item list-group-item-action" v-if="'error' in result" :href="'#list-item-'+key" style="border-radius: 0;">[[key]]</a>
</template>
</div>
</template>
</div>
</div>
<span id="goTop">[<a href="#top">Go Back Top</a>]</span> <span id="goTop">[<a href="#top">Go Back Top</a>]</span>
{% endblock %} {% endblock %}
@ -307,6 +330,7 @@
return { return {
message_list, message_list,
sid,
query_info, query_info,
progress, progress,
status_site, status_site,