This commit is contained in:
@@ -0,0 +1,82 @@
|
||||
#!/usr/bin/env python3
|
||||
#
|
||||
#
|
||||
# IRIS Source Code
|
||||
# Copyright (C) 2021 - Airbus CyberSecurity (SAS)
|
||||
# ir@cyberactionlab.net
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU Lesser General Public
|
||||
# License as published by the Free Software Foundation; either
|
||||
# version 3 of the License, or (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
# Lesser General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Lesser General Public License
|
||||
# along with this program; if not, write to the Free Software Foundation,
|
||||
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
|
||||
# IMPORTS ------------------------------------------------
|
||||
import os
|
||||
from flask import Blueprint
|
||||
from flask import redirect
|
||||
from flask import render_template
|
||||
from flask import url_for
|
||||
from flask_wtf import FlaskForm
|
||||
|
||||
import app
|
||||
from app.datamgmt.activities.activities_db import get_all_users_activities
|
||||
from app.datamgmt.activities.activities_db import get_users_activities
|
||||
from app.models.authorization import Permissions
|
||||
from app.util import ac_api_requires
|
||||
from app.util import ac_requires
|
||||
from app.util import response_success
|
||||
|
||||
activities_blueprint = Blueprint(
|
||||
'activities',
|
||||
__name__,
|
||||
template_folder='templates'
|
||||
)
|
||||
|
||||
basedir = os.path.abspath(os.path.dirname(app.__file__))
|
||||
|
||||
|
||||
# CONTENT ------------------------------------------------
|
||||
@activities_blueprint.route('/activities', methods=['GET'])
|
||||
@ac_requires(Permissions.activities_read, Permissions.all_activities_read)
|
||||
def activities_index(caseid: int, url_redir):
|
||||
if url_redir:
|
||||
return redirect(url_for('activities.activities_index', cid=caseid, redirect=True))
|
||||
|
||||
form = FlaskForm()
|
||||
|
||||
return render_template('activities.html', form=form)
|
||||
|
||||
|
||||
@activities_blueprint.route('/activities/list', methods=['GET'])
|
||||
@ac_api_requires(Permissions.activities_read, Permissions.all_activities_read)
|
||||
def list_activities(caseid):
|
||||
# Get User activities from database
|
||||
|
||||
user_activities = get_users_activities()
|
||||
|
||||
data = [row._asdict() for row in user_activities]
|
||||
data = sorted(data, key=lambda i: i['activity_date'], reverse=True)
|
||||
|
||||
return response_success("", data=data)
|
||||
|
||||
|
||||
@activities_blueprint.route('/activities/list-all', methods=['GET'])
|
||||
@ac_api_requires(Permissions.all_activities_read)
|
||||
def list_all_activities(caseid):
|
||||
# Get User activities from database
|
||||
|
||||
user_activities = get_all_users_activities()
|
||||
|
||||
data = [row._asdict() for row in user_activities]
|
||||
data = sorted(data, key=lambda i: i['activity_date'], reverse=True)
|
||||
|
||||
return response_success("", data=data)
|
@@ -0,0 +1,76 @@
|
||||
{% extends "layouts/default.html" %}
|
||||
|
||||
{% block title %} Activities {% endblock title %}
|
||||
|
||||
{% block stylesheets %}
|
||||
<link href="/static/assets/css/dataTables.buttons.min.css" rel="stylesheet">
|
||||
{% endblock stylesheets %}
|
||||
|
||||
{% block content %}
|
||||
|
||||
{% if current_user.is_authenticated %}
|
||||
<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>
|
||||
<div class="card" id="card_main_load" style="display:none;">
|
||||
<div class="card-header">
|
||||
<div class="card-title">User activities ( max 10k entries + unbound )
|
||||
<button type="button" class="btn btn-sm btn-outline-dark float-right ml-2" onclick="refresh_activities();">
|
||||
Refresh
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<div class="form-check">
|
||||
<label class="form-check-label">
|
||||
<input class="form-check-input" type="checkbox" value="" id="non_case_related_act">
|
||||
<span class="form-check-sign">Show non case related activity</span>
|
||||
</label>
|
||||
</div>
|
||||
<div class="table-responsive" id="activities_table_wrapper">
|
||||
<div class="selectgroup">
|
||||
<span id="table_buttons"></span>
|
||||
</div>
|
||||
<table class="table display table-striped table-hover" width="100%" cellspacing="0" id="activities_table" >
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Date</th>
|
||||
<th>User</th>
|
||||
<th>Case</th>
|
||||
<th>Manual input</th>
|
||||
<th>From API</th>
|
||||
<th>Activity</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tfoot>
|
||||
<tr>
|
||||
<th>Date</th>
|
||||
<th>User</th>
|
||||
<th>Case</th>
|
||||
<th>Manual input</th>
|
||||
<th>From API</th>
|
||||
<th>Activity</th>
|
||||
</tr>
|
||||
</tfoot>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{{ form.hidden_tag() }}
|
||||
{% endif %}
|
||||
|
||||
{% endblock content %}
|
||||
|
||||
{% block javascripts %}
|
||||
<script src="/static/assets/js/plugin/datatables/dataTables.cellEdit.js"></script>
|
||||
<script src="/static/assets/js/plugin/datatables/dataTables.buttons.min.js"></script>
|
||||
<script src="/static/assets/js/plugin/datatables/buttons.html5.min.js"></script>
|
||||
<script src="/static/assets/js/plugin/datatables/buttons.print.min.js"></script>
|
||||
|
||||
<script src="/static/assets/js/iris/datatablesUtils.js"></script>
|
||||
<script src="/static/assets/js/iris/activities.js"></script>
|
||||
{% endblock javascripts %}
|
Reference in New Issue
Block a user