Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from typing import Counter
- from flask import Flask, request, render_template_string
- from flask_socketio import SocketIO, emit
- app = Flask(__name__)
- socketio = SocketIO(app, logge=True)
- clients = 0
- @socketio.on("connect", namespace="/")
- def connect():
- global clients
- print("fired connect")
- clients += 1
- emit("users", {"user_count": clients}, broadcast=True)
- @socketio.on("disconnect", namespace="/")
- def disconnect():
- global clients
- print("fired disconnect")
- clients -= 1
- emit("users", {"user_count": clients}, broadcast=True)
- TABLE_TEMPLATE = """
- <script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/1.7.3/socket.io.min.js"></script>
- <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
- <script>
- $(document).ready(function(){
- var namespace = '/';
- var socket = io.connect('http://' + document.domain + ':' + location.port + namespace);
- // Update the counter when a new user connects
- socket.on('users', function(users) {
- userCount = document.getElementById('user_counter');
- userCount.innerHTML = users.user_count;
- });
- });
- </script>
- <h1 id='user_counter'></h1>
- <style>
- table, th, td {
- border: 1px solid black;
- }
- </style>
- <table style="width: 100%">
- <thead>
- <th>Client</th>
- <th>IP</th>
- <th>Status</th>
- </thead>
- <tbody>
- {% for row in data %}
- <tr>
- <td><center>{{ row.client }}</td></center>
- <td><center>{{ row.ip }}</td></center>
- <td><center>{{ row.status }}</td></center>
- </tr>
- {% endfor %}
- </tbody>
- </table>
- """
- @app.route("/device_add", methods=["POST"])
- def device_add():
- name = request.args.get("name")
- with open("logs.log", "a") as f:
- f.write(f"{name} Connected USB from IP: {request.remote_addr} \n")
- return "ok"
- @app.route("/device_remove", methods=["POST"])
- def device_remove():
- name = request.args.get("name")
- with open("logs.log", "a") as f:
- f.write(f"{name} Disconnected USB from IP: {request.remote_addr}\n")
- return "ok"
- @app.route("/", methods=["GET"])
- def device_list():
- print(clients)
- keys = ["client", "ip", "status"]
- data = []
- with open("logs.log", "r") as f:
- for line in f:
- row = line.split()
- data.append(dict(zip(keys, [row[0], row[-1], row[1]])))
- return render_template_string(TABLE_TEMPLATE, data=data)
- if __name__ == "__main__":
- socketio.run(app, port=8080, debug=True, use_reloader=True)
Add Comment
Please, Sign In to add comment