From 3fe7b0cd76c76a8420c27f89337dbbd484341f1f Mon Sep 17 00:00:00 2001 From: Suresh Srinivas Date: Sat, 26 Mar 2022 17:18:21 -0700 Subject: [PATCH] Fixes #3691 - Move common functionality to EntityResource (#3692) * Simplify ListAfter code for reducing code verbosity * Move allowed fields functionality to EntityResource and reduce number of fields requested for authorization --- .../catalog/CatalogHealthCheck.java | 7 ++--- .../java/org/openmetadata/catalog/Entity.java | 10 ------- .../jdbi3/AirflowPipelineRepository.java | 6 ++-- .../catalog/jdbi3/BotsRepository.java | 9 +----- .../catalog/jdbi3/ChartRepository.java | 4 +-- .../catalog/jdbi3/DashboardRepository.java | 6 ++-- .../jdbi3/DashboardServiceRepository.java | 4 +-- .../catalog/jdbi3/DatabaseRepository.java | 4 +-- .../jdbi3/DatabaseServiceRepository.java | 6 ++-- .../catalog/jdbi3/EntityRepository.java | 26 +++++++++++------ .../catalog/jdbi3/GlossaryRepository.java | 4 +-- .../catalog/jdbi3/GlossaryTermRepository.java | 6 ++-- .../catalog/jdbi3/ListFilter.java | 18 ++++++++++-- .../catalog/jdbi3/LocationRepository.java | 4 +-- .../jdbi3/MessagingServiceRepository.java | 4 +-- .../catalog/jdbi3/MetricsRepository.java | 4 +-- .../catalog/jdbi3/MlModelRepository.java | 4 +-- .../catalog/jdbi3/PipelineRepository.java | 4 +-- .../jdbi3/PipelineServiceRepository.java | 4 +-- .../catalog/jdbi3/PolicyRepository.java | 7 ++--- .../catalog/jdbi3/ReportRepository.java | 11 ++----- .../catalog/jdbi3/RoleRepository.java | 25 ++++------------ .../jdbi3/StorageServiceRepository.java | 4 +-- .../catalog/jdbi3/TableRepository.java | 6 ++-- .../catalog/jdbi3/TeamRepository.java | 4 +-- .../catalog/jdbi3/TopicRepository.java | 4 +-- .../catalog/jdbi3/UserRepository.java | 7 +++-- .../catalog/jdbi3/WebhookRepository.java | 9 +----- .../catalog/resources/EntityResource.java | 10 +++++-- .../resources/charts/ChartResource.java | 14 ++++----- .../dashboards/DashboardResource.java | 10 +++---- .../resources/databases/DatabaseResource.java | 20 +++++-------- .../resources/databases/TableResource.java | 21 ++++---------- .../resources/events/WebhookResource.java | 8 ++--- .../catalog/resources/feeds/FeedResource.java | 1 - .../resources/glossary/GlossaryResource.java | 12 ++------ .../glossary/GlossaryTermResource.java | 22 +++++--------- .../resources/locations/LocationResource.java | 8 ++--- .../resources/metrics/MetricsResource.java | 2 -- .../resources/mlmodels/MlModelResource.java | 6 ++-- .../operations/AirflowPipelineResource.java | 29 +++++-------------- .../resources/pipelines/PipelineResource.java | 6 ++-- .../resources/policies/PolicyResource.java | 6 ++-- .../resources/reports/ReportResource.java | 4 +-- .../dashboard/DashboardServiceResource.java | 6 ++-- .../database/DatabaseServiceResource.java | 13 ++++----- .../messaging/MessagingServiceResource.java | 8 ++--- .../pipeline/PipelineServiceResource.java | 8 ++--- .../storage/StorageServiceResource.java | 8 ++--- .../catalog/resources/teams/RoleResource.java | 10 +++---- .../catalog/resources/teams/TeamResource.java | 20 +++++-------- .../catalog/resources/teams/UserResource.java | 10 +++---- .../resources/topics/TopicResource.java | 8 ++--- .../catalog/security/DefaultAuthorizer.java | 26 ++++++++--------- .../catalog/security/NoopAuthorizer.java | 8 ++--- .../catalog/resources/EntityResourceTest.java | 2 +- .../databases/TableResourceTest.java | 3 +- .../permissions/PermissionsResourceTest.java | 2 +- 58 files changed, 201 insertions(+), 321 deletions(-) diff --git a/catalog-rest-service/src/main/java/org/openmetadata/catalog/CatalogHealthCheck.java b/catalog-rest-service/src/main/java/org/openmetadata/catalog/CatalogHealthCheck.java index df4248cf597..0b29ee5f779 100644 --- a/catalog-rest-service/src/main/java/org/openmetadata/catalog/CatalogHealthCheck.java +++ b/catalog-rest-service/src/main/java/org/openmetadata/catalog/CatalogHealthCheck.java @@ -13,8 +13,6 @@ package org.openmetadata.catalog; -import static org.openmetadata.catalog.resources.teams.UserResource.ALLOWED_FIELDS; - import com.codahale.metrics.health.HealthCheck; import java.io.IOException; import lombok.extern.slf4j.Slf4j; @@ -22,12 +20,11 @@ import org.jdbi.v3.core.Jdbi; import org.openmetadata.catalog.jdbi3.CollectionDAO; import org.openmetadata.catalog.jdbi3.ListFilter; import org.openmetadata.catalog.jdbi3.UserRepository; -import org.openmetadata.catalog.util.EntityUtil; +import org.openmetadata.catalog.util.EntityUtil.Fields; @Slf4j public class CatalogHealthCheck extends HealthCheck { private final UserRepository userRepository; - private final EntityUtil.Fields fields = new EntityUtil.Fields(ALLOWED_FIELDS, "profile"); public CatalogHealthCheck(Jdbi jdbi) { super(); @@ -39,7 +36,7 @@ public class CatalogHealthCheck extends HealthCheck { protected Result check() throws Exception { try { ListFilter filter = new ListFilter(); - userRepository.listAfter(null, fields, filter, 1, null); + userRepository.listAfter(null, Fields.EMPTY_FIELDS, filter, 1, null); return Result.healthy(); } catch (IOException e) { LOG.error("Health check error {}", e.getMessage()); diff --git a/catalog-rest-service/src/main/java/org/openmetadata/catalog/Entity.java b/catalog-rest-service/src/main/java/org/openmetadata/catalog/Entity.java index bf2ca8e9a96..7190f19843d 100644 --- a/catalog-rest-service/src/main/java/org/openmetadata/catalog/Entity.java +++ b/catalog-rest-service/src/main/java/org/openmetadata/catalog/Entity.java @@ -216,21 +216,11 @@ public final class Entity { return entityRepository.getEntityInterface(entity); } - public static T getEntity(EntityReference ref, EntityUtil.Fields fields) throws IOException, ParseException { - return getEntity(ref, fields, Include.NON_DELETED); - } - public static T getEntity(EntityReference ref, EntityUtil.Fields fields, Include include) throws IOException, ParseException { return getEntity(ref.getType(), ref.getId(), fields, include); } - /** Retrieve the entity using id from given entity reference and fields */ - public static T getEntity(String entityType, UUID id, EntityUtil.Fields fields) - throws IOException, ParseException { - return getEntity(entityType, id, fields, Include.NON_DELETED); - } - /** Retrieve the entity using id from given entity reference and fields */ public static T getEntity(String entityType, UUID id, EntityUtil.Fields fields, Include include) throws IOException, ParseException { diff --git a/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/AirflowPipelineRepository.java b/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/AirflowPipelineRepository.java index f2a092d86f0..b658848d62d 100644 --- a/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/AirflowPipelineRepository.java +++ b/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/AirflowPipelineRepository.java @@ -31,10 +31,8 @@ import org.openmetadata.catalog.util.EntityUtil; import org.openmetadata.catalog.util.EntityUtil.Fields; public class AirflowPipelineRepository extends EntityRepository { - private static final Fields AIRFLOW_PIPELINE_UPDATE_FIELDS = - new Fields(AirflowPipelineResource.ALLOWED_FIELDS, FIELD_OWNER); - private static final Fields AIRFLOW_PIPELINE_PATCH_FIELDS = - new Fields(AirflowPipelineResource.ALLOWED_FIELDS, FIELD_OWNER); + private static final String AIRFLOW_PIPELINE_UPDATE_FIELDS = FIELD_OWNER; + private static final String AIRFLOW_PIPELINE_PATCH_FIELDS = FIELD_OWNER; public AirflowPipelineRepository(CollectionDAO dao) { super( diff --git a/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/BotsRepository.java b/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/BotsRepository.java index 0184bf02910..9bfbdf4e1a9 100644 --- a/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/BotsRepository.java +++ b/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/BotsRepository.java @@ -26,14 +26,7 @@ import org.openmetadata.catalog.util.EntityUtil.Fields; public class BotsRepository extends EntityRepository { public BotsRepository(CollectionDAO dao) { - super( - BotsResource.COLLECTION_PATH, - Entity.BOTS, - Bots.class, - dao.botsDAO(), - dao, - Fields.EMPTY_FIELDS, - Fields.EMPTY_FIELDS); + super(BotsResource.COLLECTION_PATH, Entity.BOTS, Bots.class, dao.botsDAO(), dao, "", ""); } @Override diff --git a/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/ChartRepository.java b/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/ChartRepository.java index 3a9727c109a..2145f8e4aca 100644 --- a/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/ChartRepository.java +++ b/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/ChartRepository.java @@ -38,8 +38,8 @@ import org.openmetadata.catalog.util.EntityUtil.Fields; @Slf4j public class ChartRepository extends EntityRepository { - private static final Fields CHART_UPDATE_FIELDS = new Fields(ChartResource.ALLOWED_FIELDS, "owner"); - private static final Fields CHART_PATCH_FIELDS = new Fields(ChartResource.ALLOWED_FIELDS, "owner,tags"); + private static final String CHART_UPDATE_FIELDS = "owner"; + private static final String CHART_PATCH_FIELDS = "owner,tags"; public ChartRepository(CollectionDAO dao) { super( diff --git a/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/DashboardRepository.java b/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/DashboardRepository.java index ff916b9a142..d0616137b14 100644 --- a/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/DashboardRepository.java +++ b/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/DashboardRepository.java @@ -39,10 +39,8 @@ import org.openmetadata.catalog.util.EntityUtil; import org.openmetadata.catalog.util.EntityUtil.Fields; public class DashboardRepository extends EntityRepository { - private static final Fields DASHBOARD_UPDATE_FIELDS = - new Fields(DashboardResource.ALLOWED_FIELDS, "owner,tags,charts"); - private static final Fields DASHBOARD_PATCH_FIELDS = - new Fields(DashboardResource.ALLOWED_FIELDS, "owner,tags,charts"); + private static final String DASHBOARD_UPDATE_FIELDS = "owner,tags,charts"; + private static final String DASHBOARD_PATCH_FIELDS = "owner,tags,charts"; public DashboardRepository(CollectionDAO dao) { super( diff --git a/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/DashboardServiceRepository.java b/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/DashboardServiceRepository.java index 5043d216a07..83bd7ce157b 100644 --- a/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/DashboardServiceRepository.java +++ b/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/DashboardServiceRepository.java @@ -31,7 +31,7 @@ import org.openmetadata.catalog.util.EntityUtil; import org.openmetadata.catalog.util.EntityUtil.Fields; public class DashboardServiceRepository extends EntityRepository { - private static final Fields UPDATE_FIELDS = new Fields(DashboardServiceResource.ALLOWED_FIELDS, "owner"); + private static final String UPDATE_FIELDS = "owner"; public DashboardServiceRepository(CollectionDAO dao) { super( @@ -40,7 +40,7 @@ public class DashboardServiceRepository extends EntityRepository { - private static final Fields DATABASE_UPDATE_FIELDS = new Fields(DatabaseResource.ALLOWED_FIELDS, "owner"); - private static final Fields DATABASE_PATCH_FIELDS = DATABASE_UPDATE_FIELDS; + private static final String DATABASE_UPDATE_FIELDS = "owner"; + private static final String DATABASE_PATCH_FIELDS = DATABASE_UPDATE_FIELDS; public DatabaseRepository(CollectionDAO dao) { super( diff --git a/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/DatabaseServiceRepository.java b/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/DatabaseServiceRepository.java index 8337a4e5d3b..032dbb2de0b 100644 --- a/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/DatabaseServiceRepository.java +++ b/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/DatabaseServiceRepository.java @@ -40,7 +40,7 @@ import org.openmetadata.catalog.util.EntityUtil.Fields; import org.openmetadata.catalog.util.JsonUtils; public class DatabaseServiceRepository extends EntityRepository { - private static final Fields UPDATE_FIELDS = new Fields(DatabaseServiceResource.ALLOWED_FIELDS, "owner"); + private static final String UPDATE_FIELDS = "owner"; private final Fernet fernet; public DatabaseServiceRepository(CollectionDAO dao) { @@ -50,7 +50,7 @@ public class DatabaseServiceRepository extends EntityRepository DatabaseService.class, dao.dbServiceDAO(), dao, - Fields.EMPTY_FIELDS, + "", UPDATE_FIELDS); fernet = Fernet.getInstance(); } @@ -59,7 +59,7 @@ public class DatabaseServiceRepository extends EntityRepository if (!fernet.isKeyDefined()) { throw new IllegalArgumentException(CatalogExceptionMessage.FERNET_KEY_NULL); } - ListFilter filter = new ListFilter().addQueryParam("include", Include.ALL.value()); + ListFilter filter = new ListFilter(Include.NON_DELETED); List jsons = dao.listAfter(filter, Integer.MAX_VALUE, ""); for (String json : jsons) { DatabaseService databaseService = JsonUtils.readValue(json, DatabaseService.class); diff --git a/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/EntityRepository.java b/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/EntityRepository.java index 97758d75664..301788448ad 100644 --- a/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/EntityRepository.java +++ b/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/EntityRepository.java @@ -113,6 +113,7 @@ public abstract class EntityRepository { private final String entityType; protected final EntityDAO dao; protected final CollectionDAO daoCollection; + protected final List allowedFields; protected boolean supportsSoftDelete = true; protected final boolean supportsTags; protected final boolean supportsOwner; @@ -130,17 +131,17 @@ public abstract class EntityRepository { Class entityClass, EntityDAO entityDAO, CollectionDAO collectionDAO, - Fields patchFields, - Fields putFields) { + String patchFields, + String putFields) { this.collectionPath = collectionPath; this.entityClass = entityClass; + allowedFields = getEntityFields(entityClass); this.dao = entityDAO; this.daoCollection = collectionDAO; - this.patchFields = patchFields; - this.putFields = putFields; + this.patchFields = getFields(patchFields); + this.putFields = getFields(putFields); this.entityType = entityType; - List allowedFields = getEntityFields(entityClass); this.supportsTags = allowedFields.contains("tags"); this.supportsOwner = allowedFields.contains("owner"); this.supportsFollower = allowedFields.contains("followers"); @@ -571,14 +572,14 @@ public abstract class EntityRepository { } } - public static final Fields FIELDS_OWNER = new Fields(List.of(FIELD_OWNER), FIELD_OWNER); - - // TODO fix this public final EntityReference getOriginalOwner(T entity) throws IOException, ParseException { + if (!supportsOwner) { + return null; + } // Try to find the owner if entity exists try { String fqn = getFullyQualifiedName(entity); - entity = getByName(null, fqn, FIELDS_OWNER); + entity = getByName(null, fqn, getFields(FIELD_OWNER)); return getEntityInterface(entity).getOwner(); } catch (EntityNotFoundException e) { // If entity is not found, we can return null for owner and ignore this exception @@ -794,6 +795,9 @@ public abstract class EntityRepository { } public EntityReference getOwner(UUID id, String entityType) throws IOException, ParseException { + if (!supportsOwner) { + return null; + } List refs = findFrom(id, entityType, Relationship.OWNS); ensureSingleRelationship(entityType, id, refs, "owners", false); return refs.isEmpty() ? null : Entity.getEntityReferenceById(refs.get(0).getType(), refs.get(0).getId(), ALL); @@ -834,6 +838,10 @@ public abstract class EntityRepository { } } + public final Fields getFields(String fields) { + return new Fields(allowedFields, fields); + } + enum Operation { PUT, PATCH, diff --git a/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/GlossaryRepository.java b/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/GlossaryRepository.java index 7c67ccc0f4a..988dc23add9 100644 --- a/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/GlossaryRepository.java +++ b/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/GlossaryRepository.java @@ -40,8 +40,8 @@ import org.openmetadata.catalog.util.EntityUtil.Fields; import org.openmetadata.catalog.util.JsonUtils; public class GlossaryRepository extends EntityRepository { - private static final Fields UPDATE_FIELDS = new Fields(GlossaryResource.ALLOWED_FIELDS, "owner,tags,reviewers"); - private static final Fields PATCH_FIELDS = new Fields(GlossaryResource.ALLOWED_FIELDS, "owner,tags,reviewers"); + private static final String UPDATE_FIELDS = "owner,tags,reviewers"; + private static final String PATCH_FIELDS = "owner,tags,reviewers"; public GlossaryRepository(CollectionDAO dao) { super( diff --git a/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/GlossaryTermRepository.java b/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/GlossaryTermRepository.java index 1e2f863acd8..cdc44fa7b49 100644 --- a/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/GlossaryTermRepository.java +++ b/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/GlossaryTermRepository.java @@ -46,10 +46,8 @@ import org.openmetadata.catalog.util.JsonUtils; @Slf4j public class GlossaryTermRepository extends EntityRepository { - private static final Fields UPDATE_FIELDS = - new Fields(GlossaryTermResource.ALLOWED_FIELDS, "tags,references,relatedTerms,reviewers,synonyms"); - private static final Fields PATCH_FIELDS = - new Fields(GlossaryTermResource.ALLOWED_FIELDS, "tags,references,relatedTerms,reviewers,synonyms"); + private static final String UPDATE_FIELDS = "tags,references,relatedTerms,reviewers,synonyms"; + private static final String PATCH_FIELDS = "tags,references,relatedTerms,reviewers,synonyms"; public GlossaryTermRepository(CollectionDAO dao) { super( diff --git a/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/ListFilter.java b/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/ListFilter.java index a9620347fa8..31836fe0c81 100644 --- a/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/ListFilter.java +++ b/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/ListFilter.java @@ -3,16 +3,29 @@ package org.openmetadata.catalog.jdbi3; import java.util.HashMap; import java.util.Map; import org.openmetadata.catalog.Entity; +import org.openmetadata.catalog.type.Include; public class ListFilter { + private final Include include; Map queryParams = new HashMap<>(); + public ListFilter() { + this(Include.NON_DELETED); + } + + public ListFilter(Include include) { + this.include = include; + } + public ListFilter addQueryParam(String name, String value) { queryParams.put(name, value); return this; } public String getQueryParam(String name) { + if (name.equals("include")) { + return include.value(); + } return queryParams.get(name); } @@ -29,12 +42,11 @@ public class ListFilter { } public String getIncludeCondition(String tableName) { - String include = queryParams.get("include"); String columnName = tableName == null ? "deleted" : tableName + ".deleted"; - if (include == null || include.equals("non-deleted")) { + if (include == Include.NON_DELETED) { return columnName + " = false"; } - if (include.equals("deleted")) { + if (include == Include.DELETED) { return columnName + " = true"; } return ""; diff --git a/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/LocationRepository.java b/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/LocationRepository.java index 0bd2e7168b0..ce05af717fb 100644 --- a/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/LocationRepository.java +++ b/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/LocationRepository.java @@ -41,9 +41,9 @@ import org.openmetadata.catalog.util.ResultList; public class LocationRepository extends EntityRepository { // Location fields that can be patched in a PATCH request - private static final Fields LOCATION_PATCH_FIELDS = new Fields(LocationResource.ALLOWED_FIELDS, "owner,tags"); + private static final String LOCATION_PATCH_FIELDS = "owner,tags"; // Location fields that can be updated in a PUT request - private static final Fields LOCATION_UPDATE_FIELDS = new Fields(LocationResource.ALLOWED_FIELDS, "owner,tags"); + private static final String LOCATION_UPDATE_FIELDS = "owner,tags"; public LocationRepository(CollectionDAO dao) { super( diff --git a/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/MessagingServiceRepository.java b/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/MessagingServiceRepository.java index 3f8233b9e6f..906c6bb6804 100644 --- a/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/MessagingServiceRepository.java +++ b/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/MessagingServiceRepository.java @@ -32,7 +32,7 @@ import org.openmetadata.catalog.util.EntityUtil; import org.openmetadata.catalog.util.EntityUtil.Fields; public class MessagingServiceRepository extends EntityRepository { - private static final Fields UPDATE_FIELDS = new Fields(MessagingServiceResource.ALLOWED_FIELDS, "owner"); + private static final String UPDATE_FIELDS = "owner"; public MessagingServiceRepository(CollectionDAO dao) { super( @@ -41,7 +41,7 @@ public class MessagingServiceRepository extends EntityRepository { - private static final Fields METRICS_UPDATE_FIELDS = new Fields(MetricsResource.ALLOWED_FIELDS, "owner"); + private static final String METRICS_UPDATE_FIELDS = "owner"; public MetricsRepository(CollectionDAO dao) { super( @@ -43,7 +43,7 @@ public class MetricsRepository extends EntityRepository { Metrics.class, dao.metricsDAO(), dao, - Fields.EMPTY_FIELDS, + "", METRICS_UPDATE_FIELDS); } diff --git a/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/MlModelRepository.java b/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/MlModelRepository.java index 3ff21f77db4..f40b86c6ee2 100644 --- a/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/MlModelRepository.java +++ b/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/MlModelRepository.java @@ -45,8 +45,8 @@ import org.openmetadata.catalog.util.EntityUtil.Fields; @Slf4j public class MlModelRepository extends EntityRepository { - private static final Fields MODEL_UPDATE_FIELDS = new Fields(MlModelResource.ALLOWED_FIELDS, "owner,dashboard,tags"); - private static final Fields MODEL_PATCH_FIELDS = new Fields(MlModelResource.ALLOWED_FIELDS, "owner,dashboard,tags"); + private static final String MODEL_UPDATE_FIELDS = "owner,dashboard,tags"; + private static final String MODEL_PATCH_FIELDS = "owner,dashboard,tags"; public MlModelRepository(CollectionDAO dao) { super( diff --git a/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/PipelineRepository.java b/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/PipelineRepository.java index c3699e5d5b2..cee47df0f58 100644 --- a/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/PipelineRepository.java +++ b/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/PipelineRepository.java @@ -48,8 +48,8 @@ import org.openmetadata.catalog.util.EntityUtil.Fields; import org.openmetadata.catalog.util.JsonUtils; public class PipelineRepository extends EntityRepository { - private static final Fields PIPELINE_UPDATE_FIELDS = new Fields(PipelineResource.ALLOWED_FIELDS, "owner,tags,tasks"); - private static final Fields PIPELINE_PATCH_FIELDS = new Fields(PipelineResource.ALLOWED_FIELDS, "owner,tags,tasks"); + private static final String PIPELINE_UPDATE_FIELDS = "owner,tags,tasks"; + private static final String PIPELINE_PATCH_FIELDS = "owner,tags,tasks"; public PipelineRepository(CollectionDAO dao) { super( diff --git a/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/PipelineServiceRepository.java b/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/PipelineServiceRepository.java index f162c55a59d..f041b216c83 100644 --- a/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/PipelineServiceRepository.java +++ b/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/PipelineServiceRepository.java @@ -29,7 +29,7 @@ import org.openmetadata.catalog.util.EntityUtil; import org.openmetadata.catalog.util.EntityUtil.Fields; public class PipelineServiceRepository extends EntityRepository { - private static final Fields UPDATE_FIELDS = new Fields(PipelineServiceResource.ALLOWED_FIELDS, "owner"); + private static final String UPDATE_FIELDS = "owner"; public PipelineServiceRepository(CollectionDAO dao) { super( @@ -38,7 +38,7 @@ public class PipelineServiceRepository extends EntityRepository PipelineService.class, dao.pipelineServiceDAO(), dao, - Fields.EMPTY_FIELDS, + "", UPDATE_FIELDS); } diff --git a/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/PolicyRepository.java b/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/PolicyRepository.java index 00825fb83da..06fabfcddf6 100644 --- a/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/PolicyRepository.java +++ b/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/PolicyRepository.java @@ -36,7 +36,6 @@ import org.openmetadata.catalog.resources.policies.PolicyResource; import org.openmetadata.catalog.security.policyevaluator.PolicyEvaluator; import org.openmetadata.catalog.type.ChangeDescription; import org.openmetadata.catalog.type.EntityReference; -import org.openmetadata.catalog.type.Include; import org.openmetadata.catalog.type.MetadataOperation; import org.openmetadata.catalog.type.PolicyType; import org.openmetadata.catalog.type.Relationship; @@ -47,8 +46,8 @@ import org.openmetadata.catalog.util.JsonUtils; @Slf4j public class PolicyRepository extends EntityRepository { - private static final Fields POLICY_UPDATE_FIELDS = new Fields(PolicyResource.ALLOWED_FIELDS, "owner,location"); - private static final Fields POLICY_PATCH_FIELDS = new Fields(PolicyResource.ALLOWED_FIELDS, "owner,location"); + private static final String POLICY_UPDATE_FIELDS = "owner,location"; + private static final String POLICY_PATCH_FIELDS = "owner,location"; public static final String ENABLED = "enabled"; private final PolicyEvaluator policyEvaluator; @@ -206,7 +205,7 @@ public class PolicyRepository extends EntityRepository { private List getAccessControlPolicies() throws IOException, ParseException { EntityUtil.Fields fields = new EntityUtil.Fields(List.of("policyType", "rules", ENABLED)); - ListFilter filter = new ListFilter().addQueryParam("include", Include.NON_DELETED.value()); + ListFilter filter = new ListFilter(); List jsons = daoCollection.policyDAO().listAfter(filter, Integer.MAX_VALUE, ""); List policies = new ArrayList<>(jsons.size()); for (String json : jsons) { diff --git a/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/ReportRepository.java b/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/ReportRepository.java index 456f9db4db4..225a3e87dbe 100644 --- a/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/ReportRepository.java +++ b/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/ReportRepository.java @@ -34,17 +34,10 @@ import org.openmetadata.catalog.util.EntityUtil.Fields; @Slf4j public class ReportRepository extends EntityRepository { - private static final Fields REPORT_UPDATE_FIELDS = new Fields(ReportResource.ALLOWED_FIELDS, "owner"); + private static final String REPORT_UPDATE_FIELDS = "owner"; public ReportRepository(CollectionDAO dao) { - super( - ReportResource.COLLECTION_PATH, - Entity.REPORT, - Report.class, - dao.reportDAO(), - dao, - Fields.EMPTY_FIELDS, - REPORT_UPDATE_FIELDS); + super(ReportResource.COLLECTION_PATH, Entity.REPORT, Report.class, dao.reportDAO(), dao, "", REPORT_UPDATE_FIELDS); } @Override diff --git a/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/RoleRepository.java b/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/RoleRepository.java index 68ad1858331..3d425d91485 100644 --- a/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/RoleRepository.java +++ b/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/RoleRepository.java @@ -37,7 +37,6 @@ import org.openmetadata.catalog.exception.EntityNotFoundException; import org.openmetadata.catalog.resources.teams.RoleResource; import org.openmetadata.catalog.type.ChangeDescription; import org.openmetadata.catalog.type.EntityReference; -import org.openmetadata.catalog.type.Include; import org.openmetadata.catalog.type.PolicyType; import org.openmetadata.catalog.type.Relationship; import org.openmetadata.catalog.util.EntityInterface; @@ -48,18 +47,8 @@ import org.openmetadata.catalog.util.ResultList; @Slf4j public class RoleRepository extends EntityRepository { - static final Fields ROLE_UPDATE_FIELDS = new Fields(RoleResource.ALLOWED_FIELDS, null); - static final Fields ROLE_PATCH_FIELDS = new Fields(RoleResource.ALLOWED_FIELDS, null); - public RoleRepository(CollectionDAO dao) { - super( - RoleResource.COLLECTION_PATH, - Entity.ROLE, - Role.class, - dao.roleDAO(), - dao, - ROLE_PATCH_FIELDS, - ROLE_UPDATE_FIELDS); + super(RoleResource.COLLECTION_PATH, Entity.ROLE, Role.class, dao.roleDAO(), dao, "", ""); } @Override @@ -328,7 +317,7 @@ public class RoleRepository extends EntityRepository { } private void setDefaultToTrue(Role role) throws IOException, ParseException { - List defaultRoles = getDefaultRoles(null, ROLE_PATCH_FIELDS); + List defaultRoles = getDefaultRoles(null, Fields.EMPTY_FIELDS); EntityRepository roleRepository = Entity.getEntityRepository(Entity.ROLE); // Set default=FALSE for all existing default roles. for (Role defaultRole : defaultRoles) { @@ -336,8 +325,8 @@ public class RoleRepository extends EntityRepository { // Skip the current role which is being set with default=TRUE. continue; } - Role origDefaultRole = roleRepository.get(null, defaultRole.getId().toString(), ROLE_PATCH_FIELDS); - Role updatedDefaultRole = roleRepository.get(null, defaultRole.getId().toString(), ROLE_PATCH_FIELDS); + Role origDefaultRole = roleRepository.get(null, defaultRole.getId().toString(), Fields.EMPTY_FIELDS); + Role updatedDefaultRole = roleRepository.get(null, defaultRole.getId().toString(), Fields.EMPTY_FIELDS); updatedDefaultRole = updatedDefaultRole.withDefaultRole(false); new RoleUpdater(origDefaultRole, updatedDefaultRole, Operation.PATCH).update(); } @@ -366,10 +355,8 @@ public class RoleRepository extends EntityRepository { // Assumptions: // - we will not have more than Integer.MAX_VALUE users in the system. // - we do not need to update deleted user's roles. - ListFilter filter = new ListFilter().addQueryParam("include", Include.NON_DELETED.value()); - return userRepository - .listAfter(null, UserRepository.USER_UPDATE_FIELDS, filter, Integer.MAX_VALUE - 1, null) - .getData(); + ListFilter filter = new ListFilter(); + return userRepository.listAfter(null, Fields.EMPTY_FIELDS, filter, Integer.MAX_VALUE - 1, null).getData(); } catch (GeneralSecurityException | IOException | ParseException e) { throw EntityNotFoundException.byMessage(CatalogExceptionMessage.entitiesNotFound(Entity.USER)); } diff --git a/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/StorageServiceRepository.java b/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/StorageServiceRepository.java index 36363521be7..5e5166a637f 100644 --- a/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/StorageServiceRepository.java +++ b/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/StorageServiceRepository.java @@ -28,7 +28,7 @@ import org.openmetadata.catalog.type.EntityReference; import org.openmetadata.catalog.util.EntityInterface; public class StorageServiceRepository extends EntityRepository { - private static final Fields UPDATE_FIELDS = new Fields(StorageServiceResource.ALLOWED_FIELDS, "owner"); + private static final String UPDATE_FIELDS = "owner"; public StorageServiceRepository(CollectionDAO dao) { super( @@ -37,7 +37,7 @@ public class StorageServiceRepository extends EntityRepository { StorageService.class, dao.storageServiceDAO(), dao, - Fields.EMPTY_FIELDS, + "", UPDATE_FIELDS); } diff --git a/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/TableRepository.java b/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/TableRepository.java index 12a002bd63e..97d44b22c34 100644 --- a/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/TableRepository.java +++ b/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/TableRepository.java @@ -81,11 +81,9 @@ import org.openmetadata.common.utils.CommonUtil; @Slf4j public class TableRepository extends EntityRepository { // Table fields that can be patched in a PATCH request - static final Fields TABLE_PATCH_FIELDS = - new Fields(TableResource.ALLOWED_FIELDS, "owner,tags,tableConstraints,tablePartition"); + static final String TABLE_PATCH_FIELDS = "owner,tags,tableConstraints,tablePartition"; // Table fields that can be updated in a PUT request - static final Fields TABLE_UPDATE_FIELDS = - new Fields(TableResource.ALLOWED_FIELDS, "owner,tags,tableConstraints,tablePartition,dataModel,profileSample"); + static final String TABLE_UPDATE_FIELDS = "owner,tags,tableConstraints,tablePartition,dataModel,profileSample"; public TableRepository(CollectionDAO dao) { super( diff --git a/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/TeamRepository.java b/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/TeamRepository.java index 72447becb6d..2f21d7ed509 100644 --- a/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/TeamRepository.java +++ b/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/TeamRepository.java @@ -35,8 +35,8 @@ import org.openmetadata.catalog.util.EntityUtil; import org.openmetadata.catalog.util.EntityUtil.Fields; public class TeamRepository extends EntityRepository { - static final Fields TEAM_UPDATE_FIELDS = new Fields(TeamResource.ALLOWED_FIELDS, "owner,profile,users,defaultRoles"); - static final Fields TEAM_PATCH_FIELDS = new Fields(TeamResource.ALLOWED_FIELDS, "owner,profile,users,defaultRoles"); + static final String TEAM_UPDATE_FIELDS = "owner,profile,users,defaultRoles"; + static final String TEAM_PATCH_FIELDS = "owner,profile,users,defaultRoles"; public TeamRepository(CollectionDAO dao) { super(TeamResource.COLLECTION_PATH, TEAM, Team.class, dao.teamDAO(), dao, TEAM_PATCH_FIELDS, TEAM_UPDATE_FIELDS); diff --git a/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/TopicRepository.java b/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/TopicRepository.java index 26cbe93c4d8..4e09ca4efac 100644 --- a/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/TopicRepository.java +++ b/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/TopicRepository.java @@ -39,8 +39,8 @@ import org.openmetadata.catalog.util.EntityUtil; import org.openmetadata.catalog.util.EntityUtil.Fields; public class TopicRepository extends EntityRepository { - private static final Fields TOPIC_UPDATE_FIELDS = new Fields(TopicResource.ALLOWED_FIELDS, "owner,tags"); - private static final Fields TOPIC_PATCH_FIELDS = new Fields(TopicResource.ALLOWED_FIELDS, "owner,tags"); + private static final String TOPIC_UPDATE_FIELDS = "owner,tags"; + private static final String TOPIC_PATCH_FIELDS = "owner,tags"; public static String getFQN(Topic topic) { return (topic != null && topic.getService() != null) diff --git a/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/UserRepository.java b/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/UserRepository.java index 0086fc96393..ddf2d85fde3 100644 --- a/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/UserRepository.java +++ b/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/UserRepository.java @@ -33,6 +33,7 @@ import org.openmetadata.catalog.entity.teams.User; import org.openmetadata.catalog.resources.teams.UserResource; import org.openmetadata.catalog.type.ChangeDescription; import org.openmetadata.catalog.type.EntityReference; +import org.openmetadata.catalog.type.Include; import org.openmetadata.catalog.type.Relationship; import org.openmetadata.catalog.util.EntityInterface; import org.openmetadata.catalog.util.EntityUtil; @@ -40,8 +41,8 @@ import org.openmetadata.catalog.util.EntityUtil.Fields; @Slf4j public class UserRepository extends EntityRepository { - static final Fields USER_PATCH_FIELDS = new Fields(UserResource.ALLOWED_FIELDS, "profile,roles,teams"); - static final Fields USER_UPDATE_FIELDS = new Fields(UserResource.ALLOWED_FIELDS, "profile,roles,teams"); + static final String USER_PATCH_FIELDS = "profile,roles,teams"; + static final String USER_UPDATE_FIELDS = "profile,roles,teams"; public UserRepository(CollectionDAO dao) { super( @@ -82,7 +83,7 @@ public class UserRepository extends EntityRepository { List teamsRef = listOrEmpty(user.getTeams()); List defaultRoles = new ArrayList<>(); for (EntityReference teamRef : teamsRef) { - Team team = Entity.getEntity(teamRef, new Fields(List.of("defaultRoles"))); + Team team = Entity.getEntity(teamRef, new Fields(List.of("defaultRoles")), Include.NON_DELETED); if (team != null && team.getDefaultRoles() != null) { defaultRoles.addAll(team.getDefaultRoles()); } diff --git a/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/WebhookRepository.java b/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/WebhookRepository.java index 5a420733748..2ef1d24ff15 100644 --- a/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/WebhookRepository.java +++ b/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/WebhookRepository.java @@ -62,14 +62,7 @@ public class WebhookRepository extends EntityRepository { private static final ConcurrentHashMap webhookPublisherMap = new ConcurrentHashMap<>(); public WebhookRepository(CollectionDAO dao) { - super( - WebhookResource.COLLECTION_PATH, - Entity.WEBHOOK, - Webhook.class, - dao.webhookDAO(), - dao, - Fields.EMPTY_FIELDS, - Fields.EMPTY_FIELDS); + super(WebhookResource.COLLECTION_PATH, Entity.WEBHOOK, Webhook.class, dao.webhookDAO(), dao, "", ""); } @Override diff --git a/catalog-rest-service/src/main/java/org/openmetadata/catalog/resources/EntityResource.java b/catalog-rest-service/src/main/java/org/openmetadata/catalog/resources/EntityResource.java index c260609cd6d..e1c578b089a 100644 --- a/catalog-rest-service/src/main/java/org/openmetadata/catalog/resources/EntityResource.java +++ b/catalog-rest-service/src/main/java/org/openmetadata/catalog/resources/EntityResource.java @@ -28,6 +28,10 @@ public abstract class EntityResource> { this.authorizer = authorizer; } + public final Fields getFields(String fields) { + return new Fields(allowedFields, fields); + } + public abstract T addHref(UriInfo uriInfo, T entity); public final ResultList addHref(UriInfo uriInfo, ResultList list) { @@ -45,7 +49,7 @@ public abstract class EntityResource> { String after) throws GeneralSecurityException, IOException, ParseException { RestUtil.validateCursors(before, after); - Fields fields = new Fields(allowedFields, fieldsParam); + Fields fields = getFields(fieldsParam); ResultList resultList; if (before != null) { // Reverse paging @@ -58,14 +62,14 @@ public abstract class EntityResource> { public T getInternal(UriInfo uriInfo, SecurityContext securityContext, String id, String fieldsParam, Include include) throws IOException, ParseException { - Fields fields = new Fields(allowedFields, fieldsParam); + Fields fields = getFields(fieldsParam); return addHref(uriInfo, dao.get(uriInfo, id, fields, include)); } public T getByNameInternal( UriInfo uriInfo, SecurityContext securityContext, String name, String fieldsParam, Include include) throws IOException, ParseException { - Fields fields = new Fields(allowedFields, fieldsParam); + Fields fields = getFields(fieldsParam); return addHref(uriInfo, dao.getByName(uriInfo, name, fields, include)); } } diff --git a/catalog-rest-service/src/main/java/org/openmetadata/catalog/resources/charts/ChartResource.java b/catalog-rest-service/src/main/java/org/openmetadata/catalog/resources/charts/ChartResource.java index 438a466d234..305c5ba6fe3 100644 --- a/catalog-rest-service/src/main/java/org/openmetadata/catalog/resources/charts/ChartResource.java +++ b/catalog-rest-service/src/main/java/org/openmetadata/catalog/resources/charts/ChartResource.java @@ -59,6 +59,7 @@ import org.openmetadata.catalog.security.Authorizer; import org.openmetadata.catalog.security.SecurityUtil; import org.openmetadata.catalog.type.EntityHistory; import org.openmetadata.catalog.type.Include; +import org.openmetadata.catalog.util.EntityInterface; import org.openmetadata.catalog.util.EntityUtil.Fields; import org.openmetadata.catalog.util.RestUtil; import org.openmetadata.catalog.util.RestUtil.DeleteResponse; @@ -99,7 +100,6 @@ public class ChartResource extends EntityResource { } static final String FIELDS = "owner,followers,tags"; - public static final List ALLOWED_FIELDS = Entity.getEntityFields(Chart.class); @GET @Operation( @@ -145,8 +145,7 @@ public class ChartResource extends EntityResource { @DefaultValue("non-deleted") Include include) throws IOException, GeneralSecurityException, ParseException { - ListFilter filter = new ListFilter(); - filter.addQueryParam("include", include.value()).addQueryParam("service", serviceParam); + ListFilter filter = new ListFilter(include).addQueryParam("service", serviceParam); return super.listInternal(uriInfo, securityContext, fieldsParam, filter, limitParam, before, after); } @@ -304,14 +303,11 @@ public class ChartResource extends EntityResource { })) JsonPatch patch) throws IOException, ParseException { - Fields fields = new Fields(ALLOWED_FIELDS, FIELDS); + Fields fields = getFields(Entity.FIELD_OWNER); Chart chart = dao.get(uriInfo, id, fields); + EntityInterface entityInterface = dao.getEntityInterface(chart); SecurityUtil.checkAdminRoleOrPermissions( - authorizer, - securityContext, - dao.getEntityInterface(chart).getEntityReference(), - dao.getOriginalOwner(chart), - patch); + authorizer, securityContext, entityInterface.getEntityReference(), entityInterface.getOwner(), patch); PatchResponse response = dao.patch(uriInfo, UUID.fromString(id), securityContext.getUserPrincipal().getName(), patch); diff --git a/catalog-rest-service/src/main/java/org/openmetadata/catalog/resources/dashboards/DashboardResource.java b/catalog-rest-service/src/main/java/org/openmetadata/catalog/resources/dashboards/DashboardResource.java index 617f19d8ad3..fa18bcf2e2f 100644 --- a/catalog-rest-service/src/main/java/org/openmetadata/catalog/resources/dashboards/DashboardResource.java +++ b/catalog-rest-service/src/main/java/org/openmetadata/catalog/resources/dashboards/DashboardResource.java @@ -13,6 +13,8 @@ package org.openmetadata.catalog.resources.dashboards; +import static org.openmetadata.catalog.Entity.FIELD_OWNER; + import io.swagger.annotations.Api; import io.swagger.v3.oas.annotations.ExternalDocumentation; import io.swagger.v3.oas.annotations.Operation; @@ -59,7 +61,6 @@ import org.openmetadata.catalog.security.Authorizer; import org.openmetadata.catalog.security.SecurityUtil; import org.openmetadata.catalog.type.EntityHistory; import org.openmetadata.catalog.type.Include; -import org.openmetadata.catalog.util.EntityUtil.Fields; import org.openmetadata.catalog.util.RestUtil.DeleteResponse; import org.openmetadata.catalog.util.RestUtil.PatchResponse; import org.openmetadata.catalog.util.RestUtil.PutResponse; @@ -98,7 +99,6 @@ public class DashboardResource extends EntityResource ALLOWED_FIELDS = Entity.getEntityFields(Dashboard.class); @GET @Valid @@ -147,8 +147,7 @@ public class DashboardResource extends EntityResource ALLOWED_FIELDS = Entity.getEntityFields(Database.class); @GET @Operation( @@ -144,8 +144,7 @@ public class DatabaseResource extends EntityResource entityInterface = dao.getEntityInterface(database); SecurityUtil.checkAdminRoleOrPermissions( - authorizer, - securityContext, - dao.getEntityInterface(database).getEntityReference(), - dao.getOriginalOwner(database), - patch); + authorizer, securityContext, entityInterface.getEntityReference(), entityInterface.getOwner(), patch); PatchResponse response = dao.patch(uriInfo, UUID.fromString(id), securityContext.getUserPrincipal().getName(), patch); @@ -349,9 +344,8 @@ public class DatabaseResource extends EntityResource { static final String FIELDS = "tableConstraints,tablePartition,usageSummary,owner,profileSample,customMetrics," + "tags,followers,joins,sampleData,viewDefinition,tableProfile,location,tableQueries,dataModel,tests"; - public static final List ALLOWED_FIELDS; - - static { - List list = new ArrayList<>(Entity.getEntityFields(Table.class)); - list.add("tests"); // Add a field parameter called tests that represent the fields - tableTests and columnTests - list.add("customMetrics"); // Add a field parameter to add customMetrics information to the columns - ALLOWED_FIELDS = Collections.unmodifiableList(list); - } @GET @Operation( @@ -170,8 +163,7 @@ public class TableResource extends EntityResource { @DefaultValue("non-deleted") Include include) throws IOException, ParseException, GeneralSecurityException { - ListFilter filter = new ListFilter(); - filter.addQueryParam("include", include.value()).addQueryParam("database", databaseParam); + ListFilter filter = new ListFilter(include).addQueryParam("database", databaseParam); return super.listInternal(uriInfo, securityContext, fieldsParam, filter, limitParam, before, after); } @@ -302,8 +294,8 @@ public class TableResource extends EntityResource { }) public Response create(@Context UriInfo uriInfo, @Context SecurityContext securityContext, @Valid CreateTable create) throws IOException, ParseException { - SecurityUtil.checkAdminOrBotRole(authorizer, securityContext); Table table = getTable(securityContext, create); + SecurityUtil.checkAdminOrBotRole(authorizer, securityContext); table = addHref(uriInfo, dao.create(uriInfo, validateNewTable(table))); return Response.created(table.getHref()).entity(table).build(); } @@ -352,8 +344,7 @@ public class TableResource extends EntityResource { })) JsonPatch patch) throws IOException, ParseException { - Fields fields = new Fields(ALLOWED_FIELDS, FIELDS); - Table table = dao.get(uriInfo, id, fields); + Table table = dao.get(uriInfo, id, getFields(FIELD_OWNER)); SecurityUtil.checkAdminRoleOrPermissions( authorizer, securityContext, @@ -638,7 +629,7 @@ public class TableResource extends EntityResource { @Context SecurityContext securityContext, @Parameter(description = "Id of the table", schema = @Schema(type = "string")) @PathParam("id") String id) throws IOException, ParseException { - Fields fields = new Fields(ALLOWED_FIELDS, "location"); + Fields fields = getFields("location"); dao.deleteLocation(id); Table table = dao.get(uriInfo, id, fields); return addHref(uriInfo, table); diff --git a/catalog-rest-service/src/main/java/org/openmetadata/catalog/resources/events/WebhookResource.java b/catalog-rest-service/src/main/java/org/openmetadata/catalog/resources/events/WebhookResource.java index dfae5f9ed81..78001c27474 100644 --- a/catalog-rest-service/src/main/java/org/openmetadata/catalog/resources/events/WebhookResource.java +++ b/catalog-rest-service/src/main/java/org/openmetadata/catalog/resources/events/WebhookResource.java @@ -123,9 +123,7 @@ public class WebhookResource extends EntityResource Include include) throws IOException, ParseException, GeneralSecurityException { RestUtil.validateCursors(before, after); - ListFilter filter = new ListFilter(); - filter.addQueryParam("include", include.value()); - + ListFilter filter = new ListFilter(include); ResultList webhooks; if (before != null) { // Reverse paging webhooks = dao.listBefore(uriInfo, Fields.EMPTY_FIELDS, filter, limitParam, before); @@ -277,9 +275,7 @@ public class WebhookResource extends EntityResource public Response updateWebhook( @Context UriInfo uriInfo, @Context SecurityContext securityContext, @Valid CreateWebhook create) throws IOException, ParseException, InterruptedException { - // TODO - // SecurityUtil.checkAdminOrBotRole(authorizer, securityContext); - // Table table = getTable(securityContext, create); + SecurityUtil.checkAdminRole(authorizer, securityContext); Webhook webhook = getWebhook(securityContext, create); webhook.setStatus(Boolean.TRUE.equals(webhook.getEnabled()) ? Status.ACTIVE : Status.DISABLED); PutResponse putResponse = dao.createOrUpdate(uriInfo, webhook); diff --git a/catalog-rest-service/src/main/java/org/openmetadata/catalog/resources/feeds/FeedResource.java b/catalog-rest-service/src/main/java/org/openmetadata/catalog/resources/feeds/FeedResource.java index 2cdb8522cf7..31f8c6bf0aa 100644 --- a/catalog-rest-service/src/main/java/org/openmetadata/catalog/resources/feeds/FeedResource.java +++ b/catalog-rest-service/src/main/java/org/openmetadata/catalog/resources/feeds/FeedResource.java @@ -72,7 +72,6 @@ import org.openmetadata.catalog.util.ResultList; @Collection(name = "feeds") public class FeedResource { public static final String COLLECTION_PATH = "/v1/feed/"; - public static final List ALLOWED_FIELDS = getAllowedFields(); private final FeedRepository dao; private final Authorizer authorizer; diff --git a/catalog-rest-service/src/main/java/org/openmetadata/catalog/resources/glossary/GlossaryResource.java b/catalog-rest-service/src/main/java/org/openmetadata/catalog/resources/glossary/GlossaryResource.java index 1c31353368d..51f157a1cb7 100644 --- a/catalog-rest-service/src/main/java/org/openmetadata/catalog/resources/glossary/GlossaryResource.java +++ b/catalog-rest-service/src/main/java/org/openmetadata/catalog/resources/glossary/GlossaryResource.java @@ -59,9 +59,7 @@ import org.openmetadata.catalog.resources.EntityResource; import org.openmetadata.catalog.security.Authorizer; import org.openmetadata.catalog.security.SecurityUtil; import org.openmetadata.catalog.type.EntityHistory; -import org.openmetadata.catalog.type.EntityReference; import org.openmetadata.catalog.type.Include; -import org.openmetadata.catalog.util.EntityUtil.Fields; import org.openmetadata.catalog.util.RestUtil; import org.openmetadata.catalog.util.RestUtil.DeleteResponse; import org.openmetadata.catalog.util.RestUtil.PatchResponse; @@ -101,7 +99,6 @@ public class GlossaryResource extends EntityResource ALLOWED_FIELDS = Entity.getEntityFields(Glossary.class); @GET @Valid @@ -145,8 +142,7 @@ public class GlossaryResource extends EntityResource response = dao.createOrUpdate(uriInfo, glossary); addHref(uriInfo, response.getEntity()); return response.toResponse(); diff --git a/catalog-rest-service/src/main/java/org/openmetadata/catalog/resources/glossary/GlossaryTermResource.java b/catalog-rest-service/src/main/java/org/openmetadata/catalog/resources/glossary/GlossaryTermResource.java index cd8fff16cfa..69a326d8a48 100644 --- a/catalog-rest-service/src/main/java/org/openmetadata/catalog/resources/glossary/GlossaryTermResource.java +++ b/catalog-rest-service/src/main/java/org/openmetadata/catalog/resources/glossary/GlossaryTermResource.java @@ -63,6 +63,7 @@ import org.openmetadata.catalog.security.SecurityUtil; import org.openmetadata.catalog.type.EntityHistory; import org.openmetadata.catalog.type.EntityReference; import org.openmetadata.catalog.type.Include; +import org.openmetadata.catalog.util.EntityInterface; import org.openmetadata.catalog.util.EntityUtil.Fields; import org.openmetadata.catalog.util.RestUtil; import org.openmetadata.catalog.util.RestUtil.DeleteResponse; @@ -106,7 +107,6 @@ public class GlossaryTermResource extends EntityResource ALLOWED_FIELDS = Entity.getEntityFields(GlossaryTerm.class); @GET @Valid @@ -165,7 +165,7 @@ public class GlossaryTermResource extends EntityResource terms; if (before != null) { // Reverse paging @@ -339,7 +338,7 @@ public class GlossaryTermResource extends EntityResource entityInterface = dao.getEntityInterface(term); SecurityUtil.checkAdminRoleOrPermissions( - authorizer, - securityContext, - dao.getEntityInterface(term).getEntityReference(), - dao.getOriginalOwner(term), - patch); + authorizer, securityContext, entityInterface.getEntityReference(), entityInterface.getOwner(), patch); PatchResponse response = dao.patch(uriInfo, UUID.fromString(id), securityContext.getUserPrincipal().getName(), patch); addHref(uriInfo, response.getEntity()); @@ -383,8 +378,7 @@ public class GlossaryTermResource extends EntityResource response = dao.createOrUpdate(uriInfo, term); addHref(uriInfo, response.getEntity()); return response.toResponse(); diff --git a/catalog-rest-service/src/main/java/org/openmetadata/catalog/resources/locations/LocationResource.java b/catalog-rest-service/src/main/java/org/openmetadata/catalog/resources/locations/LocationResource.java index a25c79ed57a..81e0c50740c 100644 --- a/catalog-rest-service/src/main/java/org/openmetadata/catalog/resources/locations/LocationResource.java +++ b/catalog-rest-service/src/main/java/org/openmetadata/catalog/resources/locations/LocationResource.java @@ -96,7 +96,6 @@ public class LocationResource extends EntityResource ALLOWED_FIELDS = Entity.getEntityFields(Location.class); @GET @Operation( @@ -144,8 +143,7 @@ public class LocationResource extends EntityResource locations; if (before != null) { // Reverse paging @@ -383,7 +381,7 @@ public class LocationResource extends EntityResource } static final String FIELDS = "owner,usageSummary"; - public static final List ALLOWED_FIELDS = Entity.getEntityFields(Metrics.class); @GET @Operation( diff --git a/catalog-rest-service/src/main/java/org/openmetadata/catalog/resources/mlmodels/MlModelResource.java b/catalog-rest-service/src/main/java/org/openmetadata/catalog/resources/mlmodels/MlModelResource.java index be30c09461a..c614ba6d277 100644 --- a/catalog-rest-service/src/main/java/org/openmetadata/catalog/resources/mlmodels/MlModelResource.java +++ b/catalog-rest-service/src/main/java/org/openmetadata/catalog/resources/mlmodels/MlModelResource.java @@ -99,7 +99,6 @@ public class MlModelResource extends EntityResource } static final String FIELDS = "owner,dashboard,followers,tags,usageSummary"; - public static final List ALLOWED_FIELDS = Entity.getEntityFields(MlModel.class); @GET @Valid @@ -143,8 +142,7 @@ public class MlModelResource extends EntityResource @DefaultValue("non-deleted") Include include) throws IOException, GeneralSecurityException, ParseException { - ListFilter filter = new ListFilter(); - filter.addQueryParam("include", include.value()); + ListFilter filter = new ListFilter(include); return super.listInternal(uriInfo, securityContext, fieldsParam, filter, limitParam, before, after); } @@ -255,7 +253,7 @@ public class MlModelResource extends EntityResource })) JsonPatch patch) throws IOException, ParseException { - Fields fields = new Fields(ALLOWED_FIELDS, FIELDS); + Fields fields = getFields(FIELDS); MlModel mlModel = dao.get(uriInfo, id, fields); SecurityUtil.checkAdminRoleOrPermissions( authorizer, diff --git a/catalog-rest-service/src/main/java/org/openmetadata/catalog/resources/operations/AirflowPipelineResource.java b/catalog-rest-service/src/main/java/org/openmetadata/catalog/resources/operations/AirflowPipelineResource.java index c45b982663f..542d91e4e66 100644 --- a/catalog-rest-service/src/main/java/org/openmetadata/catalog/resources/operations/AirflowPipelineResource.java +++ b/catalog-rest-service/src/main/java/org/openmetadata/catalog/resources/operations/AirflowPipelineResource.java @@ -28,8 +28,6 @@ import io.swagger.v3.oas.annotations.responses.ApiResponse; import java.io.IOException; import java.security.GeneralSecurityException; import java.text.ParseException; -import java.util.ArrayList; -import java.util.Collections; import java.util.List; import java.util.UUID; import javax.json.JsonPatch; @@ -67,6 +65,7 @@ import org.openmetadata.catalog.security.Authorizer; import org.openmetadata.catalog.security.SecurityUtil; import org.openmetadata.catalog.type.EntityHistory; import org.openmetadata.catalog.type.Include; +import org.openmetadata.catalog.util.EntityInterface; import org.openmetadata.catalog.util.EntityUtil.Fields; import org.openmetadata.catalog.util.RestUtil.DeleteResponse; import org.openmetadata.catalog.util.RestUtil.PatchResponse; @@ -112,15 +111,8 @@ public class AirflowPipelineResource extends EntityResource ALLOWED_FIELDS; static final String PIPELINE_STATUSES = "pipelineStatuses"; - static { - List list = new ArrayList<>(); - list.addAll(Entity.getEntityFields(AirflowPipeline.class)); - ALLOWED_FIELDS = Collections.unmodifiableList(list); - } - @GET @Valid @Operation( @@ -169,8 +161,7 @@ public class AirflowPipelineResource extends EntityResource airflowPipelines = super.listInternal(uriInfo, securityContext, fieldsParam, filter, limitParam, before, after); if (fieldsParam != null && fieldsParam.contains(PIPELINE_STATUSES)) { @@ -268,7 +259,7 @@ public class AirflowPipelineResource extends EntityResource entityInterface = dao.getEntityInterface(airflowPipeline); SecurityUtil.checkAdminRoleOrPermissions( - authorizer, - securityContext, - dao.getEntityInterface(airflowPipeline).getEntityReference(), - dao.getOriginalOwner(airflowPipeline), - patch); + authorizer, securityContext, entityInterface.getEntityReference(), entityInterface.getOwner(), patch); PatchResponse response = dao.patch(uriInfo, UUID.fromString(id), securityContext.getUserPrincipal().getName(), patch); @@ -405,7 +392,7 @@ public class AirflowPipelineResource extends EntityResource response = dao.delete(securityContext.getUserPrincipal().getName(), id); diff --git a/catalog-rest-service/src/main/java/org/openmetadata/catalog/resources/pipelines/PipelineResource.java b/catalog-rest-service/src/main/java/org/openmetadata/catalog/resources/pipelines/PipelineResource.java index 284cd0a4cff..5b17bd761d3 100644 --- a/catalog-rest-service/src/main/java/org/openmetadata/catalog/resources/pipelines/PipelineResource.java +++ b/catalog-rest-service/src/main/java/org/openmetadata/catalog/resources/pipelines/PipelineResource.java @@ -100,7 +100,6 @@ public class PipelineResource extends EntityResource ALLOWED_FIELDS = Entity.getEntityFields(Pipeline.class); @GET @Valid @@ -149,8 +148,7 @@ public class PipelineResource extends EntityResource { } public static final String FIELDS = "owner,location"; - public static final List ALLOWED_FIELDS = Entity.getEntityFields(Policy.class); @GET @Valid @@ -154,8 +153,7 @@ public class PolicyResource extends EntityResource { @DefaultValue("non-deleted") Include include) throws IOException, GeneralSecurityException, ParseException { - ListFilter filter = new ListFilter(); - filter.addQueryParam("include", include.value()); + ListFilter filter = new ListFilter(include); return super.listInternal(uriInfo, securityContext, fieldsParam, filter, limitParam, before, after); } @@ -313,7 +311,7 @@ public class PolicyResource extends EntityResource { })) JsonPatch patch) throws IOException, ParseException { - Fields fields = new Fields(ALLOWED_FIELDS, FIELD_OWNER); + Fields fields = getFields(FIELD_OWNER); Policy policy = dao.get(uriInfo, id, fields); SecurityUtil.checkAdminRoleOrPermissions(authorizer, securityContext, dao.getOwnerReference(policy)); diff --git a/catalog-rest-service/src/main/java/org/openmetadata/catalog/resources/reports/ReportResource.java b/catalog-rest-service/src/main/java/org/openmetadata/catalog/resources/reports/ReportResource.java index 90c63b171fa..832d2b90aa4 100644 --- a/catalog-rest-service/src/main/java/org/openmetadata/catalog/resources/reports/ReportResource.java +++ b/catalog-rest-service/src/main/java/org/openmetadata/catalog/resources/reports/ReportResource.java @@ -39,7 +39,6 @@ import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; import javax.ws.rs.core.SecurityContext; import javax.ws.rs.core.UriInfo; -import org.openmetadata.catalog.Entity; import org.openmetadata.catalog.entity.data.Report; import org.openmetadata.catalog.jdbi3.CollectionDAO; import org.openmetadata.catalog.jdbi3.ListFilter; @@ -76,7 +75,6 @@ public class ReportResource extends EntityResource { } static final String FIELDS = "owner,usageSummary"; - public static final List ALLOWED_FIELDS = Entity.getEntityFields(Report.class); @GET @Operation( @@ -97,7 +95,7 @@ public class ReportResource extends EntityResource { @QueryParam("fields") String fieldsParam) throws IOException, GeneralSecurityException, ParseException { - Fields fields = new Fields(ALLOWED_FIELDS, fieldsParam); + Fields fields = getFields(fieldsParam); ListFilter filter = new ListFilter(); return dao.listAfter(uriInfo, fields, filter, 10000, null); } diff --git a/catalog-rest-service/src/main/java/org/openmetadata/catalog/resources/services/dashboard/DashboardServiceResource.java b/catalog-rest-service/src/main/java/org/openmetadata/catalog/resources/services/dashboard/DashboardServiceResource.java index 47eec26a03e..203a17c73f6 100644 --- a/catalog-rest-service/src/main/java/org/openmetadata/catalog/resources/services/dashboard/DashboardServiceResource.java +++ b/catalog-rest-service/src/main/java/org/openmetadata/catalog/resources/services/dashboard/DashboardServiceResource.java @@ -70,7 +70,6 @@ public class DashboardServiceResource extends EntityResource ALLOWED_FIELDS = Entity.getEntityFields(DashboardService.class); @Override public DashboardService addHref(UriInfo uriInfo, DashboardService service) { @@ -130,8 +129,7 @@ public class DashboardServiceResource extends EntityResource ALLOWED_FIELDS = Entity.getEntityFields(DatabaseService.class); private final Fernet fernet; @Override @@ -140,12 +139,10 @@ public class DatabaseServiceResource extends EntityResource dbServices; - ListFilter filter = new ListFilter(); - filter.addQueryParam("include", include.value()); - + ListFilter filter = new ListFilter(include); if (before != null) { dbServices = dao.listBefore(uriInfo, fields, filter, limitParam, before); } else { @@ -311,9 +308,9 @@ public class DatabaseServiceResource extends EntityResource ALLOWED_FIELDS = Entity.getEntityFields(MessagingService.class); @Override public MessagingService addHref(UriInfo uriInfo, MessagingService service) { @@ -133,8 +132,7 @@ public class MessagingServiceResource extends EntityResource ALLOWED_FIELDS = Entity.getEntityFields(PipelineService.class); @Override public PipelineService addHref(UriInfo uriInfo, PipelineService service) { @@ -133,8 +132,7 @@ public class PipelineServiceResource extends EntityResource ALLOWED_FIELDS = Entity.getEntityFields(StorageService.class); @Override public StorageService addHref(UriInfo uriInfo, StorageService service) { @@ -133,8 +132,7 @@ public class StorageServiceResource extends EntityResource { } public static final String FIELDS = "policy,teams,users"; - public static final List ALLOWED_FIELDS = Entity.getEntityFields(Role.class); @GET @Valid @@ -148,8 +147,8 @@ public class RoleResource extends EntityResource { Include include) throws IOException, GeneralSecurityException, ParseException { RestUtil.validateCursors(before, after); - Fields fields = new Fields(ALLOWED_FIELDS, fieldsParam); - ListFilter filter = new ListFilter().addQueryParam("include", include.value()); + Fields fields = getFields(fieldsParam); + ListFilter filter = new ListFilter(include); ResultList roles; if (defaultParam) { @@ -213,8 +212,7 @@ public class RoleResource extends EntityResource { @DefaultValue("non-deleted") Include include) throws IOException, ParseException { - Fields fields = new Fields(ALLOWED_FIELDS, fieldsParam); - return addHref(uriInfo, dao.get(uriInfo, id, fields, include)); + return getInternal(uriInfo, securityContext, id, fieldsParam, include); } @GET @@ -301,7 +299,7 @@ public class RoleResource extends EntityResource { @PUT @Operation( - summary = "Create or Update a role", + summary = "Update role", tags = "roles", description = "Create or Update a role.", responses = { diff --git a/catalog-rest-service/src/main/java/org/openmetadata/catalog/resources/teams/TeamResource.java b/catalog-rest-service/src/main/java/org/openmetadata/catalog/resources/teams/TeamResource.java index 99ab7774959..9c99115f0d2 100644 --- a/catalog-rest-service/src/main/java/org/openmetadata/catalog/resources/teams/TeamResource.java +++ b/catalog-rest-service/src/main/java/org/openmetadata/catalog/resources/teams/TeamResource.java @@ -59,7 +59,7 @@ import org.openmetadata.catalog.security.Authorizer; import org.openmetadata.catalog.security.SecurityUtil; import org.openmetadata.catalog.type.EntityHistory; import org.openmetadata.catalog.type.Include; -import org.openmetadata.catalog.util.EntityUtil.Fields; +import org.openmetadata.catalog.util.EntityInterface; import org.openmetadata.catalog.util.RestUtil; import org.openmetadata.catalog.util.RestUtil.DeleteResponse; import org.openmetadata.catalog.util.RestUtil.PatchResponse; @@ -96,7 +96,6 @@ public class TeamResource extends EntityResource { } static final String FIELDS = "owner,profile,users,owns,defaultRoles"; - public static final List ALLOWED_FIELDS = Entity.getEntityFields(Team.class); @GET @Valid @@ -140,8 +139,7 @@ public class TeamResource extends EntityResource { @DefaultValue("non-deleted") Include include) throws IOException, GeneralSecurityException, ParseException { - ListFilter filter = new ListFilter(); - filter.addQueryParam("include", include.value()); + ListFilter filter = new ListFilter(include); return super.listInternal(uriInfo, securityContext, fieldsParam, filter, limitParam, before, after); } @@ -281,7 +279,7 @@ public class TeamResource extends EntityResource { @PUT @Operation( - summary = "Create or Update a team", + summary = "Update team", tags = "teams", description = "Create or Update a team.", responses = { @@ -291,7 +289,7 @@ public class TeamResource extends EntityResource { content = @Content(mediaType = "application/json", schema = @Schema(implementation = CreateTeam.class))), @ApiResponse(responseCode = "400", description = "Bad request") }) - public Response createOrUpdateTeam( + public Response createOrUpdate( @Context UriInfo uriInfo, @Context SecurityContext securityContext, @Valid CreateTeam ct) throws IOException, ParseException { Team team = getTeam(ct, securityContext); @@ -323,14 +321,10 @@ public class TeamResource extends EntityResource { })) JsonPatch patch) throws IOException, ParseException { - Fields fields = new Fields(ALLOWED_FIELDS, FIELDS); - Team team = dao.get(uriInfo, id, fields); + Team team = dao.get(uriInfo, id, getFields(Entity.FIELD_OWNER)); + EntityInterface entityInterface = dao.getEntityInterface(team); SecurityUtil.checkAdminRoleOrPermissions( - authorizer, - securityContext, - dao.getEntityInterface(team).getEntityReference(), - dao.getOriginalOwner(team), - patch); + authorizer, securityContext, entityInterface.getEntityReference(), entityInterface.getOwner(), patch); PatchResponse response = dao.patch(uriInfo, UUID.fromString(id), securityContext.getUserPrincipal().getName(), patch); addHref(uriInfo, response.getEntity()); diff --git a/catalog-rest-service/src/main/java/org/openmetadata/catalog/resources/teams/UserResource.java b/catalog-rest-service/src/main/java/org/openmetadata/catalog/resources/teams/UserResource.java index 06dc558321b..5f216686632 100644 --- a/catalog-rest-service/src/main/java/org/openmetadata/catalog/resources/teams/UserResource.java +++ b/catalog-rest-service/src/main/java/org/openmetadata/catalog/resources/teams/UserResource.java @@ -101,7 +101,6 @@ public class UserResource extends EntityResource { } static final String FIELDS = "profile,roles,teams,follows,owns"; - public static final List ALLOWED_FIELDS = Entity.getEntityFields(User.class); @GET @Valid @@ -148,8 +147,7 @@ public class UserResource extends EntityResource { @DefaultValue("non-deleted") Include include) throws IOException, GeneralSecurityException, ParseException { - ListFilter filter = new ListFilter(); - filter.addQueryParam("include", include.value()).addQueryParam("team", teamParam); + ListFilter filter = new ListFilter(include).addQueryParam("team", teamParam); return super.listInternal(uriInfo, securityContext, fieldsParam, filter, limitParam, before, after); } @@ -262,7 +260,7 @@ public class UserResource extends EntityResource { @QueryParam("fields") String fieldsParam) throws IOException, ParseException { - Fields fields = new Fields(ALLOWED_FIELDS, fieldsParam); + Fields fields = getFields(fieldsParam); String currentUserName = securityContext.getUserPrincipal().getName(); User user = dao.getByName(uriInfo, currentUserName, fields); return addHref(uriInfo, user); @@ -321,7 +319,7 @@ public class UserResource extends EntityResource { @PUT @Operation( - summary = "Create or Update a user", + summary = "Update user", tags = "users", description = "Create or Update a user.", responses = { @@ -376,7 +374,7 @@ public class UserResource extends EntityResource { } } } - User user = dao.get(uriInfo, id, new Fields(ALLOWED_FIELDS, null)); + User user = dao.get(uriInfo, id, Fields.EMPTY_FIELDS); SecurityUtil.checkAdminRoleOrPermissions( authorizer, securityContext, new UserEntityInterface(user).getEntityReference()); PatchResponse response = diff --git a/catalog-rest-service/src/main/java/org/openmetadata/catalog/resources/topics/TopicResource.java b/catalog-rest-service/src/main/java/org/openmetadata/catalog/resources/topics/TopicResource.java index e49c7c7a5f2..dc98aecda69 100644 --- a/catalog-rest-service/src/main/java/org/openmetadata/catalog/resources/topics/TopicResource.java +++ b/catalog-rest-service/src/main/java/org/openmetadata/catalog/resources/topics/TopicResource.java @@ -101,7 +101,6 @@ public class TopicResource extends EntityResource { } static final String FIELDS = "owner,followers,tags"; - public static final List ALLOWED_FIELDS = Entity.getEntityFields(Topic.class); @GET @Operation( @@ -149,8 +148,7 @@ public class TopicResource extends EntityResource { @DefaultValue("non-deleted") Include include) throws IOException, GeneralSecurityException, ParseException { - ListFilter filter = new ListFilter(); - filter.addQueryParam("include", include.value()).addQueryParam("service", serviceParam); + ListFilter filter = new ListFilter(include).addQueryParam("service", serviceParam); return super.listInternal(uriInfo, null, fieldsParam, filter, limitParam, before, after); } @@ -309,7 +307,7 @@ public class TopicResource extends EntityResource { })) JsonPatch patch) throws IOException, ParseException { - Fields fields = new Fields(ALLOWED_FIELDS, FIELD_OWNER); + Fields fields = getFields(FIELD_OWNER); Topic topic = dao.get(uriInfo, id, fields); SecurityUtil.checkAdminRoleOrPermissions( authorizer, @@ -326,7 +324,7 @@ public class TopicResource extends EntityResource { @PUT @Operation( - summary = "Create or update topic", + summary = "Update topic", tags = "topics", description = "Create a topic, it it does not exist or update an existing topic.", responses = { diff --git a/catalog-rest-service/src/main/java/org/openmetadata/catalog/security/DefaultAuthorizer.java b/catalog-rest-service/src/main/java/org/openmetadata/catalog/security/DefaultAuthorizer.java index 49026e8855a..02254827f2f 100644 --- a/catalog-rest-service/src/main/java/org/openmetadata/catalog/security/DefaultAuthorizer.java +++ b/catalog-rest-service/src/main/java/org/openmetadata/catalog/security/DefaultAuthorizer.java @@ -34,11 +34,12 @@ import org.openmetadata.catalog.jdbi3.CollectionDAO; import org.openmetadata.catalog.jdbi3.RoleRepository; import org.openmetadata.catalog.jdbi3.TeamRepository; import org.openmetadata.catalog.jdbi3.UserRepository; -import org.openmetadata.catalog.resources.teams.UserResource; import org.openmetadata.catalog.security.policyevaluator.PolicyEvaluator; import org.openmetadata.catalog.type.EntityReference; +import org.openmetadata.catalog.type.Include; import org.openmetadata.catalog.type.MetadataOperation; import org.openmetadata.catalog.util.EntityUtil; +import org.openmetadata.catalog.util.EntityUtil.Fields; import org.openmetadata.catalog.util.RestUtil; @Slf4j @@ -74,10 +75,9 @@ public class DefaultAuthorizer implements Authorizer { private void mayBeAddAdminUsers() { LOG.debug("Checking user entries for admin users"); - EntityUtil.Fields fields = new EntityUtil.Fields(UserResource.ALLOWED_FIELDS, FIELDS_PARAM); for (String adminUser : adminUsers) { try { - User user = userRepository.getByName(null, adminUser, fields); + User user = userRepository.getByName(null, adminUser, Fields.EMPTY_FIELDS); if (user != null && (user.getIsAdmin() == null || !user.getIsAdmin())) { user.setIsAdmin(true); } @@ -100,10 +100,9 @@ public class DefaultAuthorizer implements Authorizer { private void mayBeAddBotUsers() { LOG.debug("Checking user entries for bot users"); - EntityUtil.Fields fields = new EntityUtil.Fields(UserResource.ALLOWED_FIELDS, FIELDS_PARAM); for (String botUser : botUsers) { try { - User user = userRepository.getByName(null, botUser, fields); + User user = userRepository.getByName(null, botUser, Fields.EMPTY_FIELDS); if (user != null && (user.getIsBot() == null || !user.getIsBot())) { user.setIsBot(true); } @@ -153,7 +152,8 @@ public class DefaultAuthorizer implements Authorizer { return policyEvaluator.hasPermission(user, null, operation); } - Object entity = Entity.getEntity(entityReference, new EntityUtil.Fields(List.of("tags", FIELD_OWNER))); + Object entity = + Entity.getEntity(entityReference, new EntityUtil.Fields(List.of("tags", FIELD_OWNER)), Include.NON_DELETED); EntityReference owner = Entity.getEntityInterface(entity).getOwner(); if (Entity.shouldHaveOwner(entityReference.getType()) && owner != null && isOwnedByUser(user, owner)) { @@ -180,7 +180,8 @@ public class DefaultAuthorizer implements Authorizer { if (entityReference == null) { return policyEvaluator.getAllowedOperations(user, null); } - Object entity = Entity.getEntity(entityReference, new EntityUtil.Fields(List.of("tags", FIELD_OWNER))); + Object entity = + Entity.getEntity(entityReference, new EntityUtil.Fields(List.of("tags", FIELD_OWNER)), Include.NON_DELETED); EntityReference owner = Entity.getEntityInterface(entity).getOwner(); if (owner == null || isOwnedByUser(user, owner)) { // Entity does not have an owner or is owned by the user - allow all operations. @@ -213,9 +214,8 @@ public class DefaultAuthorizer implements Authorizer { public boolean isAdmin(AuthenticationContext ctx) { validateAuthenticationContext(ctx); String userName = SecurityUtil.getUserName(ctx); - EntityUtil.Fields fields = new EntityUtil.Fields(UserResource.ALLOWED_FIELDS, FIELDS_PARAM); try { - User user = userRepository.getByName(null, userName, fields); + User user = userRepository.getByName(null, userName, Fields.EMPTY_FIELDS); if (user.getIsAdmin() == null) { return false; } @@ -229,9 +229,8 @@ public class DefaultAuthorizer implements Authorizer { public boolean isBot(AuthenticationContext ctx) { validateAuthenticationContext(ctx); String userName = SecurityUtil.getUserName(ctx); - EntityUtil.Fields fields = new EntityUtil.Fields(UserResource.ALLOWED_FIELDS, FIELDS_PARAM); try { - User user = userRepository.getByName(null, userName, fields); + User user = userRepository.getByName(null, userName, Fields.EMPTY_FIELDS); if (user.getIsBot() == null) { return false; } @@ -245,9 +244,8 @@ public class DefaultAuthorizer implements Authorizer { public boolean isOwner(AuthenticationContext ctx, EntityReference owner) { validateAuthenticationContext(ctx); String userName = SecurityUtil.getUserName(ctx); - EntityUtil.Fields fields = new EntityUtil.Fields(UserResource.ALLOWED_FIELDS, FIELDS_PARAM); try { - User user = userRepository.getByName(null, userName, fields); + User user = userRepository.getByName(null, userName, Fields.EMPTY_FIELDS); if (owner == null) { return false; } @@ -265,7 +263,7 @@ public class DefaultAuthorizer implements Authorizer { private User getUserFromAuthenticationContext(AuthenticationContext ctx) throws IOException, ParseException { String userName = SecurityUtil.getUserName(ctx); - EntityUtil.Fields fields = new EntityUtil.Fields(UserResource.ALLOWED_FIELDS, FIELDS_PARAM); + EntityUtil.Fields fields = userRepository.getFields(FIELDS_PARAM); return userRepository.getByName(null, userName, fields); } diff --git a/catalog-rest-service/src/main/java/org/openmetadata/catalog/security/NoopAuthorizer.java b/catalog-rest-service/src/main/java/org/openmetadata/catalog/security/NoopAuthorizer.java index b609c9c95d3..2243efe85c3 100644 --- a/catalog-rest-service/src/main/java/org/openmetadata/catalog/security/NoopAuthorizer.java +++ b/catalog-rest-service/src/main/java/org/openmetadata/catalog/security/NoopAuthorizer.java @@ -28,21 +28,20 @@ import org.openmetadata.catalog.jdbi3.CollectionDAO; import org.openmetadata.catalog.jdbi3.RoleRepository; import org.openmetadata.catalog.jdbi3.TeamRepository; import org.openmetadata.catalog.jdbi3.UserRepository; -import org.openmetadata.catalog.resources.teams.UserResource; import org.openmetadata.catalog.type.EntityReference; import org.openmetadata.catalog.type.MetadataOperation; -import org.openmetadata.catalog.util.EntityUtil; +import org.openmetadata.catalog.util.EntityUtil.Fields; import org.openmetadata.catalog.util.RestUtil; @Slf4j public class NoopAuthorizer implements Authorizer { - private static final String FIELDS_PARAM = "roles,teams"; private UserRepository userRepository; @Override public void init(AuthorizerConfiguration config, Jdbi jdbi) { CollectionDAO collectionDAO = jdbi.onDemand(CollectionDAO.class); this.userRepository = new UserRepository(collectionDAO); + // TODO: fixme // RoleRepository and TeamRepository needs to be instantiated for Entity.DAO_MAP to populated. // As we create default admin/bots we need to have RoleRepository and TeamRepository available in DAO_MAP. // This needs to be handled better in future releases. @@ -84,10 +83,9 @@ public class NoopAuthorizer implements Authorizer { } private void addAnonymousUser() { - EntityUtil.Fields fields = new EntityUtil.Fields(UserResource.ALLOWED_FIELDS, FIELDS_PARAM); String username = "anonymous"; try { - userRepository.getByName(null, username, fields); + userRepository.getByName(null, username, Fields.EMPTY_FIELDS); } catch (EntityNotFoundException ex) { User user = new User() diff --git a/catalog-rest-service/src/test/java/org/openmetadata/catalog/resources/EntityResourceTest.java b/catalog-rest-service/src/test/java/org/openmetadata/catalog/resources/EntityResourceTest.java index 08cfd5d035a..124c34aafea 100644 --- a/catalog-rest-service/src/test/java/org/openmetadata/catalog/resources/EntityResourceTest.java +++ b/catalog-rest-service/src/test/java/org/openmetadata/catalog/resources/EntityResourceTest.java @@ -885,7 +885,7 @@ public abstract class EntityResourceTest extends CatalogApplicationTest { final K request = createRequest(name, null, null, null); T entity = createEntity(request, ADMIN_AUTH_HEADERS); EntityInterface entityInterface = getEntityInterface(entity); - String[] split = entityInterface.getFullyQualifiedName().split("\\/"); + String[] split = entityInterface.getFullyQualifiedName().split("/"); String actualName = split[split.length - 1]; assertTrue(actualName.contains("foo.bar")); } diff --git a/catalog-rest-service/src/test/java/org/openmetadata/catalog/resources/databases/TableResourceTest.java b/catalog-rest-service/src/test/java/org/openmetadata/catalog/resources/databases/TableResourceTest.java index 0bc053d7ebc..820996b9308 100644 --- a/catalog-rest-service/src/test/java/org/openmetadata/catalog/resources/databases/TableResourceTest.java +++ b/catalog-rest-service/src/test/java/org/openmetadata/catalog/resources/databases/TableResourceTest.java @@ -1603,7 +1603,8 @@ public class TableResourceTest extends EntityResourceTest { } void assertFields(Table table, String fieldsParam) { - Fields fields = new Fields(TableResource.ALLOWED_FIELDS, fieldsParam); + // TODO cleanup + Fields fields = new Fields(Entity.getEntityFields(Table.class), fieldsParam); if (fields.contains("usageSummary")) { assertNotNull(table.getUsageSummary()); diff --git a/catalog-rest-service/src/test/java/org/openmetadata/catalog/resources/permissions/PermissionsResourceTest.java b/catalog-rest-service/src/test/java/org/openmetadata/catalog/resources/permissions/PermissionsResourceTest.java index e4c76f522a2..b61fdfa422f 100644 --- a/catalog-rest-service/src/test/java/org/openmetadata/catalog/resources/permissions/PermissionsResourceTest.java +++ b/catalog-rest-service/src/test/java/org/openmetadata/catalog/resources/permissions/PermissionsResourceTest.java @@ -69,7 +69,7 @@ class PermissionsResourceTest extends CatalogApplicationTest { @ParameterizedTest @MethodSource("getPermissionsTestParams") - void get_permissiofns(String username, Map expectedOperations) + void get_permissions(String username, Map expectedOperations) throws HttpResponseException { WebTarget target = getResource("permissions"); Map authHeaders = SecurityUtil.authHeaders(username + "@open-metadata.org");