mirror of
				https://github.com/zulip/zulip.git
				synced 2025-10-31 03:53:50 +00:00 
			
		
		
		
	zilencer: Add endpoint for deactivating remote server registration.
This commit is contained in:
		| @@ -76,6 +76,7 @@ from zerver.models import ( | |||||||
|     get_realm, |     get_realm, | ||||||
|     get_stream, |     get_stream, | ||||||
| ) | ) | ||||||
|  | from zilencer.models import RemoteZulipServerAuditLog | ||||||
|  |  | ||||||
| if settings.ZILENCER_ENABLED: | if settings.ZILENCER_ENABLED: | ||||||
|     from zilencer.models import ( |     from zilencer.models import ( | ||||||
| @@ -2485,6 +2486,44 @@ class TestPushNotificationsContent(ZulipTestCase): | |||||||
|  |  | ||||||
| @skipUnless(settings.ZILENCER_ENABLED, "requires zilencer") | @skipUnless(settings.ZILENCER_ENABLED, "requires zilencer") | ||||||
| class PushBouncerSignupTest(ZulipTestCase): | class PushBouncerSignupTest(ZulipTestCase): | ||||||
|  |     def test_deactivate_remote_server(self) -> None: | ||||||
|  |         zulip_org_id = str(uuid.uuid4()) | ||||||
|  |         zulip_org_key = get_random_string(64) | ||||||
|  |         request = dict( | ||||||
|  |             zulip_org_id=zulip_org_id, | ||||||
|  |             zulip_org_key=zulip_org_key, | ||||||
|  |             hostname="example.com", | ||||||
|  |             contact_email="server-admin@example.com", | ||||||
|  |         ) | ||||||
|  |         result = self.client_post("/api/v1/remotes/server/register", request) | ||||||
|  |         self.assert_json_success(result) | ||||||
|  |         server = RemoteZulipServer.objects.get(uuid=zulip_org_id) | ||||||
|  |         self.assertEqual(server.hostname, "example.com") | ||||||
|  |         self.assertEqual(server.contact_email, "server-admin@example.com") | ||||||
|  |  | ||||||
|  |         request = dict(zulip_org_id=zulip_org_id, zulip_org_key=zulip_org_key) | ||||||
|  |         result = self.uuid_post( | ||||||
|  |             zulip_org_id, "/api/v1/remotes/server/deactivate", request, subdomain="" | ||||||
|  |         ) | ||||||
|  |         self.assert_json_success(result) | ||||||
|  |  | ||||||
|  |         server = RemoteZulipServer.objects.get(uuid=zulip_org_id) | ||||||
|  |         remote_realm_audit_log = RemoteZulipServerAuditLog.objects.filter( | ||||||
|  |             event_type=RealmAuditLog.REMOTE_SERVER_DEACTIVATED | ||||||
|  |         ).last() | ||||||
|  |         assert remote_realm_audit_log is not None | ||||||
|  |         self.assertTrue(server.deactivated) | ||||||
|  |  | ||||||
|  |         # Now test that trying to deactivate again reports the right error. | ||||||
|  |         result = self.uuid_post( | ||||||
|  |             zulip_org_id, "/api/v1/remotes/server/deactivate", request, subdomain="" | ||||||
|  |         ) | ||||||
|  |         self.assert_json_error( | ||||||
|  |             result, | ||||||
|  |             "The mobile push notification service registration for your server has been deactivated", | ||||||
|  |             status_code=401, | ||||||
|  |         ) | ||||||
|  |  | ||||||
|     def test_push_signup_invalid_host(self) -> None: |     def test_push_signup_invalid_host(self) -> None: | ||||||
|         zulip_org_id = str(uuid.uuid4()) |         zulip_org_id = str(uuid.uuid4()) | ||||||
|         zulip_org_key = get_random_string(64) |         zulip_org_key = get_random_string(64) | ||||||
|   | |||||||
| @@ -5,6 +5,7 @@ from django.urls import path | |||||||
|  |  | ||||||
| from zerver.lib.rest import rest_path | from zerver.lib.rest import rest_path | ||||||
| from zilencer.views import ( | from zilencer.views import ( | ||||||
|  |     deactivate_remote_server, | ||||||
|     register_remote_push_device, |     register_remote_push_device, | ||||||
|     register_remote_server, |     register_remote_server, | ||||||
|     remote_server_check_analytics, |     remote_server_check_analytics, | ||||||
| @@ -24,6 +25,7 @@ v1_api_and_json_patterns = [ | |||||||
|     rest_path("remotes/push/notify", POST=remote_server_notify_push), |     rest_path("remotes/push/notify", POST=remote_server_notify_push), | ||||||
|     # Push signup doesn't use the REST API, since there's no auth. |     # Push signup doesn't use the REST API, since there's no auth. | ||||||
|     path("remotes/server/register", register_remote_server), |     path("remotes/server/register", register_remote_server), | ||||||
|  |     rest_path("remotes/server/deactivate", POST=deactivate_remote_server), | ||||||
|     # For receiving table data used in analytics and billing |     # For receiving table data used in analytics and billing | ||||||
|     rest_path("remotes/server/analytics", POST=remote_server_post_analytics), |     rest_path("remotes/server/analytics", POST=remote_server_post_analytics), | ||||||
|     rest_path("remotes/server/analytics/status", GET=remote_server_check_analytics), |     rest_path("remotes/server/analytics/status", GET=remote_server_check_analytics), | ||||||
|   | |||||||
| @@ -13,6 +13,7 @@ from django.utils.translation import gettext as err_ | |||||||
| from django.views.decorators.csrf import csrf_exempt | from django.views.decorators.csrf import csrf_exempt | ||||||
|  |  | ||||||
| from analytics.lib.counts import COUNT_STATS | from analytics.lib.counts import COUNT_STATS | ||||||
|  | from corporate.lib.stripe import do_deactivate_remote_server | ||||||
| from zerver.decorator import InvalidZulipServerKeyError, require_post | from zerver.decorator import InvalidZulipServerKeyError, require_post | ||||||
| from zerver.lib.exceptions import JsonableError | from zerver.lib.exceptions import JsonableError | ||||||
| from zerver.lib.push_notifications import ( | from zerver.lib.push_notifications import ( | ||||||
| @@ -75,6 +76,17 @@ def validate_bouncer_token_request( | |||||||
|     return server |     return server | ||||||
|  |  | ||||||
|  |  | ||||||
|  | @csrf_exempt | ||||||
|  | @require_post | ||||||
|  | @has_request_variables | ||||||
|  | def deactivate_remote_server( | ||||||
|  |     request: HttpRequest, | ||||||
|  |     remote_server: RemoteZulipServer, | ||||||
|  | ) -> HttpResponse: | ||||||
|  |     do_deactivate_remote_server(remote_server) | ||||||
|  |     return json_success() | ||||||
|  |  | ||||||
|  |  | ||||||
| @csrf_exempt | @csrf_exempt | ||||||
| @require_post | @require_post | ||||||
| @has_request_variables | @has_request_variables | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user