add Friendrequests
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
j3d1 2023-06-22 11:44:28 +02:00
parent b1a221a8e8
commit b6f1da1580
5 changed files with 407 additions and 4 deletions

View file

@ -102,6 +102,9 @@ class ToolshedUser(AbstractUser):
private_key = SigningKey(self.private_key.encode(), encoder=HexEncoder)
return private_key.sign(message.encode('utf-8'), encoder=HexEncoder).signature.decode('utf-8')
def public_key(self):
return self.public_identity.public_key
class FriendRequestOutgoing(models.Model):
secret = models.CharField(max_length=255)

View file

@ -1,3 +1,5 @@
from nacl.exceptions import BadSignatureError
from nacl.signing import VerifyKey
from rest_framework import authentication
from authentication.models import KnownIdentity, ToolshedUser
@ -48,6 +50,28 @@ def verify_request(request, raw_request_body):
return username, domain, signed_data, signature_bytes_hex
def verify_incoming_friend_request(request, raw_request_body):
try:
username, domain, signed_data, signature_bytes_hex = verify_request(request, raw_request_body)
except ValueError:
return False
try:
befriender = request.data['befriender']
befriender_key = request.data['befriender_key']
except KeyError:
return False
if username + "@" + domain != befriender:
return False
if len(befriender_key) != 64:
return False
verify_key = VerifyKey(bytes.fromhex(befriender_key))
try:
verify_key.verify(signed_data.encode('utf-8'), bytes.fromhex(signature_bytes_hex))
return True
except BadSignatureError:
return False
def authenticate_request_against_known_identities(request, raw_request_body):
try:
username, domain, signed_data, signature_bytes_hex = verify_request(request, raw_request_body)