From 7ad5b52a7152aaf9b390b6048b03546604c6c47a Mon Sep 17 00:00:00 2001 From: Shraddha Agrawal Date: Apr 16 2019 15:32:14 +0000 Subject: Send username of recipient to Fedora Message Bus This commit adds: 1. A new optional field in the message model `recipient_username` to save the username of the recipient if available. 2. A new migration to reflect the above changes in the database. 3. Sends the recipient's username if the email is associated with a FAS account or else logs otherwise. --- diff --git a/happinesspackets/messaging/migrations/0006_message_recipient_username.py b/happinesspackets/messaging/migrations/0006_message_recipient_username.py new file mode 100644 index 0000000..a1181a1 --- /dev/null +++ b/happinesspackets/messaging/migrations/0006_message_recipient_username.py @@ -0,0 +1,17 @@ +# Generated by Django 2.0 on 2019-04-16 12:37 +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('messaging', '0005_auto_20160423_1936'), + ] + + operations = [ + migrations.AddField( + model_name='message', + name='recipient_username', + field=models.CharField(blank=True, max_length=255), + ), + ] diff --git a/happinesspackets/messaging/models.py b/happinesspackets/messaging/models.py index e7e022f..360e68f 100755 --- a/happinesspackets/messaging/models.py +++ b/happinesspackets/messaging/models.py @@ -34,6 +34,7 @@ class Message(TimeStampedModel): sender_email_token = models.CharField(max_length=255, db_index=True) sender_ip = models.GenericIPAddressField() + recipient_username = models.CharField(blank=True, max_length=255) recipient_name = models.CharField(max_length=255) recipient_email = models.EmailField() recipient_email_stripped = models.CharField(max_length=255) diff --git a/happinesspackets/messaging/views.py b/happinesspackets/messaging/views.py index bd02bca..8feca55 100644 --- a/happinesspackets/messaging/views.py +++ b/happinesspackets/messaging/views.py @@ -29,7 +29,7 @@ from happinesspacket_schema.schema import MessageV1 #Include python-fedora from fedora.client.fas2 import AccountSystem -from fedora.client import AuthError +from fedora.client import AuthError, AppError logger = logging.getLogger(__name__) @@ -117,6 +117,25 @@ class MessageSendView(LoginRequiredMixin, FormView): message.sender_name = self.request.user.first_name message.sender_email = self.request.user.email message.save() + if self.request.session.get('fasid',False) and self.request.session.get('recipient_email',False) == message.recipient_email: + message.recipient_username = self.request.session['fasid'] + elif '@fedoraproject.org' in message.recipient_email: + message.recipient_username = message.recipient_email[0:-18] + else: + fas = AccountSystem(username=settings.ADMIN_USERNAME, password=settings.ADMIN_PASSWORD) + try: + query = fas.people_query(constraints={'email': message.recipient_email}, columns=['username']) + except AppError as error: + logger.error(error) + else: + if query: + message.recipient_username = query[0]['username'] + else: + logger.warn("No FAS username associated with the recipient's email ID.") + message.save() + if self.request.session.get('fasid', False): + del self.request.session['fasid'] + del self.request.session['recipient_email'] message.send_sender_confirmation(self.request.is_secure(), self.request.get_host()) return HttpResponseRedirect(reverse('messaging:sender_confirmation_sent')) @@ -140,12 +159,13 @@ class MessageSenderConfirmationView(TemplateView): message.send_to_recipient(self.request.is_secure(), self.request.get_host()) sender_name = self.request.user.username if message.sender_named else "Anonymous" + recipient_name = message.recipient_username if message.recipient_username else message.recipient_name message = MessageV1( topic="happinesspacket.send", body={ "id": message.identifier, "sender": sender_name, - "recipient": message.recipient_name + "recipient": recipient_name } ) try: @@ -226,7 +246,8 @@ class FasidSearchView(): logger.warn("The privacy is set to not view the Name!") u_name = person['human_name'] u_email = person['email'] - + request.session['fasid'] = fasid + request.session['recipient_email'] = u_email context = {'account_exists':account_exists,'email': u_email, 'name': u_name, 'server_error': is_server_error, 'type_of_error': type_of_error} except Exception as ex: type_of_error = ex.__class__.__name__