mirror of https://github.com/zulip/zulip.git
Use a JSON array for recipients in send_message
(imported from commit e2184f92b708cc2e8ef3e9ae79ee4241c0aa12a1)
This commit is contained in:
parent
b948473a45
commit
33c23c0113
|
@ -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")
|
||||
|
|
Loading…
Reference in New Issue