List users

This commit is contained in:
AB
2018-10-27 19:16:58 +03:00
parent 1d46882770
commit 7de518d37a
3 changed files with 101 additions and 55 deletions

View File

@@ -1,7 +1,7 @@
class DataBase: class DataBase:
def __init__(self, basefile): def __init__(self, basefile):
import sqlite3 import sqlite3
import datetime as dt #import datetime as dt
import logging import logging
self.log = logging.getLogger("pycrm." + __name__) self.log = logging.getLogger("pycrm." + __name__)
try: try:
@@ -29,8 +29,35 @@ class DataBase:
sql = "SELECT * FROM `meme` ORDER BY rowid DESC " sql = "SELECT * FROM `meme` ORDER BY rowid DESC "
return(self.execute(sql)) return(self.execute(sql))
def get_users(self): def get_users(self, order='id', sorting='ASC'):
sql = "SELECT * FROM `user`" if order == 'id':
order = 'id'
elif order == 'first_name':
order = 'first_name'
elif order == 'last_name':
order == 'last_name'
elif order == 'username':
order = 'username'
elif order == 'firstly_seen':
order = 'dt'
elif order == 'last_activity':
order = 'last_seen'
else:
order = 'id'
sql = """
SELECT * FROM
(SELECT u.id,
u.username,
u.first_name,
u.last_name,
datetime(u.date, 'unixepoch') as dt,
max(datetime(r.date, 'unixepoch')) as last_seen
FROM `user` u LEFT JOIN `relations` r ON
r.user_id == u.id
GROUP BY u.id)
ORDER BY %s %s""" % (
order, sorting)
return(self.execute(sql)) return(self.execute(sql))
def close(self): def close(self):

View File

@@ -33,7 +33,9 @@ def serve_static(path):
@app.route('/') @app.route('/')
def index(): def index():
return render_template('index.html', users=db.get_users()) order = request.args.get('order', default = 'id', type = str)
sorting = request.args.get('sorting', default = 'ASC', type = str)
return render_template('index.html', users=db.get_users(order=order, sorting=sorting), sorting=sorting)
@app.route('/users_overview') @app.route('/users_overview')
def users_overview(): def users_overview():

View File

@@ -1,56 +1,73 @@
<!doctype html> <!doctype html>
<html lang="en"> <html lang="en">
<head>
<!-- Required meta tags -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<!-- Bootstrap CSS --> <head>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO" crossorigin="anonymous"> <!-- Required meta tags -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<title>libOpenAnal appliance</title> <!-- Bootstrap CSS -->
</head> <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO"
<body> crossorigin="anonymous">
<h1>Hexor's conf_bot data extractor tool</h1>
<ul class="nav"> <title>libOpenAnal appliance</title>
<li class="nav-item"> </head>
<a class="nav-link active" href="#">Users overview</a>
</li> <body>
<li class="nav-item"> <h1>Hexor's conf_bot data extractor tool</h1>
<a class="nav-link" href="#">Link</a>
</li> <ul class="nav">
<li class="nav-item"> <li class="nav-item">
<a class="nav-link" href="#">Link</a> <a class="nav-link active" href="#">Users overview</a>
</li> </li>
<li class="nav-item"> <li class="nav-item">
<a class="nav-link disabled" href="#">Disabled</a> <a class="nav-link" href="#">Link</a>
</li> </li>
</ul> <li class="nav-item">
<table class="table table-hover"> <a class="nav-link" href="#">Link</a>
<thead> </li>
<tr> <li class="nav-item">
<th scope="col">#</th> <a class="nav-link disabled" href="#">Disabled</a>
<th scope="col">First</th> </li>
<th scope="col">Last</th> </ul>
<th scope="col">Username</th>
</tr>
</thead>
<tbody> <table class="table table-hover table-sm">
</tbody> <thead>
</table> <tr>
{% for user in users %} <th scope="col">#</th>
<tr> <th scope="col"><a href="./?order=first_name&sorting={%- if sorting == 'ASC' -%}DESC{%- else -%}ASC{%- endif -%}">First
<th scope="row">1</th> name</a></th>
<td>{{ user.1 }}</td> <th scope="col"><a href="./?order=last_name&sorting={%- if sorting == 'ASC' -%}DESC{%- else -%}ASC{%- endif -%}">Last name</a></th>
<td>{{ user.2 }}</td> <th scope="col"><a href="./?order=username&sorting={%- if sorting == 'ASC' -%}DESC{%- else -%}ASC{%- endif -%}">Username</a></th>
<td>{{ user.0 }}</td> <th scope="col"><a href="./?order=id&sorting={%- if sorting == 'ASC' -%}DESC{%- else -%}ASC{%- endif -%}">User ID</a></th>
</tr> <th scope="col"><a href="./?order=firstly_seen&sorting={%- if sorting == 'ASC' -%}DESC{%- else -%}ASC{%- endif -%}">Firstly seen</a></th>
{% endfor %} <th scope="col"><a href="./?order=last_activity&sorting={%- if sorting == 'ASC' -%}DESC{%- else -%}ASC{%- endif -%}">Last activity</a></th>
<!-- Optional JavaScript --> </tr>
<!-- jQuery first, then Popper.js, then Bootstrap JS --> </thead>
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script> <tbody>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js" integrity="sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49" crossorigin="anonymous"></script> {% for user in users %}
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js" integrity="sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy" crossorigin="anonymous"></script> <tr>
</body> <th scope="row">{{loop.index}}</th>
</html> <td>{{ user.2 }}</td>
<td>{{ user.3 }}</td>
<td>{{ user.1 }}</td>
<td>{{ user.0 }}</td>
<td>{{ user.4 }}</td>
<td>{{ user.5 }}</td>
</tr>
{% endfor %}
</tbody>
</table>
<!-- Optional JavaScript -->
<!-- jQuery first, then Popper.js, then Bootstrap JS -->
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo"
crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js" integrity="sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49"
crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js" integrity="sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy"
crossorigin="anonymous"></script>
</body>
</html>