Commit Graph

430 Commits

Author SHA1 Message Date
Tim Abbott ba20221df8 Fix whitespace in request_event_queue.
(imported from commit ee9c63a25db765a4b879e6047a27027ae69ebacb)
2013-07-30 17:59:46 -04:00
Scott Feeney ec58dcfa4e Add missing newline to unminified stacktrace output
(imported from commit 6abc3d1aced29de546a890b40fdbe486c6e80aed)
2013-07-30 17:59:10 -04:00
Scott Feeney c5045b64f2 Generate API keys in a more secure way
The documentation for the Python `random` module explains that it "is
completely unsuitable for cryptographic purposes." This new way of
generating API keys replaces use of the random module with
`os.urandom()`, which is intended to be suitable for such uses. As a
bonus, the code is simpler and clearer.

(imported from commit cc3697a5048f2da53f0fce6689167f9d1cbb6466)
2013-07-30 13:54:50 -04:00
Scott Feeney 85ce86c4fd "Already using Humbug" -> "Already using Zulip"
(imported from commit e05812ed3bae64f9daa7d60a7d5b2404edb306fc)
2013-07-29 14:53:16 -04:00
Tim Abbott 3bba0cc927 Move zephyr/static to just static.
It's not really a part of the server (aka the rest of zephyr/).

(imported from commit 27f6b6b064938ad927075a68d873e4b68710d279)
2013-07-29 12:11:26 -04:00
Zev Benjamin f7b7f074e9 Add tool for migrating users from Gravatar to user avatars
(imported from commit e3fbeb74489952f00f9063303f4026ee6a7148fc)
2013-07-26 07:39:16 -04:00
Tim Abbott 438739f6cc More miscellaneous humbughq.com=>zulip.com updates.
(imported from commit 9a3dbc4268f251c2c0b20d8b6a7e1dc672f1b385)
2013-07-25 17:27:45 -04:00
Tim Abbott 3a1abc3ab0 Rename humbughq.com realm to zulip.com.
(imported from commit 6039719271be1e80fa7f80b9be851c8db7159f5e)
2013-07-25 17:19:18 -04:00
Tim Abbott e085a804b9 [manual] Rename new user bot to zulip.com domain.
Just before this is pushed to prod, we need to rename the Humbug new
user bot in the database using:

./manage.py change_user_email humbug+signups@humbughq.com new-user-bot@zulip.com
/etc/init.d/memcached restart

No action is required on pushing this to staging, but in between when
this is pushed to staging and when it is pushed to prod (and that
transition performed), signup reporting to humbug will not work on
staging.

(imported from commit af2cd007b41ea885491f383442f211e8609fe5f9)
2013-07-25 17:16:54 -04:00
Tim Abbott b17741a5c4 [manual] Rename error bot to zulip.com domain.
Just before this is pushed to prod, we need to rename the Humbug error
bot in the database using:

./manage.py change_user_email humbug+errors@humbughq.com error-bot@zulip.com
/etc/init.d/memcached restart

No action is required on pushing this to staging, but in between when
this is pushed to staging and when it is pushed to prod (and that
transition performed), error reporting to humbug will not work on
staging.

(imported from commit 93044bb01797c981067f359676826d4a5791e235)
2013-07-25 17:16:54 -04:00
Steve Howell c51056ff8e Turn off diff highlighting everywhere
(imported from commit b1ac105d35e6b4b544b708509b4ae67573b47da8)
2013-07-25 15:23:24 -04:00
Steve Howell 6a5cc006cd Extract random_api_key()
(imported from commit 4e038aa0aab068d29f0ec43c8cc8428b2adf2b13)
2013-07-25 12:27:21 -04:00
Tim Abbott 4e1434b28d Use update_fields more consistently when modifying model objects.
(imported from commit a3f0c308b621b5ff85c55654f187e25749192b19)
2013-07-24 17:04:39 -04:00
Scott Feeney c234190bc0 Make stack trace annotation work
The code now unminifies all calls in the stack, including those outside
of app.js.

This requires the Python package sourcemap, recently added as a
dependency.

(imported from commit 550c73ad5bfe78a2c7169c11da0c95cbaac238d7)
2013-07-23 16:34:26 -04:00
Tim Abbott 776f46edd7 Send a Tornado notification when activating users.
(imported from commit d51655979b3fb3929b3b4cb5e616c93016e7dc83)
2013-07-22 17:24:48 -04:00
Leo Franchi 8b90d4bb8a Actually use our tz-aware datetime object when changing awareness
(imported from commit e0f85534fa12a712dd8c61b66abd687d36ba9088)
2013-07-22 10:52:37 -04:00
Tim Abbott 18f94de07f Use standard functions for parsing/validating email addresses.
This adds two new functions for parsing out the domain and username
from an email address, and switches our backend to use them and
django.core.validators.valid_email() rather than custom parsing and
raw email.split("@").

(imported from commit 3d6e997d66908811eccb5f82f2f7fe349b40f238)
2013-07-18 13:58:16 -04:00
Tim Abbott 4ffdcedae0 If multiple users match a mention, prefer the first one created.
(imported from commit e5e67c6f78a13432b19cff07bc04bddb3bd539e7)
2013-07-17 14:26:39 -04:00
Tim Abbott eecf96b520 Don't consider deactivated users for @-mentions.
(imported from commit 5e85f8c897e2ea9a3c0c37c3199666b490d6e07a)
2013-07-17 14:26:39 -04:00
Jessica McKellar dac5a46fa4 Rename user-visible uses of "subject" to "topic".
(imported from commit 19e08a13624686da8703fcb8b5eefe2e29edf64b)
2013-07-17 12:04:45 -04:00
Tim Abbott 56810391de Sync subscription property changes to client.
(imported from commit c0504840ea0f304da67d5e4561ab30465d4567a3)
2013-07-17 10:36:57 -04:00
Tim Abbott 8755fc05ca Move subscription_property state change code to actions.py.
(imported from commit 57056af4e4fe021fafa1d0d511a9c551cd53c74d)
2013-07-17 10:36:57 -04:00
Tim Abbott 907bb154b1 Support changing one's name without a reload.
(imported from commit 4e7aea017f016494e2674f11b96681e098816f2d)
2013-07-17 10:36:57 -04:00
Jessica McKellar 4d19c784d8 Switch from the @humbughq.com to @zulip.com addresses users can contact.
In particular support@ and jobs@.

(imported from commit 8051ae5628b7378cde49b160d26b704e7e14bb24)
2013-07-15 17:49:00 -04:00
Jessica McKellar 116ad8da5f models, forms, actions: Switch from Humbug to Zulip in user-visible text.
(imported from commit 97966e5f118276a00d116bba0b52616bbd83cb72)
2013-07-15 17:38:18 -04:00
Kevin Mehall 9d8765ac24 Don't compile an unused copy of the find_mentions regex.
(imported from commit 67e4cd89a5ed038e0e5a7459d5f88aa8d04b21d7)
2013-07-15 13:26:44 -04:00
Kevin Mehall ce131a7d69 Make the @-mention regex not match in the middle of the word.
Fixes issues with e.g. foo@hamlet.com (where hamlet is a user)

The \b was ineffective because @ made it always on a word boundary.
Instead, use the negative lookbehind trick from the URL regex.

(imported from commit fdca9bd686e4f8747e67b412cba1fa7c5c9391aa)
2013-07-15 13:26:44 -04:00
Scott Feeney 8fb286ae9a On Humbughq realm, match just "#1324" as Trac link
(imported from commit 1dd243586e1a6fadff1be09a6b727a46d655e635)
2013-07-15 13:15:56 -04:00
Scott Feeney b76b06591b Match patterns that don't start on a word boundary
This allows us to e.g. match "#1329" in "Bug #1329", even though the
place between a space and a # is not a word boundary.

Also this commit factors out some repeated code used for both in-message
and subject filters.

(imported from commit 5f7d80a58e76e51ea07fed050c88c5251faaaacd)
2013-07-15 13:15:56 -04:00
Tim Abbott 5fc6fb5896 Include a link button after the subject when it matches a realm filter.
This way if you refer to "trac #253" in the subject, it's super
convenient to get from your recipient bar to the ticket.

A note on performance: this part of rendering for 1000 messages takes
about 3.5ms for messages with 1 match; this is small compared to the
overall time for to_dict_uncached for that many message objects, so I
think this is OK for now.

(imported from commit 5bdc2b8415d7599d59eb554739f545c485b78d5a)
2013-07-15 10:41:13 -04:00
Leo Franchi dfeb40db61 Fix typo to fetch user email from user_profile object
(imported from commit 3d6294e85dc56dae00e624e00d8add158ef6aabf)
2013-07-14 18:46:40 -04:00
Leo Franchi bd837936ce Refactor json_invite_users into do_invite_users
(imported from commit 053274a1fcfbb93fba27d136b246b65b3491f549)
2013-07-12 13:07:02 -04:00
Scott Feeney ffa8541818 Remove vestigial parts of old minify code
(imported from commit 692e292528a1697687f1b3024c58371b2cf9b5c9)
2013-07-12 11:59:11 -04:00
Scott Feeney 2c33320746 Reuse minified JS from previous deploys
This is a big change affecting lots of areas:

* Pipeline no longer deals with JS (though it still minifies CSS)
* A new script, tools/minify-js (called from update-prod-static),
  minifies JavaScripts
* A command-line argument --prev-deploy, if passed to minify-js or
  update-prod-static, is used to copy minified JS from a previous
  deploy (i.e., a previous git checkout), if the source files have
  not changed
* update-deployment passes --prev-deploy
* Scripts are now included with the minified_js template tag, rather
  than Pipeline's compressed_js

Also, as a side benefit of this commit, our Handlebars templates will
no longer be copied into prod-static/ and accessible in production.

Unminification is probably broken, but, per Zev and Trac ticket #1377,
it wasn't working perfectly before this change either.

(Based on code review, this commit has been revised to:
 * Warn if git returns an error in minify-js
 * Add missing output redirects in update-prod-static
 * Use DEPLOY_ROOT instead of manually constructing that directory
 * Use old style formatting)

(imported from commit e67722ea252756db8519d5c0bd6a421d59374185)
2013-07-12 11:59:04 -04:00
Kevin Mehall 77aeee118b Check that message subject and content are nonempty on edit.
Fixes: Trac #1455, #1448
See also: Trac #213

(imported from commit 0d839da13ac22e1648b0d2a7cf09d1c1218b98ae)
2013-07-12 11:35:09 -04:00
Leo Franchi eb0f8bda09 Ensure the last_reminder datatetime is tz-aware
I don't fully understand the need for this, but I have seen some
tracebacks on app that complain:

File "/home/humbug/humbug-deployments/2013-07-11-19-28-10/zephyr/lib/actions.py", line 1289, in handle_missedmessage_emails
    timestamp - user_profile.last_reminder < waitperiod):
TypeError: can't subtract offset-naive and offset-aware datetimes

Since timestamp in this case comes from timestamp_to_datetime
that explicitly sets the tzinfo, we know it's tz-aware. The only
other possibility is that user_profile.last_reminder is **not**
tz-aware, though I am not sure why that would be the case.

(imported from commit 67e33f4510e91fa9de504f0c610515581312c98b)
2013-07-12 09:57:09 -04:00
Kevin Mehall 219a72b3a0 bugdown linkify: Improve handling of email addresses.
* Allow email addresses surrounded by <>
  * Reject things that look like email addresses that have a path after them

This requires adding a new branch to the regex specifically for email addresses.

  * Fix comment whitespace

(imported from commit 0383cd4067ae9ee31f3802e6777a200ba1cbccd6)
2013-07-11 15:00:10 -04:00
Kevin Mehall 67f908e08c bugdown linkify: Fix links that have symbols directly before them.
Be more restrictive on what characters can be part of a URL and what
characters can precede a URL to prevent linkifying other strings that
come just before a valid URL. Allow : and , before a URL.

(imported from commit f072980b39ff652edf20de0585f256f072d04e88)
2013-07-11 15:00:10 -04:00
Leo Franchi 2d4ba0ed4b Set Reply-To to noreply@ explicitly in all required cases
It seems that even though we set the From to be <noreply@humbughq.com>
it's possible that when sending mail via Google it automatically sets
the From: field to be humbug@humbughq.com. Here we set Reply-To to noreply@
in all cases explicitly in order to avoid having replies sent to our
inboxes.

(imported from commit 5fa643be2b78fd632e310836bf1be862d6f1d333)
2013-07-10 17:38:37 -04:00
Luke Faraone 29cb701444 Allow deactivations to cascade to bots
(imported from commit 1c42013dab02a8f264e814fef63c84cd03102458)
2013-07-08 14:30:20 -04:00
Luke Faraone 37edb61b67 Don't set an unusable password during deactivation.
This would have made reactivations hard, and doesn't really buy us much
additional security.

During deactivation, all a user's current sessions are deactivated and
they are marked as not active. This prevents them from logging in via
the web UI, and makes their API key unusable.

Randomizing their password is probably gratuitious, especially as we
start to allow authorized end-users to deactivate others.

(imported from commit c63d23816da0452a1df821f2fa6c1db2761733da)
2013-07-08 14:00:19 -04:00
Luke Faraone 573bb8e5fd Add populate_db support for deactivating users.
Prior to this commit, populate_db would crash if you had ever deactivated
a user in your development instance's message log.

(imported from commit 227b2c0226a46ef5680443d3dbf62a13ce961e64)
2013-07-08 14:00:19 -04:00
Steve Howell 71dec63ad1 Fix regression with JS tests only working the first time.
The JS tests would fail on the second run due to memcache having
dirty data.  This change sets a new KEY_PREFIX whenever you launch
a server in test mode.

(imported from commit 4d41e6b79ab3bb7cb4c96b37050f0b1c9abc6b5e)
2013-07-03 10:43:24 -04:00
Jessica McKellar dbbc555a52 Remove now-unused do_finish_tutorial.
(imported from commit 6511d086376d1e81218cd31268f39e2145cb4d48)
2013-07-02 18:26:17 -04:00
Kevin Mehall dce1f7f729 Parse @-mentions in bugdown and style them.
* This makes bugdown.convert take a `message` parameter. Properties
    for parsed mentions are added to the message object by the `Pattern`
    for use in do_send_messages.

  * Refactor repeated markdown rendering code into `Message` model methods.

(imported from commit 4f0ed5570104c0210f984b6de21e9048e2b53fa0)
2013-07-02 18:20:26 -04:00
Steve Howell 9e64750083 Use memcache in the test suite.
This uses a new configuration that enables memcache, but we have
to be careful to bounce KEY_PREFIX on every new test, since data
gets rolled back in the databases between tests, but not in
memcached.  We had to break up one test to work around UserProfile
objects actually being cached.

(imported from commit f201cf9cd9e0e4c61d3c384fa8d2bbd5134161e8)
2013-07-02 16:50:10 -04:00
Tim Abbott f473cb5fbe Use bulk operations in notify_subscription_{added_removed}.
After fixing the high numbers of database queries earlier in this
branch, I found that sending 500 RabbitMQ messages for a bulk change
in subscriptions was consuming more than half the time for these (and
then we'd end up with 500 events in a queue).  To handle this, we
create a "user X subscribed to these N streams" event, rather than
sending one event for each individual subscription.

(imported from commit 44a34a9fab9b67e9f0da6fee53335d8c5030392b)
2013-07-02 10:50:29 -04:00
Tim Abbott 74fd508b2f Remove subscriptions using bulk queries.
This improves the performance of unsubscribing to N streams by more
than a factor of 10 for large N.

(imported from commit a529e6d3ac4452f49c2294908d275280019bbd05)
2013-07-02 10:50:29 -04:00
Tim Abbott 7f3fded612 Add default stream subscriptions using bulk queries.
(imported from commit f6d7415269cc74836c1c331741665b01cb1090cd)
2013-07-02 10:50:29 -04:00
Tim Abbott a66bb508bb Use bulk queries for adding many subscriptions to a single user.
Previously we only used bulk queries when adding many users to a
single stream, resulting in very slow performance when subscribing
users to large numbers of streams (as happens when setting up a new
MIT realm user).

(imported from commit 849fa7b2a1a146c0a9adc1c727c20c9fbfb7b425)
2013-07-02 10:50:28 -04:00