Clean up UiPreference
Rename UiType as it is a neutral type, not necessarily tied to a user preference. Move to client extension API package in preparation for exposing via REST API to the GWT UI. Add a convenience method for parsing, albeit without Optional as we don't have that in GWT. Change-Id: Ib2a7061ce2c34bf6d452d060cc045cf65481b208
This commit is contained in:
@@ -0,0 +1,32 @@
|
|||||||
|
// Copyright (C) 2016 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.extensions.client;
|
||||||
|
|
||||||
|
public enum UiType {
|
||||||
|
NONE,
|
||||||
|
GWT,
|
||||||
|
POLYGERRIT;
|
||||||
|
|
||||||
|
public static UiType parse(String str) {
|
||||||
|
if (str != null) {
|
||||||
|
for (UiType type : UiType.values()) {
|
||||||
|
if (type.name().equalsIgnoreCase(str)) {
|
||||||
|
return type;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -17,23 +17,17 @@ package com.google.gerrit.httpd;
|
|||||||
import static com.google.common.base.MoreObjects.firstNonNull;
|
import static com.google.common.base.MoreObjects.firstNonNull;
|
||||||
import static com.google.common.base.Preconditions.checkArgument;
|
import static com.google.common.base.Preconditions.checkArgument;
|
||||||
|
|
||||||
import com.google.common.base.Enums;
|
import com.google.gerrit.extensions.client.UiType;
|
||||||
|
|
||||||
import org.eclipse.jgit.lib.Config;
|
import org.eclipse.jgit.lib.Config;
|
||||||
|
|
||||||
public class GerritOptions {
|
public class GerritOptions {
|
||||||
public enum UiPreference {
|
|
||||||
NONE,
|
|
||||||
GWT,
|
|
||||||
POLYGERRIT;
|
|
||||||
}
|
|
||||||
|
|
||||||
private final boolean headless;
|
private final boolean headless;
|
||||||
private final boolean slave;
|
private final boolean slave;
|
||||||
private final boolean enablePolyGerrit;
|
private final boolean enablePolyGerrit;
|
||||||
private final boolean enableGwtUi;
|
private final boolean enableGwtUi;
|
||||||
private final boolean forcePolyGerritDev;
|
private final boolean forcePolyGerritDev;
|
||||||
private final UiPreference defaultUi;
|
private final UiType defaultUi;
|
||||||
|
|
||||||
public GerritOptions(Config cfg, boolean headless, boolean slave,
|
public GerritOptions(Config cfg, boolean headless, boolean slave,
|
||||||
boolean forcePolyGerritDev) {
|
boolean forcePolyGerritDev) {
|
||||||
@@ -44,24 +38,22 @@ public class GerritOptions {
|
|||||||
this.forcePolyGerritDev = forcePolyGerritDev;
|
this.forcePolyGerritDev = forcePolyGerritDev;
|
||||||
this.headless = headless || (!enableGwtUi && !enablePolyGerrit);
|
this.headless = headless || (!enableGwtUi && !enablePolyGerrit);
|
||||||
|
|
||||||
UiPreference defaultUi = enablePolyGerrit && !enableGwtUi
|
UiType defaultUi = enablePolyGerrit && !enableGwtUi
|
||||||
? UiPreference.POLYGERRIT
|
? UiType.POLYGERRIT
|
||||||
: UiPreference.GWT;
|
: UiType.GWT;
|
||||||
String uiStr = firstNonNull(
|
String uiStr = firstNonNull(
|
||||||
cfg.getString("gerrit", null, "ui"),
|
cfg.getString("gerrit", null, "ui"),
|
||||||
defaultUi.name().toUpperCase());
|
defaultUi.name());
|
||||||
this.defaultUi =
|
this.defaultUi = firstNonNull(UiType.parse(uiStr), UiType.NONE);
|
||||||
Enums.getIfPresent(UiPreference.class, uiStr).or(UiPreference.NONE);
|
|
||||||
uiStr = defaultUi.name().toLowerCase();
|
|
||||||
|
|
||||||
switch (defaultUi) {
|
switch (defaultUi) {
|
||||||
case GWT:
|
case GWT:
|
||||||
checkArgument(enableGwtUi,
|
checkArgument(enableGwtUi,
|
||||||
"gerrit.ui = %s but GWT UI is disabled", uiStr);
|
"gerrit.ui = %s but GWT UI is disabled", defaultUi);
|
||||||
break;
|
break;
|
||||||
case POLYGERRIT:
|
case POLYGERRIT:
|
||||||
checkArgument(enablePolyGerrit,
|
checkArgument(enablePolyGerrit,
|
||||||
"gerrit.ui = %s but PolyGerrit is disabled", uiStr);
|
"gerrit.ui = %s but PolyGerrit is disabled", defaultUi);
|
||||||
break;
|
break;
|
||||||
case NONE:
|
case NONE:
|
||||||
default:
|
default:
|
||||||
@@ -89,7 +81,7 @@ public class GerritOptions {
|
|||||||
return !headless && forcePolyGerritDev;
|
return !headless && forcePolyGerritDev;
|
||||||
}
|
}
|
||||||
|
|
||||||
public UiPreference defaultUi() {
|
public UiType defaultUi() {
|
||||||
return defaultUi;
|
return defaultUi;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,11 +19,10 @@ import static com.google.common.base.Preconditions.checkState;
|
|||||||
import static java.nio.file.Files.exists;
|
import static java.nio.file.Files.exists;
|
||||||
import static java.nio.file.Files.isReadable;
|
import static java.nio.file.Files.isReadable;
|
||||||
|
|
||||||
import com.google.common.base.Enums;
|
|
||||||
import com.google.common.cache.Cache;
|
import com.google.common.cache.Cache;
|
||||||
import com.google.common.collect.ImmutableList;
|
import com.google.common.collect.ImmutableList;
|
||||||
|
import com.google.gerrit.extensions.client.UiType;
|
||||||
import com.google.gerrit.httpd.GerritOptions;
|
import com.google.gerrit.httpd.GerritOptions;
|
||||||
import com.google.gerrit.httpd.GerritOptions.UiPreference;
|
|
||||||
import com.google.gerrit.httpd.XsrfCookieFilter;
|
import com.google.gerrit.httpd.XsrfCookieFilter;
|
||||||
import com.google.gerrit.httpd.raw.ResourceServlet.Resource;
|
import com.google.gerrit.httpd.raw.ResourceServlet.Resource;
|
||||||
import com.google.gerrit.launcher.GerritLauncher;
|
import com.google.gerrit.launcher.GerritLauncher;
|
||||||
@@ -514,34 +513,36 @@ public class StaticModule extends ServletModule {
|
|||||||
}
|
}
|
||||||
String param = req.getParameter("polygerrit");
|
String param = req.getParameter("polygerrit");
|
||||||
if ("1".equals(param)) {
|
if ("1".equals(param)) {
|
||||||
return setPolyGerritCookie(req, res, UiPreference.POLYGERRIT);
|
return setPolyGerritCookie(req, res, UiType.POLYGERRIT);
|
||||||
} else if ("0".equals(param)) {
|
} else if ("0".equals(param)) {
|
||||||
return setPolyGerritCookie(req, res, UiPreference.GWT);
|
return setPolyGerritCookie(req, res, UiType.GWT);
|
||||||
} else {
|
} else {
|
||||||
return isPolyGerritCookie(req);
|
return isPolyGerritCookie(req);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean isPolyGerritCookie(HttpServletRequest req) {
|
private boolean isPolyGerritCookie(HttpServletRequest req) {
|
||||||
UiPreference pref = options.defaultUi();
|
UiType type = options.defaultUi();
|
||||||
Cookie[] all = req.getCookies();
|
Cookie[] all = req.getCookies();
|
||||||
if (all != null) {
|
if (all != null) {
|
||||||
for (Cookie c : all) {
|
for (Cookie c : all) {
|
||||||
if (GERRIT_UI_COOKIE.equals(c.getName())) {
|
if (GERRIT_UI_COOKIE.equals(c.getName())) {
|
||||||
String v = c.getValue().toUpperCase();
|
UiType t = UiType.parse(c.getValue());
|
||||||
pref = Enums.getIfPresent(UiPreference.class, v).or(pref);
|
if (t != null) {
|
||||||
break;
|
type = t;
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return pref == UiPreference.POLYGERRIT;
|
return type == UiType.POLYGERRIT;
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean setPolyGerritCookie(HttpServletRequest req,
|
private boolean setPolyGerritCookie(HttpServletRequest req,
|
||||||
HttpServletResponse res, UiPreference pref) {
|
HttpServletResponse res, UiType pref) {
|
||||||
// Only actually set a cookie if both UIs are enabled in the server;
|
// Only actually set a cookie if both UIs are enabled in the server;
|
||||||
// otherwise clear it.
|
// otherwise clear it.
|
||||||
Cookie cookie = new Cookie(GERRIT_UI_COOKIE, pref.name().toLowerCase());
|
Cookie cookie = new Cookie(GERRIT_UI_COOKIE, pref.name());
|
||||||
if (options.enablePolyGerrit() && options.enableGwtUi()) {
|
if (options.enablePolyGerrit() && options.enableGwtUi()) {
|
||||||
cookie.setPath("/");
|
cookie.setPath("/");
|
||||||
cookie.setSecure(isSecure(req));
|
cookie.setSecure(isSecure(req));
|
||||||
@@ -551,7 +552,7 @@ public class StaticModule extends ServletModule {
|
|||||||
cookie.setMaxAge(0);
|
cookie.setMaxAge(0);
|
||||||
}
|
}
|
||||||
res.addCookie(cookie);
|
res.addCookie(cookie);
|
||||||
return pref == UiPreference.POLYGERRIT;
|
return pref == UiType.POLYGERRIT;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static boolean isSecure(HttpServletRequest req) {
|
private static boolean isSecure(HttpServletRequest req) {
|
||||||
|
|||||||
Reference in New Issue
Block a user