For clone commands rely on scheme URLs from the server
Do not construct clone commands on client-side, but rely on the scheme URLs that are retrieved from the server. Change-Id: I7077ce0dcf21941d44ec69e4aecf7adb94bbeebe Signed-off-by: Edwin Kempin <edwin.kempin@sap.com>
This commit is contained in:
parent
d0bde8e151
commit
f94d06bc25
gerrit-common/src/main/java/com/google/gerrit/common/data
gerrit-gwtui/src/main/java/com/google/gerrit/client
gerrit-httpd/src/main/java/com/google/gerrit/httpd
@ -35,7 +35,6 @@ public class GerritConfig implements Cloneable {
|
||||
protected GitwebConfig gitweb;
|
||||
protected AuthType authType;
|
||||
protected String gitDaemonUrl;
|
||||
protected String gitHttpUrl;
|
||||
protected String sshdAddress;
|
||||
protected String editFullNameUrl;
|
||||
protected Set<Account.FieldName> editableAccountFields;
|
||||
@ -152,17 +151,6 @@ public class GerritConfig implements Cloneable {
|
||||
gitDaemonUrl = url;
|
||||
}
|
||||
|
||||
public String getGitHttpUrl() {
|
||||
return gitHttpUrl;
|
||||
}
|
||||
|
||||
public void setGitHttpUrl(String url) {
|
||||
if (url != null && !url.endsWith("/")) {
|
||||
url += "/";
|
||||
}
|
||||
gitHttpUrl = url;
|
||||
}
|
||||
|
||||
public String getSshdAddress() {
|
||||
return sshdAddress;
|
||||
}
|
||||
|
@ -44,10 +44,6 @@ public class AuthInfo extends JavaScriptObject {
|
||||
return authType() == AuthType.CLIENT_SSL_CERT_LDAP;
|
||||
}
|
||||
|
||||
public final boolean isCustomExtension() {
|
||||
return authType() == AuthType.CUSTOM_EXTENSION;
|
||||
}
|
||||
|
||||
public final boolean canEdit(Account.FieldName f) {
|
||||
return editableAccountFields().contains(f);
|
||||
}
|
||||
|
@ -15,13 +15,12 @@
|
||||
package com.google.gerrit.client.download;
|
||||
|
||||
import com.google.gerrit.client.Gerrit;
|
||||
import com.google.gerrit.client.config.DownloadInfo.DownloadSchemeInfo;
|
||||
import com.google.gerrit.reviewdb.client.AccountGeneralPreferences;
|
||||
import com.google.gerrit.reviewdb.client.AccountGeneralPreferences.DownloadScheme;
|
||||
import com.google.gwt.aria.client.Roles;
|
||||
import com.google.gwt.core.client.GWT;
|
||||
import com.google.gwt.event.dom.client.ClickEvent;
|
||||
import com.google.gwt.event.dom.client.ClickHandler;
|
||||
import com.google.gwt.user.client.Window;
|
||||
import com.google.gwt.user.client.ui.Anchor;
|
||||
import com.google.gwt.user.client.ui.Widget;
|
||||
import com.google.gwtjsonrpc.common.AsyncCallback;
|
||||
@ -29,166 +28,79 @@ import com.google.gwtjsonrpc.common.VoidResult;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
public class DownloadUrlLink extends Anchor implements ClickHandler {
|
||||
public static class AnonGitLink extends DownloadUrlLink {
|
||||
public AnonGitLink(String project) {
|
||||
super(DownloadScheme.ANON_GIT, Util.M.anonymousDownload("Git"), project);
|
||||
private enum KnownScheme {
|
||||
ANON_GIT(DownloadScheme.ANON_GIT, "git", Util.M.anonymousDownload("Git")),
|
||||
ANON_HTTP(DownloadScheme.ANON_HTTP, "anonymous http", Util.M.anonymousDownload("HTTP")),
|
||||
SSH(DownloadScheme.SSH, "ssh", "SSH"),
|
||||
HTTP(DownloadScheme.HTTP, "http", "HTTP");
|
||||
|
||||
public final DownloadScheme downloadScheme;
|
||||
public final String name;
|
||||
public final String text;
|
||||
|
||||
private KnownScheme(DownloadScheme downloadScheme, String name, String text) {
|
||||
this.downloadScheme = downloadScheme;
|
||||
this.name = name;
|
||||
this.text = text;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getUrlData() {
|
||||
StringBuilder r = new StringBuilder();
|
||||
r.append(Gerrit.getConfig().getGitDaemonUrl());
|
||||
r.append(projectName);
|
||||
return r.toString();
|
||||
}
|
||||
}
|
||||
|
||||
public static class AnonHttpLink extends DownloadUrlLink {
|
||||
public AnonHttpLink(String project) {
|
||||
super(DownloadScheme.ANON_HTTP, Util.M.anonymousDownload("HTTP"), project);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getUrlData() {
|
||||
StringBuilder r = new StringBuilder();
|
||||
if (Gerrit.getConfig().getGitHttpUrl() != null) {
|
||||
r.append(Gerrit.getConfig().getGitHttpUrl());
|
||||
} else {
|
||||
r.append(hostPageUrl);
|
||||
}
|
||||
r.append(projectName);
|
||||
return r.toString();
|
||||
}
|
||||
}
|
||||
|
||||
public static class SshLink extends DownloadUrlLink {
|
||||
public SshLink(String project) {
|
||||
super(DownloadScheme.SSH, "SSH", project);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getUrlData() {
|
||||
String sshAddr = Gerrit.getConfig().getSshdAddress();
|
||||
final StringBuilder r = new StringBuilder();
|
||||
r.append("ssh://");
|
||||
r.append(Gerrit.getUserAccount().getUserName());
|
||||
r.append("@");
|
||||
if (sshAddr.startsWith("*:") || "".equals(sshAddr)) {
|
||||
r.append(Window.Location.getHostName());
|
||||
}
|
||||
if (sshAddr.startsWith("*")) {
|
||||
sshAddr = sshAddr.substring(1);
|
||||
}
|
||||
r.append(sshAddr);
|
||||
r.append("/");
|
||||
r.append(projectName);
|
||||
return r.toString();
|
||||
}
|
||||
}
|
||||
|
||||
public static class HttpLink extends DownloadUrlLink {
|
||||
protected boolean anonymous;
|
||||
|
||||
public HttpLink(String project, boolean anonymous) {
|
||||
super(DownloadScheme.HTTP, "HTTP", project);
|
||||
this.anonymous = anonymous;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getUrlData() {
|
||||
final StringBuilder r = new StringBuilder();
|
||||
if (Gerrit.getConfig().getGitHttpUrl() != null
|
||||
&& (anonymous || siteReliesOnHttp())) {
|
||||
r.append(Gerrit.getConfig().getGitHttpUrl());
|
||||
} else {
|
||||
String base = hostPageUrl;
|
||||
int p = base.indexOf("://");
|
||||
int s = base.indexOf('/', p + 3);
|
||||
if (s < 0) {
|
||||
s = base.length();
|
||||
static KnownScheme get(String name) {
|
||||
for (KnownScheme s : values()) {
|
||||
if (s.name.equals(name)) {
|
||||
return s;
|
||||
}
|
||||
String host = base.substring(p + 3, s);
|
||||
if (host.contains("@")) {
|
||||
host = host.substring(host.indexOf('@') + 1);
|
||||
}
|
||||
|
||||
r.append(base.substring(0, p + 3));
|
||||
r.append(Gerrit.getUserAccount().getUserName());
|
||||
r.append('@');
|
||||
r.append(host);
|
||||
r.append(base.substring(s));
|
||||
}
|
||||
r.append(projectName);
|
||||
return r.toString();
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public static boolean siteReliesOnHttp() {
|
||||
return Gerrit.getConfig().getGitHttpUrl() != null
|
||||
&& Gerrit.info().auth().isCustomExtension()
|
||||
&& !Gerrit.getConfig().siteHasUsernames();
|
||||
}
|
||||
|
||||
public static List<DownloadUrlLink> createDownloadUrlLinks(String project,
|
||||
boolean allowAnonymous) {
|
||||
List<DownloadUrlLink> urls = new ArrayList<>();
|
||||
Set<String> allowedSchemes = Gerrit.info().download().schemes();
|
||||
for (String s : Gerrit.info().download().schemes()) {
|
||||
DownloadSchemeInfo scheme = Gerrit.info().download().scheme(s);
|
||||
if (scheme.isAuthRequired() && !allowAnonymous) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (allowAnonymous
|
||||
&& Gerrit.getConfig().getGitDaemonUrl() != null
|
||||
&& allowedSchemes.contains("git")) {
|
||||
urls.add(new DownloadUrlLink.AnonGitLink(project));
|
||||
}
|
||||
|
||||
if (allowAnonymous
|
||||
&& allowedSchemes.contains("anonymous http")) {
|
||||
urls.add(new DownloadUrlLink.AnonHttpLink(project));
|
||||
}
|
||||
|
||||
if (Gerrit.getConfig().getSshdAddress() != null
|
||||
&& hasUserName()
|
||||
&& allowedSchemes.contains("ssh")) {
|
||||
urls.add(new DownloadUrlLink.SshLink(project));
|
||||
}
|
||||
|
||||
if ((hasUserName() || siteReliesOnHttp())
|
||||
&& allowedSchemes.contains("http")) {
|
||||
urls.add(new DownloadUrlLink.HttpLink(project, allowAnonymous));
|
||||
KnownScheme knownScheme = KnownScheme.get(s);
|
||||
if (knownScheme != null) {
|
||||
urls.add(new DownloadUrlLink(knownScheme.downloadScheme,
|
||||
knownScheme.text, scheme.getUrl(project)));
|
||||
} else {
|
||||
urls.add(new DownloadUrlLink(s, scheme.getUrl(project)));
|
||||
}
|
||||
}
|
||||
return urls;
|
||||
}
|
||||
|
||||
private static boolean hasUserName() {
|
||||
return Gerrit.isSignedIn()
|
||||
&& Gerrit.getUserAccount().getUserName() != null
|
||||
&& Gerrit.getUserAccount().getUserName().length() > 0;
|
||||
private final DownloadScheme urlType;
|
||||
private final String urlData;
|
||||
|
||||
public DownloadUrlLink(String text, String urlData) {
|
||||
this(null, text, urlData);
|
||||
}
|
||||
|
||||
protected DownloadScheme urlType;
|
||||
protected String projectName;
|
||||
protected String urlData;
|
||||
protected String hostPageUrl = GWT.getHostPageBaseURL();
|
||||
|
||||
public DownloadUrlLink(DownloadScheme urlType, String text, String project) {
|
||||
public DownloadUrlLink(DownloadScheme urlType, String text, String urlData) {
|
||||
super(text);
|
||||
setStyleName(Gerrit.RESOURCES.css().downloadLink());
|
||||
Roles.getTabRole().set(getElement());
|
||||
addClickHandler(this);
|
||||
|
||||
if (!hostPageUrl.endsWith("/")) {
|
||||
hostPageUrl += "/";
|
||||
}
|
||||
this.urlType = urlType;
|
||||
this.projectName = project;
|
||||
this.urlData = urlData;
|
||||
}
|
||||
|
||||
public String getUrlData() {
|
||||
return urlData;
|
||||
}
|
||||
|
||||
public DownloadScheme getUrlType() {
|
||||
return urlType;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onClick(ClickEvent event) {
|
||||
event.preventDefault();
|
||||
@ -196,7 +108,7 @@ public class DownloadUrlLink extends Anchor implements ClickHandler {
|
||||
|
||||
select();
|
||||
|
||||
if (Gerrit.isSignedIn()) {
|
||||
if (Gerrit.isSignedIn() && urlType != null) {
|
||||
// If the user is signed-in, remember this choice for future panels.
|
||||
//
|
||||
AccountGeneralPreferences pref =
|
||||
|
@ -44,7 +44,7 @@ public class DownloadUrlPanel extends FlowPanel {
|
||||
if (first == null) {
|
||||
first = d;
|
||||
}
|
||||
if (d.urlType == urlType) {
|
||||
if (d.getUrlType() == urlType) {
|
||||
d.select();
|
||||
return;
|
||||
}
|
||||
|
@ -103,7 +103,6 @@ class GerritConfigProvider implements Provider<GerritConfig> {
|
||||
}
|
||||
config.setSwitchAccountUrl(cfg.getString("auth", null, "switchAccountUrl"));
|
||||
config.setGitDaemonUrl(cfg.getString("gerrit", null, "canonicalgiturl"));
|
||||
config.setGitHttpUrl(cfg.getString("gerrit", null, "gitHttpUrl"));
|
||||
config.setAuthType(authConfig.getAuthType());
|
||||
config.setDocumentationAvailable(servletContext
|
||||
.getResource("/Documentation/index.html") != null);
|
||||
|
Loading…
x
Reference in New Issue
Block a user