Files
GIA/core/views/signal.py

113 lines
3.5 KiB
Python

from core.views.manage.permissions import SuperUserRequiredMixin
from django.views import View
from django.shortcuts import render
import base64
from core.models import Chat
from mixins.views import ObjectRead, ObjectList
import requests
import orjson
class CustomObjectRead(ObjectRead):
def post(self, request, *args, **kwargs):
self.request = request
return super().get(request, *args, **kwargs)
class Signal(SuperUserRequiredMixin, View):
template_name = "pages/signal.html"
def get(self, request):
return render(request, self.template_name)
class SignalAccounts(SuperUserRequiredMixin, ObjectList):
list_template = "partials/signal-accounts.html"
context_object_name_singular = "Signal Account"
context_object_name = "Signal Accounts"
list_url_name = "signal_accounts"
list_url_args = ["type"]
def get_queryset(self, **kwargs):
# url = signal:8080/v1/accounts
url = f"http://signal:8080/v1/accounts"
response = requests.get(url)
accounts = orjson.loads(response.text)
return accounts
class SignalContactsList(SuperUserRequiredMixin, ObjectList):
list_template = "partials/signal-contacts-list.html"
context_object_name_singular = "Signal Contact"
context_object_name = "Signal Contacts"
list_url_name = "signal_contacts"
list_url_args = ["type", "pk"]
def get_queryset(self, *args, **kwargs):
# url = signal:8080/v1/accounts
# /v1/configuration/{number}/settings
# /v1/identities/{number}
# /v1/contacts/{number}
# response = requests.get(f"http://signal:8080/v1/configuration/{self.kwargs['pk']}/settings")
# config = orjson.loads(response.text)
response = requests.get(f"http://signal:8080/v1/identities/{self.kwargs['pk']}")
identities = orjson.loads(response.text)
response = requests.get(f"http://signal:8080/v1/contacts/{self.kwargs['pk']}")
contacts = orjson.loads(response.text)
# add identities to contacts
for contact in contacts:
for identity in identities:
if contact["number"] == identity["number"]:
contact["identity"] = identity
obj = {
#"identity": identity,
"contacts": contacts,
}
self.extra_context = {"pretty": list(obj.keys())}
return obj
class SignalChatsList(SuperUserRequiredMixin, ObjectList):
list_template = "partials/signal-chats-list.html"
context_object_name_singular = "Signal Chat"
context_object_name = "Signal Chats"
list_url_name = "signal_chats"
list_url_args = ["type", "pk"]
def get_queryset(self, *args, **kwargs):
pk = self.kwargs.get("pk", "")
object_list = Chat.objects.filter(account=pk)
return object_list
class SignalMessagesList(SuperUserRequiredMixin, ObjectList):
...
class SignalAccountAdd(SuperUserRequiredMixin, CustomObjectRead):
detail_template = "partials/signal-account-add.html"
context_object_name_singular = "Add Account"
context_object_name = "Add Account"
detail_url_name = "signal_account_add"
detail_url_args = ["type", "device"]
page_title = None
def get_object(self, **kwargs):
form_args = self.request.POST.dict()
device_name = form_args["device"]
url = f"http://signal:8080/v1/qrcodelink?device_name={device_name}"
response = requests.get(url)
image_bytes = response.content
base64_image = base64.b64encode(image_bytes).decode("utf-8")
return base64_image