Implement joining and parting channels

This commit is contained in:
2022-07-27 20:53:41 +01:00
parent 3d91c4164e
commit b401fe939f
9 changed files with 262 additions and 36 deletions

View File

@@ -3,14 +3,7 @@ from django.views import View
from rest_framework.parsers import FormParser
from rest_framework.views import APIView
from core.lib.manage.threshold import (
edit_irc_network,
get_irc_channels,
get_irc_network,
get_irc_networks,
get_irc_relays,
get_irc_stats,
)
from core.lib.manage import threshold
from core.views.manage.permissions import SuperUserRequiredMixin
@@ -18,7 +11,7 @@ class ThresholdIRCStats(SuperUserRequiredMixin, View):
stats_template = "manage/threshold/irc/overview/stats.html"
def post(self, request):
stats = get_irc_stats()
stats = threshold.get_irc_stats()
context = {"stats": stats}
return render(request, self.stats_template, context)
@@ -27,7 +20,7 @@ class ThresholdIRCNetworks(SuperUserRequiredMixin, View):
template_name = "manage/threshold/irc/overview/networks.html"
def post(self, request):
networks = get_irc_networks()
networks = threshold.get_irc_networks()
context = {"networks": networks}
return render(request, self.template_name, context)
@@ -36,7 +29,7 @@ class ThresholdIRCNetworkInfo(SuperUserRequiredMixin, View):
template_name = "manage/threshold/irc/network/info.html"
def post(self, request, net):
network = get_irc_network(net)
network = threshold.get_irc_network(net)
context = {"network": network}
return render(request, self.template_name, context)
@@ -49,7 +42,7 @@ class ThresholdIRCNetworkInfoEdit(SuperUserRequiredMixin, APIView):
"""
Return the form to edit a network.
"""
network = get_irc_network(net)
network = threshold.get_irc_network(net)
editable = ["auth", "host", "last", "port", "security"]
context = {
"net": net,
@@ -63,7 +56,7 @@ class ThresholdIRCNetworkInfoEdit(SuperUserRequiredMixin, APIView):
Returns the info pane with a message about the success.
"""
template_name = "manage/threshold/irc/network/info.html"
edited = edit_irc_network(net, request.data)
edited = threshold.edit_irc_network(net, request.data)
if edited["success"]:
message = "Successfully edited!"
message_class = "success"
@@ -73,7 +66,7 @@ class ThresholdIRCNetworkInfoEdit(SuperUserRequiredMixin, APIView):
else:
message = "Error editing network"
message_class = "danger"
network = get_irc_network(net)
network = threshold.get_irc_network(net)
context = {"network": network, "message": message, "class": message_class}
return render(request, template_name, context)
@@ -81,16 +74,105 @@ class ThresholdIRCNetworkInfoEdit(SuperUserRequiredMixin, APIView):
class ThresholdIRCNetworkRelays(SuperUserRequiredMixin, View):
template_name = "manage/threshold/irc/network/relays.html"
def post(self, request, net):
relays = get_irc_relays(net)
def get(self, request, net):
relays = threshold.get_irc_relays(net)
context = {"relays": relays["relays"]}
return render(request, self.template_name, context)
class ThresholdIRCNetworkChannels(SuperUserRequiredMixin, View):
class ThresholdIRCNetworkRelayStatus(SuperUserRequiredMixin, APIView):
template_name = "manage/threshold/irc/network/relays.html"
def get(self, request, net, num, status):
"""
Change the status of a relay.
"""
edited = threshold.change_network_status(net, num, status)
if edited["success"]:
message = "Successfully completed!"
message_class = "success"
else:
if "reason" in edited:
message = f"Error updating status: {edited['reason']}"
else:
message = "Error updating status"
message_class = "danger"
relays = threshold.get_irc_relays(net)
context = {
"relays": relays["relays"],
"message": message,
"class": message_class,
}
return render(request, self.template_name, context)
class ThresholdIRCNetworkChannels(SuperUserRequiredMixin, APIView):
"""
List the channels a network is on.
Allow parting and joining new ones.
Re-render the same template if we join/part to make it simple.
"""
template_name = "manage/threshold/irc/network/channels.html"
parser_classes = [FormParser]
def post(self, request, net):
channels = get_irc_channels(net)
context = {"channels": channels["channels"]}
"""
Get list of channels for network.
:param net: network name
"""
channels = threshold.get_irc_channels(net)
context = {"net": net, "channels": channels["channels"]}
return render(request, self.template_name, context)
def delete(self, request, net, channel):
"""
Part a channel.
:param net: network name
:param channel: channel name
"""
parted = threshold.part_channel(net, channel)
if parted:
message = f"Requested part on relays: {', '.join(parted['relays'])}"
message_class = "success"
else:
message = parted["reason"]
message_class = "danger"
channels = threshold.get_irc_channels(net)
context = {
"net": net,
"channels": channels["channels"],
"message": message,
"class": message_class,
}
return render(request, self.template_name, context)
def put(self, request, net):
"""
Join a channel.
:param net: network name
"""
if "channel" not in request.data:
message = "No channel specified"
message_class = "danger"
else:
channel = request.data["channel"]
print("CHANNEL", channel)
joined = threshold.join_channel(net, channel)
print("JOINED", joined)
if joined:
message = f"Requested join on relay: {joined['relays']}"
message_class = "success"
else:
message = joined["reason"]
message_class = "danger"
channels = threshold.get_irc_channels(net)
context = {
"net": net,
"channels": channels["channels"],
"message": message,
"class": message_class,
}
return render(request, self.template_name, context)

View File

@@ -1,14 +1,14 @@
import json
from django.conf import settings
from django.contrib.auth.mixins import LoginRequiredMixin
from django.http import HttpResponse, HttpResponseForbidden, JsonResponse
from django.shortcuts import render
from django.views import View
from django.http import HttpResponse, HttpResponseForbidden, JsonResponse
from rest_framework.parsers import FormParser
from rest_framework.views import APIView
import json
from core.lib.opensearch import query_results
from core.lib.threshold import (
annotate_num_chans,
annotate_num_users,
@@ -16,6 +16,7 @@ from core.lib.threshold import (
get_users,
)
class Drilldown(LoginRequiredMixin, View):
template_name = "ui/drilldown/drilldown.html"
plan_name = "drilldown"
@@ -28,6 +29,7 @@ class Drilldown(LoginRequiredMixin, View):
}
return render(request, self.template_name, context)
class DrilldownSearch(LoginRequiredMixin, View):
# parser_classes = [JSONParser]
template_name = "ui/drilldown/results.html"

View File

@@ -1,10 +1,12 @@
from ast import literal_eval
from django.contrib.auth.mixins import LoginRequiredMixin
from django.http import HttpResponse, HttpResponseForbidden, JsonResponse
from django.shortcuts import render
from django.views import View
from rest_framework.parsers import FormParser
from django.http import HttpResponse, HttpResponseForbidden, JsonResponse
from rest_framework.views import APIView
from core.lib.meta import get_meta
from core.lib.nicktrace import get_nicks
from core.lib.opensearch import query_single_result
@@ -15,7 +17,6 @@ from core.lib.threshold import (
get_chans,
get_users,
)
from ast import literal_eval
class Insights(LoginRequiredMixin, View):
@@ -27,6 +28,7 @@ class Insights(LoginRequiredMixin, View):
return render(request, "denied.html")
return render(request, self.template_name)
class InsightsSearch(LoginRequiredMixin, View):
# parser_classes = [JSONParser]
template_name = "ui/insights/info.html"