Added ban time selector.
This commit is contained in:
parent
9937f49b73
commit
c59f549ab9
|
|
@ -14,7 +14,7 @@ ${header}
|
|||
<div class="row">
|
||||
<h1 class="col-12">Clients</h1>
|
||||
</div>
|
||||
<div class="row mt-3 client-list">
|
||||
<div class="row client-list">
|
||||
${clients}
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -1,14 +1,23 @@
|
|||
$.fn.clientList = function() {
|
||||
this.each(function() {
|
||||
$(this).on('click', '.client-ban', function(e) {
|
||||
$.ajax("/ban/" + this.value).done(function() {
|
||||
var mins = $('#ban-minutes').val();
|
||||
$.ajax("/ban", {
|
||||
data: JSON.stringify({ ip: this.value, mins: mins }),
|
||||
contentType: 'application/json',
|
||||
method: 'POST'
|
||||
}).done(function() {
|
||||
document.location.reload();
|
||||
});
|
||||
return false;
|
||||
});
|
||||
|
||||
$(this).on('click', '.client-unban', function(e) {
|
||||
$.ajax("/unban/" + this.value).done(function() {
|
||||
$.ajax("/unban", {
|
||||
data: JSON.stringify({ ip: this.value }),
|
||||
contentType: 'application/json',
|
||||
method: 'POST'
|
||||
}).done(function() {
|
||||
document.location.reload();
|
||||
});
|
||||
return false;
|
||||
|
|
|
|||
|
|
@ -40,7 +40,7 @@ ${header}
|
|||
<div class="row">
|
||||
<h1 class="col-12">Clients</h1>
|
||||
</div>
|
||||
<div class="row mt-3 client-list">
|
||||
<div class="row client-list">
|
||||
${clients}
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@ from owrx.controllers.admin import AuthorizationMixin
|
|||
from owrx.controllers.template import WebpageController
|
||||
from owrx.breadcrumb import Breadcrumb, BreadcrumbItem, BreadcrumbMixin
|
||||
from owrx.websocket import WebSocketConnection
|
||||
import json
|
||||
import re
|
||||
|
||||
import logging
|
||||
|
|
@ -29,6 +30,22 @@ class ClientController(AuthorizationMixin, WebpageController):
|
|||
<th>Actions</th>
|
||||
</tr>
|
||||
{clients}
|
||||
<tr>
|
||||
<td></td>
|
||||
<td></td>
|
||||
<td colspan="2">
|
||||
ban for
|
||||
<select id="ban-minutes">
|
||||
<option value="15">15 minutes</option>
|
||||
<option value="30">30 minutes</option>
|
||||
<option value="60">1 hour</option>
|
||||
<option value="180">3 hours</option>
|
||||
<option value="360">6 hours</option>
|
||||
<option value="720">12 hours</option>
|
||||
<option value="1440">1 day</option>
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
""".format(
|
||||
clients="".join(ClientController.renderClient(c) for c in WebSocketConnection.listAll())
|
||||
|
|
@ -59,13 +76,22 @@ class ClientController(AuthorizationMixin, WebpageController):
|
|||
""".format(action, c["ip"], action)
|
||||
|
||||
def ban(self):
|
||||
ip = self.request.matches.group(1)
|
||||
logger.info("Banning {0} for {1} minutes".format(ip, 15))
|
||||
WebSocketConnection.banIp(ip, 15)
|
||||
self.send_response("{}", content_type="application/json", code=200)
|
||||
try:
|
||||
data = json.loads(self.get_body().decode("utf-8"))
|
||||
mins = int(data["mins"]) if "mins" in data else 0
|
||||
if "ip" in data and mins > 0:
|
||||
logger.info("Banning {0} for {1} minutes".format(data["ip"], mins))
|
||||
WebSocketConnection.banIp(data["ip"], mins)
|
||||
self.send_response("{}", content_type="application/json", code=200)
|
||||
except:
|
||||
self.send_response("{}", content_type="application/json", code=400)
|
||||
|
||||
def unban(self):
|
||||
ip = self.request.matches.group(1)
|
||||
logger.info("Unbanning {0}".format(ip))
|
||||
WebSocketConnection.unbanIp(ip)
|
||||
self.send_response("{}", content_type="application/json", code=200)
|
||||
try:
|
||||
data = json.loads(self.get_body().decode("utf-8"))
|
||||
if "ip" in data:
|
||||
logger.info("Unbanning {0}".format(data["ip"]))
|
||||
WebSocketConnection.unbanIp(data["ip"])
|
||||
self.send_response("{}", content_type="application/json", code=200)
|
||||
except:
|
||||
self.send_response("{}", content_type="application/json", code=400)
|
||||
|
|
|
|||
|
|
@ -162,8 +162,8 @@ class Router(object):
|
|||
"/settings/decoding", DecodingSettingsController, method="POST", options={"action": "processFormData"}
|
||||
),
|
||||
StaticRoute("/clients", ClientController),
|
||||
RegexRoute("^/ban/(.+)$", ClientController, options={"action": "ban"}),
|
||||
RegexRoute("^/unban/(.+)$", ClientController, options={"action": "unban"}),
|
||||
StaticRoute("/ban", ClientController, method="POST", options={"action": "ban"}),
|
||||
StaticRoute("/unban", ClientController, method="POST", options={"action": "unban"}),
|
||||
StaticRoute("/login", SessionController, options={"action": "loginAction"}),
|
||||
StaticRoute("/login", SessionController, method="POST", options={"action": "processLoginAction"}),
|
||||
StaticRoute("/logout", SessionController, options={"action": "logoutAction"}),
|
||||
|
|
|
|||
Loading…
Reference in New Issue