Skip to content

Commit cfdbdaf

Browse files
committed
adding feature flag
1 parent d39eeb7 commit cfdbdaf

File tree

2 files changed

+45
-26
lines changed

2 files changed

+45
-26
lines changed

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@
7272
<aws.sdk.version>1.11.133</aws.sdk.version>
7373
<bigquery.connector.hadoop2.version>0.10.2-hadoop2</bigquery.connector.hadoop2.version>
7474
<bouncycastle.version>1.56</bouncycastle.version>
75-
<cdap.version>6.11.0</cdap.version>
75+
<cdap.version>6.11.1-SNAPSHOT</cdap.version>
7676
<chlorine.version>1.1.5</chlorine.version>
7777
<commons.validator.version>1.6</commons.validator.version>
7878
<commons-io.version>2.5</commons-io.version>

wrangler-service/src/main/java/io/cdap/wrangler/service/directive/WorkspaceHandler.java

Lines changed: 44 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,8 @@
8989
import io.cdap.wrangler.utils.SchemaConverter;
9090
import io.cdap.wrangler.utils.StructuredToRowTransformer;
9191
import org.apache.commons.lang3.StringEscapeUtils;
92+
import org.slf4j.Logger;
93+
import org.slf4j.LoggerFactory;
9294

9395
import java.net.HttpURLConnection;
9496
import java.nio.charset.StandardCharsets;
@@ -126,6 +128,7 @@ public class WorkspaceHandler extends AbstractDirectiveHandler {
126128
private RecipeStore recipeStore;
127129
private ConnectionDiscoverer discoverer;
128130
private ContextAccessEnforcer contextAccessEnforcer;
131+
private boolean authEnforcementEnabled;
129132

130133
// Injected by CDAP
131134
@SuppressWarnings("unused")
@@ -138,6 +141,7 @@ public void initialize(SystemHttpServiceContext context) throws Exception {
138141
recipeStore = new RecipeStore(context);
139142
discoverer = new ConnectionDiscoverer(context);
140143
contextAccessEnforcer = context.getContextAccessEnforcer();
144+
authEnforcementEnabled = Feature.WRANGLER_WORKSPACE_AUTH_CHECK.isEnabled(context);
141145
}
142146

143147
@POST
@@ -151,9 +155,10 @@ public void createWorkspace(HttpServiceRequest request, HttpServiceResponder res
151155
}
152156

153157
WorkspaceId wsId = new WorkspaceId(ns);
154-
contextAccessEnforcer.enforce(new WorkspaceEntityId(wsId.getNamespace().getName(), wsId.getWorkspaceId()),
155-
StandardPermission.CREATE);
156-
158+
if (authEnforcementEnabled) {
159+
contextAccessEnforcer.enforce(new WorkspaceEntityId(wsId.getNamespace().getName(), wsId.getWorkspaceId()),
160+
StandardPermission.CREATE);
161+
}
157162
WorkspaceCreationRequest creationRequest =
158163
GSON.fromJson(StandardCharsets.UTF_8.decode(request.getContent()).toString(), WorkspaceCreationRequest.class);
159164

@@ -199,8 +204,10 @@ public void listWorkspaces(HttpServiceRequest request, HttpServiceResponder resp
199204
if (ns.getName().equalsIgnoreCase(NamespaceId.SYSTEM.getNamespace())) {
200205
throw new BadRequestException("Listing workspaces in system namespace is currently not supported");
201206
}
202-
contextAccessEnforcer.enforceOnParent(EntityType.SYSTEM_APP_ENTITY, new NamespaceId(ns.getName()),
203-
StandardPermission.LIST);
207+
if (authEnforcementEnabled) {
208+
contextAccessEnforcer.enforceOnParent(EntityType.SYSTEM_APP_ENTITY, new NamespaceId(ns.getName()),
209+
StandardPermission.LIST);
210+
}
204211
responder.sendString(GSON.toJson(new ServiceResponse<>(wsStore.listWorkspaces(ns))));
205212
});
206213
}
@@ -216,8 +223,10 @@ public void getWorkspace(HttpServiceRequest request, HttpServiceResponder respon
216223
throw new BadRequestException("Getting workspace in system namespace is currently not supported");
217224
}
218225
WorkspaceId wsId = new WorkspaceId(ns, workspaceId);
219-
contextAccessEnforcer.enforce(new WorkspaceEntityId(wsId.getNamespace().getName(), wsId.getWorkspaceId()),
220-
StandardPermission.GET);
226+
if (authEnforcementEnabled) {
227+
contextAccessEnforcer.enforce(new WorkspaceEntityId(wsId.getNamespace().getName(), wsId.getWorkspaceId()),
228+
StandardPermission.GET);
229+
}
221230
responder.sendString(GSON.toJson(wsStore.getWorkspace(wsId)));
222231
});
223232
}
@@ -236,9 +245,10 @@ public void updateWorkspace(HttpServiceRequest request, HttpServiceResponder res
236245
throw new BadRequestException("Updating workspace in system namespace is currently not supported");
237246
}
238247
WorkspaceId wsId = new WorkspaceId(ns, workspaceId);
239-
contextAccessEnforcer.enforce(new WorkspaceEntityId(wsId.getNamespace().getName(), wsId.getWorkspaceId()),
240-
StandardPermission.UPDATE);
241-
248+
if (authEnforcementEnabled) {
249+
contextAccessEnforcer.enforce(new WorkspaceEntityId(wsId.getNamespace().getName(), wsId.getWorkspaceId()),
250+
StandardPermission.UPDATE);
251+
}
242252
WorkspaceUpdateRequest updateRequest =
243253
GSON.fromJson(StandardCharsets.UTF_8.decode(request.getContent()).toString(), WorkspaceUpdateRequest.class);
244254

@@ -266,9 +276,10 @@ public void resampleWorkspace(HttpServiceRequest request, HttpServiceResponder r
266276
}
267277

268278
WorkspaceId wsId = new WorkspaceId(ns, workspaceId);
269-
contextAccessEnforcer.enforce(new WorkspaceEntityId(wsId.getNamespace().getName(), wsId.getWorkspaceId()),
270-
StandardPermission.UPDATE);
271-
279+
if (authEnforcementEnabled) {
280+
contextAccessEnforcer.enforce(new WorkspaceEntityId(wsId.getNamespace().getName(), wsId.getWorkspaceId()),
281+
StandardPermission.UPDATE);
282+
}
272283
Workspace currentWorkspace = wsStore.getWorkspace(wsId);
273284

274285
String connectionName = currentWorkspace.getSampleSpec() == null ? null :
@@ -314,8 +325,10 @@ public void deleteWorkspace(HttpServiceRequest request, HttpServiceResponder res
314325
throw new BadRequestException("Deleting workspace in system namespace is currently not supported");
315326
}
316327
WorkspaceId wsId = new WorkspaceId(ns, workspaceId);
317-
contextAccessEnforcer.enforce(new WorkspaceEntityId(wsId.getNamespace().getName(), wsId.getWorkspaceId()),
318-
StandardPermission.DELETE);
328+
if (authEnforcementEnabled) {
329+
contextAccessEnforcer.enforce(new WorkspaceEntityId(wsId.getNamespace().getName(), wsId.getWorkspaceId()),
330+
StandardPermission.DELETE);
331+
}
319332
wsStore.deleteWorkspace(wsId);
320333
responder.sendStatus(HttpURLConnection.HTTP_OK);
321334
});
@@ -335,9 +348,10 @@ public void upload(HttpServiceRequest request, HttpServiceResponder responder,
335348
}
336349

337350
WorkspaceId id = new WorkspaceId(ns);
338-
contextAccessEnforcer.enforce(new WorkspaceEntityId(id.getNamespace().getName(), id.getWorkspaceId()),
339-
StandardPermission.CREATE);
340-
351+
if (authEnforcementEnabled) {
352+
contextAccessEnforcer.enforce(new WorkspaceEntityId(id.getNamespace().getName(), id.getWorkspaceId()),
353+
StandardPermission.CREATE);
354+
}
341355
String name = request.getHeader(PropertyIds.FILE_NAME);
342356
if (name == null) {
343357
throw new BadRequestException("Name must be provided in the 'file' header");
@@ -386,9 +400,10 @@ public void execute(HttpServiceRequest request, HttpServiceResponder responder,
386400
respond(responder, namespace, ns -> {
387401
validateNamespace(ns, "Executing directives in system namespace is currently not supported");
388402
WorkspaceId wsId = new WorkspaceId(ns, workspaceId);
389-
contextAccessEnforcer.enforce(new WorkspaceEntityId(wsId.getNamespace().getName(), wsId.getWorkspaceId()),
390-
StandardPermission.USE);
391-
403+
if (authEnforcementEnabled) {
404+
contextAccessEnforcer.enforce(new WorkspaceEntityId(wsId.getNamespace().getName(), wsId.getWorkspaceId()),
405+
StandardPermission.USE);
406+
}
392407
DirectiveExecutionResponse response = execute(ns, request, wsId, null);
393408
responder.sendJson(response);
394409
});
@@ -433,8 +448,10 @@ public void specification(HttpServiceRequest request, HttpServiceResponder respo
433448
composite.reload(namespace);
434449

435450
WorkspaceId wsId = new WorkspaceId(ns, workspaceId);
436-
contextAccessEnforcer.enforce(new WorkspaceEntityId(wsId.getNamespace().getName(), wsId.getWorkspaceId()),
437-
StandardPermission.GET);
451+
if (authEnforcementEnabled) {
452+
contextAccessEnforcer.enforce(new WorkspaceEntityId(wsId.getNamespace().getName(), wsId.getWorkspaceId()),
453+
StandardPermission.GET);
454+
}
438455
WorkspaceDetail detail = wsStore.getWorkspaceDetail(wsId);
439456
List<String> directives = new ArrayList<>(detail.getWorkspace().getDirectives());
440457
UserDirectivesCollector userDirectivesCollector = new UserDirectivesCollector();
@@ -478,8 +495,10 @@ public void applyRecipe(HttpServiceRequest request, HttpServiceResponder respond
478495
respond(responder, namespace, ns -> {
479496
validateNamespace(ns, "Executing directives in system namespace is currently not supported");
480497
WorkspaceId wsId = new WorkspaceId(ns, workspaceId);
481-
contextAccessEnforcer.enforce(new WorkspaceEntityId(wsId.getNamespace().getName(), wsId.getWorkspaceId()),
482-
StandardPermission.USE);
498+
if (authEnforcementEnabled) {
499+
contextAccessEnforcer.enforce(new WorkspaceEntityId(wsId.getNamespace().getName(), wsId.getWorkspaceId()),
500+
StandardPermission.USE);
501+
}
483502
RecipeId recipeId = RecipeId.builder(ns).setRecipeId(recipeIdString).build();
484503
Recipe recipe = recipeStore.getRecipeById(recipeId);
485504

0 commit comments

Comments
 (0)