mirror of
https://github.com/google/nomulus.git
synced 2025-05-13 07:57:13 +02:00
Fix nomulus tool AppEngineConnection behavior
------------- Created by MOE: https://github.com/google/moe MOE_MIGRATED_REVID=136471276
This commit is contained in:
parent
afa4d66601
commit
b1beefab4c
3 changed files with 21 additions and 21 deletions
|
@ -20,7 +20,6 @@ import static org.joda.time.Duration.standardDays;
|
||||||
|
|
||||||
import com.google.appengine.api.utils.SystemProperty;
|
import com.google.appengine.api.utils.SystemProperty;
|
||||||
import com.google.common.base.Ascii;
|
import com.google.common.base.Ascii;
|
||||||
import com.google.common.base.Joiner;
|
|
||||||
import com.google.common.base.Optional;
|
import com.google.common.base.Optional;
|
||||||
import com.google.common.collect.ImmutableList;
|
import com.google.common.collect.ImmutableList;
|
||||||
import com.google.common.net.HostAndPort;
|
import com.google.common.net.HostAndPort;
|
||||||
|
@ -130,8 +129,8 @@ public final class ProductionRegistryConfigExample implements RegistryConfig {
|
||||||
case LOCAL:
|
case LOCAL:
|
||||||
return HostAndPort.fromParts("localhost", 8080);
|
return HostAndPort.fromParts("localhost", 8080);
|
||||||
default:
|
default:
|
||||||
String host = Joiner.on(".").join("tools", getProjectId(), "appspot.com");
|
return HostAndPort.fromParts(
|
||||||
return HostAndPort.fromParts(host, 443);
|
String.format("tools-dot-%s.appspot.com", getProjectId()), 443);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -45,7 +45,6 @@ import java.net.URL;
|
||||||
import java.net.URLEncoder;
|
import java.net.URLEncoder;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Map.Entry;
|
import java.util.Map.Entry;
|
||||||
import org.joda.time.Duration;
|
|
||||||
import org.json.simple.JSONValue;
|
import org.json.simple.JSONValue;
|
||||||
|
|
||||||
/** An http connection to the appengine server. */
|
/** An http connection to the appengine server. */
|
||||||
|
@ -61,15 +60,6 @@ class AppEngineConnection implements Connection {
|
||||||
description = "HOST[:PORT] to which remote commands are sent.")
|
description = "HOST[:PORT] to which remote commands are sent.")
|
||||||
private HostAndPort server = RegistryEnvironment.get().config().getServer();
|
private HostAndPort server = RegistryEnvironment.get().config().getServer();
|
||||||
|
|
||||||
@Parameter(
|
|
||||||
names = "--remote_server_spec",
|
|
||||||
description = "Combined server spec for the backend to connect to for remote logging.")
|
|
||||||
private String remoteServerSpec = "gslb:apphosting-frontend:4";
|
|
||||||
|
|
||||||
@Parameter(
|
|
||||||
names = "--remote_connection_timeout",
|
|
||||||
description = "How long to wait for the remote logger server before giving up.")
|
|
||||||
private Duration remoteConnectionTimeout = Duration.standardSeconds(30);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Memoized XSRF security token.
|
* Memoized XSRF security token.
|
||||||
|
@ -95,13 +85,22 @@ class AppEngineConnection implements Connection {
|
||||||
return (matcher.find() ? matcher.group(1) : null);
|
return (matcher.find() ? matcher.group(1) : null);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Returns the HTML from the connection error stream, if any, otherwise the empty string. */
|
||||||
|
private static String getErrorHtmlAsString(HttpURLConnection connection) throws IOException {
|
||||||
|
return connection.getErrorStream() != null
|
||||||
|
? CharStreams.toString(new InputStreamReader(connection.getErrorStream(), UTF_8))
|
||||||
|
: "";
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String send(
|
public String send(
|
||||||
String endpoint, Map<String, ?> params, MediaType contentType, byte[] payload)
|
String endpoint, Map<String, ?> params, MediaType contentType, byte[] payload)
|
||||||
throws IOException {
|
throws IOException {
|
||||||
HttpURLConnection connection = getHttpURLConnection(
|
HttpURLConnection connection = getHttpURLConnection(
|
||||||
new URL(String.format("http://%s%s?%s", getServer(), endpoint, encodeParams(params))));
|
new URL(String.format("%s%s?%s", getServerUrl(), endpoint, encodeParams(params))));
|
||||||
connection.setRequestMethod("POST");
|
connection.setRequestMethod("POST");
|
||||||
|
// Disable following redirects, which we shouldn't normally encounter.
|
||||||
|
connection.setInstanceFollowRedirects(false);
|
||||||
connection.setUseCaches(false);
|
connection.setUseCaches(false);
|
||||||
connection.setRequestProperty(CONTENT_TYPE, contentType.toString());
|
connection.setRequestProperty(CONTENT_TYPE, contentType.toString());
|
||||||
connection.setRequestProperty(X_CSRF_TOKEN, xsrfToken.get());
|
connection.setRequestProperty(X_CSRF_TOKEN, xsrfToken.get());
|
||||||
|
@ -112,8 +111,7 @@ class AppEngineConnection implements Connection {
|
||||||
output.write(payload);
|
output.write(payload);
|
||||||
}
|
}
|
||||||
if (connection.getResponseCode() != HttpURLConnection.HTTP_OK) {
|
if (connection.getResponseCode() != HttpURLConnection.HTTP_OK) {
|
||||||
String errorTitle = extractHtmlTitle(
|
String errorTitle = extractHtmlTitle(getErrorHtmlAsString(connection));
|
||||||
CharStreams.toString(new InputStreamReader(connection.getErrorStream(), UTF_8)));
|
|
||||||
throw new IOException(String.format(
|
throw new IOException(String.format(
|
||||||
"Error from %s: %d %s%s",
|
"Error from %s: %d %s%s",
|
||||||
connection.getURL(),
|
connection.getURL(),
|
||||||
|
@ -151,17 +149,17 @@ class AppEngineConnection implements Connection {
|
||||||
}
|
}
|
||||||
|
|
||||||
private HttpURLConnection getHttpURLConnection(URL remoteUrl) throws IOException {
|
private HttpURLConnection getHttpURLConnection(URL remoteUrl) throws IOException {
|
||||||
// TODO: Figure out authentication.
|
// TODO(b/28219927): Figure out authentication.
|
||||||
return (HttpURLConnection) remoteUrl.openConnection();
|
return (HttpURLConnection) remoteUrl.openConnection();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getServerUrl() {
|
public String getServerUrl() {
|
||||||
return "https://" + getServer().toString().replaceFirst("\\.", "-dot-");
|
return (isLocalhost() ? "http://" : "https://") + getServer().toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
HostAndPort getServer() {
|
HostAndPort getServer() {
|
||||||
return server;
|
return server.withDefaultPort(443); // Default to HTTPS port if unspecified.
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean isLocalhost() {
|
boolean isLocalhost() {
|
||||||
|
|
|
@ -19,11 +19,14 @@ package google.registry.tools;
|
||||||
class UserIdProvider {
|
class UserIdProvider {
|
||||||
|
|
||||||
static String getTestUserId() {
|
static String getTestUserId() {
|
||||||
return "test@example.com";
|
return "test@example.com"; // Predefined default user for the development server.
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Pick up the username from an appropriate source. */
|
/** Pick up the username from an appropriate source. */
|
||||||
static String getProdUserId() {
|
static String getProdUserId() {
|
||||||
return System.getenv("USER") + "@" + System.getenv("HOSTNAME");
|
// TODO(b/28219927): fix tool authentication to use actual user credentials.
|
||||||
|
// For the time being, use the empty string so that for testing, requests without credentials
|
||||||
|
// can still pass the server-side XSRF token check (which will represent no user as "").
|
||||||
|
return "";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue