mirror of
				https://github.com/zulip/zulip.git
				synced 2025-11-03 21:43:21 +00:00 
			
		
		
		
	Compare commits
	
		
			7 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					a063dd3b26 | ||
| 
						 | 
					1cdd451d70 | ||
| 
						 | 
					8cc7642cdd | ||
| 
						 | 
					6883c916af | ||
| 
						 | 
					978a568c0f | ||
| 
						 | 
					f6975f9334 | ||
| 
						 | 
					0120ff5612 | 
@@ -4,6 +4,22 @@ All notable changes to the Zulip server are documented in this file.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
### Unreleased
 | 
					### Unreleased
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### 1.4.3 - 2017-01-29
 | 
				
			||||||
 | 
					- CVE-2017-0881: Users could subscribe to invite-only streams.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### 1.4.2 - 2016-09-27
 | 
				
			||||||
 | 
					- Upgraded Django to version 1.8.15 (with the Zulip patches applied),
 | 
				
			||||||
 | 
					  fixing a CSRF vulnerability in Django (see
 | 
				
			||||||
 | 
					  https://www.djangoproject.com/weblog/2016/sep/26/security-releases/),
 | 
				
			||||||
 | 
					  and a number of other Django bugs from past Django stable releases
 | 
				
			||||||
 | 
					  that largely affects parts of Django that are not used by Zulip.
 | 
				
			||||||
 | 
					- Fixed buggy logrotate configuration.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### 1.4.1 - 2016-09-03
 | 
				
			||||||
 | 
					- Fixed settings bug upgrading from pre-1.4.0 releases to 1.4.0.
 | 
				
			||||||
 | 
					- Fixed local file uploads integration being broken for new 1.4.0
 | 
				
			||||||
 | 
					  installations.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
### 1.4 - 2016-08-25
 | 
					### 1.4 - 2016-08-25
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- Migrated Zulip's python dependencies to be installed via a virtualenv,
 | 
					- Migrated Zulip's python dependencies to be installed via a virtualenv,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,7 +1,7 @@
 | 
				
			|||||||
/var/log/zulip/server.log /var/log/zulip/workers.log /var/log/zulip/manage.log {
 | 
					/var/log/zulip/server.log /var/log/zulip/workers.log /var/log/zulip/manage.log {
 | 
				
			||||||
	missingok
 | 
						missingok
 | 
				
			||||||
	rotate 10
 | 
						rotate 10
 | 
				
			||||||
	size 1GB
 | 
						size 1G
 | 
				
			||||||
	compress
 | 
						compress
 | 
				
			||||||
	delaycompress
 | 
						delaycompress
 | 
				
			||||||
	notifempty
 | 
						notifempty
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,6 @@
 | 
				
			|||||||
-r ipython.txt
 | 
					-r ipython.txt
 | 
				
			||||||
# Django itself; we use a slightly patched version
 | 
					# Django itself; we use a slightly patched version
 | 
				
			||||||
git+https://github.com/zulip/truncated-django.git
 | 
					git+https://github.com/zulip/truncated-django-1.8.15.git@cbf4fa3aef1b17f37d75a70e57f9b69a0f99ed5c#egg=Django==1.8.15
 | 
				
			||||||
 | 
					
 | 
				
			||||||
GitPython==0.3.2.1
 | 
					GitPython==0.3.2.1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -42,6 +42,14 @@ if not args.skip_puppet:
 | 
				
			|||||||
    subprocess.check_call(["apt-get", "update"])
 | 
					    subprocess.check_call(["apt-get", "update"])
 | 
				
			||||||
    subprocess.check_call(["apt-get", "-y", "upgrade"])
 | 
					    subprocess.check_call(["apt-get", "-y", "upgrade"])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if not os.path.exists((os.path.join(deploy_path, "zproject/prod_settings"))):
 | 
				
			||||||
 | 
					    subprocess.check_call(["ln", "-nsf", "/etc/zulip/settings.py",
 | 
				
			||||||
 | 
					                           os.path.join(deploy_path, "zproject/prod_settings.py")])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# delete local_settings.py symlink if it exists, as it is now prod_settings.py
 | 
				
			||||||
 | 
					if os.path.exists((os.path.join(deploy_path, "zproject/local_settings.py"))):
 | 
				
			||||||
 | 
					    subprocess.check_call(["rm", os.path.join(deploy_path, "zproject/local_settings.py")])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
subprocess.check_call([os.path.join(deploy_path, "scripts", "lib", "create-production-venv"),
 | 
					subprocess.check_call([os.path.join(deploy_path, "scripts", "lib", "create-production-venv"),
 | 
				
			||||||
                       os.path.join(deploy_path, "zulip-venv")])
 | 
					                       os.path.join(deploy_path, "zulip-venv")])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -24,7 +24,6 @@ Reusing existing connection to localhost:443.
 | 
				
			|||||||
  Content-Type: text/html; charset=utf-8
 | 
					  Content-Type: text/html; charset=utf-8
 | 
				
			||||||
  Transfer-Encoding: chunked
 | 
					  Transfer-Encoding: chunked
 | 
				
			||||||
  Connection: keep-alive
 | 
					  Connection: keep-alive
 | 
				
			||||||
  Cache-Control: max-age=0
 | 
					 | 
				
			||||||
  Strict-Transport-Security: max-age=15768000
 | 
					  Strict-Transport-Security: max-age=15768000
 | 
				
			||||||
Length: unspecified [text/html]
 | 
					Length: unspecified [text/html]
 | 
				
			||||||
Saving to: ‘/tmp/index.html’
 | 
					Saving to: ‘/tmp/index.html’
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1501,6 +1501,29 @@ class SubscriptionAPITest(ZulipTestCase):
 | 
				
			|||||||
        self.assertIn("exists", json)
 | 
					        self.assertIn("exists", json)
 | 
				
			||||||
        self.assertTrue(json["exists"])
 | 
					        self.assertTrue(json["exists"])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def test_existing_subscriptions_autosubscription_private_stream(self):
 | 
				
			||||||
 | 
					        # type: () -> None
 | 
				
			||||||
 | 
					        """Call /json/subscriptions/exist on an existing private stream with
 | 
				
			||||||
 | 
					        autosubscribe should fail.
 | 
				
			||||||
 | 
					        """
 | 
				
			||||||
 | 
					        stream_name = "Saxony"
 | 
				
			||||||
 | 
					        result = self.common_subscribe_to_streams("cordelia@zulip.com", [stream_name],
 | 
				
			||||||
 | 
					                                                  invite_only=True)
 | 
				
			||||||
 | 
					        stream = get_stream(stream_name, self.realm)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        result = self.client_post("/json/subscriptions/exists",
 | 
				
			||||||
 | 
					                                  {"stream": stream_name, "autosubscribe": True})
 | 
				
			||||||
 | 
					        self.assert_json_success(result)
 | 
				
			||||||
 | 
					        json = ujson.loads(result.content)
 | 
				
			||||||
 | 
					        self.assertIn("exists", json)
 | 
				
			||||||
 | 
					        self.assertTrue(json["exists"])
 | 
				
			||||||
 | 
					        self.assertIn("subscribed", json)
 | 
				
			||||||
 | 
					        # Importantly, we are not now subscribed
 | 
				
			||||||
 | 
					        self.assertFalse(json["subscribed"])
 | 
				
			||||||
 | 
					        self.assertEqual(Subscription.objects.filter(
 | 
				
			||||||
 | 
					            recipient__type=Recipient.STREAM,
 | 
				
			||||||
 | 
					            recipient__type_id=stream.id).count(), 1)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def get_subscription(self, user_profile, stream_name):
 | 
					    def get_subscription(self, user_profile, stream_name):
 | 
				
			||||||
        # type: (UserProfile, text_type) -> Subscription
 | 
					        # type: (UserProfile, text_type) -> Subscription
 | 
				
			||||||
        stream = Stream.objects.get(realm=self.realm, name=stream_name)
 | 
					        stream = Stream.objects.get(realm=self.realm, name=stream_name)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -447,7 +447,7 @@ def stream_exists_backend(request, user_profile, stream_name, autosubscribe):
 | 
				
			|||||||
    result = {"exists": bool(stream)}
 | 
					    result = {"exists": bool(stream)}
 | 
				
			||||||
    if stream is not None:
 | 
					    if stream is not None:
 | 
				
			||||||
        recipient = get_recipient(Recipient.STREAM, stream.id)
 | 
					        recipient = get_recipient(Recipient.STREAM, stream.id)
 | 
				
			||||||
        if autosubscribe:
 | 
					        if not stream.invite_only and autosubscribe:
 | 
				
			||||||
            bulk_add_subscriptions([stream], [user_profile])
 | 
					            bulk_add_subscriptions([stream], [user_profile])
 | 
				
			||||||
        result["subscribed"] = Subscription.objects.filter(user_profile=user_profile,
 | 
					        result["subscribed"] = Subscription.objects.filter(user_profile=user_profile,
 | 
				
			||||||
                                                           recipient=recipient,
 | 
					                                                           recipient=recipient,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -155,7 +155,7 @@ INLINE_IMAGE_PREVIEW = True
 | 
				
			|||||||
# https://github.com/zulip/zulip/issues/291 for discussion of a better
 | 
					# https://github.com/zulip/zulip/issues/291 for discussion of a better
 | 
				
			||||||
# solution that won't be automatically reverted by the Zulip upgrade
 | 
					# solution that won't be automatically reverted by the Zulip upgrade
 | 
				
			||||||
# script), and then restart nginx.
 | 
					# script), and then restart nginx.
 | 
				
			||||||
LOCAL_UPLOADS_DIR = "/home/zulip/var/uploads"
 | 
					LOCAL_UPLOADS_DIR = "/home/zulip/uploads"
 | 
				
			||||||
#S3_AUTH_UPLOADS_BUCKET = ""
 | 
					#S3_AUTH_UPLOADS_BUCKET = ""
 | 
				
			||||||
#S3_AVATAR_BUCKET = ""
 | 
					#S3_AVATAR_BUCKET = ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user