8989import io .cdap .wrangler .utils .SchemaConverter ;
9090import io .cdap .wrangler .utils .StructuredToRowTransformer ;
9191import org .apache .commons .lang3 .StringEscapeUtils ;
92+ import org .slf4j .Logger ;
93+ import org .slf4j .LoggerFactory ;
9294
9395import java .net .HttpURLConnection ;
9496import 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