#219 Send username of recipient to Fedora Message Bus
Merged 5 years ago by jflory7. Opened 5 years ago by shraddhaag.
fedora-commops/ shraddhaag/fedora-happiness-packets send-recipient-username  into  master

@@ -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),

+         ),

+     ]

@@ -34,6 +34,7 @@ 

      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)

@@ -29,7 +29,7 @@ 

  

  #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 @@ 

          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 @@ 

          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 @@ 

                      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__

This commit solves #191. 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. Saves the recipient's username if the email is associated with
    a FAS account or else logs otherwise.
  4. Sends the recipient username on the Bus.

Metadata Update from @jflory7:
- Pull-request tagged with: PASSED, improvement, needs testing, type - backend, type - fedora-messaging, type - summer coding
- Request assigned

5 years ago

Metadata Update from @jflory7:
- Pull-request untagged with: needs testing

5 years ago

Awesome work @shraddhaag – thanks for being thorough with your changes. I tested this one and it works like you described in #191. Merging! :clapper:

Pull-Request has been merged by jflory7

5 years ago