Rename CatalogAuthorizer to Authorizer (#1966)

This commit is contained in:
Matt 2021-12-29 11:37:47 -08:00 committed by GitHub
parent b8d7e2bd11
commit 4a4124d45d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
41 changed files with 98 additions and 156 deletions

View File

@ -49,8 +49,8 @@ import org.openmetadata.catalog.resources.CollectionRegistry;
import org.openmetadata.catalog.resources.config.ConfigResource;
import org.openmetadata.catalog.resources.search.SearchResource;
import org.openmetadata.catalog.security.AuthenticationConfiguration;
import org.openmetadata.catalog.security.Authorizer;
import org.openmetadata.catalog.security.AuthorizerConfiguration;
import org.openmetadata.catalog.security.CatalogAuthorizer;
import org.openmetadata.catalog.security.NoopAuthorizer;
import org.openmetadata.catalog.security.NoopFilter;
import org.openmetadata.catalog.security.auth.CatalogSecurityContextRequestFilter;
@ -61,7 +61,7 @@ import org.slf4j.LoggerFactory;
public class CatalogApplication extends Application<CatalogApplicationConfig> {
public static final Logger LOG = LoggerFactory.getLogger(CatalogApplication.class);
private Injector injector;
private CatalogAuthorizer authorizer;
private Authorizer authorizer;
public CatalogApplication() {}
@ -138,8 +138,7 @@ public class CatalogApplication extends Application<CatalogApplicationConfig> {
AuthorizerConfiguration authorizerConf = catalogConfig.getAuthorizerConfiguration();
AuthenticationConfiguration authenticationConfiguration = catalogConfig.getAuthenticationConfiguration();
if (authorizerConf != null) {
authorizer =
((Class<CatalogAuthorizer>) Class.forName(authorizerConf.getClassName())).getConstructor().newInstance();
authorizer = ((Class<Authorizer>) Class.forName(authorizerConf.getClassName())).getConstructor().newInstance();
authorizer.init(authorizerConf, jdbi);
String filterClazzName = authorizerConf.getContainerRequestFilter();
ContainerRequestFilter filter;

View File

@ -15,18 +15,18 @@ package org.openmetadata.catalog.module;
import com.google.inject.AbstractModule;
import com.google.inject.Provides;
import org.openmetadata.catalog.security.CatalogAuthorizer;
import org.openmetadata.catalog.security.Authorizer;
public class CatalogModule extends AbstractModule {
private final CatalogAuthorizer authorizer;
private final Authorizer authorizer;
public CatalogModule(CatalogAuthorizer authorizer) {
public CatalogModule(Authorizer authorizer) {
this.authorizer = authorizer;
}
// Authorizer
@Provides
public CatalogAuthorizer providesAuthorizer() {
public Authorizer providesAuthorizer() {
return authorizer;
}

View File

@ -32,7 +32,7 @@ import javax.ws.rs.core.UriInfo;
import org.jdbi.v3.core.Jdbi;
import org.openmetadata.catalog.CatalogApplicationConfig;
import org.openmetadata.catalog.jdbi3.CollectionDAO;
import org.openmetadata.catalog.security.CatalogAuthorizer;
import org.openmetadata.catalog.security.Authorizer;
import org.openmetadata.catalog.type.CollectionDescriptor;
import org.openmetadata.catalog.type.CollectionInfo;
import org.openmetadata.catalog.util.RestUtil;
@ -118,7 +118,7 @@ public final class CollectionRegistry {
/** Register resources from CollectionRegistry */
public void registerResources(
Jdbi jdbi, Environment environment, CatalogApplicationConfig config, CatalogAuthorizer authorizer) {
Jdbi jdbi, Environment environment, CatalogApplicationConfig config, Authorizer authorizer) {
// Build list of ResourceDescriptors
for (Map.Entry<String, CollectionDetails> e : collectionMap.entrySet()) {
CollectionDetails details = e.getValue();
@ -181,7 +181,7 @@ public final class CollectionRegistry {
/** Create a resource class based on dependencies declared in @Collection annotation */
private static Object createResource(
CollectionDAO daoObject, String resourceClass, CatalogApplicationConfig config, CatalogAuthorizer authorizer)
CollectionDAO daoObject, String resourceClass, CatalogApplicationConfig config, Authorizer authorizer)
throws ClassNotFoundException, NoSuchMethodException, IllegalAccessException, InvocationTargetException,
InstantiationException {
Object resource;
@ -189,8 +189,7 @@ public final class CollectionRegistry {
// Create the resource identified by resourceClass
try {
resource =
clz.getDeclaredConstructor(CollectionDAO.class, CatalogAuthorizer.class).newInstance(daoObject, authorizer);
resource = clz.getDeclaredConstructor(CollectionDAO.class, Authorizer.class).newInstance(daoObject, authorizer);
} catch (NoSuchMethodException ex) {
resource = Class.forName(resourceClass).getConstructor().newInstance();
}

View File

@ -45,7 +45,7 @@ import org.openmetadata.catalog.entity.Bots;
import org.openmetadata.catalog.jdbi3.BotsRepository;
import org.openmetadata.catalog.jdbi3.CollectionDAO;
import org.openmetadata.catalog.resources.Collection;
import org.openmetadata.catalog.security.CatalogAuthorizer;
import org.openmetadata.catalog.security.Authorizer;
import org.openmetadata.catalog.security.SecurityUtil;
import org.openmetadata.catalog.util.EntityUtil.Fields;
import org.openmetadata.catalog.util.RestUtil;
@ -59,10 +59,10 @@ import org.openmetadata.catalog.util.ResultList;
public class BotsResource {
public static final String COLLECTION_PATH = "/v1/bots/";
private final BotsRepository dao;
private final CatalogAuthorizer authorizer;
private final Authorizer authorizer;
@Inject
public BotsResource(CollectionDAO dao, CatalogAuthorizer authorizer) {
public BotsResource(CollectionDAO dao, Authorizer authorizer) {
this.dao = new BotsRepository(dao);
this.authorizer = authorizer;
}

View File

@ -60,7 +60,7 @@ import org.openmetadata.catalog.jdbi3.ChartRepository;
import org.openmetadata.catalog.jdbi3.ChartRepository.ChartEntityInterface;
import org.openmetadata.catalog.jdbi3.CollectionDAO;
import org.openmetadata.catalog.resources.Collection;
import org.openmetadata.catalog.security.CatalogAuthorizer;
import org.openmetadata.catalog.security.Authorizer;
import org.openmetadata.catalog.security.SecurityUtil;
import org.openmetadata.catalog.type.EntityHistory;
import org.openmetadata.catalog.util.EntityUtil.Fields;
@ -77,7 +77,7 @@ import org.openmetadata.catalog.util.ResultList;
public class ChartResource {
public static final String COLLECTION_PATH = "v1/charts/";
private final ChartRepository dao;
private final CatalogAuthorizer authorizer;
private final Authorizer authorizer;
public static ResultList<Chart> addHref(UriInfo uriInfo, ResultList<Chart> charts) {
Optional.ofNullable(charts.getData()).orElse(Collections.emptyList()).forEach(i -> addHref(uriInfo, i));
@ -93,7 +93,7 @@ public class ChartResource {
}
@Inject
public ChartResource(CollectionDAO dao, CatalogAuthorizer authorizer) {
public ChartResource(CollectionDAO dao, Authorizer authorizer) {
this.dao = new ChartRepository(dao);
this.authorizer = authorizer;
}

View File

@ -60,7 +60,7 @@ import org.openmetadata.catalog.entity.data.Dashboard;
import org.openmetadata.catalog.jdbi3.CollectionDAO;
import org.openmetadata.catalog.jdbi3.DashboardRepository;
import org.openmetadata.catalog.resources.Collection;
import org.openmetadata.catalog.security.CatalogAuthorizer;
import org.openmetadata.catalog.security.Authorizer;
import org.openmetadata.catalog.security.SecurityUtil;
import org.openmetadata.catalog.type.EntityHistory;
import org.openmetadata.catalog.util.EntityUtil.Fields;
@ -77,7 +77,7 @@ import org.openmetadata.catalog.util.ResultList;
public class DashboardResource {
public static final String COLLECTION_PATH = "v1/dashboards/";
private final DashboardRepository dao;
private final CatalogAuthorizer authorizer;
private final Authorizer authorizer;
public static ResultList<Dashboard> addHref(UriInfo uriInfo, ResultList<Dashboard> dashboards) {
Optional.ofNullable(dashboards.getData()).orElse(Collections.emptyList()).forEach(i -> addHref(uriInfo, i));
@ -93,7 +93,7 @@ public class DashboardResource {
}
@Inject
public DashboardResource(CollectionDAO dao, CatalogAuthorizer authorizer) {
public DashboardResource(CollectionDAO dao, Authorizer authorizer) {
Objects.requireNonNull(dao, "DashboardRepository must not be null");
this.dao = new DashboardRepository(dao);
this.authorizer = authorizer;

View File

@ -60,7 +60,7 @@ import org.openmetadata.catalog.jdbi3.CollectionDAO;
import org.openmetadata.catalog.jdbi3.DatabaseRepository;
import org.openmetadata.catalog.jdbi3.DatabaseRepository.DatabaseEntityInterface;
import org.openmetadata.catalog.resources.Collection;
import org.openmetadata.catalog.security.CatalogAuthorizer;
import org.openmetadata.catalog.security.Authorizer;
import org.openmetadata.catalog.security.SecurityUtil;
import org.openmetadata.catalog.type.EntityHistory;
import org.openmetadata.catalog.type.EntityReference;
@ -78,7 +78,7 @@ import org.openmetadata.catalog.util.ResultList;
public class DatabaseResource {
public static final String COLLECTION_PATH = "v1/databases/";
private final DatabaseRepository dao;
private final CatalogAuthorizer authorizer;
private final Authorizer authorizer;
public static ResultList<Database> addHref(UriInfo uriInfo, ResultList<Database> databases) {
Optional.ofNullable(databases.getData())
@ -104,7 +104,7 @@ public class DatabaseResource {
}
@Inject
public DatabaseResource(CollectionDAO dao, CatalogAuthorizer authorizer) {
public DatabaseResource(CollectionDAO dao, Authorizer authorizer) {
this.dao = new DatabaseRepository(dao);
this.authorizer = authorizer;
}

View File

@ -57,7 +57,7 @@ import org.openmetadata.catalog.entity.data.Table;
import org.openmetadata.catalog.jdbi3.CollectionDAO;
import org.openmetadata.catalog.jdbi3.TableRepository;
import org.openmetadata.catalog.resources.Collection;
import org.openmetadata.catalog.security.CatalogAuthorizer;
import org.openmetadata.catalog.security.Authorizer;
import org.openmetadata.catalog.security.SecurityUtil;
import org.openmetadata.catalog.type.DataModel;
import org.openmetadata.catalog.type.EntityHistory;
@ -80,7 +80,7 @@ import org.openmetadata.catalog.util.ResultList;
public class TableResource {
public static final String COLLECTION_PATH = "v1/tables/";
private final TableRepository dao;
private final CatalogAuthorizer authorizer;
private final Authorizer authorizer;
public static Table addHref(UriInfo uriInfo, Table table) {
Entity.withHref(uriInfo, table.getDatabase());
@ -91,7 +91,7 @@ public class TableResource {
}
@Inject
public TableResource(CollectionDAO dao, CatalogAuthorizer authorizer) {
public TableResource(CollectionDAO dao, Authorizer authorizer) {
this.dao = new TableRepository(dao);
this.authorizer = authorizer;
}

View File

@ -40,7 +40,7 @@ import org.openmetadata.catalog.Entity.EntityList;
import org.openmetadata.catalog.jdbi3.ChangeEventRepository;
import org.openmetadata.catalog.jdbi3.CollectionDAO;
import org.openmetadata.catalog.resources.Collection;
import org.openmetadata.catalog.security.CatalogAuthorizer;
import org.openmetadata.catalog.security.Authorizer;
import org.openmetadata.catalog.type.ChangeEvent;
import org.openmetadata.catalog.util.RestUtil;
import org.openmetadata.catalog.util.ResultList;
@ -52,7 +52,7 @@ import org.openmetadata.catalog.util.ResultList;
@Collection(name = "events")
public class EventResource {
private final ChangeEventRepository dao;
private final CatalogAuthorizer authorizer;
private final Authorizer authorizer;
public static class ChangeEventList extends ResultList<ChangeEvent> {
@ -66,7 +66,7 @@ public class EventResource {
}
@Inject
public EventResource(CollectionDAO dao, CatalogAuthorizer authorizer) {
public EventResource(CollectionDAO dao, Authorizer authorizer) {
Objects.requireNonNull(dao, "ChangeEventRepository must not be null");
this.dao = new ChangeEventRepository(dao);
this.authorizer = authorizer;

View File

@ -50,7 +50,7 @@ import org.openmetadata.catalog.api.events.CreateWebhook;
import org.openmetadata.catalog.jdbi3.CollectionDAO;
import org.openmetadata.catalog.jdbi3.WebhookRepository;
import org.openmetadata.catalog.resources.Collection;
import org.openmetadata.catalog.security.CatalogAuthorizer;
import org.openmetadata.catalog.security.Authorizer;
import org.openmetadata.catalog.security.SecurityUtil;
import org.openmetadata.catalog.type.ChangeEvent;
import org.openmetadata.catalog.type.EntityHistory;
@ -69,7 +69,7 @@ import org.openmetadata.catalog.util.ResultList;
public class WebhookResource {
public static final String COLLECTION_PATH = "v1/webhook/";
private final WebhookRepository dao;
private final CatalogAuthorizer authorizer;
private final Authorizer authorizer;
public static class WebhookList extends ResultList<Webhook> {
@ -83,7 +83,7 @@ public class WebhookResource {
}
@Inject
public WebhookResource(CollectionDAO dao, CatalogAuthorizer authorizer) {
public WebhookResource(CollectionDAO dao, Authorizer authorizer) {
Objects.requireNonNull(dao, "ChangeEventRepository must not be null");
this.dao = new WebhookRepository(dao);
this.authorizer = authorizer;

View File

@ -42,7 +42,7 @@ import org.openmetadata.catalog.entity.feed.Thread;
import org.openmetadata.catalog.jdbi3.CollectionDAO;
import org.openmetadata.catalog.jdbi3.FeedRepository;
import org.openmetadata.catalog.resources.Collection;
import org.openmetadata.catalog.security.CatalogAuthorizer;
import org.openmetadata.catalog.security.Authorizer;
import org.openmetadata.catalog.type.Post;
import org.openmetadata.catalog.util.RestUtil;
import org.openmetadata.catalog.util.ResultList;
@ -68,7 +68,7 @@ public class FeedResource {
}
@Inject
public FeedResource(CollectionDAO dao, CatalogAuthorizer authorizer) {
public FeedResource(CollectionDAO dao, Authorizer authorizer) {
Objects.requireNonNull(dao, "FeedRepository must not be null");
this.dao = new FeedRepository(dao);
}

View File

@ -44,7 +44,7 @@ import org.openmetadata.catalog.jdbi3.CollectionDAO;
import org.openmetadata.catalog.jdbi3.LineageRepository;
import org.openmetadata.catalog.resources.Collection;
import org.openmetadata.catalog.resources.teams.UserResource;
import org.openmetadata.catalog.security.CatalogAuthorizer;
import org.openmetadata.catalog.security.Authorizer;
import org.openmetadata.catalog.type.EntityLineage;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ -59,7 +59,7 @@ public class LineageResource {
private final LineageRepository dao;
@Inject
public LineageResource(CollectionDAO dao, CatalogAuthorizer authorizer) {
public LineageResource(CollectionDAO dao, Authorizer authorizer) {
Objects.requireNonNull(dao, "LineageRepository must not be null");
this.dao = new LineageRepository(dao);
}

View File

@ -58,7 +58,7 @@ import org.openmetadata.catalog.entity.data.Location;
import org.openmetadata.catalog.jdbi3.CollectionDAO;
import org.openmetadata.catalog.jdbi3.LocationRepository;
import org.openmetadata.catalog.resources.Collection;
import org.openmetadata.catalog.security.CatalogAuthorizer;
import org.openmetadata.catalog.security.Authorizer;
import org.openmetadata.catalog.security.SecurityUtil;
import org.openmetadata.catalog.type.EntityHistory;
import org.openmetadata.catalog.util.EntityUtil.Fields;
@ -75,7 +75,7 @@ import org.openmetadata.catalog.util.ResultList;
public class LocationResource {
public static final String COLLECTION_PATH = "v1/locations/";
private final LocationRepository dao;
private final CatalogAuthorizer authorizer;
private final Authorizer authorizer;
public static Location addHref(UriInfo uriInfo, Location location) {
Entity.withHref(uriInfo, location.getOwner());
@ -85,7 +85,7 @@ public class LocationResource {
}
@Inject
public LocationResource(CollectionDAO dao, CatalogAuthorizer authorizer) {
public LocationResource(CollectionDAO dao, Authorizer authorizer) {
Objects.requireNonNull(dao, "LocationRepository must not be null");
this.dao = new LocationRepository(dao);
this.authorizer = authorizer;

View File

@ -49,7 +49,7 @@ import org.openmetadata.catalog.entity.data.Metrics;
import org.openmetadata.catalog.jdbi3.CollectionDAO;
import org.openmetadata.catalog.jdbi3.MetricsRepository;
import org.openmetadata.catalog.resources.Collection;
import org.openmetadata.catalog.security.CatalogAuthorizer;
import org.openmetadata.catalog.security.Authorizer;
import org.openmetadata.catalog.util.EntityUtil.Fields;
import org.openmetadata.catalog.util.RestUtil;
import org.openmetadata.catalog.util.RestUtil.PutResponse;
@ -65,7 +65,7 @@ public class MetricsResource {
private final MetricsRepository dao;
@Inject
public MetricsResource(CollectionDAO dao, CatalogAuthorizer authorizer) {
public MetricsResource(CollectionDAO dao, Authorizer authorizer) {
Objects.requireNonNull(dao, "MetricsRepository must not be null");
this.dao = new MetricsRepository(dao);
}

View File

@ -58,7 +58,7 @@ import org.openmetadata.catalog.entity.data.MlModel;
import org.openmetadata.catalog.jdbi3.CollectionDAO;
import org.openmetadata.catalog.jdbi3.MlModelRepository;
import org.openmetadata.catalog.resources.Collection;
import org.openmetadata.catalog.security.CatalogAuthorizer;
import org.openmetadata.catalog.security.Authorizer;
import org.openmetadata.catalog.security.SecurityUtil;
import org.openmetadata.catalog.type.EntityHistory;
import org.openmetadata.catalog.util.EntityUtil.Fields;
@ -75,7 +75,7 @@ import org.openmetadata.catalog.util.ResultList;
public class MlModelResource {
public static final String COLLECTION_PATH = "v1/mlmodels/";
private final MlModelRepository dao;
private final CatalogAuthorizer authorizer;
private final Authorizer authorizer;
public static MlModel addHref(UriInfo uriInfo, MlModel mlmodel) {
mlmodel.setHref(RestUtil.getHref(uriInfo, COLLECTION_PATH, mlmodel.getId()));
@ -86,7 +86,7 @@ public class MlModelResource {
}
@Inject
public MlModelResource(CollectionDAO dao, CatalogAuthorizer authorizer) {
public MlModelResource(CollectionDAO dao, Authorizer authorizer) {
Objects.requireNonNull(dao, "ModelRepository must not be null");
this.dao = new MlModelRepository(dao);
this.authorizer = authorizer;

View File

@ -62,7 +62,7 @@ import org.openmetadata.catalog.jdbi3.CollectionDAO;
import org.openmetadata.catalog.jdbi3.IngestionRepository;
import org.openmetadata.catalog.operations.workflows.Ingestion;
import org.openmetadata.catalog.resources.Collection;
import org.openmetadata.catalog.security.CatalogAuthorizer;
import org.openmetadata.catalog.security.Authorizer;
import org.openmetadata.catalog.security.SecurityUtil;
import org.openmetadata.catalog.type.EntityHistory;
import org.openmetadata.catalog.type.EntityReference;
@ -84,7 +84,7 @@ public class IngestionResource {
public static final String COLLECTION_PATH = "operations/v1/ingestion/";
private final IngestionRepository dao;
private final CatalogAuthorizer authorizer;
private final Authorizer authorizer;
private AirflowRESTClient airflowRESTClient;
private CatalogApplicationConfig config;
@ -104,7 +104,7 @@ public class IngestionResource {
}
@Inject
public IngestionResource(CollectionDAO dao, CatalogAuthorizer authorizer) {
public IngestionResource(CollectionDAO dao, Authorizer authorizer) {
Objects.requireNonNull(dao, "IngestionRepository must not be null");
this.dao = new IngestionRepository(dao);
this.authorizer = authorizer;

View File

@ -60,7 +60,7 @@ import org.openmetadata.catalog.entity.data.Pipeline;
import org.openmetadata.catalog.jdbi3.CollectionDAO;
import org.openmetadata.catalog.jdbi3.PipelineRepository;
import org.openmetadata.catalog.resources.Collection;
import org.openmetadata.catalog.security.CatalogAuthorizer;
import org.openmetadata.catalog.security.Authorizer;
import org.openmetadata.catalog.security.SecurityUtil;
import org.openmetadata.catalog.type.EntityHistory;
import org.openmetadata.catalog.util.EntityUtil.Fields;
@ -77,7 +77,7 @@ import org.openmetadata.catalog.util.ResultList;
public class PipelineResource {
public static final String COLLECTION_PATH = "v1/pipelines/";
private final PipelineRepository dao;
private final CatalogAuthorizer authorizer;
private final Authorizer authorizer;
public static ResultList<Pipeline> addHref(UriInfo uriInfo, ResultList<Pipeline> pipelines) {
Optional.ofNullable(pipelines.getData()).orElse(Collections.emptyList()).forEach(i -> addHref(uriInfo, i));
@ -93,7 +93,7 @@ public class PipelineResource {
}
@Inject
public PipelineResource(CollectionDAO dao, CatalogAuthorizer authorizer) {
public PipelineResource(CollectionDAO dao, Authorizer authorizer) {
Objects.requireNonNull(dao, "PipelineRepository must not be null");
this.dao = new PipelineRepository(dao);
this.authorizer = authorizer;

View File

@ -60,7 +60,7 @@ import org.openmetadata.catalog.entity.policies.Policy;
import org.openmetadata.catalog.jdbi3.CollectionDAO;
import org.openmetadata.catalog.jdbi3.PolicyRepository;
import org.openmetadata.catalog.resources.Collection;
import org.openmetadata.catalog.security.CatalogAuthorizer;
import org.openmetadata.catalog.security.Authorizer;
import org.openmetadata.catalog.security.SecurityUtil;
import org.openmetadata.catalog.type.EntityHistory;
import org.openmetadata.catalog.type.EntityReference;
@ -78,7 +78,7 @@ import org.openmetadata.catalog.util.ResultList;
public class PolicyResource {
public static final String COLLECTION_PATH = "v1/policies/";
private final PolicyRepository dao;
private final CatalogAuthorizer authorizer;
private final Authorizer authorizer;
public static ResultList<Policy> addHref(UriInfo uriInfo, ResultList<Policy> policies) {
Optional.ofNullable(policies.getData()).orElse(Collections.emptyList()).forEach(i -> addHref(uriInfo, i));
@ -91,7 +91,7 @@ public class PolicyResource {
}
@Inject
public PolicyResource(CollectionDAO dao, CatalogAuthorizer authorizer) {
public PolicyResource(CollectionDAO dao, Authorizer authorizer) {
Objects.requireNonNull(dao, "PolicyRepository must not be null");
this.dao = new PolicyRepository(dao);
this.authorizer = authorizer;

View File

@ -46,7 +46,7 @@ import org.openmetadata.catalog.entity.data.Report;
import org.openmetadata.catalog.jdbi3.CollectionDAO;
import org.openmetadata.catalog.jdbi3.ReportRepository;
import org.openmetadata.catalog.resources.Collection;
import org.openmetadata.catalog.security.CatalogAuthorizer;
import org.openmetadata.catalog.security.Authorizer;
import org.openmetadata.catalog.util.EntityUtil.Fields;
import org.openmetadata.catalog.util.RestUtil.PutResponse;
import org.openmetadata.catalog.util.ResultList;
@ -61,7 +61,7 @@ public class ReportResource {
private final ReportRepository dao;
@Inject
public ReportResource(CollectionDAO dao, CatalogAuthorizer authorizer) {
public ReportResource(CollectionDAO dao, Authorizer authorizer) {
Objects.requireNonNull(dao, "ReportRepository must not be null");
this.dao = new ReportRepository(dao);
}

View File

@ -51,7 +51,7 @@ import org.openmetadata.catalog.entity.services.DashboardService;
import org.openmetadata.catalog.jdbi3.CollectionDAO;
import org.openmetadata.catalog.jdbi3.DashboardServiceRepository;
import org.openmetadata.catalog.resources.Collection;
import org.openmetadata.catalog.security.CatalogAuthorizer;
import org.openmetadata.catalog.security.Authorizer;
import org.openmetadata.catalog.security.SecurityUtil;
import org.openmetadata.catalog.type.EntityHistory;
import org.openmetadata.catalog.util.RestUtil;
@ -66,10 +66,10 @@ import org.openmetadata.catalog.util.ResultList;
public class DashboardServiceResource {
public static final String COLLECTION_PATH = "v1/services/dashboardServices";
private final DashboardServiceRepository dao;
private final CatalogAuthorizer authorizer;
private final Authorizer authorizer;
@Inject
public DashboardServiceResource(CollectionDAO dao, CatalogAuthorizer authorizer) {
public DashboardServiceResource(CollectionDAO dao, Authorizer authorizer) {
Objects.requireNonNull(dao, "DashboardServiceRepository must not be null");
this.dao = new DashboardServiceRepository(dao);
this.authorizer = authorizer;

View File

@ -51,7 +51,7 @@ import org.openmetadata.catalog.entity.services.DatabaseService;
import org.openmetadata.catalog.jdbi3.CollectionDAO;
import org.openmetadata.catalog.jdbi3.DatabaseServiceRepository;
import org.openmetadata.catalog.resources.Collection;
import org.openmetadata.catalog.security.CatalogAuthorizer;
import org.openmetadata.catalog.security.Authorizer;
import org.openmetadata.catalog.security.SecurityUtil;
import org.openmetadata.catalog.type.EntityHistory;
import org.openmetadata.catalog.util.RestUtil;
@ -66,10 +66,10 @@ import org.openmetadata.catalog.util.ResultList;
public class DatabaseServiceResource {
public static final String COLLECTION_PATH = "v1/services/databaseServices/";
private final DatabaseServiceRepository dao;
private final CatalogAuthorizer authorizer;
private final Authorizer authorizer;
@Inject
public DatabaseServiceResource(CollectionDAO dao, CatalogAuthorizer authorizer) {
public DatabaseServiceResource(CollectionDAO dao, Authorizer authorizer) {
Objects.requireNonNull(dao, "DatabaseServiceRepository must not be null");
this.dao = new DatabaseServiceRepository(dao);
this.authorizer = authorizer;

View File

@ -51,7 +51,7 @@ import org.openmetadata.catalog.entity.services.MessagingService;
import org.openmetadata.catalog.jdbi3.CollectionDAO;
import org.openmetadata.catalog.jdbi3.MessagingServiceRepository;
import org.openmetadata.catalog.resources.Collection;
import org.openmetadata.catalog.security.CatalogAuthorizer;
import org.openmetadata.catalog.security.Authorizer;
import org.openmetadata.catalog.security.SecurityUtil;
import org.openmetadata.catalog.type.EntityHistory;
import org.openmetadata.catalog.util.RestUtil;
@ -66,10 +66,10 @@ import org.openmetadata.catalog.util.ResultList;
public class MessagingServiceResource {
public static final String COLLECTION_PATH = "v1/services/messagingServices/";
private final MessagingServiceRepository dao;
private final CatalogAuthorizer authorizer;
private final Authorizer authorizer;
@Inject
public MessagingServiceResource(CollectionDAO dao, CatalogAuthorizer authorizer) {
public MessagingServiceResource(CollectionDAO dao, Authorizer authorizer) {
Objects.requireNonNull(dao, "MessagingServiceRepository must not be null");
this.dao = new MessagingServiceRepository(dao);
this.authorizer = authorizer;

View File

@ -51,7 +51,7 @@ import org.openmetadata.catalog.entity.services.PipelineService;
import org.openmetadata.catalog.jdbi3.CollectionDAO;
import org.openmetadata.catalog.jdbi3.PipelineServiceRepository;
import org.openmetadata.catalog.resources.Collection;
import org.openmetadata.catalog.security.CatalogAuthorizer;
import org.openmetadata.catalog.security.Authorizer;
import org.openmetadata.catalog.security.SecurityUtil;
import org.openmetadata.catalog.type.EntityHistory;
import org.openmetadata.catalog.type.EntityReference;
@ -67,14 +67,14 @@ import org.openmetadata.catalog.util.ResultList;
public class PipelineServiceResource {
public static final String COLLECTION_PATH = "v1/services/pipelineServices/";
private final PipelineServiceRepository dao;
private final CatalogAuthorizer authorizer;
private final Authorizer authorizer;
public static EntityReference addHref(UriInfo uriInfo, EntityReference service) {
return service.withHref(RestUtil.getHref(uriInfo, "v1/services/pipelineServices/", service.getId()));
}
@Inject
public PipelineServiceResource(CollectionDAO dao, CatalogAuthorizer authorizer) {
public PipelineServiceResource(CollectionDAO dao, Authorizer authorizer) {
Objects.requireNonNull(dao, "PipelineServiceRepository must not be null");
this.dao = new PipelineServiceRepository(dao);
this.authorizer = authorizer;

View File

@ -51,7 +51,7 @@ import org.openmetadata.catalog.entity.services.StorageService;
import org.openmetadata.catalog.jdbi3.CollectionDAO;
import org.openmetadata.catalog.jdbi3.StorageServiceRepository;
import org.openmetadata.catalog.resources.Collection;
import org.openmetadata.catalog.security.CatalogAuthorizer;
import org.openmetadata.catalog.security.Authorizer;
import org.openmetadata.catalog.security.SecurityUtil;
import org.openmetadata.catalog.type.EntityHistory;
import org.openmetadata.catalog.util.RestUtil;
@ -66,10 +66,10 @@ import org.openmetadata.catalog.util.ResultList;
public class StorageServiceResource {
public static final String COLLECTION_PATH = "v1/services/storageServices/";
private final StorageServiceRepository dao;
private final CatalogAuthorizer authorizer;
private final Authorizer authorizer;
@Inject
public StorageServiceResource(CollectionDAO dao, CatalogAuthorizer authorizer) {
public StorageServiceResource(CollectionDAO dao, Authorizer authorizer) {
Objects.requireNonNull(dao, "StorageServiceRepository must not be null");
this.dao = new StorageServiceRepository(dao);
this.authorizer = authorizer;

View File

@ -48,7 +48,7 @@ import org.openmetadata.catalog.CatalogApplicationConfig;
import org.openmetadata.catalog.jdbi3.CollectionDAO;
import org.openmetadata.catalog.jdbi3.TagRepository;
import org.openmetadata.catalog.resources.Collection;
import org.openmetadata.catalog.security.CatalogAuthorizer;
import org.openmetadata.catalog.security.Authorizer;
import org.openmetadata.catalog.security.SecurityUtil;
import org.openmetadata.catalog.type.CreateTag;
import org.openmetadata.catalog.type.CreateTagCategory;
@ -70,7 +70,7 @@ public class TagResource {
public static final Logger LOG = LoggerFactory.getLogger(TagResource.class);
public static final String TAG_COLLECTION_PATH = "/v1/tags/";
private final TagRepository dao;
private final CatalogAuthorizer authorizer;
private final Authorizer authorizer;
static class CategoryList extends ResultList<TagCategory> {
@SuppressWarnings("unused") // Empty constructor needed for deserialization
@ -82,7 +82,7 @@ public class TagResource {
}
@Inject
public TagResource(CollectionDAO dao, CatalogAuthorizer authorizer) {
public TagResource(CollectionDAO dao, Authorizer authorizer) {
Objects.requireNonNull(dao, "TagRepository must not be null");
this.dao = new TagRepository(dao);
this.authorizer = authorizer;

View File

@ -58,7 +58,7 @@ import org.openmetadata.catalog.entity.teams.Team;
import org.openmetadata.catalog.jdbi3.CollectionDAO;
import org.openmetadata.catalog.jdbi3.TeamRepository;
import org.openmetadata.catalog.resources.Collection;
import org.openmetadata.catalog.security.CatalogAuthorizer;
import org.openmetadata.catalog.security.Authorizer;
import org.openmetadata.catalog.security.SecurityUtil;
import org.openmetadata.catalog.type.EntityHistory;
import org.openmetadata.catalog.util.EntityUtil;
@ -74,7 +74,7 @@ import org.openmetadata.catalog.util.ResultList;
public class TeamResource {
public static final String COLLECTION_PATH = "/v1/teams/";
private final TeamRepository dao;
private final CatalogAuthorizer authorizer;
private final Authorizer authorizer;
public static Team addHref(UriInfo uriInfo, Team team) {
Entity.withHref(uriInfo, team.getUsers());
@ -83,7 +83,7 @@ public class TeamResource {
}
@Inject
public TeamResource(CollectionDAO dao, CatalogAuthorizer authorizer) {
public TeamResource(CollectionDAO dao, Authorizer authorizer) {
Objects.requireNonNull(dao, "TeamRepository must not be null");
this.dao = new TeamRepository(dao);
this.authorizer = authorizer;

View File

@ -63,7 +63,7 @@ import org.openmetadata.catalog.jdbi3.CollectionDAO;
import org.openmetadata.catalog.jdbi3.UserRepository;
import org.openmetadata.catalog.jdbi3.UserRepository.UserEntityInterface;
import org.openmetadata.catalog.resources.Collection;
import org.openmetadata.catalog.security.CatalogAuthorizer;
import org.openmetadata.catalog.security.Authorizer;
import org.openmetadata.catalog.security.SecurityUtil;
import org.openmetadata.catalog.type.EntityHistory;
import org.openmetadata.catalog.util.EntityUtil.Fields;
@ -82,7 +82,7 @@ public class UserResource {
public static final Logger LOG = LoggerFactory.getLogger(UserResource.class);
public static final String COLLECTION_PATH = "v1/users/";
private final UserRepository dao;
private final CatalogAuthorizer authorizer;
private final Authorizer authorizer;
public static User addHref(UriInfo uriInfo, User user) {
Entity.withHref(uriInfo, user.getTeams());
@ -92,7 +92,7 @@ public class UserResource {
}
@Inject
public UserResource(CollectionDAO dao, CatalogAuthorizer authorizer) {
public UserResource(CollectionDAO dao, Authorizer authorizer) {
Objects.requireNonNull(dao, "UserRepository must not be null");
this.dao = new UserRepository(dao);
this.authorizer = authorizer;

View File

@ -59,7 +59,7 @@ import org.openmetadata.catalog.entity.data.Topic;
import org.openmetadata.catalog.jdbi3.CollectionDAO;
import org.openmetadata.catalog.jdbi3.TopicRepository;
import org.openmetadata.catalog.resources.Collection;
import org.openmetadata.catalog.security.CatalogAuthorizer;
import org.openmetadata.catalog.security.Authorizer;
import org.openmetadata.catalog.security.SecurityUtil;
import org.openmetadata.catalog.type.EntityHistory;
import org.openmetadata.catalog.util.EntityUtil.Fields;
@ -76,7 +76,7 @@ import org.openmetadata.catalog.util.ResultList;
public class TopicResource {
public static final String COLLECTION_PATH = "v1/topics/";
private final TopicRepository dao;
private final CatalogAuthorizer authorizer;
private final Authorizer authorizer;
public static ResultList<Topic> addHref(UriInfo uriInfo, ResultList<Topic> topics) {
Optional.ofNullable(topics.getData()).orElse(Collections.emptyList()).forEach(i -> addHref(uriInfo, i));
@ -91,7 +91,7 @@ public class TopicResource {
}
@Inject
public TopicResource(CollectionDAO dao, CatalogAuthorizer authorizer) {
public TopicResource(CollectionDAO dao, Authorizer authorizer) {
this.dao = new TopicRepository(dao);
this.authorizer = authorizer;
}

View File

@ -40,7 +40,7 @@ import org.openmetadata.catalog.jdbi3.CollectionDAO;
import org.openmetadata.catalog.jdbi3.UsageRepository;
import org.openmetadata.catalog.resources.Collection;
import org.openmetadata.catalog.resources.teams.UserResource;
import org.openmetadata.catalog.security.CatalogAuthorizer;
import org.openmetadata.catalog.security.Authorizer;
import org.openmetadata.catalog.type.DailyCount;
import org.openmetadata.catalog.type.EntityUsage;
import org.openmetadata.catalog.util.RestUtil;
@ -57,7 +57,7 @@ public class UsageResource {
private final UsageRepository dao;
@Inject
public UsageResource(CollectionDAO dao, CatalogAuthorizer authorizer) {
public UsageResource(CollectionDAO dao, Authorizer authorizer) {
Objects.requireNonNull(dao, "UsageRepository must not be null");
this.dao = new UsageRepository(dao);
}

View File

@ -16,7 +16,7 @@ package org.openmetadata.catalog.security;
import org.jdbi.v3.core.Jdbi;
import org.openmetadata.catalog.type.EntityReference;
public interface CatalogAuthorizer {
public interface Authorizer {
/** Initialize the authorizer */
void init(AuthorizerConfiguration config, Jdbi jdbi);

View File

@ -27,8 +27,6 @@ public class AuthorizerConfiguration {
@NotEmpty private String principalDomain;
private CatalogAuthorizerConfiguration catalogAuthorizerConfiguration;
public String getClassName() {
return className;
}
@ -45,14 +43,6 @@ public class AuthorizerConfiguration {
this.containerRequestFilter = containerRequestFilter;
}
public CatalogAuthorizerConfiguration getCatalogAuthorizerConfiguration() {
return catalogAuthorizerConfiguration;
}
public void setCatalogAuthorizerConfiguration(CatalogAuthorizerConfiguration catalogAuthorizerConfiguration) {
this.catalogAuthorizerConfiguration = catalogAuthorizerConfiguration;
}
public Set<String> getAdminPrincipals() {
return adminPrincipals;
}

View File

@ -1,46 +0,0 @@
/*
* Copyright 2021 Collate
* 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 org.openmetadata.catalog.security;
import com.fasterxml.jackson.annotation.JsonProperty;
import java.util.Map;
import javax.validation.constraints.NotEmpty;
public class CatalogAuthorizerConfiguration {
@NotEmpty private String className;
@JsonProperty("properties")
private Map<String, Object> properties;
public String getClassName() {
return className;
}
public void setClassName(String className) {
this.className = className;
}
public Map<String, Object> getProperties() {
return properties;
}
public void setProperties(Map<String, Object> properties) {
this.properties = properties;
}
@Override
public String toString() {
return "CatalogAuthorizerConfiguration{" + "className='" + className + '\'' + ", properties=" + properties + '}';
}
}

View File

@ -34,8 +34,8 @@ import org.openmetadata.catalog.util.EntityUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class DefaultCatalogAuthorizer implements CatalogAuthorizer {
private static final Logger LOG = LoggerFactory.getLogger(DefaultCatalogAuthorizer.class);
public class DefaultAuthorizer implements Authorizer {
private static final Logger LOG = LoggerFactory.getLogger(DefaultAuthorizer.class);
private Set<String> adminUsers;
private Set<String> botUsers;
@ -46,7 +46,7 @@ public class DefaultCatalogAuthorizer implements CatalogAuthorizer {
@Override
public void init(AuthorizerConfiguration config, Jdbi dbi) {
LOG.debug("Initializing DefaultCatalogAuthorizer with config {}", config);
LOG.debug("Initializing DefaultAuthorizer with config {}", config);
this.adminUsers = new HashSet<>(config.getAdminPrincipals());
this.botUsers = new HashSet<>(config.getBotPrincipals());
this.principalDomain = config.getPrincipalDomain();

View File

@ -18,7 +18,7 @@ import org.openmetadata.catalog.type.EntityReference;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class NoopAuthorizer implements CatalogAuthorizer {
public class NoopAuthorizer implements Authorizer {
private static final Logger LOG = LoggerFactory.getLogger(NoopAuthorizer.class);
@Override

View File

@ -28,7 +28,7 @@ public final class SecurityUtil {
private SecurityUtil() {}
public static void checkAdminRole(CatalogAuthorizer authorizer, SecurityContext securityContext) {
public static void checkAdminRole(Authorizer authorizer, SecurityContext securityContext) {
Principal principal = securityContext.getUserPrincipal();
AuthenticationContext authenticationCtx = SecurityUtil.getAuthenticationContext(principal);
if (!authorizer.isAdmin(authenticationCtx)) {
@ -36,7 +36,7 @@ public final class SecurityUtil {
}
}
public static void checkAdminOrBotRole(CatalogAuthorizer authorizer, SecurityContext securityContext) {
public static void checkAdminOrBotRole(Authorizer authorizer, SecurityContext securityContext) {
Principal principal = securityContext.getUserPrincipal();
AuthenticationContext authenticationCtx = SecurityUtil.getAuthenticationContext(principal);
if (!authorizer.isAdmin(authenticationCtx) && !authorizer.isBot(authenticationCtx)) {
@ -45,7 +45,7 @@ public final class SecurityUtil {
}
public static void checkAdminRoleOrPermissions(
CatalogAuthorizer authorizer, SecurityContext securityContext, EntityReference entityReference) {
Authorizer authorizer, SecurityContext securityContext, EntityReference entityReference) {
Principal principal = securityContext.getUserPrincipal();
AuthenticationContext authenticationCtx = SecurityUtil.getAuthenticationContext(principal);
if (!authorizer.isAdmin(authenticationCtx)

View File

@ -118,7 +118,7 @@ health:
# Authorizer Configuration
authorizerConfiguration:
className: "org.openmetadata.catalog.security.DefaultCatalogAuthorizer"
className: "org.openmetadata.catalog.security.DefaultAuthorizer"
# JWT Filter
containerRequestFilter: "org.openmetadata.catalog.security.CatalogOpenIdAuthorizationRequestFilter"
adminPrincipals:

View File

@ -114,7 +114,7 @@ database:
# Authorizer Configuration
authorizerConfiguration:
className: "org.openmetadata.catalog.security.DefaultCatalogAuthorizer"
className: "org.openmetadata.catalog.security.DefaultAuthorizer"
# JWT Filter
containerRequestFilter: "org.openmetadata.catalog.security.JwtFilter"
adminPrincipals:

View File

@ -19,7 +19,7 @@ authenticationConfiguration:
```
authorizerConfiguration:
className: "org.openmetadata.catalog.security.DefaultCatalogAuthorizer"
className: "org.openmetadata.catalog.security.DefaultAuthorizer"
# JWT Filter
containerRequestFilter: "org.openmetadata.catalog.security.JwtFilter"
adminPrincipals:

View File

@ -17,7 +17,7 @@ Then, update authorizerConfiguration to add adminPrincipals.
```
authorizerConfiguration:
className: "org.openmetadata.catalog.security.DefaultCatalogAuthorizer"
className: "org.openmetadata.catalog.security.DefaultAuthorizer"
# JWT Filter
containerRequestFilter: "org.openmetadata.catalog.security.JwtFilter"
adminPrincipals:

View File

@ -17,7 +17,7 @@ authenticationConfiguration:
```
authorizerConfiguration:
className: "org.openmetadata.catalog.security.DefaultCatalogAuthorizer"
className: "org.openmetadata.catalog.security.DefaultAuthorizer"
# JWT Filter
containerRequestFilter: "org.openmetadata.catalog.security.JwtFilter"
adminPrincipals:

View File

@ -51,7 +51,7 @@ OpenMetadata uses Elasticsearch to store the Entity change events and makes it s
Elasticsearch indices are created when the [`OpenMetadata/ingestion/pipelines/metadata_to_es.json`](https://github.com/open-metadata/OpenMetadata/blob/main/ingestion/pipelines/metadata_to_es.json) ingestion connector is run.
### Authentication/Authorization
OpenMetadata uses Google OAuth for authentication. All incoming requests are filtered by validating the JWT token using the Google OAuth provider. Access control is provided by [`CatalogAuthorizer`](https://github.com/open-metadata/OpenMetadata/blob/main/catalog-rest-service/src/main/java/org/openmetadata/catalog/security/CatalogAuthorizer.java).
OpenMetadata uses Google OAuth for authentication. All incoming requests are filtered by validating the JWT token using the Google OAuth provider. Access control is provided by [`Authorizer`](https://github.com/open-metadata/OpenMetadata/blob/main/catalog-rest-service/src/main/java/org/openmetadata/catalog/security/Authorizer.java).
See the configuration file [`OpenMetadata/conf/openmetadata-security.yaml`](https://github.com/open-metadata/OpenMetadata/blob/main/conf/openmetadata-security.yaml) for the authentication and authorization configurations.