diff --git a/jaxrs/src/main/java/org/killbill/billing/jaxrs/glue/DefaultJaxrsModule.java b/jaxrs/src/main/java/org/killbill/billing/jaxrs/glue/DefaultJaxrsModule.java
index 083a739..f057832 100644
--- a/jaxrs/src/main/java/org/killbill/billing/jaxrs/glue/DefaultJaxrsModule.java
+++ b/jaxrs/src/main/java/org/killbill/billing/jaxrs/glue/DefaultJaxrsModule.java
@@ -25,6 +25,7 @@ import org.killbill.billing.platform.api.KillbillConfigSource;
import org.killbill.billing.util.config.definition.JaxrsConfig;
import org.killbill.billing.util.glue.KillBillModule;
import org.skife.config.ConfigurationObjectFactory;
+import org.skife.config.TimeSpan;
public class DefaultJaxrsModule extends KillBillModule {
@@ -36,9 +37,47 @@ public class DefaultJaxrsModule extends KillBillModule {
protected void configure() {
final ConfigurationObjectFactory factory = new ConfigurationObjectFactory(skifeConfigSource);
final JaxrsConfig jaxrsConfig = factory.build(JaxrsConfig.class);
- bind(JaxrsConfig.class).toInstance(jaxrsConfig);
+ final JaxrsConfigExtended jaxrsConfigExt = new DefaultJaxrsConfigExtended(jaxrsConfig, Boolean.valueOf(skifeConfigSource.getString("org.killbill.server.test.mode")));
+ bind(JaxrsConfig.class).toInstance(jaxrsConfigExt);
+ bind(JaxrsConfigExtended.class).toInstance(jaxrsConfigExt);
bind(JaxrsUriBuilder.class).asEagerSingleton();
bind(JaxrsExecutors.class).asEagerSingleton();
bind(JaxrsService.class).to(DefaultJaxrsService.class).asEagerSingleton();
}
+
+ private final static class DefaultJaxrsConfigExtended implements JaxrsConfigExtended {
+
+ private final boolean isTestModeEnabled;
+ private final JaxrsConfig delegate;
+
+ public DefaultJaxrsConfigExtended(final JaxrsConfig delegate, final boolean isTestModeEnabled) {
+ this.delegate = delegate;
+ this.isTestModeEnabled = isTestModeEnabled;
+ }
+ @Override
+ public boolean isTestModeEnabled() {
+ return isTestModeEnabled;
+ }
+ @Override
+ public int getJaxrsThreadNb() {
+ return delegate.getJaxrsThreadNb();
+ }
+ @Override
+ public TimeSpan getJaxrsTimeout() {
+ return delegate.getJaxrsTimeout();
+ }
+ @Override
+ public boolean isJaxrsLocationFullUrl() {
+ return delegate.isJaxrsLocationFullUrl();
+ }
+ @Override
+ public boolean isJaxrsLocationUseForwardHeaders() {
+ return delegate.isJaxrsLocationUseForwardHeaders();
+ }
+ @Override
+ public String getJaxrsLocationHost() {
+ return delegate.getJaxrsLocationHost();
+ }
+ }
+
}
diff --git a/jaxrs/src/main/java/org/killbill/billing/jaxrs/glue/JaxrsConfigExtended.java b/jaxrs/src/main/java/org/killbill/billing/jaxrs/glue/JaxrsConfigExtended.java
new file mode 100644
index 0000000..828ad3b
--- /dev/null
+++ b/jaxrs/src/main/java/org/killbill/billing/jaxrs/glue/JaxrsConfigExtended.java
@@ -0,0 +1,24 @@
+/*
+ * Copyright 2014-2017 Groupon, Inc
+ * Copyright 2014-2017 The Billing Project, LLC
+ *
+ * The Billing Project licenses this file to you 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 org.killbill.billing.jaxrs.glue;
+
+import org.killbill.billing.util.config.definition.JaxrsConfig;
+
+public interface JaxrsConfigExtended extends JaxrsConfig {
+ boolean isTestModeEnabled();
+}
diff --git a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/SecurityResource.java b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/SecurityResource.java
index c537f6b..6824056 100644
--- a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/SecurityResource.java
+++ b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/SecurityResource.java
@@ -37,12 +37,14 @@ import javax.ws.rs.core.UriInfo;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.subject.Subject;
import org.killbill.billing.account.api.AccountUserApi;
+import org.killbill.billing.jaxrs.glue.JaxrsConfigExtended;
import org.killbill.billing.jaxrs.json.RoleDefinitionJson;
import org.killbill.billing.jaxrs.json.SubjectJson;
import org.killbill.billing.jaxrs.json.UserRolesJson;
import org.killbill.billing.jaxrs.util.Context;
import org.killbill.billing.jaxrs.util.JaxrsUriBuilder;
import org.killbill.billing.payment.api.PaymentApi;
+import org.killbill.billing.platform.api.KillbillConfigSource;
import org.killbill.billing.security.Permission;
import org.killbill.billing.security.SecurityApiException;
import org.killbill.billing.security.api.SecurityApi;
@@ -69,6 +71,7 @@ import static javax.ws.rs.core.MediaType.APPLICATION_JSON;
public class SecurityResource extends JaxRsResourceBase {
private final SecurityApi securityApi;
+ private final boolean isKillBillInTestMode;
@Inject
public SecurityResource(final SecurityApi securityApi,
@@ -79,8 +82,10 @@ public class SecurityResource extends JaxRsResourceBase {
final AccountUserApi accountUserApi,
final PaymentApi paymentApi,
final Clock clock,
+ final JaxrsConfigExtended jaxrsConfig,
final Context context) {
super(uriBuilder, tagUserApi, customFieldUserApi, auditUserApi, accountUserApi, paymentApi, null, clock, context);
+ this.isKillBillInTestMode = jaxrsConfig.isTestModeEnabled();
this.securityApi = securityApi;
}
@@ -94,6 +99,9 @@ public class SecurityResource extends JaxRsResourceBase {
// The getCurrentUserPermissions takes a TenantContext which is not used because permissions are cross tenants (at this point)
final TenantContext nullTenantContext = null;
final Set<Permission> permissions = securityApi.getCurrentUserPermissions(nullTenantContext);
+ if (!isKillBillInTestMode) {
+ permissions.remove(Permission.TEST_AVAILABLE);
+ }
final List<String> json = ImmutableList.<String>copyOf(Iterables.<Permission, String>transform(permissions, Functions.toStringFunction()));
return Response.status(Status.OK).entity(json).build();
}