Factor out _configure_named_resource
This was a bit of a code vomit, so let's factor it out to preserve some sanitypull/2625/head
							parent
							
								
									b19d9e2174
								
							
						
					
					
						commit
						6650a07ede
					
				| 
						 | 
				
			
			@ -107,52 +107,9 @@ class SynapseHomeServer(HomeServer):
 | 
			
		|||
        resources = {}
 | 
			
		||||
        for res in listener_config["resources"]:
 | 
			
		||||
            for name in res["names"]:
 | 
			
		||||
                if name == "client":
 | 
			
		||||
                    client_resource = ClientRestResource(self)
 | 
			
		||||
                    if res["compress"]:
 | 
			
		||||
                        client_resource = gz_wrap(client_resource)
 | 
			
		||||
 | 
			
		||||
                    resources.update({
 | 
			
		||||
                        "/_matrix/client/api/v1": client_resource,
 | 
			
		||||
                        "/_matrix/client/r0": client_resource,
 | 
			
		||||
                        "/_matrix/client/unstable": client_resource,
 | 
			
		||||
                        "/_matrix/client/v2_alpha": client_resource,
 | 
			
		||||
                        "/_matrix/client/versions": client_resource,
 | 
			
		||||
                    })
 | 
			
		||||
 | 
			
		||||
                if name == "federation":
 | 
			
		||||
                    resources.update({
 | 
			
		||||
                        FEDERATION_PREFIX: TransportLayerServer(self),
 | 
			
		||||
                    })
 | 
			
		||||
 | 
			
		||||
                if name in ["static", "client"]:
 | 
			
		||||
                    resources.update({
 | 
			
		||||
                        STATIC_PREFIX: File(
 | 
			
		||||
                            os.path.join(os.path.dirname(synapse.__file__), "static")
 | 
			
		||||
                        ),
 | 
			
		||||
                    })
 | 
			
		||||
 | 
			
		||||
                if name in ["media", "federation", "client"]:
 | 
			
		||||
                    media_repo = MediaRepositoryResource(self)
 | 
			
		||||
                    resources.update({
 | 
			
		||||
                        MEDIA_PREFIX: media_repo,
 | 
			
		||||
                        LEGACY_MEDIA_PREFIX: media_repo,
 | 
			
		||||
                        CONTENT_REPO_PREFIX: ContentRepoResource(
 | 
			
		||||
                            self, self.config.uploads_path
 | 
			
		||||
                        ),
 | 
			
		||||
                    })
 | 
			
		||||
 | 
			
		||||
                if name in ["keys", "federation"]:
 | 
			
		||||
                    resources.update({
 | 
			
		||||
                        SERVER_KEY_PREFIX: LocalKey(self),
 | 
			
		||||
                        SERVER_KEY_V2_PREFIX: KeyApiV2Resource(self),
 | 
			
		||||
                    })
 | 
			
		||||
 | 
			
		||||
                if name == "webclient":
 | 
			
		||||
                    resources[WEB_CLIENT_PREFIX] = build_resource_for_web_client(self)
 | 
			
		||||
 | 
			
		||||
                if name == "metrics" and self.get_config().enable_metrics:
 | 
			
		||||
                    resources[METRICS_PREFIX] = MetricsResource(self)
 | 
			
		||||
                resources.update(self._configure_named_resource(
 | 
			
		||||
                    name, res.get("compress", False),
 | 
			
		||||
                ))
 | 
			
		||||
 | 
			
		||||
        if WEB_CLIENT_PREFIX in resources:
 | 
			
		||||
            root_resource = RootRedirect(WEB_CLIENT_PREFIX)
 | 
			
		||||
| 
						 | 
				
			
			@ -188,6 +145,67 @@ class SynapseHomeServer(HomeServer):
 | 
			
		|||
                )
 | 
			
		||||
        logger.info("Synapse now listening on port %d", port)
 | 
			
		||||
 | 
			
		||||
    def _configure_named_resource(self, name, compress=False):
 | 
			
		||||
        """Build a resource map for a named resource
 | 
			
		||||
 | 
			
		||||
        Args:
 | 
			
		||||
            name (str): named resource: one of "client", "federation", etc
 | 
			
		||||
            compress (bool): whether to enable gzip compression for this
 | 
			
		||||
                resource
 | 
			
		||||
 | 
			
		||||
        Returns:
 | 
			
		||||
            dict[str, Resource]: map from path to HTTP resource
 | 
			
		||||
        """
 | 
			
		||||
        resources = {}
 | 
			
		||||
        if name == "client":
 | 
			
		||||
            client_resource = ClientRestResource(self)
 | 
			
		||||
            if compress:
 | 
			
		||||
                client_resource = gz_wrap(client_resource)
 | 
			
		||||
 | 
			
		||||
            resources.update({
 | 
			
		||||
                "/_matrix/client/api/v1": client_resource,
 | 
			
		||||
                "/_matrix/client/r0": client_resource,
 | 
			
		||||
                "/_matrix/client/unstable": client_resource,
 | 
			
		||||
                "/_matrix/client/v2_alpha": client_resource,
 | 
			
		||||
                "/_matrix/client/versions": client_resource,
 | 
			
		||||
            })
 | 
			
		||||
 | 
			
		||||
        if name == "federation":
 | 
			
		||||
            resources.update({
 | 
			
		||||
                FEDERATION_PREFIX: TransportLayerServer(self),
 | 
			
		||||
            })
 | 
			
		||||
 | 
			
		||||
        if name in ["static", "client"]:
 | 
			
		||||
            resources.update({
 | 
			
		||||
                STATIC_PREFIX: File(
 | 
			
		||||
                    os.path.join(os.path.dirname(synapse.__file__), "static")
 | 
			
		||||
                ),
 | 
			
		||||
            })
 | 
			
		||||
 | 
			
		||||
        if name in ["media", "federation", "client"]:
 | 
			
		||||
            media_repo = MediaRepositoryResource(self)
 | 
			
		||||
            resources.update({
 | 
			
		||||
                MEDIA_PREFIX: media_repo,
 | 
			
		||||
                LEGACY_MEDIA_PREFIX: media_repo,
 | 
			
		||||
                CONTENT_REPO_PREFIX: ContentRepoResource(
 | 
			
		||||
                    self, self.config.uploads_path
 | 
			
		||||
                ),
 | 
			
		||||
            })
 | 
			
		||||
 | 
			
		||||
        if name in ["keys", "federation"]:
 | 
			
		||||
            resources.update({
 | 
			
		||||
                SERVER_KEY_PREFIX: LocalKey(self),
 | 
			
		||||
                SERVER_KEY_V2_PREFIX: KeyApiV2Resource(self),
 | 
			
		||||
            })
 | 
			
		||||
 | 
			
		||||
        if name == "webclient":
 | 
			
		||||
            resources[WEB_CLIENT_PREFIX] = build_resource_for_web_client(self)
 | 
			
		||||
 | 
			
		||||
        if name == "metrics" and self.get_config().enable_metrics:
 | 
			
		||||
            resources[METRICS_PREFIX] = MetricsResource(self)
 | 
			
		||||
 | 
			
		||||
        return resources
 | 
			
		||||
 | 
			
		||||
    def start_listening(self):
 | 
			
		||||
        config = self.get_config()
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue