Skip to content

Commit 1eef752

Browse files
committed
adding feature flag
1 parent d39eeb7 commit 1eef752

File tree

2 files changed

+46
-26
lines changed

2 files changed

+46
-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: 45 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;
@@ -116,6 +118,7 @@
116118
*/
117119
public class WorkspaceHandler extends AbstractDirectiveHandler {
118120

121+
private static final Logger LOG = LoggerFactory.getLogger(WorkspaceHandler.class);
119122
private static final Gson GSON =
120123
new GsonBuilder().registerTypeAdapter(Schema.class, new SchemaTypeAdapter()).create();
121124
private static final Pattern PRAGMA_PATTERN = Pattern.compile("^\\s*#pragma\\s+load-directives\\s+");
@@ -126,6 +129,7 @@ public class WorkspaceHandler extends AbstractDirectiveHandler {
126129
private RecipeStore recipeStore;
127130
private ConnectionDiscoverer discoverer;
128131
private ContextAccessEnforcer contextAccessEnforcer;
132+
private boolean authEnforcementEnabled;
129133

130134
// Injected by CDAP
131135
@SuppressWarnings("unused")
@@ -138,6 +142,7 @@ public void initialize(SystemHttpServiceContext context) throws Exception {
138142
recipeStore = new RecipeStore(context);
139143
discoverer = new ConnectionDiscoverer(context);
140144
contextAccessEnforcer = context.getContextAccessEnforcer();
145+
authEnforcementEnabled = Feature.WRANGLER_WORKSPACE_AUTH_CHECK.isEnabled(context);
141146
}
142147

143148
@POST
@@ -151,9 +156,10 @@ public void createWorkspace(HttpServiceRequest request, HttpServiceResponder res
151156
}
152157

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

@@ -199,8 +205,10 @@ public void listWorkspaces(HttpServiceRequest request, HttpServiceResponder resp
199205
if (ns.getName().equalsIgnoreCase(NamespaceId.SYSTEM.getNamespace())) {
200206
throw new BadRequestException("Listing workspaces in system namespace is currently not supported");
201207
}
202-
contextAccessEnforcer.enforceOnParent(EntityType.SYSTEM_APP_ENTITY, new NamespaceId(ns.getName()),
203-
StandardPermission.LIST);
208+
if (authEnforcementEnabled) {
209+
contextAccessEnforcer.enforceOnParent(EntityType.SYSTEM_APP_ENTITY, new NamespaceId(ns.getName()),
210+
StandardPermission.LIST);
211+
}
204212
responder.sendString(GSON.toJson(new ServiceResponse<>(wsStore.listWorkspaces(ns))));
205213
});
206214
}
@@ -216,8 +224,10 @@ public void getWorkspace(HttpServiceRequest request, HttpServiceResponder respon
216224
throw new BadRequestException("Getting workspace in system namespace is currently not supported");
217225
}
218226
WorkspaceId wsId = new WorkspaceId(ns, workspaceId);
219-
contextAccessEnforcer.enforce(new WorkspaceEntityId(wsId.getNamespace().getName(), wsId.getWorkspaceId()),
220-
StandardPermission.GET);
227+
if (authEnforcementEnabled) {
228+
contextAccessEnforcer.enforce(new WorkspaceEntityId(wsId.getNamespace().getName(), wsId.getWorkspaceId()),
229+
StandardPermission.GET);
230+
}
221231
responder.sendString(GSON.toJson(wsStore.getWorkspace(wsId)));
222232
});
223233
}
@@ -236,9 +246,10 @@ public void updateWorkspace(HttpServiceRequest request, HttpServiceResponder res
236246
throw new BadRequestException("Updating workspace in system namespace is currently not supported");
237247
}
238248
WorkspaceId wsId = new WorkspaceId(ns, workspaceId);
239-
contextAccessEnforcer.enforce(new WorkspaceEntityId(wsId.getNamespace().getName(), wsId.getWorkspaceId()),
240-
StandardPermission.UPDATE);
241-
249+
if (authEnforcementEnabled) {
250+
contextAccessEnforcer.enforce(new WorkspaceEntityId(wsId.getNamespace().getName(), wsId.getWorkspaceId()),
251+
StandardPermission.UPDATE);
252+
}
242253
WorkspaceUpdateRequest updateRequest =
243254
GSON.fromJson(StandardCharsets.UTF_8.decode(request.getContent()).toString(), WorkspaceUpdateRequest.class);
244255

@@ -266,9 +277,10 @@ public void resampleWorkspace(HttpServiceRequest request, HttpServiceResponder r
266277
}
267278

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

274286
String connectionName = currentWorkspace.getSampleSpec() == null ? null :
@@ -314,8 +326,10 @@ public void deleteWorkspace(HttpServiceRequest request, HttpServiceResponder res
314326
throw new BadRequestException("Deleting workspace in system namespace is currently not supported");
315327
}
316328
WorkspaceId wsId = new WorkspaceId(ns, workspaceId);
317-
contextAccessEnforcer.enforce(new WorkspaceEntityId(wsId.getNamespace().getName(), wsId.getWorkspaceId()),
318-
StandardPermission.DELETE);
329+
if (authEnforcementEnabled) {
330+
contextAccessEnforcer.enforce(new WorkspaceEntityId(wsId.getNamespace().getName(), wsId.getWorkspaceId()),
331+
StandardPermission.DELETE);
332+
}
319333
wsStore.deleteWorkspace(wsId);
320334
responder.sendStatus(HttpURLConnection.HTTP_OK);
321335
});
@@ -335,9 +349,10 @@ public void upload(HttpServiceRequest request, HttpServiceResponder responder,
335349
}
336350

337351
WorkspaceId id = new WorkspaceId(ns);
338-
contextAccessEnforcer.enforce(new WorkspaceEntityId(id.getNamespace().getName(), id.getWorkspaceId()),
339-
StandardPermission.CREATE);
340-
352+
if (authEnforcementEnabled) {
353+
contextAccessEnforcer.enforce(new WorkspaceEntityId(id.getNamespace().getName(), id.getWorkspaceId()),
354+
StandardPermission.CREATE);
355+
}
341356
String name = request.getHeader(PropertyIds.FILE_NAME);
342357
if (name == null) {
343358
throw new BadRequestException("Name must be provided in the 'file' header");
@@ -386,9 +401,10 @@ public void execute(HttpServiceRequest request, HttpServiceResponder responder,
386401
respond(responder, namespace, ns -> {
387402
validateNamespace(ns, "Executing directives in system namespace is currently not supported");
388403
WorkspaceId wsId = new WorkspaceId(ns, workspaceId);
389-
contextAccessEnforcer.enforce(new WorkspaceEntityId(wsId.getNamespace().getName(), wsId.getWorkspaceId()),
390-
StandardPermission.USE);
391-
404+
if (authEnforcementEnabled) {
405+
contextAccessEnforcer.enforce(new WorkspaceEntityId(wsId.getNamespace().getName(), wsId.getWorkspaceId()),
406+
StandardPermission.USE);
407+
}
392408
DirectiveExecutionResponse response = execute(ns, request, wsId, null);
393409
responder.sendJson(response);
394410
});
@@ -433,8 +449,10 @@ public void specification(HttpServiceRequest request, HttpServiceResponder respo
433449
composite.reload(namespace);
434450

435451
WorkspaceId wsId = new WorkspaceId(ns, workspaceId);
436-
contextAccessEnforcer.enforce(new WorkspaceEntityId(wsId.getNamespace().getName(), wsId.getWorkspaceId()),
437-
StandardPermission.GET);
452+
if (authEnforcementEnabled) {
453+
contextAccessEnforcer.enforce(new WorkspaceEntityId(wsId.getNamespace().getName(), wsId.getWorkspaceId()),
454+
StandardPermission.GET);
455+
}
438456
WorkspaceDetail detail = wsStore.getWorkspaceDetail(wsId);
439457
List<String> directives = new ArrayList<>(detail.getWorkspace().getDirectives());
440458
UserDirectivesCollector userDirectivesCollector = new UserDirectivesCollector();
@@ -478,8 +496,10 @@ public void applyRecipe(HttpServiceRequest request, HttpServiceResponder respond
478496
respond(responder, namespace, ns -> {
479497
validateNamespace(ns, "Executing directives in system namespace is currently not supported");
480498
WorkspaceId wsId = new WorkspaceId(ns, workspaceId);
481-
contextAccessEnforcer.enforce(new WorkspaceEntityId(wsId.getNamespace().getName(), wsId.getWorkspaceId()),
482-
StandardPermission.USE);
499+
if (authEnforcementEnabled) {
500+
contextAccessEnforcer.enforce(new WorkspaceEntityId(wsId.getNamespace().getName(), wsId.getWorkspaceId()),
501+
StandardPermission.USE);
502+
}
483503
RecipeId recipeId = RecipeId.builder(ns).setRecipeId(recipeIdString).build();
484504
Recipe recipe = recipeStore.getRecipeById(recipeId);
485505

0 commit comments

Comments
 (0)