Inject the canonicalweburl rather than using GerritServer
This avoids the dependency on the catch-all kitchen sink of the GerritServer object, making it available only to those blocks of code that want to display a URL. Signed-off-by: Shawn O. Pearce <sop@google.com>
This commit is contained in:
@@ -28,6 +28,7 @@ import com.google.gerrit.client.reviewdb.ReviewDb;
|
||||
import com.google.gerrit.client.rpc.Common;
|
||||
import com.google.gerrit.server.ChangeUtil;
|
||||
import com.google.gerrit.server.GerritServer;
|
||||
import com.google.gerrit.server.config.CanonicalWebUrl;
|
||||
import com.google.gerrit.server.mail.EmailException;
|
||||
import com.google.gerrit.server.mail.MergeFailSender;
|
||||
import com.google.gerrit.server.mail.MergedSender;
|
||||
@@ -107,6 +108,8 @@ public class MergeOp {
|
||||
private final ReplicationQueue replication;
|
||||
private final MergedSender.Factory mergedSenderFactory;
|
||||
private final MergeFailSender.Factory mergeFailSenderFactory;
|
||||
private final String canonicalWebUrl;
|
||||
|
||||
private final PersonIdent myIdent;
|
||||
private final Branch.NameKey destBranch;
|
||||
private Project destProject;
|
||||
@@ -124,12 +127,14 @@ public class MergeOp {
|
||||
@Inject
|
||||
MergeOp(final GerritServer gs, final SchemaFactory<ReviewDb> sf,
|
||||
final ReplicationQueue rq, final MergedSender.Factory msf,
|
||||
final MergeFailSender.Factory mfsf, @Assisted final Branch.NameKey branch) {
|
||||
final MergeFailSender.Factory mfsf, @CanonicalWebUrl final String cwu,
|
||||
@Assisted final Branch.NameKey branch) {
|
||||
server = gs;
|
||||
schemaFactory = sf;
|
||||
replication = rq;
|
||||
mergedSenderFactory = msf;
|
||||
mergeFailSenderFactory = mfsf;
|
||||
canonicalWebUrl = cwu;
|
||||
myIdent = server.newGerritPersonIdent();
|
||||
destBranch = branch;
|
||||
toMerge = new ArrayList<CodeReviewCommit>();
|
||||
@@ -571,9 +576,8 @@ public class MergeOp {
|
||||
msgbuf.append('\n');
|
||||
}
|
||||
|
||||
if (server.getCanonicalURL() != null) {
|
||||
final String url =
|
||||
server.getCanonicalURL() + n.patchsetId.getParentKey().get();
|
||||
if (canonicalWebUrl != null) {
|
||||
final String url = canonicalWebUrl + n.patchsetId.getParentKey().get();
|
||||
if (!contains(footers, REVIEWED_ON, url)) {
|
||||
msgbuf.append(REVIEWED_ON.getName());
|
||||
msgbuf.append(": ");
|
||||
|
||||
@@ -21,6 +21,7 @@ import com.google.gerrit.client.reviewdb.ApprovalCategory;
|
||||
import com.google.gerrit.client.reviewdb.ReviewDb;
|
||||
import com.google.gerrit.client.rpc.Common;
|
||||
import com.google.gerrit.server.config.AuthConfig;
|
||||
import com.google.gerrit.server.config.CanonicalWebUrl;
|
||||
import com.google.gerrit.server.config.GerritServerConfig;
|
||||
import com.google.gerrit.server.mail.EmailSender;
|
||||
import com.google.gerrit.server.ssh.GerritSshDaemon;
|
||||
@@ -43,8 +44,8 @@ class GerritConfigProvider implements Provider<GerritConfig> {
|
||||
}
|
||||
|
||||
private final Config cfg;
|
||||
private final String canonicalWebUrl;
|
||||
private final AuthConfig authConfig;
|
||||
private final GerritServer server;
|
||||
private final SchemaFactory<ReviewDb> schema;
|
||||
|
||||
private GerritSshDaemon sshd;
|
||||
@@ -53,11 +54,11 @@ class GerritConfigProvider implements Provider<GerritConfig> {
|
||||
|
||||
@Inject
|
||||
GerritConfigProvider(@GerritServerConfig final Config gsc,
|
||||
final AuthConfig ac, final GerritServer gs,
|
||||
@CanonicalWebUrl final String cwu, final AuthConfig ac,
|
||||
final SchemaFactory<ReviewDb> sf) {
|
||||
cfg = gsc;
|
||||
canonicalWebUrl = cwu;
|
||||
authConfig = ac;
|
||||
server = gs;
|
||||
schema = sf;
|
||||
}
|
||||
|
||||
@@ -78,7 +79,7 @@ class GerritConfigProvider implements Provider<GerritConfig> {
|
||||
|
||||
private GerritConfig create() throws OrmException {
|
||||
final GerritConfig config = new GerritConfig();
|
||||
config.setCanonicalUrl(server.getCanonicalURL());
|
||||
config.setCanonicalUrl(canonicalWebUrl);
|
||||
config.setUseContributorAgreements(cfg.getBoolean("auth",
|
||||
"contributoragreements", false));
|
||||
config.setGitDaemonUrl(cfg.getString("gerrit", null, "canonicalgiturl"));
|
||||
|
||||
@@ -92,15 +92,6 @@ public class GerritServer {
|
||||
Common.setGroupCache(new GroupCache(sConfig));
|
||||
}
|
||||
|
||||
/** Optional canonical URL for this application. */
|
||||
public String getCanonicalURL() {
|
||||
String u = getGerritConfig().getString("gerrit", null, "canonicalweburl");
|
||||
if (u != null && !u.endsWith("/")) {
|
||||
u += "/";
|
||||
}
|
||||
return u;
|
||||
}
|
||||
|
||||
private Config getGerritConfig() {
|
||||
return gerritConfigFile;
|
||||
}
|
||||
|
||||
@@ -26,6 +26,8 @@ import com.google.gerrit.git.PushReplication;
|
||||
import com.google.gerrit.git.ReplicationQueue;
|
||||
import com.google.gerrit.server.config.AuthConfig;
|
||||
import com.google.gerrit.server.config.CacheManagerProvider;
|
||||
import com.google.gerrit.server.config.CanonicalWebUrl;
|
||||
import com.google.gerrit.server.config.CanonicalWebUrlProvider;
|
||||
import com.google.gerrit.server.config.GerritServerConfig;
|
||||
import com.google.gerrit.server.config.GerritServerConfigProvider;
|
||||
import com.google.gerrit.server.config.SitePath;
|
||||
@@ -77,6 +79,8 @@ public class GerritServerModule extends AbstractModule {
|
||||
SitePathProvider.class);
|
||||
bind(Config.class).annotatedWith(GerritServerConfig.class).toProvider(
|
||||
GerritServerConfigProvider.class).in(SINGLETON);
|
||||
bind(String.class).annotatedWith(CanonicalWebUrl.class).toProvider(
|
||||
CanonicalWebUrlProvider.class);
|
||||
bind(AuthConfig.class);
|
||||
|
||||
bind(CacheManager.class).toProvider(CacheManagerProvider.class).in(
|
||||
|
||||
@@ -17,6 +17,7 @@ package com.google.gerrit.server;
|
||||
import com.google.gerrit.client.data.GerritConfig;
|
||||
import com.google.gerrit.client.reviewdb.Account;
|
||||
import com.google.gerrit.client.rpc.Common;
|
||||
import com.google.gerrit.server.config.CanonicalWebUrl;
|
||||
import com.google.gerrit.server.config.SitePath;
|
||||
import com.google.gwt.user.server.rpc.RPCServletUtils;
|
||||
import com.google.inject.Inject;
|
||||
@@ -47,30 +48,27 @@ import javax.servlet.http.HttpServletResponse;
|
||||
@Singleton
|
||||
public class HostPageServlet extends HttpServlet {
|
||||
private final Provider<GerritCall> callFactory;
|
||||
private final GerritServer server;
|
||||
private final File sitePath;
|
||||
private final GerritConfig config;
|
||||
|
||||
private String canonicalUrl;
|
||||
private boolean wantSSL;
|
||||
private final String canonicalUrl;
|
||||
private final boolean wantSSL;
|
||||
private Document hostDoc;
|
||||
|
||||
@Inject
|
||||
HostPageServlet(final Injector i, final GerritServer gs,
|
||||
@SitePath final File path, final GerritConfig gc) {
|
||||
HostPageServlet(final Injector i, @SitePath final File path,
|
||||
final GerritConfig gc, @CanonicalWebUrl final String cwu) {
|
||||
callFactory = i.getProvider(GerritCall.class);
|
||||
server = gs;
|
||||
canonicalUrl = cwu;
|
||||
sitePath = path;
|
||||
config = gc;
|
||||
wantSSL = canonicalUrl != null && canonicalUrl.startsWith("https:");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void init(ServletConfig config) throws ServletException {
|
||||
super.init(config);
|
||||
|
||||
canonicalUrl = server.getCanonicalURL();
|
||||
wantSSL = canonicalUrl != null && canonicalUrl.startsWith("https:");
|
||||
|
||||
final String hostPageName = "WEB-INF/Gerrit.html";
|
||||
hostDoc = HtmlDomUtil.parseFile(getServletContext(), "/" + hostPageName);
|
||||
if (hostDoc == null) {
|
||||
|
||||
@@ -27,6 +27,7 @@ import com.google.gerrit.client.reviewdb.ReviewDb;
|
||||
import com.google.gerrit.client.reviewdb.SystemConfig;
|
||||
import com.google.gerrit.client.rpc.Common;
|
||||
import com.google.gerrit.server.config.AuthConfig;
|
||||
import com.google.gerrit.server.config.CanonicalWebUrl;
|
||||
import com.google.gwt.user.client.rpc.AsyncCallback;
|
||||
import com.google.gwtjsonrpc.server.ValidToken;
|
||||
import com.google.gwtjsonrpc.server.XsrfException;
|
||||
@@ -98,18 +99,18 @@ class OpenIdServiceImpl implements OpenIdService {
|
||||
|
||||
private final Provider<GerritCall> callFactory;
|
||||
private final AuthConfig authConfig;
|
||||
private final GerritServer server;
|
||||
private final String canonicalWebUrl;
|
||||
private final SchemaFactory<ReviewDb> schema;
|
||||
private final ConsumerManager manager;
|
||||
private final SelfPopulatingCache discoveryCache;
|
||||
|
||||
@Inject
|
||||
OpenIdServiceImpl(final Injector i, final AuthConfig ac,
|
||||
final GerritServer gs, final CacheManager cacheMgr,
|
||||
@CanonicalWebUrl final String cwu, final CacheManager cacheMgr,
|
||||
final SchemaFactory<ReviewDb> sf) throws ConsumerException {
|
||||
callFactory = i.getProvider(GerritCall.class);
|
||||
authConfig = ac;
|
||||
server = gs;
|
||||
canonicalWebUrl = cwu;
|
||||
schema = sf;
|
||||
manager = new ConsumerManager();
|
||||
if (authConfig.getLoginType() == SystemConfig.LoginType.OPENID) {
|
||||
@@ -586,7 +587,7 @@ class OpenIdServiceImpl implements OpenIdService {
|
||||
return null;
|
||||
}
|
||||
|
||||
String contextUrl = server.getCanonicalURL();
|
||||
String contextUrl = canonicalWebUrl;
|
||||
if (contextUrl == null) {
|
||||
contextUrl = GerritServer.serverUrl(httpReq);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
// Copyright (C) 2009 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.server.config;
|
||||
|
||||
import static java.lang.annotation.RetentionPolicy.RUNTIME;
|
||||
|
||||
import com.google.inject.BindingAnnotation;
|
||||
|
||||
import java.lang.annotation.Retention;
|
||||
|
||||
/** Marker on a {@link String} holding the canonical address for this server. */
|
||||
@Retention(RUNTIME)
|
||||
@BindingAnnotation
|
||||
public @interface CanonicalWebUrl {
|
||||
}
|
||||
@@ -0,0 +1,39 @@
|
||||
// Copyright (C) 2009 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.server.config;
|
||||
|
||||
import com.google.inject.Inject;
|
||||
import com.google.inject.Provider;
|
||||
|
||||
import org.spearce.jgit.lib.Config;
|
||||
|
||||
/** Provides {@link String} annotated with {@link CanonicalWebUrl}. */
|
||||
public class CanonicalWebUrlProvider implements Provider<String> {
|
||||
private final String url;
|
||||
|
||||
@Inject
|
||||
CanonicalWebUrlProvider(@GerritServerConfig final Config config) {
|
||||
String u = config.getString("gerrit", null, "canonicalweburl");
|
||||
if (u != null && !u.endsWith("/")) {
|
||||
u += "/";
|
||||
}
|
||||
url = u;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String get() {
|
||||
return url;
|
||||
}
|
||||
}
|
||||
@@ -30,7 +30,9 @@ import com.google.gerrit.client.reviewdb.StarredChange;
|
||||
import com.google.gerrit.client.reviewdb.UserIdentity;
|
||||
import com.google.gerrit.client.rpc.Common;
|
||||
import com.google.gerrit.server.GerritServer;
|
||||
import com.google.gerrit.server.config.CanonicalWebUrl;
|
||||
import com.google.gwtorm.client.OrmException;
|
||||
import com.google.inject.Inject;
|
||||
|
||||
import org.spearce.jgit.lib.PersonIdent;
|
||||
import org.spearce.jgit.util.SystemReader;
|
||||
@@ -77,6 +79,10 @@ public abstract class OutgoingEmail {
|
||||
protected ChangeMessage changeMessage;
|
||||
protected ReviewDb db;
|
||||
|
||||
@Inject
|
||||
@CanonicalWebUrl
|
||||
private String canonicalWebUrl;
|
||||
|
||||
protected OutgoingEmail(final GerritServer gs, final EmailSender es,
|
||||
final Change c, final String mc) {
|
||||
server = gs;
|
||||
@@ -110,7 +116,7 @@ public abstract class OutgoingEmail {
|
||||
|
||||
/**
|
||||
* Format and enqueue the message for delivery.
|
||||
*
|
||||
*
|
||||
* @throws EmailException
|
||||
*/
|
||||
public void send() throws EmailException {
|
||||
@@ -278,17 +284,9 @@ public abstract class OutgoingEmail {
|
||||
}
|
||||
|
||||
private String getGerritHost() {
|
||||
if (server.getCanonicalURL() != null) {
|
||||
if (getGerritUrl() != null) {
|
||||
try {
|
||||
return new URL(server.getCanonicalURL()).getHost();
|
||||
} catch (MalformedURLException e) {
|
||||
// Try something else.
|
||||
}
|
||||
}
|
||||
|
||||
if (myUrl != null) {
|
||||
try {
|
||||
return new URL(myUrl).getHost();
|
||||
return new URL(getGerritUrl()).getHost();
|
||||
} catch (MalformedURLException e) {
|
||||
// Try something else.
|
||||
}
|
||||
@@ -327,8 +325,8 @@ public abstract class OutgoingEmail {
|
||||
}
|
||||
|
||||
private String getGerritUrl() {
|
||||
if (server.getCanonicalURL() != null) {
|
||||
return server.getCanonicalURL();
|
||||
if (canonicalWebUrl != null) {
|
||||
return canonicalWebUrl;
|
||||
}
|
||||
return myUrl;
|
||||
}
|
||||
|
||||
@@ -44,6 +44,7 @@ import com.google.gerrit.git.PatchSetImporter;
|
||||
import com.google.gerrit.git.ReplicationQueue;
|
||||
import com.google.gerrit.server.ChangeUtil;
|
||||
import com.google.gerrit.server.config.AuthConfig;
|
||||
import com.google.gerrit.server.config.CanonicalWebUrl;
|
||||
import com.google.gerrit.server.mail.CreateChangeSender;
|
||||
import com.google.gerrit.server.mail.EmailException;
|
||||
import com.google.gerrit.server.mail.MergedSender;
|
||||
@@ -148,6 +149,10 @@ class Receive extends AbstractGitCommand {
|
||||
@Inject
|
||||
private DiffCache diffCache;
|
||||
|
||||
@Inject
|
||||
@CanonicalWebUrl
|
||||
private String canonicalWebUrl;
|
||||
|
||||
private ReceivePack rp;
|
||||
private PersonIdent refLogIdent;
|
||||
private ReceiveCommand newChange;
|
||||
@@ -221,14 +226,14 @@ class Receive extends AbstractGitCommand {
|
||||
});
|
||||
rp.receive(in, out, err);
|
||||
|
||||
if (!allNewChanges.isEmpty() && server.getCanonicalURL() != null) {
|
||||
if (!allNewChanges.isEmpty() && canonicalWebUrl != null) {
|
||||
// Make sure there isn't anything buffered; we want to give the
|
||||
// push client a chance to display its status report before we
|
||||
// show our own messages on standard error.
|
||||
//
|
||||
out.flush();
|
||||
|
||||
final String url = server.getCanonicalURL();
|
||||
final String url = canonicalWebUrl;
|
||||
final PrintWriter msg = toPrintWriter(err);
|
||||
msg.write("\nNew Changes:\n");
|
||||
for (final Change.Id c : allNewChanges) {
|
||||
@@ -281,10 +286,10 @@ class Receive extends AbstractGitCommand {
|
||||
msg.append("\nfatal: ");
|
||||
msg.append(bestCla.getShortName());
|
||||
msg.append(" contributor agreement is expired.\n");
|
||||
if (server.getCanonicalURL() != null) {
|
||||
if (canonicalWebUrl != null) {
|
||||
msg.append("\nPlease complete a new agreement");
|
||||
msg.append(":\n\n ");
|
||||
msg.append(server.getCanonicalURL());
|
||||
msg.append(canonicalWebUrl);
|
||||
msg.append("#");
|
||||
msg.append(Link.SETTINGS_AGREEMENTS);
|
||||
msg.append("\n");
|
||||
@@ -305,10 +310,10 @@ class Receive extends AbstractGitCommand {
|
||||
msg.append(bestCla.getShortName());
|
||||
msg.append(" contributor agreement requires");
|
||||
msg.append(" current contact information.\n");
|
||||
if (server.getCanonicalURL() != null) {
|
||||
if (canonicalWebUrl != null) {
|
||||
msg.append("\nPlease review your contact information");
|
||||
msg.append(":\n\n ");
|
||||
msg.append(server.getCanonicalURL());
|
||||
msg.append(canonicalWebUrl);
|
||||
msg.append("#");
|
||||
msg.append(Link.SETTINGS_CONTACT);
|
||||
msg.append("\n");
|
||||
@@ -336,9 +341,9 @@ class Receive extends AbstractGitCommand {
|
||||
final StringBuilder msg = new StringBuilder();
|
||||
msg.append("\nfatal: A Contributor Agreement"
|
||||
+ " must be completed before uploading");
|
||||
if (server.getCanonicalURL() != null) {
|
||||
if (canonicalWebUrl != null) {
|
||||
msg.append(":\n\n ");
|
||||
msg.append(server.getCanonicalURL());
|
||||
msg.append(canonicalWebUrl);
|
||||
msg.append("#");
|
||||
msg.append(Link.SETTINGS_AGREEMENTS);
|
||||
msg.append("\n");
|
||||
|
||||
Reference in New Issue
Block a user