mirror of
				https://github.com/zulip/zulip.git
				synced 2025-11-03 21:43:21 +00:00 
			
		
		
		
	Use a JSON array for recipients in send_message
(imported from commit e2184f92b708cc2e8ef3e9ae79ee4241c0aa12a1)
This commit is contained in:
		@@ -227,11 +227,10 @@ def process_notice(notice, log):
 | 
			
		||||
        if body.startswith("CC:"):
 | 
			
		||||
            is_huddle = True
 | 
			
		||||
            # Map "CC: sipbtest espuser" => "starnine@mit.edu,espuser@mit.edu"
 | 
			
		||||
            huddle_recipients_list = [to_humbug_username(x.strip()) for x in
 | 
			
		||||
                                      body.split("\n")[0][4:].split()]
 | 
			
		||||
            if notice.sender not in huddle_recipients_list:
 | 
			
		||||
                huddle_recipients_list.append(to_humbug_username(notice.sender))
 | 
			
		||||
            huddle_recipients = ",".join(huddle_recipients_list)
 | 
			
		||||
            huddle_recipients = [to_humbug_username(x.strip()) for x in
 | 
			
		||||
                                 body.split("\n")[0][4:].split()]
 | 
			
		||||
            if notice.sender not in huddle_recipients:
 | 
			
		||||
                huddle_recipients.append(to_humbug_username(notice.sender))
 | 
			
		||||
            body = body.split("\n", 1)[1]
 | 
			
		||||
    if (zephyr_class == "mail" and notice.instance.lower() == "inbox"):
 | 
			
		||||
        is_personal = True
 | 
			
		||||
 
 | 
			
		||||
@@ -310,7 +310,7 @@ def main(args):
 | 
			
		||||
                                  api_key=file(api_key_file).read().strip(),
 | 
			
		||||
                                  verbose=True)
 | 
			
		||||
    client.send_message({'type': "personal",
 | 
			
		||||
                         'recipient': ", ".join(opts.reviewers),
 | 
			
		||||
                         'recipient': [opts.reviewers],
 | 
			
		||||
                         'content': "I just sent you a review request!  Check your email for details."})
 | 
			
		||||
 | 
			
		||||
    if os.environ.get('REVIEW_USE_SENDMAIL', ''):
 | 
			
		||||
 
 | 
			
		||||
@@ -56,6 +56,17 @@ $(function () {
 | 
			
		||||
 | 
			
		||||
    send_options = {
 | 
			
		||||
        dataType: 'json', // This seems to be ignored. We still get back an xhr.
 | 
			
		||||
        beforeSubmit: function (arr, form, options) {
 | 
			
		||||
            $.each(arr, function (idx, elem) {
 | 
			
		||||
                if (elem.name === 'recipient') {
 | 
			
		||||
                    var recipients = elem.value;
 | 
			
		||||
                    // TODO: this should be collapsed with the code in composebox_typeahead.js
 | 
			
		||||
                    recipients = recipients.split(/\s*[,;]\s*/);
 | 
			
		||||
                    elem.value = JSON.stringify(recipients);
 | 
			
		||||
                }
 | 
			
		||||
            });
 | 
			
		||||
            return true;
 | 
			
		||||
        },
 | 
			
		||||
        success: function (resp, statusText, xhr, form) {
 | 
			
		||||
            form.find('textarea').val('');
 | 
			
		||||
            send_status.hide();
 | 
			
		||||
 
 | 
			
		||||
@@ -450,38 +450,41 @@ def same_realm_email(user_profile, email):
 | 
			
		||||
    except:
 | 
			
		||||
        return False
 | 
			
		||||
 | 
			
		||||
# Parse out the sender and huddle/personal recipients
 | 
			
		||||
def parse_named_users(request):
 | 
			
		||||
    sender = {}
 | 
			
		||||
    recipients = set()
 | 
			
		||||
def extract_recipients(request):
 | 
			
		||||
    raw_recipient = request.POST.get("recipient")
 | 
			
		||||
    try:
 | 
			
		||||
        recipients = simplejson.loads(raw_recipient)
 | 
			
		||||
    except simplejson.decoder.JSONDecodeError:
 | 
			
		||||
        recipients = [raw_recipient]
 | 
			
		||||
 | 
			
		||||
    return list(set(recipients))
 | 
			
		||||
 | 
			
		||||
def extract_sender(request):
 | 
			
		||||
    sender = None
 | 
			
		||||
    try:
 | 
			
		||||
        if 'sender' in request.POST:
 | 
			
		||||
            sender = {'email': request.POST["sender"],
 | 
			
		||||
                      'full_name': request.POST["fullname"],
 | 
			
		||||
                      'short_name': request.POST["shortname"]}
 | 
			
		||||
 | 
			
		||||
        if request.POST['type'] == 'personal':
 | 
			
		||||
            if ',' in request.POST['recipient']:
 | 
			
		||||
                # Huddle message
 | 
			
		||||
                for user_email in request.POST["recipient"].split(","):
 | 
			
		||||
                    recipients.add(user_email.strip().lower())
 | 
			
		||||
            else:
 | 
			
		||||
                user_email = request.POST["recipient"].strip().lower()
 | 
			
		||||
                recipients.add(user_email)
 | 
			
		||||
    except:
 | 
			
		||||
        return (False, None, None)
 | 
			
		||||
 | 
			
		||||
    return (True, sender, list(recipients))
 | 
			
		||||
        return None
 | 
			
		||||
    return sender
 | 
			
		||||
 | 
			
		||||
def create_mirrored_message_users(request, user_profile):
 | 
			
		||||
    (valid_input, sender_data, huddle_recipients) = parse_named_users(request)
 | 
			
		||||
    if not valid_input:
 | 
			
		||||
    sender_data = extract_sender(request)
 | 
			
		||||
 | 
			
		||||
    if sender_data is None:
 | 
			
		||||
        return (False, None)
 | 
			
		||||
 | 
			
		||||
    # First, check that the sender is in our realm:
 | 
			
		||||
    if 'email' in sender_data and not same_realm_email(user_profile,
 | 
			
		||||
                                                       sender_data['email']):
 | 
			
		||||
        return (False, None)
 | 
			
		||||
 | 
			
		||||
    if "recipient" not in request.POST:
 | 
			
		||||
        return (False, None)
 | 
			
		||||
    huddle_recipients = extract_recipients(request)
 | 
			
		||||
 | 
			
		||||
    # Then, check that all huddle/personal recipients are in our realm:
 | 
			
		||||
    for recipient in huddle_recipients:
 | 
			
		||||
        if not same_realm_email(user_profile, recipient):
 | 
			
		||||
@@ -571,10 +574,8 @@ def send_message_backend(request, user_profile, sender, message_type_name = POST
 | 
			
		||||
        recipient = Recipient.objects.get(type_id=stream.id, type=Recipient.STREAM)
 | 
			
		||||
    elif message_type_name == 'personal':
 | 
			
		||||
        if "recipient" not in request.POST:
 | 
			
		||||
            return json_error("Missing recipient")
 | 
			
		||||
        (valid_input, _, huddle_recipients) = parse_named_users(request)
 | 
			
		||||
        if not valid_input:
 | 
			
		||||
            return json_error("Unable to parse recipients")
 | 
			
		||||
            return json_error("Missing recipients")
 | 
			
		||||
        huddle_recipients = extract_recipients(request)
 | 
			
		||||
        if client_name == "zephyr_mirror":
 | 
			
		||||
            if user_profile.user.email not in huddle_recipients and not forged:
 | 
			
		||||
                return json_error("User not authorized for this query")
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user