Serve PolyGerrit index.html from a Soy template
Rather than serving a static file, serve the PolyGerrit index HTML
document from a Soy template. In this way, the path to load PG
dependencies can be safely parameterized in two ways:
* If Gerrit is not running on the root of the domain (e.g. listening on
https://example.com/my-gerrit/) the path component of the Canonical
Web URL is used to load PG dependencies.
Instead of /elements/gr-app.js off the root of the domain it uses
/my-gerrit/elements/gr-app.js
* If the PolyGerrit static resources are to be served from a CDN rather
than the Gerrit WAR, the `cdnPath` config in the [gerrit] section can
be used.
For example, if the server config says ...
[gerrit]
cdnPath = http://my-cdn.com/pg/version/123
... then it uses the following style of path for PG dependencies.
http://my-cdn.com/pg/version/123/my-gerrit/elements/gr-app.js
If a CDN-path is configured, it supersedes subdirectories appearing
in the Canonical-Web-URL for this purpose.
Feature: Issue 5845
Change-Id: I2b2d704fe33c90ea2f2a2183fc79897642a48175
(cherry picked from commit 414659c792)
This commit is contained in:
committed by
Paladox none
parent
178b7174cc
commit
558a2afbd2
@@ -0,0 +1,56 @@
|
||||
// Copyright (C) 2017 The Android Open Source Project
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
package com.google.gerrit.httpd.raw;
|
||||
|
||||
import com.google.gerrit.common.Nullable;
|
||||
import com.google.template.soy.data.SoyMapData;
|
||||
import java.net.URISyntaxException;
|
||||
import org.junit.Test;
|
||||
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
|
||||
public class IndexServletTest {
|
||||
@Test
|
||||
public void noPathAndNoCDN() throws URISyntaxException {
|
||||
SoyMapData data = IndexServlet.getTemplateData("http://example.com/", null);
|
||||
assertThat(data.getSingle("canonicalPath").stringValue()).isEqualTo("");
|
||||
assertThat(data.getSingle("staticResourcePath").stringValue()).isEqualTo("");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void pathAndNoCDN() throws URISyntaxException {
|
||||
SoyMapData data = IndexServlet.getTemplateData("http://example.com/gerrit/", null);
|
||||
assertThat(data.getSingle("canonicalPath").stringValue()).isEqualTo("/gerrit");
|
||||
assertThat(data.getSingle("staticResourcePath").stringValue()).isEqualTo("/gerrit");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void noPathAndCDN() throws URISyntaxException {
|
||||
SoyMapData data = IndexServlet.getTemplateData("http://example.com/",
|
||||
"http://my-cdn.com/foo/bar/");
|
||||
assertThat(data.getSingle("canonicalPath").stringValue()).isEqualTo("");
|
||||
assertThat(data.getSingle("staticResourcePath").stringValue())
|
||||
.isEqualTo("http://my-cdn.com/foo/bar/");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void pathAndCDN() throws URISyntaxException {
|
||||
SoyMapData data = IndexServlet.getTemplateData("http://example.com/gerrit",
|
||||
"http://my-cdn.com/foo/bar/");
|
||||
assertThat(data.getSingle("canonicalPath").stringValue()).isEqualTo("/gerrit");
|
||||
assertThat(data.getSingle("staticResourcePath").stringValue())
|
||||
.isEqualTo("http://my-cdn.com/foo/bar/");
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user