Как расшифровать содержимое в бэкенде, а затем передать его во фронтенд с другими атрибутами

Я создаю Django социальную сеть, которая фокусируется на конфиденциальности и анонимности, и я пытаюсь построить E2EE функциональность, но я не могу добавить JavaScript в проект, поэтому расшифровка сообщений, заметок делается локально и хранится во временном методе, как словарь или список, затем передается на фронтенд, моя проблема в том, как передать другие атрибуты на фронтенд? Например, сообщения делаются так:

class Message(models.Model):
    id = models.UUIDField(primary_key = True, default = uuid.uuid4, editable = False)
    msg = models.BinaryField(null=False, blank=False)
    date = models.DateTimeField(default=timezone.now)
    to = models.ForeignKey(User, related_name='received', on_delete=models.CASCADE, blank=False, null=False)
    res = models.CharField(max_length=5, blank=False, null=False)
    author = models.ForeignKey(User, blank=False, null=False, related_name='sent', on_delete=models.CASCADE)

поэтому msg, которое является содержимым каждого сообщения, является зашифрованным полем, и когда загружается представление сообщений, сообщения расшифровываются с помощью закрытого ключа пользователя

class messages(LoginRequiredMixin, View):
    def get(self, request, touser, *args, **kwargs):
        if User.objects.filter(username=touser).exists():
            user = User.objects.get(username=touser)
            msgs = Message.objects.filter(Q(to=request.user)|Q(author=request.user))
            try:
               key = request.COOKIES['key']
            except:
                return redirect('set-key')
            private_key = serialization.load_pem_private_key(request.user.profile.privatekey, password=key.encode('utf-8'),)
            messagescontent = []
            for mess in msgs:
                plaintext = private_key.decrypt(mess.msg, padding.OAEP(mgf=padding.MGF1(algorithm=hashes.SHA256()), algorithm=hashes.SHA256(), label=None))
                messagescontent.append(plaintext.decode())
            context = {'msgs': messagescontent,}
        else:
            messages.warning(request, 'User Doesn\'t Exist')
            return redirect('messages-list')
        return render(request, 'posts/messages.html', context)

Итак, во фронтенде я не могу связать содержание сообщения с его автором, датой, to.

{% extends 'posts/base.html' %}
{% load post_extras %}
{% block title %}Your Messages On Privalise!, Where Everything Is Awesome{% endblock title %}
{% block content %}
<div class="overflow-scroll w-100">
    {% for msg in msgs %}
        {{msg}}
    {% endfor %}
    
</div>
<form method="POST" class="w-100">
    {% csrf_token %}
    <div class="input-group mb-3" style="margin: 0 auto;">
        <input type="text" class="form-control form-control-lg" placeholder="Type Your Message" name="msgcontent">
        <button class="btn btn-primary" type="submit"><i class="fas fa-paper-plane"></i></button>
    </div>
</form>
{% endblock %}

Есть ли решение этой проблемы? Может быть, есть лучшая реализация? спасибо за любую помощь.

Причина, по которой вы не хотите использовать JS в браузере, заключается в том, чтобы запретить выполнение кода, полученного с сервера. Однако, не выполняя выполнение на конечных точках E2EE, вы, очевидно, не сможете шифровать/дешифровать. Так что нет, в этом смысле решения нет - даже в теории.

Более разумно создать приложение для обмена сообщениями с открытым исходным кодом, которое затем сможет использовать Tor для связи.

Вернуться на верх