Как расшифровать содержимое в бэкенде, а затем передать его во фронтенд с другими атрибутами
Я создаю 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 для связи.