diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/OpenMetadataApplication.java b/openmetadata-service/src/main/java/org/openmetadata/service/OpenMetadataApplication.java index b7889be58ae..3af4da96b06 100644 --- a/openmetadata-service/src/main/java/org/openmetadata/service/OpenMetadataApplication.java +++ b/openmetadata-service/src/main/java/org/openmetadata/service/OpenMetadataApplication.java @@ -136,7 +136,7 @@ public class OpenMetadataApplication extends Application { static final String BOT_UPDATE_FIELDS = "botUser"; - final SecretsManager secretsManager; - - public BotRepository(CollectionDAO dao, SecretsManager secretsManager) { + public BotRepository(CollectionDAO dao) { super(BotResource.COLLECTION_PATH, Entity.BOT, Bot.class, dao.botDAO(), dao, "", BOT_UPDATE_FIELDS); - this.secretsManager = secretsManager; } @Override @@ -54,6 +52,7 @@ public class BotRepository extends EntityRepository { entity.withBotUser(null); store(entity.getId(), entity, update); if (!BotType.BOT.equals(entity.getBotType())) { + SecretsManager secretsManager = SecretsManagerFactory.getSecretsManager(); secretsManager.encryptOrDecryptBotCredentials(entity.getBotType().value(), botUser.getName(), true); } entity.withBotUser(botUser); diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/DashboardServiceRepository.java b/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/DashboardServiceRepository.java index da8aaffd934..5dc04efdd82 100644 --- a/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/DashboardServiceRepository.java +++ b/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/DashboardServiceRepository.java @@ -18,17 +18,15 @@ import org.openmetadata.schema.entity.services.ServiceType; import org.openmetadata.schema.type.DashboardConnection; import org.openmetadata.service.Entity; import org.openmetadata.service.resources.services.dashboard.DashboardServiceResource; -import org.openmetadata.service.secrets.SecretsManager; public class DashboardServiceRepository extends ServiceEntityRepository { - public DashboardServiceRepository(CollectionDAO dao, SecretsManager secretsManager) { + public DashboardServiceRepository(CollectionDAO dao) { super( DashboardServiceResource.COLLECTION_PATH, Entity.DASHBOARD_SERVICE, dao, dao.dashboardServiceDAO(), - secretsManager, DashboardConnection.class, ServiceType.DASHBOARD); } diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/DatabaseServiceRepository.java b/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/DatabaseServiceRepository.java index 28a9835b7e1..85f89978cd1 100644 --- a/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/DatabaseServiceRepository.java +++ b/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/DatabaseServiceRepository.java @@ -18,16 +18,14 @@ import org.openmetadata.schema.entity.services.DatabaseService; import org.openmetadata.schema.entity.services.ServiceType; import org.openmetadata.service.Entity; import org.openmetadata.service.resources.services.database.DatabaseServiceResource; -import org.openmetadata.service.secrets.SecretsManager; public class DatabaseServiceRepository extends ServiceEntityRepository { - public DatabaseServiceRepository(CollectionDAO dao, SecretsManager secretsManager) { + public DatabaseServiceRepository(CollectionDAO dao) { super( DatabaseServiceResource.COLLECTION_PATH, Entity.DATABASE_SERVICE, dao, dao.dbServiceDAO(), - secretsManager, DatabaseConnection.class, ServiceType.DATABASE); } diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/IngestionPipelineRepository.java b/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/IngestionPipelineRepository.java index ff7aeb0a448..8ad9f0560ee 100644 --- a/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/IngestionPipelineRepository.java +++ b/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/IngestionPipelineRepository.java @@ -29,6 +29,7 @@ import org.openmetadata.schema.type.Relationship; import org.openmetadata.service.Entity; import org.openmetadata.service.resources.services.ingestionpipelines.IngestionPipelineResource; import org.openmetadata.service.secrets.SecretsManager; +import org.openmetadata.service.secrets.SecretsManagerFactory; import org.openmetadata.service.util.EntityUtil.Fields; import org.openmetadata.service.util.FullyQualifiedName; import org.openmetadata.service.util.JsonUtils; @@ -39,9 +40,7 @@ public class IngestionPipelineRepository extends EntityRepository { private static final String UPDATE_FIELDS = "owner, connection"; - public MessagingServiceRepository(CollectionDAO dao, SecretsManager secretsManager) { + public MessagingServiceRepository(CollectionDAO dao) { super( MessagingServiceResource.COLLECTION_PATH, Entity.MESSAGING_SERVICE, dao, dao.messagingServiceDAO(), - secretsManager, MessagingConnection.class, UPDATE_FIELDS, ServiceType.MESSAGING); diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/MlModelServiceRepository.java b/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/MlModelServiceRepository.java index 024a5b6bfb0..6fb431c5c5d 100644 --- a/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/MlModelServiceRepository.java +++ b/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/MlModelServiceRepository.java @@ -18,18 +18,16 @@ import org.openmetadata.schema.entity.services.ServiceType; import org.openmetadata.schema.type.MlModelConnection; import org.openmetadata.service.Entity; import org.openmetadata.service.resources.services.mlmodel.MlModelServiceResource; -import org.openmetadata.service.secrets.SecretsManager; public class MlModelServiceRepository extends ServiceEntityRepository { private static final String UPDATE_FIELDS = "owner,connection"; - public MlModelServiceRepository(CollectionDAO dao, SecretsManager secretsManager) { + public MlModelServiceRepository(CollectionDAO dao) { super( MlModelServiceResource.COLLECTION_PATH, Entity.MLMODEL_SERVICE, dao, dao.mlModelServiceDAO(), - secretsManager, MlModelConnection.class, UPDATE_FIELDS, ServiceType.ML_MODEL); diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/PipelineServiceRepository.java b/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/PipelineServiceRepository.java index 049ba6ed06b..b0fa4e17dcc 100644 --- a/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/PipelineServiceRepository.java +++ b/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/PipelineServiceRepository.java @@ -18,17 +18,15 @@ import org.openmetadata.schema.entity.services.ServiceType; import org.openmetadata.schema.type.PipelineConnection; import org.openmetadata.service.Entity; import org.openmetadata.service.resources.services.pipeline.PipelineServiceResource; -import org.openmetadata.service.secrets.SecretsManager; public class PipelineServiceRepository extends ServiceEntityRepository { - public PipelineServiceRepository(CollectionDAO dao, SecretsManager secretsManager) { + public PipelineServiceRepository(CollectionDAO dao) { super( PipelineServiceResource.COLLECTION_PATH, Entity.PIPELINE_SERVICE, dao, dao.pipelineServiceDAO(), - secretsManager, PipelineConnection.class, ServiceType.PIPELINE); } diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/ServiceEntityRepository.java b/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/ServiceEntityRepository.java index a053d175e60..1b04f44cd10 100644 --- a/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/ServiceEntityRepository.java +++ b/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/ServiceEntityRepository.java @@ -22,6 +22,7 @@ import org.openmetadata.schema.ServiceEntityInterface; import org.openmetadata.schema.entity.services.ServiceType; import org.openmetadata.schema.type.EntityReference; import org.openmetadata.service.secrets.SecretsManager; +import org.openmetadata.service.secrets.SecretsManagerFactory; import org.openmetadata.service.util.EntityUtil; import org.openmetadata.service.util.JsonUtils; @@ -32,8 +33,6 @@ public abstract class ServiceEntityRepository< @Getter private final Class serviceConnectionClass; - protected final SecretsManager secretsManager; - @Getter private final ServiceType serviceType; protected ServiceEntityRepository( @@ -41,10 +40,9 @@ public abstract class ServiceEntityRepository< String service, CollectionDAO dao, EntityDAO entityDAO, - SecretsManager secretsManager, Class serviceConnectionClass, ServiceType serviceType) { - this(collectionPath, service, dao, entityDAO, secretsManager, serviceConnectionClass, UPDATE_FIELDS, serviceType); + this(collectionPath, service, dao, entityDAO, serviceConnectionClass, UPDATE_FIELDS, serviceType); } protected ServiceEntityRepository( @@ -52,12 +50,10 @@ public abstract class ServiceEntityRepository< String service, CollectionDAO dao, EntityDAO entityDAO, - SecretsManager secretsManager, Class serviceConnectionClass, String updatedFields, ServiceType serviceType) { super(collectionPath, service, entityDAO.getEntityClass(), entityDAO, dao, "", updatedFields); - this.secretsManager = secretsManager; this.serviceConnectionClass = serviceConnectionClass; this.serviceType = serviceType; } @@ -83,6 +79,7 @@ public abstract class ServiceEntityRepository< service.withOwner(null).withHref(null); // encrypt connection config in case of local secret manager + SecretsManager secretsManager = SecretsManagerFactory.getSecretsManager(); if (secretsManager.isLocal()) { service .getConnection() @@ -135,6 +132,7 @@ public abstract class ServiceEntityRepository< } private void updateConnection() throws IOException { + SecretsManager secretsManager = SecretsManagerFactory.getSecretsManager(); if (secretsManager.isLocal()) { ServiceConnectionEntityInterface origConn = original.getConnection(); ServiceConnectionEntityInterface updatedConn = updated.getConnection(); diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/UserRepository.java b/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/UserRepository.java index 8f6b2a4df22..8b2da3464d1 100644 --- a/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/UserRepository.java +++ b/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/UserRepository.java @@ -40,6 +40,7 @@ import org.openmetadata.service.exception.CatalogExceptionMessage; import org.openmetadata.service.jdbi3.CollectionDAO.EntityRelationshipRecord; import org.openmetadata.service.resources.teams.UserResource; import org.openmetadata.service.secrets.SecretsManager; +import org.openmetadata.service.secrets.SecretsManagerFactory; import org.openmetadata.service.security.policyevaluator.SubjectCache; import org.openmetadata.service.util.EntityUtil; import org.openmetadata.service.util.EntityUtil.Fields; @@ -50,9 +51,8 @@ public class UserRepository extends EntityRepository { static final String USER_PATCH_FIELDS = "profile,roles,teams,authenticationMechanism,isEmailVerified"; static final String USER_UPDATE_FIELDS = "profile,roles,teams,authenticationMechanism,isEmailVerified"; private final EntityReference organization; - private final SecretsManager secretsManager; - public UserRepository(CollectionDAO dao, SecretsManager secretsManager) { + public UserRepository(CollectionDAO dao) { super( UserResource.COLLECTION_PATH, Entity.USER, @@ -62,7 +62,6 @@ public class UserRepository extends EntityRepository { USER_PATCH_FIELDS, USER_UPDATE_FIELDS); organization = dao.teamDAO().findEntityReferenceByName(Entity.ORGANIZATION_NAME, Include.ALL); - this.secretsManager = secretsManager; } public final Fields getFieldsWithUserAuth(String fields) { @@ -112,6 +111,7 @@ public class UserRepository extends EntityRepository { // Don't store roles, teams and href as JSON. Build it on the fly based on relationships user.withRoles(null).withTeams(null).withHref(null).withInheritedRoles(null); + SecretsManager secretsManager = SecretsManagerFactory.getSecretsManager(); if (secretsManager != null && Boolean.TRUE.equals(user.getIsBot()) && user.getAuthenticationMechanism() != null) { user.getAuthenticationMechanism() .setConfig( @@ -226,10 +226,11 @@ public class UserRepository extends EntityRepository { @Transaction public User getByNameWithSecretManager(String fqn, Fields fields) throws IOException { User user = getByName(null, fqn, fields, NON_DELETED); + SecretsManager secretsManager = SecretsManagerFactory.getSecretsManager(); if (user.getAuthenticationMechanism() != null) { user.getAuthenticationMechanism() .withConfig( - this.secretsManager.encryptOrDecryptBotUserCredentials( + secretsManager.encryptOrDecryptBotUserCredentials( user.getName(), user.getAuthenticationMechanism().getConfig(), false)); } return user; diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/resources/Collection.java b/openmetadata-service/src/main/java/org/openmetadata/service/resources/Collection.java index 08a40948a72..a76a6096c1a 100644 --- a/openmetadata-service/src/main/java/org/openmetadata/service/resources/Collection.java +++ b/openmetadata-service/src/main/java/org/openmetadata/service/resources/Collection.java @@ -21,17 +21,8 @@ import java.lang.annotation.Target; @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.TYPE, ElementType.CONSTRUCTOR}) public @interface Collection { - enum ConstructorType { - CONFIG, - DAO_AUTH, - DAO_AUTH_SM, - DAO_AUTH_CONFIG, - DAO_AUTH_SM_CONFIG, - } + String name(); - String name() default ""; /** Only order from 0 to 9 (inclusive) are allowed */ int order() default 9; - - ConstructorType constructorType() default ConstructorType.DAO_AUTH; } diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/resources/CollectionRegistry.java b/openmetadata-service/src/main/java/org/openmetadata/service/resources/CollectionRegistry.java index 2c30e0df077..5dbe812294c 100644 --- a/openmetadata-service/src/main/java/org/openmetadata/service/resources/CollectionRegistry.java +++ b/openmetadata-service/src/main/java/org/openmetadata/service/resources/CollectionRegistry.java @@ -18,7 +18,6 @@ import io.dropwizard.setup.Environment; import io.swagger.annotations.Api; import java.io.File; import java.lang.annotation.Annotation; -import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.net.URI; @@ -42,7 +41,6 @@ import org.openmetadata.schema.type.CollectionDescriptor; import org.openmetadata.schema.type.CollectionInfo; import org.openmetadata.service.OpenMetadataApplicationConfig; import org.openmetadata.service.jdbi3.CollectionDAO; -import org.openmetadata.service.secrets.SecretsManager; import org.openmetadata.service.security.Authorizer; import org.openmetadata.service.util.RestUtil; import org.reflections.Reflections; @@ -181,11 +179,7 @@ public final class CollectionRegistry { /** Register resources from CollectionRegistry */ public void registerResources( - Jdbi jdbi, - Environment environment, - OpenMetadataApplicationConfig config, - Authorizer authorizer, - SecretsManager secretsManager) { + Jdbi jdbi, Environment environment, OpenMetadataApplicationConfig config, Authorizer authorizer) { // Build list of ResourceDescriptors for (Map.Entry e : collectionMap.entrySet()) { CollectionDetails details = e.getValue(); @@ -193,7 +187,7 @@ public final class CollectionRegistry { try { CollectionDAO daoObject = jdbi.onDemand(CollectionDAO.class); Objects.requireNonNull(daoObject, "CollectionDAO must not be null"); - Object resource = createResource(daoObject, resourceClass, config, authorizer, secretsManager); + Object resource = createResource(daoObject, resourceClass, config, authorizer); details.setResource(resource); environment.jersey().register(resource); LOG.info("Registering {} with order {}", resourceClass, details.order); @@ -212,28 +206,24 @@ public final class CollectionRegistry { /** Get collection details based on annotations in Resource classes */ private static CollectionDetails getCollection(Class cl) { - String href; - String doc; - String name; int order = 0; - href = null; - doc = null; - name = null; + CollectionInfo collectionInfo = new CollectionInfo(); for (Annotation a : cl.getAnnotations()) { if (a instanceof Path) { // Use @Path annotation to compile href - href = ((Path) a).value(); + collectionInfo.withHref(URI.create(((Path) a).value())); } else if (a instanceof Api) { // Use @Api annotation to get documentation about the collection - doc = ((Api) a).value(); + collectionInfo.withDocumentation(((Api) a).value()); } else if (a instanceof Collection) { // Use @Collection annotation to get initialization information for the class - name = ((Collection) a).name(); - order = ((Collection) a).order(); + Collection collection = (Collection) a; + collectionInfo.withName(collection.name()); + order = collection.order(); } } CollectionDescriptor cd = new CollectionDescriptor(); - cd.setCollection(new CollectionInfo().withName(name).withDocumentation(doc).withHref(URI.create(href))); + cd.setCollection(collectionInfo); return new CollectionDetails(cd, cl.getCanonicalName(), order); } @@ -253,59 +243,23 @@ public final class CollectionRegistry { /** Create a resource class based on dependencies declared in @Collection annotation */ private static Object createResource( - CollectionDAO daoObject, - String resourceClass, - OpenMetadataApplicationConfig config, - Authorizer authorizer, - SecretsManager secretsManager) + CollectionDAO daoObject, String resourceClass, OpenMetadataApplicationConfig config, Authorizer authorizer) throws ClassNotFoundException, NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException { - Object resource = null; + Object resource; Class clz = Class.forName(resourceClass); - // NOTE: Currently this will work fine for One Constructor scenario since per resource only one constructor is - // present, - // for multiple constructor we can use order as the priority to qualify amongst multiple constructors - for (Constructor constructor : clz.getConstructors()) { - Collection c = constructor.getAnnotation(Collection.class); - if (c != null) { - switch (c.constructorType()) { - case DAO_AUTH: - resource = - clz.getDeclaredConstructor(CollectionDAO.class, Authorizer.class).newInstance(daoObject, authorizer); - break; - case DAO_AUTH_SM: - resource = - clz.getDeclaredConstructor(CollectionDAO.class, Authorizer.class, SecretsManager.class) - .newInstance(daoObject, authorizer, secretsManager); - break; - case CONFIG: - resource = clz.getDeclaredConstructor(OpenMetadataApplicationConfig.class).newInstance(config); - break; - case DAO_AUTH_CONFIG: - resource = - clz.getDeclaredConstructor(CollectionDAO.class, Authorizer.class, OpenMetadataApplicationConfig.class) - .newInstance(daoObject, authorizer, config); - break; - case DAO_AUTH_SM_CONFIG: - resource = - clz.getDeclaredConstructor( - CollectionDAO.class, - Authorizer.class, - SecretsManager.class, - OpenMetadataApplicationConfig.class) - .newInstance(daoObject, authorizer, secretsManager, config); - break; - default: - resource = Class.forName(resourceClass).getConstructor().newInstance(); - } + // Create the resource identified by resourceClass + try { + resource = clz.getDeclaredConstructor(CollectionDAO.class, Authorizer.class).newInstance(daoObject, authorizer); + } catch (NoSuchMethodException e) { + try { + resource = clz.getDeclaredConstructor().newInstance(); + } catch (NoSuchMethodException exc) { + resource = Class.forName(resourceClass).getConstructor().newInstance(); } } - if (resource == null) { - resource = Class.forName(resourceClass).getConstructor().newInstance(); - } - // Call initialize method, if it exists try { Method initializeMethod = resource.getClass().getMethod("initialize", OpenMetadataApplicationConfig.class); diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/resources/EntityResource.java b/openmetadata-service/src/main/java/org/openmetadata/service/resources/EntityResource.java index 188cab685ef..1a223ea32cc 100644 --- a/openmetadata-service/src/main/java/org/openmetadata/service/resources/EntityResource.java +++ b/openmetadata-service/src/main/java/org/openmetadata/service/resources/EntityResource.java @@ -9,6 +9,7 @@ import javax.json.JsonPatch; import javax.ws.rs.core.Response; import javax.ws.rs.core.SecurityContext; import javax.ws.rs.core.UriInfo; +import lombok.Getter; import lombok.extern.slf4j.Slf4j; import org.openmetadata.schema.CreateEntity; import org.openmetadata.schema.EntityInterface; @@ -35,7 +36,7 @@ public abstract class EntityResource entityClass; protected final String entityType; protected final List allowedFields; - protected final K dao; + @Getter protected final K dao; protected final Authorizer authorizer; protected EntityResource(Class entityClass, K repository, Authorizer authorizer) { diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/resources/bots/BotResource.java b/openmetadata-service/src/main/java/org/openmetadata/service/resources/bots/BotResource.java index 36f4549eeb1..33aafd00cc7 100644 --- a/openmetadata-service/src/main/java/org/openmetadata/service/resources/bots/BotResource.java +++ b/openmetadata-service/src/main/java/org/openmetadata/service/resources/bots/BotResource.java @@ -60,6 +60,7 @@ import org.openmetadata.service.jdbi3.UserRepository; import org.openmetadata.service.resources.Collection; import org.openmetadata.service.resources.EntityResource; import org.openmetadata.service.secrets.SecretsManager; +import org.openmetadata.service.secrets.SecretsManagerFactory; import org.openmetadata.service.security.Authorizer; import org.openmetadata.service.util.EntityUtil; import org.openmetadata.service.util.ResultList; @@ -72,12 +73,8 @@ import org.openmetadata.service.util.ResultList; public class BotResource extends EntityResource { public static final String COLLECTION_PATH = "/v1/bots/"; - final SecretsManager secretsManager; - - @Collection(constructorType = Collection.ConstructorType.DAO_AUTH_SM) - public BotResource(CollectionDAO dao, Authorizer authorizer, SecretsManager secretsManager) { - super(Bot.class, new BotRepository(dao, secretsManager), authorizer); - this.secretsManager = secretsManager; + public BotResource(CollectionDAO dao, Authorizer authorizer) { + super(Bot.class, new BotRepository(dao), authorizer); } @Override @@ -269,6 +266,7 @@ public class BotResource extends EntityResource { Response response = createOrUpdate(uriInfo, securityContext, bot, false); // ensures the secrets' manager store the credentials even when the botUser does not change bot = (Bot) response.getEntity(); + SecretsManager secretsManager = SecretsManagerFactory.getSecretsManager(); if (!BotType.BOT.equals(bot.getBotType())) { secretsManager.encryptOrDecryptBotCredentials(bot.getBotType().value(), bot.getBotUser().getName(), true); } diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/resources/charts/ChartResource.java b/openmetadata-service/src/main/java/org/openmetadata/service/resources/charts/ChartResource.java index 6c42bc74445..c6d27f6bebf 100644 --- a/openmetadata-service/src/main/java/org/openmetadata/service/resources/charts/ChartResource.java +++ b/openmetadata-service/src/main/java/org/openmetadata/service/resources/charts/ChartResource.java @@ -76,7 +76,6 @@ public class ChartResource extends EntityResource { return chart; } - @Collection public ChartResource(CollectionDAO dao, Authorizer authorizer) { super(Chart.class, new ChartRepository(dao), authorizer); } diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/resources/config/ConfigResource.java b/openmetadata-service/src/main/java/org/openmetadata/service/resources/config/ConfigResource.java index aafe64b84b2..a0e6ed41c88 100644 --- a/openmetadata-service/src/main/java/org/openmetadata/service/resources/config/ConfigResource.java +++ b/openmetadata-service/src/main/java/org/openmetadata/service/resources/config/ConfigResource.java @@ -18,6 +18,7 @@ import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.Content; import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.responses.ApiResponse; +import java.io.IOException; import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.Produces; @@ -37,15 +38,17 @@ import org.openmetadata.service.security.jwt.JWTTokenGenerator; @Produces(MediaType.APPLICATION_JSON) @Collection(name = "config") public class ConfigResource { - private final OpenMetadataApplicationConfig openMetadataApplicationConfig; + private OpenMetadataApplicationConfig openMetadataApplicationConfig; private final JWTTokenGenerator jwtTokenGenerator; - @Collection(constructorType = Collection.ConstructorType.CONFIG) - public ConfigResource(OpenMetadataApplicationConfig openMetadataApplicationConfig) { - this.openMetadataApplicationConfig = openMetadataApplicationConfig; + public ConfigResource() { this.jwtTokenGenerator = JWTTokenGenerator.getInstance(); } + public void initialize(OpenMetadataApplicationConfig config) throws IOException { + this.openMetadataApplicationConfig = config; + } + @GET @Path(("/auth")) @Operation( diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/resources/dashboards/DashboardResource.java b/openmetadata-service/src/main/java/org/openmetadata/service/resources/dashboards/DashboardResource.java index 184206a9d43..365231254f9 100644 --- a/openmetadata-service/src/main/java/org/openmetadata/service/resources/dashboards/DashboardResource.java +++ b/openmetadata-service/src/main/java/org/openmetadata/service/resources/dashboards/DashboardResource.java @@ -75,7 +75,6 @@ public class DashboardResource extends EntityResource { return operations.toArray(new MetadataOperation[0]); } - @Collection public TableResource(CollectionDAO dao, Authorizer authorizer) { super(Table.class, new TableRepository(dao), authorizer); allowedFields.add("tests"); diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/resources/dqtests/TestCaseResource.java b/openmetadata-service/src/main/java/org/openmetadata/service/resources/dqtests/TestCaseResource.java index 134a7c8f2ec..53f81996794 100644 --- a/openmetadata-service/src/main/java/org/openmetadata/service/resources/dqtests/TestCaseResource.java +++ b/openmetadata-service/src/main/java/org/openmetadata/service/resources/dqtests/TestCaseResource.java @@ -83,7 +83,6 @@ public class TestCaseResource extends EntityResource(5), new ThreadPoolExecutor.CallerRunsPolicy()); } + public void initialize(OpenMetadataApplicationConfig config) throws IOException { + if (config.getElasticSearchConfiguration() != null) { + this.client = ElasticSearchClientUtils.createElasticSearchClient(config.getElasticSearchConfiguration()); + this.elasticSearchIndexDefinition = new ElasticSearchIndexDefinition(client, dao); + } + } + private BulkProcessor getBulkProcessor(BulkProcessorListener listener, int bulkSize, int flushIntervalInSeconds) { BiConsumer> bulkConsumer = (request, bulkListener) -> client.bulkAsync(request, RequestOptions.DEFAULT, bulkListener); diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/resources/events/EventResource.java b/openmetadata-service/src/main/java/org/openmetadata/service/resources/events/EventResource.java index e3e38479fd3..cb7582e6557 100644 --- a/openmetadata-service/src/main/java/org/openmetadata/service/resources/events/EventResource.java +++ b/openmetadata-service/src/main/java/org/openmetadata/service/resources/events/EventResource.java @@ -61,7 +61,6 @@ public class EventResource { } } - @Collection public EventResource(CollectionDAO dao, Authorizer authorizer) { Objects.requireNonNull(dao, "ChangeEventRepository must not be null"); this.dao = new ChangeEventRepository(dao); diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/resources/events/WebhookResource.java b/openmetadata-service/src/main/java/org/openmetadata/service/resources/events/WebhookResource.java index 5036d73cfec..8507c987a56 100644 --- a/openmetadata-service/src/main/java/org/openmetadata/service/resources/events/WebhookResource.java +++ b/openmetadata-service/src/main/java/org/openmetadata/service/resources/events/WebhookResource.java @@ -86,7 +86,6 @@ public class WebhookResource extends EntityResource } } - @Collection public WebhookResource(CollectionDAO dao, Authorizer authorizer) { super(Webhook.class, new WebhookRepository(dao), authorizer); webhookDAO = dao.webhookDAO(); diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/resources/feeds/FeedResource.java b/openmetadata-service/src/main/java/org/openmetadata/service/resources/feeds/FeedResource.java index 74c5782d6f1..a4ad1af5c69 100644 --- a/openmetadata-service/src/main/java/org/openmetadata/service/resources/feeds/FeedResource.java +++ b/openmetadata-service/src/main/java/org/openmetadata/service/resources/feeds/FeedResource.java @@ -100,7 +100,6 @@ public class FeedResource { return thread; } - @Collection public FeedResource(CollectionDAO dao, Authorizer authorizer) { Objects.requireNonNull(dao, "FeedRepository must not be null"); this.dao = new FeedRepository(dao); diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/resources/glossary/GlossaryResource.java b/openmetadata-service/src/main/java/org/openmetadata/service/resources/glossary/GlossaryResource.java index 2398297c6db..52b60340cb6 100644 --- a/openmetadata-service/src/main/java/org/openmetadata/service/resources/glossary/GlossaryResource.java +++ b/openmetadata-service/src/main/java/org/openmetadata/service/resources/glossary/GlossaryResource.java @@ -77,7 +77,6 @@ public class GlossaryResource extends EntityResource { public static final String COLLECTION_PATH = "/v1/metrics/"; - @Collection public MetricsResource(CollectionDAO dao, Authorizer authorizer) { super(Metrics.class, new MetricsRepository(dao), authorizer); } diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/resources/mlmodels/MlModelResource.java b/openmetadata-service/src/main/java/org/openmetadata/service/resources/mlmodels/MlModelResource.java index 301b64b6011..cf269aba988 100644 --- a/openmetadata-service/src/main/java/org/openmetadata/service/resources/mlmodels/MlModelResource.java +++ b/openmetadata-service/src/main/java/org/openmetadata/service/resources/mlmodels/MlModelResource.java @@ -78,7 +78,6 @@ public class MlModelResource extends EntityResource return mlmodel; } - @Collection public MlModelResource(CollectionDAO dao, Authorizer authorizer) { super(MlModel.class, new MlModelRepository(dao), authorizer); } diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/resources/permissions/PermissionsResource.java b/openmetadata-service/src/main/java/org/openmetadata/service/resources/permissions/PermissionsResource.java index 4698ea0568f..fe0ef70f5b7 100644 --- a/openmetadata-service/src/main/java/org/openmetadata/service/resources/permissions/PermissionsResource.java +++ b/openmetadata-service/src/main/java/org/openmetadata/service/resources/permissions/PermissionsResource.java @@ -48,7 +48,6 @@ public class PermissionsResource { private final Authorizer authorizer; @SuppressWarnings("unused") - @Collection public PermissionsResource(CollectionDAO dao, @NonNull Authorizer authorizer) { this.authorizer = authorizer; } diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/resources/pipelines/PipelineResource.java b/openmetadata-service/src/main/java/org/openmetadata/service/resources/pipelines/PipelineResource.java index 9325e806846..8ee8b96c5f1 100644 --- a/openmetadata-service/src/main/java/org/openmetadata/service/resources/pipelines/PipelineResource.java +++ b/openmetadata-service/src/main/java/org/openmetadata/service/resources/pipelines/PipelineResource.java @@ -80,7 +80,6 @@ public class PipelineResource extends EntityResource { return policy; } - @Collection public PolicyResource(CollectionDAO dao, Authorizer authorizer) { super(Policy.class, new PolicyRepository(dao), authorizer); } diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/resources/reports/ReportResource.java b/openmetadata-service/src/main/java/org/openmetadata/service/resources/reports/ReportResource.java index 965c88d1477..d2e0f8ec348 100644 --- a/openmetadata-service/src/main/java/org/openmetadata/service/resources/reports/ReportResource.java +++ b/openmetadata-service/src/main/java/org/openmetadata/service/resources/reports/ReportResource.java @@ -56,7 +56,6 @@ import org.openmetadata.service.util.ResultList; public class ReportResource extends EntityResource { public static final String COLLECTION_PATH = "/v1/bots/"; - @Collection public ReportResource(CollectionDAO dao, Authorizer authorizer) { super(Report.class, new ReportRepository(dao), authorizer); } diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/resources/search/SearchResource.java b/openmetadata-service/src/main/java/org/openmetadata/service/resources/search/SearchResource.java index 33bcefd8064..44e819a8f68 100644 --- a/openmetadata-service/src/main/java/org/openmetadata/service/resources/search/SearchResource.java +++ b/openmetadata-service/src/main/java/org/openmetadata/service/resources/search/SearchResource.java @@ -73,8 +73,9 @@ public class SearchResource { private static final String DESCRIPTION = "description"; private static final String UNIFIED = "unified"; - @Collection(constructorType = Collection.ConstructorType.CONFIG) - public SearchResource(OpenMetadataApplicationConfig config) { + public SearchResource() {} + + public void initialize(OpenMetadataApplicationConfig config) throws IOException { if (config.getElasticSearchConfiguration() != null) { this.client = ElasticSearchClientUtils.createElasticSearchClient(config.getElasticSearchConfiguration()); } diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/resources/services/ServiceEntityResource.java b/openmetadata-service/src/main/java/org/openmetadata/service/resources/services/ServiceEntityResource.java index ecc85cbe696..dd6304c313f 100644 --- a/openmetadata-service/src/main/java/org/openmetadata/service/resources/services/ServiceEntityResource.java +++ b/openmetadata-service/src/main/java/org/openmetadata/service/resources/services/ServiceEntityResource.java @@ -26,6 +26,7 @@ import org.openmetadata.service.exception.UnhandledServerException; import org.openmetadata.service.jdbi3.ServiceEntityRepository; import org.openmetadata.service.resources.EntityResource; import org.openmetadata.service.secrets.SecretsManager; +import org.openmetadata.service.secrets.SecretsManagerFactory; import org.openmetadata.service.security.AuthorizationException; import org.openmetadata.service.security.Authorizer; import org.openmetadata.service.util.JsonUtils; @@ -37,25 +38,19 @@ public abstract class ServiceEntityResource< S extends ServiceConnectionEntityInterface> extends EntityResource { - private final SecretsManager secretsManager; - @Getter private final ServiceEntityRepository serviceEntityRepository; private final ServiceType serviceType; protected ServiceEntityResource( - Class entityClass, - R serviceRepository, - Authorizer authorizer, - SecretsManager secretsManager, - ServiceType serviceType) { + Class entityClass, R serviceRepository, Authorizer authorizer, ServiceType serviceType) { super(entityClass, serviceRepository, authorizer); this.serviceEntityRepository = serviceRepository; - this.secretsManager = secretsManager; this.serviceType = serviceType; } protected T decryptOrNullify(SecurityContext securityContext, T service) { + SecretsManager secretsManager = SecretsManagerFactory.getSecretsManager(); try { authorizer.authorizeAdmin(securityContext, secretsManager.isLocal()); } catch (AuthorizationException e) { @@ -66,6 +61,7 @@ public abstract class ServiceEntityResource< } private Object retrieveServiceConnectionConfig(T service) { + SecretsManager secretsManager = SecretsManagerFactory.getSecretsManager(); return secretsManager.encryptOrDecryptServiceConnectionConfig( service.getConnection().getConfig(), extractServiceType(service), service.getName(), serviceType, false); } diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/resources/services/dashboard/DashboardServiceResource.java b/openmetadata-service/src/main/java/org/openmetadata/service/resources/services/dashboard/DashboardServiceResource.java index b9ce5e51478..1347a432ae6 100644 --- a/openmetadata-service/src/main/java/org/openmetadata/service/resources/services/dashboard/DashboardServiceResource.java +++ b/openmetadata-service/src/main/java/org/openmetadata/service/resources/services/dashboard/DashboardServiceResource.java @@ -55,7 +55,6 @@ import org.openmetadata.service.jdbi3.DashboardServiceRepository; import org.openmetadata.service.jdbi3.ListFilter; import org.openmetadata.service.resources.Collection; import org.openmetadata.service.resources.services.ServiceEntityResource; -import org.openmetadata.service.secrets.SecretsManager; import org.openmetadata.service.security.Authorizer; import org.openmetadata.service.util.JsonUtils; import org.openmetadata.service.util.RestUtil; @@ -78,14 +77,9 @@ public class DashboardServiceResource return service; } - @Collection(constructorType = Collection.ConstructorType.DAO_AUTH_SM) - public DashboardServiceResource(CollectionDAO dao, Authorizer authorizer, SecretsManager secretsManager) { - super( - DashboardService.class, - new DashboardServiceRepository(dao, secretsManager), - authorizer, - secretsManager, - ServiceType.DASHBOARD); + public DashboardServiceResource(CollectionDAO dao, Authorizer authorizer) { + + super(DashboardService.class, new DashboardServiceRepository(dao), authorizer, ServiceType.DASHBOARD); } public static class DashboardServiceList extends ResultList { diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/resources/services/database/DatabaseServiceResource.java b/openmetadata-service/src/main/java/org/openmetadata/service/resources/services/database/DatabaseServiceResource.java index 92b2b94a503..718ca357161 100644 --- a/openmetadata-service/src/main/java/org/openmetadata/service/resources/services/database/DatabaseServiceResource.java +++ b/openmetadata-service/src/main/java/org/openmetadata/service/resources/services/database/DatabaseServiceResource.java @@ -54,7 +54,6 @@ import org.openmetadata.service.jdbi3.DatabaseServiceRepository; import org.openmetadata.service.jdbi3.ListFilter; import org.openmetadata.service.resources.Collection; import org.openmetadata.service.resources.services.ServiceEntityResource; -import org.openmetadata.service.secrets.SecretsManager; import org.openmetadata.service.security.Authorizer; import org.openmetadata.service.util.EntityUtil; import org.openmetadata.service.util.JsonUtils; @@ -80,14 +79,8 @@ public class DatabaseServiceResource return service; } - @Collection(constructorType = Collection.ConstructorType.DAO_AUTH_SM) - public DatabaseServiceResource(CollectionDAO dao, Authorizer authorizer, SecretsManager secretsManager) { - super( - DatabaseService.class, - new DatabaseServiceRepository(dao, secretsManager), - authorizer, - secretsManager, - ServiceType.DATABASE); + public DatabaseServiceResource(CollectionDAO dao, Authorizer authorizer) { + super(DatabaseService.class, new DatabaseServiceRepository(dao), authorizer, ServiceType.DATABASE); } public static class DatabaseServiceList extends ResultList { diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/resources/services/ingestionpipelines/IngestionPipelineResource.java b/openmetadata-service/src/main/java/org/openmetadata/service/resources/services/ingestionpipelines/IngestionPipelineResource.java index 0fdcd5e4ae8..7782058bffb 100644 --- a/openmetadata-service/src/main/java/org/openmetadata/service/resources/services/ingestionpipelines/IngestionPipelineResource.java +++ b/openmetadata-service/src/main/java/org/openmetadata/service/resources/services/ingestionpipelines/IngestionPipelineResource.java @@ -51,7 +51,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 lombok.Getter; import lombok.extern.slf4j.Slf4j; import org.openmetadata.schema.api.services.ingestionPipelines.CreateIngestionPipeline; import org.openmetadata.schema.api.services.ingestionPipelines.TestServiceConnection; @@ -69,6 +68,7 @@ import org.openmetadata.service.jdbi3.ListFilter; import org.openmetadata.service.resources.Collection; import org.openmetadata.service.resources.EntityResource; import org.openmetadata.service.secrets.SecretsManager; +import org.openmetadata.service.secrets.SecretsManagerFactory; import org.openmetadata.service.security.AuthorizationException; import org.openmetadata.service.security.Authorizer; import org.openmetadata.service.security.policyevaluator.OperationContext; @@ -87,9 +87,6 @@ public class IngestionPipelineResource extends EntityResource { diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/resources/services/mlmodel/MlModelServiceResource.java b/openmetadata-service/src/main/java/org/openmetadata/service/resources/services/mlmodel/MlModelServiceResource.java index f30b37c5539..4d7f3a7e49e 100644 --- a/openmetadata-service/src/main/java/org/openmetadata/service/resources/services/mlmodel/MlModelServiceResource.java +++ b/openmetadata-service/src/main/java/org/openmetadata/service/resources/services/mlmodel/MlModelServiceResource.java @@ -53,7 +53,6 @@ import org.openmetadata.service.jdbi3.ListFilter; import org.openmetadata.service.jdbi3.MlModelServiceRepository; import org.openmetadata.service.resources.Collection; import org.openmetadata.service.resources.services.ServiceEntityResource; -import org.openmetadata.service.secrets.SecretsManager; import org.openmetadata.service.security.Authorizer; import org.openmetadata.service.util.JsonUtils; import org.openmetadata.service.util.RestUtil; @@ -78,14 +77,8 @@ public class MlModelServiceResource return service; } - @Collection(constructorType = Collection.ConstructorType.DAO_AUTH_SM) - public MlModelServiceResource(CollectionDAO dao, Authorizer authorizer, SecretsManager secretsManager) { - super( - MlModelService.class, - new MlModelServiceRepository(dao, secretsManager), - authorizer, - secretsManager, - ServiceType.ML_MODEL); + public MlModelServiceResource(CollectionDAO dao, Authorizer authorizer) { + super(MlModelService.class, new MlModelServiceRepository(dao), authorizer, ServiceType.ML_MODEL); } public static class MlModelServiceList extends ResultList { diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/resources/services/pipeline/PipelineServiceResource.java b/openmetadata-service/src/main/java/org/openmetadata/service/resources/services/pipeline/PipelineServiceResource.java index a167210ad68..06c12113b23 100644 --- a/openmetadata-service/src/main/java/org/openmetadata/service/resources/services/pipeline/PipelineServiceResource.java +++ b/openmetadata-service/src/main/java/org/openmetadata/service/resources/services/pipeline/PipelineServiceResource.java @@ -53,7 +53,6 @@ import org.openmetadata.service.jdbi3.ListFilter; import org.openmetadata.service.jdbi3.PipelineServiceRepository; import org.openmetadata.service.resources.Collection; import org.openmetadata.service.resources.services.ServiceEntityResource; -import org.openmetadata.service.secrets.SecretsManager; import org.openmetadata.service.security.Authorizer; import org.openmetadata.service.util.JsonUtils; import org.openmetadata.service.util.RestUtil; @@ -77,14 +76,8 @@ public class PipelineServiceResource return service; } - @Collection(constructorType = Collection.ConstructorType.DAO_AUTH_SM) - public PipelineServiceResource(CollectionDAO dao, Authorizer authorizer, SecretsManager secretsManager) { - super( - PipelineService.class, - new PipelineServiceRepository(dao, secretsManager), - authorizer, - secretsManager, - ServiceType.PIPELINE); + public PipelineServiceResource(CollectionDAO dao, Authorizer authorizer) { + super(PipelineService.class, new PipelineServiceRepository(dao), authorizer, ServiceType.PIPELINE); } public static class PipelineServiceList extends ResultList { diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/resources/services/storage/StorageServiceResource.java b/openmetadata-service/src/main/java/org/openmetadata/service/resources/services/storage/StorageServiceResource.java index bf22937d7ad..76916c75798 100644 --- a/openmetadata-service/src/main/java/org/openmetadata/service/resources/services/storage/StorageServiceResource.java +++ b/openmetadata-service/src/main/java/org/openmetadata/service/resources/services/storage/StorageServiceResource.java @@ -73,7 +73,6 @@ public class StorageServiceResource extends EntityResource tagFiles = EntityUtil.getJsonDataResources(".*json/data/tags/.*\\.json$"); diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/resources/teams/RoleResource.java b/openmetadata-service/src/main/java/org/openmetadata/service/resources/teams/RoleResource.java index 16e76c60453..637ac713f15 100644 --- a/openmetadata-service/src/main/java/org/openmetadata/service/resources/teams/RoleResource.java +++ b/openmetadata-service/src/main/java/org/openmetadata/service/resources/teams/RoleResource.java @@ -86,7 +86,6 @@ public class RoleResource extends EntityResource { return role; } - @Collection public RoleResource(CollectionDAO collectionDAO, Authorizer authorizer) { super(Role.class, new RoleRepository(collectionDAO), authorizer); } diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/resources/teams/TeamResource.java b/openmetadata-service/src/main/java/org/openmetadata/service/resources/teams/TeamResource.java index 73dc6747675..a5ddc223833 100644 --- a/openmetadata-service/src/main/java/org/openmetadata/service/resources/teams/TeamResource.java +++ b/openmetadata-service/src/main/java/org/openmetadata/service/resources/teams/TeamResource.java @@ -87,7 +87,6 @@ public class TeamResource extends EntityResource { return team; } - @Collection public TeamResource(CollectionDAO dao, Authorizer authorizer) { super(Team.class, new TeamRepository(dao), authorizer); } diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/resources/teams/UserResource.java b/openmetadata-service/src/main/java/org/openmetadata/service/resources/teams/UserResource.java index fad487378d4..2e837885419 100644 --- a/openmetadata-service/src/main/java/org/openmetadata/service/resources/teams/UserResource.java +++ b/openmetadata-service/src/main/java/org/openmetadata/service/resources/teams/UserResource.java @@ -47,7 +47,6 @@ import java.io.IOException; import java.time.Instant; import java.time.LocalDateTime; import java.time.ZoneId; -import java.time.temporal.ChronoUnit; import java.util.Date; import java.util.HashMap; import java.util.LinkedHashMap; @@ -77,7 +76,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 lombok.Getter; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.jetbrains.annotations.Nullable; @@ -120,6 +118,7 @@ import org.openmetadata.service.jdbi3.UserRepository; import org.openmetadata.service.resources.Collection; import org.openmetadata.service.resources.EntityResource; import org.openmetadata.service.secrets.SecretsManager; +import org.openmetadata.service.secrets.SecretsManagerFactory; import org.openmetadata.service.security.AuthorizationException; import org.openmetadata.service.security.Authorizer; import org.openmetadata.service.security.auth.LoginAttemptCache; @@ -147,14 +146,12 @@ public class UserResource extends EntityResource { public static final String USER_PROTECTED_FIELDS = "authenticationMechanism"; private final JWTTokenGenerator jwtTokenGenerator; private final TokenRepository tokenRepository; - @Getter private final UserRepository userRepository; - private final SecretsManager secretsManager; - private final boolean isEmailServiceEnabled; - private final LoginAttemptCache loginAttemptCache; + private boolean isEmailServiceEnabled; + private LoginAttemptCache loginAttemptCache; - private final AuthenticationConfiguration authenticationConfiguration; + private AuthenticationConfiguration authenticationConfiguration; - private final AuthorizerConfiguration authorizerConfiguration; + private AuthorizerConfiguration authorizerConfiguration; @Override public User addHref(UriInfo uriInfo, User user) { @@ -166,15 +163,14 @@ public class UserResource extends EntityResource { return user; } - @Collection(constructorType = Collection.ConstructorType.DAO_AUTH_SM_CONFIG) - public UserResource( - CollectionDAO dao, Authorizer authorizer, SecretsManager secretsManager, OpenMetadataApplicationConfig config) { - super(User.class, new UserRepository(dao, secretsManager), authorizer); + public UserResource(CollectionDAO dao, Authorizer authorizer) { + super(User.class, new UserRepository(dao), authorizer); jwtTokenGenerator = JWTTokenGenerator.getInstance(); allowedFields.remove(USER_PROTECTED_FIELDS); tokenRepository = new TokenRepository(dao); - userRepository = new UserRepository(dao, secretsManager); - this.secretsManager = secretsManager; + } + + public void initialize(OpenMetadataApplicationConfig config) throws IOException { this.authenticationConfiguration = config.getAuthenticationConfiguration(); this.authorizerConfiguration = config.getAuthorizerConfiguration(); SmtpSettings smtpSettings = config.getSmtpSettings(); @@ -1220,8 +1216,7 @@ public class UserResource extends EntityResource { if (emailVerificationToken == null) { throw new EntityNotFoundException("Invalid Token. Please issue a new Request"); } - User registeredUser = - dao.get(uriInfo, emailVerificationToken.getUserId(), userRepository.getFieldsWithUserAuth("*")); + User registeredUser = dao.get(uriInfo, emailVerificationToken.getUserId(), dao.getFieldsWithUserAuth("*")); if (Boolean.TRUE.equals(registeredUser.getIsEmailVerified())) { LOG.info("User [{}] already registered.", emailToken); return; @@ -1243,22 +1238,6 @@ public class UserResource extends EntityResource { tokenRepository.deleteTokenByUserAndType(registeredUser.getId().toString(), EMAIL_VERIFICATION.toString()); } - public User extendRegistrationToken(UriInfo uriInfo, String existingToken) throws IOException { - EmailVerificationToken emailVerificationToken = (EmailVerificationToken) tokenRepository.findByToken(existingToken); - User registeredUser = dao.get(uriInfo, emailVerificationToken.getUserId(), getFields("isEmailVerified")); - if (Boolean.TRUE.equals(registeredUser.getIsEmailVerified())) { - // no need to do anything - return registeredUser; - } - // Update token with new Expiry and Status - emailVerificationToken.setTokenStatus(EmailVerificationToken.TokenStatus.STATUS_PENDING); - emailVerificationToken.setExpiryDate(Instant.now().plus(24, ChronoUnit.HOURS).toEpochMilli()); - - // Update the token details in Database - tokenRepository.updateToken(emailVerificationToken); - return registeredUser; - } - private void sendEmailVerification(UriInfo uriInfo, User user) throws IOException, TemplateException { UUID mailVerificationToken = UUID.randomUUID(); EmailVerificationToken emailVerificationToken = @@ -1500,6 +1479,7 @@ public class UserResource extends EntityResource { if (isValidAuthenticationMechanism(create)) { AuthenticationMechanism authMechanism = create.getAuthenticationMechanism(); AuthenticationMechanism.AuthType authType = authMechanism.getAuthType(); + SecretsManager secretsManager = SecretsManagerFactory.getSecretsManager(); switch (authType) { case JWT: User original = retrieveBotUser(user, uriInfo); @@ -1578,6 +1558,7 @@ public class UserResource extends EntityResource { } private User decryptOrNullify(SecurityContext securityContext, User user) { + SecretsManager secretsManager = SecretsManagerFactory.getSecretsManager(); if (Boolean.TRUE.equals(user.getIsBot()) && user.getAuthenticationMechanism() != null) { try { authorizer.authorize( diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/resources/topics/TopicResource.java b/openmetadata-service/src/main/java/org/openmetadata/service/resources/topics/TopicResource.java index 91e96b493b6..4242ff9eb3a 100644 --- a/openmetadata-service/src/main/java/org/openmetadata/service/resources/topics/TopicResource.java +++ b/openmetadata-service/src/main/java/org/openmetadata/service/resources/topics/TopicResource.java @@ -78,7 +78,6 @@ public class TopicResource extends EntityResource { } @Inject - @Collection public TopicResource(CollectionDAO dao, Authorizer authorizer) { super(Topic.class, new TopicRepository(dao), authorizer); } diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/resources/types/TypeResource.java b/openmetadata-service/src/main/java/org/openmetadata/service/resources/types/TypeResource.java index 7cd796456dc..f30b842f7a1 100644 --- a/openmetadata-service/src/main/java/org/openmetadata/service/resources/types/TypeResource.java +++ b/openmetadata-service/src/main/java/org/openmetadata/service/resources/types/TypeResource.java @@ -85,7 +85,6 @@ public class TypeResource extends EntityResource { } @Inject - @Collection public TypeResource(CollectionDAO dao, Authorizer authorizer) { super(Type.class, new TypeRepository(dao), authorizer); } diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/resources/usage/UsageResource.java b/openmetadata-service/src/main/java/org/openmetadata/service/resources/usage/UsageResource.java index fbc0dfb4061..aa1bf2a5c58 100644 --- a/openmetadata-service/src/main/java/org/openmetadata/service/resources/usage/UsageResource.java +++ b/openmetadata-service/src/main/java/org/openmetadata/service/resources/usage/UsageResource.java @@ -56,7 +56,6 @@ public class UsageResource { private final UsageRepository dao; @Inject - @Collection public UsageResource(CollectionDAO dao, Authorizer authorizer) { Objects.requireNonNull(dao, "UsageRepository must not be null"); this.dao = new UsageRepository(dao); diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/resources/util/UtilResource.java b/openmetadata-service/src/main/java/org/openmetadata/service/resources/util/UtilResource.java index a31fe3e7044..2b3744b7dad 100644 --- a/openmetadata-service/src/main/java/org/openmetadata/service/resources/util/UtilResource.java +++ b/openmetadata-service/src/main/java/org/openmetadata/service/resources/util/UtilResource.java @@ -32,7 +32,6 @@ public class UtilResource { private final UtilRepository utilRepository; private final Authorizer authorizer; - @Collection public UtilResource(CollectionDAO dao, Authorizer authorizer) { Objects.requireNonNull(dao, "UtilRepository must not be null"); this.utilRepository = new UtilRepository(dao.utilDAO()); diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/secrets/InMemorySecretsManager.java b/openmetadata-service/src/main/java/org/openmetadata/service/secrets/InMemorySecretsManager.java index 0a9cdfb049e..26736b5cfee 100644 --- a/openmetadata-service/src/main/java/org/openmetadata/service/secrets/InMemorySecretsManager.java +++ b/openmetadata-service/src/main/java/org/openmetadata/service/secrets/InMemorySecretsManager.java @@ -24,11 +24,10 @@ public class InMemorySecretsManager extends ThirdPartySecretsManager { private static InMemorySecretsManager INSTANCE; - @Getter private final Map secretsMap; + @Getter private final Map secretsMap = new HashMap<>(); protected InMemorySecretsManager(SecretsManagerProvider secretsManagerProvider, String clusterPrefix) { super(secretsManagerProvider, clusterPrefix); - secretsMap = new HashMap<>(); } public static InMemorySecretsManager getInstance(String clusterPrefix) { diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/secrets/SecretsManagerFactory.java b/openmetadata-service/src/main/java/org/openmetadata/service/secrets/SecretsManagerFactory.java index e11745037f8..7c40580021a 100644 --- a/openmetadata-service/src/main/java/org/openmetadata/service/secrets/SecretsManagerFactory.java +++ b/openmetadata-service/src/main/java/org/openmetadata/service/secrets/SecretsManagerFactory.java @@ -13,28 +13,45 @@ package org.openmetadata.service.secrets; +import com.google.common.annotations.VisibleForTesting; +import lombok.Getter; import org.openmetadata.schema.services.connections.metadata.SecretsManagerProvider; public class SecretsManagerFactory { + @Getter private static SecretsManager secretsManager; private SecretsManagerFactory() {} + /** Expected to be called only once when the Application starts */ public static SecretsManager createSecretsManager(SecretsManagerConfiguration config, String clusterName) { - SecretsManagerProvider secretManager = + if (secretsManager != null) { + return secretsManager; + } + SecretsManagerProvider secretsManagerProvider = config != null && config.getSecretsManager() != null ? config.getSecretsManager() : SecretsManagerConfiguration.DEFAULT_SECRET_MANAGER; - switch (secretManager) { + switch (secretsManagerProvider) { case NOOP: - return NoopSecretsManager.getInstance(clusterName); + secretsManager = NoopSecretsManager.getInstance(clusterName); + break; case AWS: - return AWSSecretsManager.getInstance(config, clusterName); + secretsManager = AWSSecretsManager.getInstance(config, clusterName); + break; case AWS_SSM: - return AWSSSMSecretsManager.getInstance(config, clusterName); + secretsManager = AWSSSMSecretsManager.getInstance(config, clusterName); + break; case IN_MEMORY: - return InMemorySecretsManager.getInstance(clusterName); + secretsManager = InMemorySecretsManager.getInstance(clusterName); + break; default: - throw new IllegalArgumentException("Not implemented secret manager store: " + secretManager); + throw new IllegalArgumentException("Not implemented secret manager store: " + secretsManagerProvider); } + return secretsManager; + } + + @VisibleForTesting + public static void setSecretsManager(SecretsManager secretsManager) { + SecretsManagerFactory.secretsManager = secretsManager; } } diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/secrets/SecretsManagerMigrationService.java b/openmetadata-service/src/main/java/org/openmetadata/service/secrets/SecretsManagerMigrationService.java index 677d7baa33f..da547ee0248 100644 --- a/openmetadata-service/src/main/java/org/openmetadata/service/secrets/SecretsManagerMigrationService.java +++ b/openmetadata-service/src/main/java/org/openmetadata/service/secrets/SecretsManagerMigrationService.java @@ -30,15 +30,13 @@ import org.openmetadata.schema.entity.teams.User; import org.openmetadata.service.Entity; import org.openmetadata.service.exception.SecretsManagerMigrationException; import org.openmetadata.service.jdbi3.ChangeEventRepository; -import org.openmetadata.service.jdbi3.IngestionPipelineRepository; +import org.openmetadata.service.jdbi3.EntityRepository; import org.openmetadata.service.jdbi3.ListFilter; import org.openmetadata.service.jdbi3.ServiceEntityRepository; -import org.openmetadata.service.jdbi3.UserRepository; import org.openmetadata.service.resources.CollectionRegistry; +import org.openmetadata.service.resources.CollectionRegistry.CollectionDetails; import org.openmetadata.service.resources.events.EventResource; import org.openmetadata.service.resources.services.ServiceEntityResource; -import org.openmetadata.service.resources.services.ingestionpipelines.IngestionPipelineResource; -import org.openmetadata.service.resources.teams.UserResource; import org.openmetadata.service.util.EntityUtil; /** @@ -64,16 +62,16 @@ public class SecretsManagerMigrationService { private final ChangeEventRepository changeEventRepository; - private final IngestionPipelineRepository ingestionPipelineRepository; + private final EntityRepository ingestionPipelineRepository; - private final UserRepository userRepository; + private final EntityRepository userRepository; public SecretsManagerMigrationService(SecretsManager secretsManager, String clusterName) { this.newSecretManager = secretsManager; this.connectionTypeRepositoriesMap = retrieveConnectionTypeRepositoriesMap(); this.changeEventRepository = retrieveChangeEventRepository(); - this.ingestionPipelineRepository = retrieveIngestionPipelineRepository(); - this.userRepository = retrieveUserRepository(); + this.ingestionPipelineRepository = Entity.getEntityRepository(Entity.INGESTION_PIPELINE); + this.userRepository = Entity.getEntityRepository(Entity.USER); // by default, it is going to be LOCAL this.oldSecretManager = SecretsManagerFactory.createSecretsManager(null, clusterName); } @@ -332,27 +330,7 @@ public class SecretsManagerMigrationService { .orElseThrow(() -> new SecretsManagerMigrationException("Unexpected error: ChangeEventRepository not found.")); } - private UserRepository retrieveUserRepository() { - return CollectionRegistry.getInstance().getCollectionMap().values().stream() - .map(collectionDetails -> retrieveResource(collectionDetails, UserResource.class)) - .filter(Optional::isPresent) - .map(res -> res.get().getUserRepository()) - .findFirst() - .orElseThrow( - () -> new SecretsManagerMigrationException("Unexpected error: IngestionPipelineRepository not found.")); - } - - private IngestionPipelineRepository retrieveIngestionPipelineRepository() { - return CollectionRegistry.getInstance().getCollectionMap().values().stream() - .map(collectionDetails -> retrieveResource(collectionDetails, IngestionPipelineResource.class)) - .filter(Optional::isPresent) - .map(res -> res.get().getIngestionPipelineRepository()) - .findFirst() - .orElseThrow( - () -> new SecretsManagerMigrationException("Unexpected error: IngestionPipelineRepository not found.")); - } - - private Optional retrieveResource(CollectionRegistry.CollectionDetails collectionDetails, Class clazz) { + private Optional retrieveResource(CollectionDetails collectionDetails, Class clazz) { Class collectionDetailsClass = extractCollectionDetailsClass(collectionDetails); if (clazz.equals(collectionDetailsClass)) { return Optional.of(clazz.cast(collectionDetails.getResource())); @@ -360,8 +338,7 @@ public class SecretsManagerMigrationService { return Optional.empty(); } - private Optional> retrieveServiceRepository( - CollectionRegistry.CollectionDetails collectionDetails) { + private Optional> retrieveServiceRepository(CollectionDetails collectionDetails) { Class collectionDetailsClass = extractCollectionDetailsClass(collectionDetails); if (ServiceEntityResource.class.isAssignableFrom(collectionDetailsClass)) { return Optional.of( @@ -370,7 +347,7 @@ public class SecretsManagerMigrationService { return Optional.empty(); } - private Class extractCollectionDetailsClass(CollectionRegistry.CollectionDetails collectionDetails) { + private Class extractCollectionDetailsClass(CollectionDetails collectionDetails) { Class collectionDetailsClass; try { collectionDetailsClass = Class.forName(collectionDetails.getResourceClass()); diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/security/DefaultAuthorizer.java b/openmetadata-service/src/main/java/org/openmetadata/service/security/DefaultAuthorizer.java index 68d4e3289d7..0b6fe89a4ac 100644 --- a/openmetadata-service/src/main/java/org/openmetadata/service/security/DefaultAuthorizer.java +++ b/openmetadata-service/src/main/java/org/openmetadata/service/security/DefaultAuthorizer.java @@ -82,7 +82,6 @@ public class DefaultAuthorizer implements Authorizer { private Set botPrincipalUsers; private Set testUsers; private String principalDomain; - private SecretsManager secretsManager; private String providerType; @@ -95,10 +94,6 @@ public class DefaultAuthorizer implements Authorizer { new HashSet<>(openMetadataApplicationConfig.getAuthorizerConfiguration().getBotPrincipals()); this.testUsers = new HashSet<>(openMetadataApplicationConfig.getAuthorizerConfiguration().getTestPrincipals()); this.principalDomain = openMetadataApplicationConfig.getAuthorizerConfiguration().getPrincipalDomain(); - this.secretsManager = - SecretsManagerFactory.createSecretsManager( - openMetadataApplicationConfig.getSecretsManagerConfiguration(), - openMetadataApplicationConfig.getClusterName()); this.providerType = openMetadataApplicationConfig.getAuthenticationConfiguration().getProvider(); SubjectCache.initialize(); PolicyCache.initialize(); @@ -413,6 +408,7 @@ public class DefaultAuthorizer implements Authorizer { User originalUser = userRepository.getByName(null, user.getName(), new EntityUtil.Fields(List.of("authenticationMechanism"))); AuthenticationMechanism authMechanism = originalUser.getAuthenticationMechanism(); + SecretsManager secretsManager = SecretsManagerFactory.getSecretsManager(); if (authMechanism != null) { Object config = secretsManager.encryptOrDecryptBotUserCredentials(user.getName(), authMechanism.getConfig(), false); diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/util/OpenMetadataServerConnectionBuilder.java b/openmetadata-service/src/main/java/org/openmetadata/service/util/OpenMetadataServerConnectionBuilder.java index 2a93b5bd287..f9f002254af 100644 --- a/openmetadata-service/src/main/java/org/openmetadata/service/util/OpenMetadataServerConnectionBuilder.java +++ b/openmetadata-service/src/main/java/org/openmetadata/service/util/OpenMetadataServerConnectionBuilder.java @@ -20,6 +20,7 @@ import org.openmetadata.service.exception.EntityNotFoundException; import org.openmetadata.service.jdbi3.BotRepository; import org.openmetadata.service.jdbi3.UserRepository; import org.openmetadata.service.secrets.SecretsManager; +import org.openmetadata.service.secrets.SecretsManagerFactory; import org.openmetadata.service.util.EntityUtil.Fields; @Slf4j @@ -35,11 +36,8 @@ public class OpenMetadataServerConnectionBuilder { private final Object airflowSSLConfig; BotRepository botRepository; UserRepository userRepository; - private final SecretsManager secretsManager; - public OpenMetadataServerConnectionBuilder( - SecretsManager secretsManager, OpenMetadataApplicationConfig openMetadataApplicationConfig) { - this.secretsManager = secretsManager; + public OpenMetadataServerConnectionBuilder(OpenMetadataApplicationConfig openMetadataApplicationConfig) { // TODO: https://github.com/open-metadata/OpenMetadata/issues/7712 authProvider = "basic".equals(openMetadataApplicationConfig.getAuthenticationConfiguration().getProvider()) @@ -47,6 +45,7 @@ public class OpenMetadataServerConnectionBuilder { : OpenMetadataServerConnection.AuthProvider.fromValue( openMetadataApplicationConfig.getAuthenticationConfiguration().getProvider()); + SecretsManager secretsManager = SecretsManagerFactory.getSecretsManager(); if (!OpenMetadataServerConnection.AuthProvider.NO_AUTH.equals(authProvider)) { botRepository = BotRepository.class.cast(Entity.getEntityRepository(Entity.BOT)); userRepository = UserRepository.class.cast(Entity.getEntityRepository(Entity.USER)); @@ -118,6 +117,7 @@ public class OpenMetadataServerConnectionBuilder { } private User retrieveIngestionBotUser(String botName) { + SecretsManager secretsManager = SecretsManagerFactory.getSecretsManager(); try { Bot bot1 = botRepository.getByName(null, botName, Fields.EMPTY_FIELDS); if (bot1.getBotUser() == null) { diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/util/TablesInitializer.java b/openmetadata-service/src/main/java/org/openmetadata/service/util/TablesInitializer.java index ac7365a43fd..4636aac69f7 100644 --- a/openmetadata-service/src/main/java/org/openmetadata/service/util/TablesInitializer.java +++ b/openmetadata-service/src/main/java/org/openmetadata/service/util/TablesInitializer.java @@ -56,7 +56,6 @@ import org.openmetadata.service.fernet.Fernet; import org.openmetadata.service.jdbi3.CollectionDAO; import org.openmetadata.service.jdbi3.UserRepository; import org.openmetadata.service.jdbi3.locator.ConnectionAwareAnnotationSqlLocator; -import org.openmetadata.service.secrets.SecretsManager; import org.openmetadata.service.secrets.SecretsManagerFactory; import org.openmetadata.service.security.jwt.JWTTokenGenerator; @@ -246,6 +245,10 @@ public final class TablesInitializer { jdbi.getConfig(SqlObjects.class) .setSqlLocator(new ConnectionAwareAnnotationSqlLocator(config.getDataSourceFactory().getDriverClass())); ElasticSearchIndexDefinition esIndexDefinition; + + // Initialize secrets manager + SecretsManagerFactory.createSecretsManager(config.getSecretsManagerConfiguration(), config.getClusterName()); + switch (schemaMigrationOption) { case CREATE: try (Connection connection = flyway.getConfiguration().getDataSource().getConnection()) { @@ -356,7 +359,7 @@ public final class TablesInitializer { user.setAuthenticationMechanism(authenticationMechanism); } try { - addOrUpdateUser(user, jdbi, config); + addOrUpdateUser(user, jdbi); if (jwtAuthMechanism != null) { printToConsoleMandatory(JsonUtils.pojoToJson(user)); } @@ -394,9 +397,7 @@ public final class TablesInitializer { } try { CollectionDAO daoObject = jdbi.onDemand(CollectionDAO.class); - SecretsManager secretsManager = - SecretsManagerFactory.createSecretsManager(config.getSecretsManagerConfiguration(), config.getClusterName()); - UserRepository userRepository = new UserRepository(daoObject, secretsManager); + UserRepository userRepository = new UserRepository(daoObject); RestUtil.PutResponse addedUser = userRepository.createOrUpdate(null, user); printToConsoleInDebug("Updated user entry: " + addedUser.getEntity()); if (jwtAuthMechanism != null) { @@ -407,11 +408,9 @@ public final class TablesInitializer { } } - private static void addOrUpdateUser(User user, Jdbi jdbi, OpenMetadataApplicationConfig config) throws Exception { + private static void addOrUpdateUser(User user, Jdbi jdbi) throws Exception { CollectionDAO daoObject = jdbi.onDemand(CollectionDAO.class); - SecretsManager secretsManager = - SecretsManagerFactory.createSecretsManager(config.getSecretsManagerConfiguration(), config.getClusterName()); - UserRepository userRepository = new UserRepository(daoObject, secretsManager); + UserRepository userRepository = new UserRepository(daoObject); User addedUser = userRepository.create(null, user); printToConsoleInDebug("Added user entry: " + addedUser.getName()); } diff --git a/openmetadata-service/src/test/java/org/openmetadata/service/jdbi3/DashboardServiceRepositoryUnitTest.java b/openmetadata-service/src/test/java/org/openmetadata/service/jdbi3/DashboardServiceRepositoryUnitTest.java index 8011a8c2b61..740f1d71c25 100644 --- a/openmetadata-service/src/test/java/org/openmetadata/service/jdbi3/DashboardServiceRepositoryUnitTest.java +++ b/openmetadata-service/src/test/java/org/openmetadata/service/jdbi3/DashboardServiceRepositoryUnitTest.java @@ -22,7 +22,6 @@ import org.openmetadata.schema.entity.services.DashboardService; import org.openmetadata.schema.entity.services.ServiceType; import org.openmetadata.schema.services.connections.database.MysqlConnection; import org.openmetadata.schema.type.DashboardConnection; -import org.openmetadata.service.secrets.SecretsManager; public class DashboardServiceRepositoryUnitTest extends ServiceEntityRepositoryTest { @@ -32,9 +31,8 @@ public class DashboardServiceRepositoryUnitTest } @Override - protected DashboardServiceRepository newServiceRepository( - CollectionDAO collectionDAO, SecretsManager secretsManager) { - return new DashboardServiceRepository(collectionDAO, secretsManager); + protected DashboardServiceRepository newServiceRepository(CollectionDAO collectionDAO) { + return new DashboardServiceRepository(collectionDAO); } @Override diff --git a/openmetadata-service/src/test/java/org/openmetadata/service/jdbi3/DatabaseServiceRepositoryUnitTest.java b/openmetadata-service/src/test/java/org/openmetadata/service/jdbi3/DatabaseServiceRepositoryUnitTest.java index 656c02992ea..6293e158fe3 100644 --- a/openmetadata-service/src/test/java/org/openmetadata/service/jdbi3/DatabaseServiceRepositoryUnitTest.java +++ b/openmetadata-service/src/test/java/org/openmetadata/service/jdbi3/DatabaseServiceRepositoryUnitTest.java @@ -22,7 +22,6 @@ import org.openmetadata.schema.api.services.DatabaseConnection; import org.openmetadata.schema.entity.services.DatabaseService; import org.openmetadata.schema.entity.services.ServiceType; import org.openmetadata.schema.services.connections.database.MysqlConnection; -import org.openmetadata.service.secrets.SecretsManager; public class DatabaseServiceRepositoryUnitTest extends ServiceEntityRepositoryTest { @@ -32,8 +31,8 @@ public class DatabaseServiceRepositoryUnitTest } @Override - protected DatabaseServiceRepository newServiceRepository(CollectionDAO collectionDAO, SecretsManager secretsManager) { - return new DatabaseServiceRepository(collectionDAO, secretsManager); + protected DatabaseServiceRepository newServiceRepository(CollectionDAO collectionDAO) { + return new DatabaseServiceRepository(collectionDAO); } @Override diff --git a/openmetadata-service/src/test/java/org/openmetadata/service/jdbi3/IngestionPipelineRepositoryUnitTest.java b/openmetadata-service/src/test/java/org/openmetadata/service/jdbi3/IngestionPipelineRepositoryUnitTest.java index 4dc1cc45809..072d52b4a6a 100644 --- a/openmetadata-service/src/test/java/org/openmetadata/service/jdbi3/IngestionPipelineRepositoryUnitTest.java +++ b/openmetadata-service/src/test/java/org/openmetadata/service/jdbi3/IngestionPipelineRepositoryUnitTest.java @@ -17,7 +17,6 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.ArgumentMatchers.isNull; -import static org.mockito.Mockito.reset; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -37,6 +36,7 @@ import org.openmetadata.schema.metadataIngestion.SourceConfig; import org.openmetadata.schema.type.EntityReference; import org.openmetadata.service.Entity; import org.openmetadata.service.secrets.SecretsManager; +import org.openmetadata.service.secrets.SecretsManagerFactory; @ExtendWith(MockitoExtension.class) public class IngestionPipelineRepositoryUnitTest { @@ -50,14 +50,15 @@ public class IngestionPipelineRepositoryUnitTest { protected IngestionPipelineRepository ingestionPipelineRepository; @BeforeEach - void beforeEach() { + void before() { + SecretsManagerFactory.setSecretsManager(secretsManager); when(collectionDAO.ingestionPipelineDAO()).thenReturn(dao); - ingestionPipelineRepository = new IngestionPipelineRepository(collectionDAO, secretsManager); + ingestionPipelineRepository = new IngestionPipelineRepository(collectionDAO); } @AfterEach - void afterEach() { - reset(secretsManager); + void after() { + SecretsManagerFactory.setSecretsManager(null); } @Test diff --git a/openmetadata-service/src/test/java/org/openmetadata/service/jdbi3/MessagingServiceRepositoryUnitTest.java b/openmetadata-service/src/test/java/org/openmetadata/service/jdbi3/MessagingServiceRepositoryUnitTest.java index d77ffac091d..2436fd17490 100644 --- a/openmetadata-service/src/test/java/org/openmetadata/service/jdbi3/MessagingServiceRepositoryUnitTest.java +++ b/openmetadata-service/src/test/java/org/openmetadata/service/jdbi3/MessagingServiceRepositoryUnitTest.java @@ -22,7 +22,6 @@ import org.openmetadata.schema.entity.services.MessagingService; import org.openmetadata.schema.entity.services.ServiceType; import org.openmetadata.schema.services.connections.database.MysqlConnection; import org.openmetadata.schema.type.MessagingConnection; -import org.openmetadata.service.secrets.SecretsManager; public class MessagingServiceRepositoryUnitTest extends ServiceEntityRepositoryTest { @@ -32,9 +31,8 @@ public class MessagingServiceRepositoryUnitTest } @Override - protected MessagingServiceRepository newServiceRepository( - CollectionDAO collectionDAO, SecretsManager secretsManager) { - return new MessagingServiceRepository(collectionDAO, secretsManager); + protected MessagingServiceRepository newServiceRepository(CollectionDAO collectionDAO) { + return new MessagingServiceRepository(collectionDAO); } @Override diff --git a/openmetadata-service/src/test/java/org/openmetadata/service/jdbi3/MlModelServiceRepositoryUnitTest.java b/openmetadata-service/src/test/java/org/openmetadata/service/jdbi3/MlModelServiceRepositoryUnitTest.java index 1f7a7750d76..fc7e6555049 100644 --- a/openmetadata-service/src/test/java/org/openmetadata/service/jdbi3/MlModelServiceRepositoryUnitTest.java +++ b/openmetadata-service/src/test/java/org/openmetadata/service/jdbi3/MlModelServiceRepositoryUnitTest.java @@ -22,7 +22,6 @@ import org.openmetadata.schema.entity.services.MlModelService; import org.openmetadata.schema.entity.services.ServiceType; import org.openmetadata.schema.services.connections.database.MysqlConnection; import org.openmetadata.schema.type.MlModelConnection; -import org.openmetadata.service.secrets.SecretsManager; public class MlModelServiceRepositoryUnitTest extends ServiceEntityRepositoryTest { @@ -32,8 +31,8 @@ public class MlModelServiceRepositoryUnitTest } @Override - protected MlModelServiceRepository newServiceRepository(CollectionDAO collectionDAO, SecretsManager secretsManager) { - return new MlModelServiceRepository(collectionDAO, secretsManager); + protected MlModelServiceRepository newServiceRepository(CollectionDAO collectionDAO) { + return new MlModelServiceRepository(collectionDAO); } @Override diff --git a/openmetadata-service/src/test/java/org/openmetadata/service/jdbi3/PipelineServiceRepositoryUnitTest.java b/openmetadata-service/src/test/java/org/openmetadata/service/jdbi3/PipelineServiceRepositoryUnitTest.java index 066215d58e5..2e1542657c9 100644 --- a/openmetadata-service/src/test/java/org/openmetadata/service/jdbi3/PipelineServiceRepositoryUnitTest.java +++ b/openmetadata-service/src/test/java/org/openmetadata/service/jdbi3/PipelineServiceRepositoryUnitTest.java @@ -22,7 +22,6 @@ import org.openmetadata.schema.entity.services.PipelineService; import org.openmetadata.schema.entity.services.ServiceType; import org.openmetadata.schema.services.connections.database.MysqlConnection; import org.openmetadata.schema.type.PipelineConnection; -import org.openmetadata.service.secrets.SecretsManager; public class PipelineServiceRepositoryUnitTest extends ServiceEntityRepositoryTest { @@ -32,8 +31,8 @@ public class PipelineServiceRepositoryUnitTest } @Override - protected PipelineServiceRepository newServiceRepository(CollectionDAO collectionDAO, SecretsManager secretsManager) { - return new PipelineServiceRepository(collectionDAO, secretsManager); + protected PipelineServiceRepository newServiceRepository(CollectionDAO collectionDAO) { + return new PipelineServiceRepository(collectionDAO); } @Override diff --git a/openmetadata-service/src/test/java/org/openmetadata/service/jdbi3/ServiceEntityRepositoryTest.java b/openmetadata-service/src/test/java/org/openmetadata/service/jdbi3/ServiceEntityRepositoryTest.java index 87639e84199..6c19d8222ff 100644 --- a/openmetadata-service/src/test/java/org/openmetadata/service/jdbi3/ServiceEntityRepositoryTest.java +++ b/openmetadata-service/src/test/java/org/openmetadata/service/jdbi3/ServiceEntityRepositoryTest.java @@ -34,6 +34,7 @@ import org.openmetadata.schema.ServiceConnectionEntityInterface; import org.openmetadata.schema.ServiceEntityInterface; import org.openmetadata.schema.entity.services.ServiceType; import org.openmetadata.service.secrets.SecretsManager; +import org.openmetadata.service.secrets.SecretsManagerFactory; @ExtendWith(MockitoExtension.class) public abstract class ServiceEntityRepositoryTest< @@ -59,16 +60,18 @@ public abstract class ServiceEntityRepositoryTest< @BeforeEach void beforeEach() { + SecretsManagerFactory.setSecretsManager(secretsManager); mockServiceResourceSpecific(); - serviceRepository = newServiceRepository(collectionDAO, secretsManager); + serviceRepository = newServiceRepository(collectionDAO); } @AfterEach void afterEach() { reset(secretsManager, service); + SecretsManagerFactory.setSecretsManager(null); } - protected abstract T newServiceRepository(CollectionDAO collectionDAO, SecretsManager secretsManager); + protected abstract T newServiceRepository(CollectionDAO collectionDAO); protected abstract void mockServiceResourceSpecific(); diff --git a/openmetadata-service/src/test/java/org/openmetadata/service/resources/services/DashboardServiceResourceUnitTest.java b/openmetadata-service/src/test/java/org/openmetadata/service/resources/services/DashboardServiceResourceUnitTest.java index c7fefb92592..482951f9d77 100644 --- a/openmetadata-service/src/test/java/org/openmetadata/service/resources/services/DashboardServiceResourceUnitTest.java +++ b/openmetadata-service/src/test/java/org/openmetadata/service/resources/services/DashboardServiceResourceUnitTest.java @@ -34,7 +34,6 @@ import org.openmetadata.schema.type.Include; import org.openmetadata.service.jdbi3.CollectionDAO; import org.openmetadata.service.jdbi3.DashboardServiceRepository; import org.openmetadata.service.resources.services.dashboard.DashboardServiceResource; -import org.openmetadata.service.secrets.SecretsManager; import org.openmetadata.service.security.Authorizer; public class DashboardServiceResourceUnitTest @@ -42,9 +41,8 @@ public class DashboardServiceResourceUnitTest DashboardServiceResource, DashboardService, DashboardServiceRepository, DashboardConnection> { @Override - protected DashboardServiceResource newServiceResource( - CollectionDAO collectionDAO, Authorizer authorizer, SecretsManager secretsManager) { - return new DashboardServiceResource(collectionDAO, authorizer, secretsManager); + protected DashboardServiceResource newServiceResource(CollectionDAO collectionDAO, Authorizer authorizer) { + return new DashboardServiceResource(collectionDAO, authorizer); } @Override diff --git a/openmetadata-service/src/test/java/org/openmetadata/service/resources/services/DatabaseServiceResourceUnitTest.java b/openmetadata-service/src/test/java/org/openmetadata/service/resources/services/DatabaseServiceResourceUnitTest.java index 6848af62abd..4a1490b16b3 100644 --- a/openmetadata-service/src/test/java/org/openmetadata/service/resources/services/DatabaseServiceResourceUnitTest.java +++ b/openmetadata-service/src/test/java/org/openmetadata/service/resources/services/DatabaseServiceResourceUnitTest.java @@ -34,7 +34,6 @@ import org.openmetadata.schema.type.Include; import org.openmetadata.service.jdbi3.CollectionDAO; import org.openmetadata.service.jdbi3.DatabaseServiceRepository; import org.openmetadata.service.resources.services.database.DatabaseServiceResource; -import org.openmetadata.service.secrets.SecretsManager; import org.openmetadata.service.security.Authorizer; public class DatabaseServiceResourceUnitTest @@ -42,9 +41,8 @@ public class DatabaseServiceResourceUnitTest DatabaseServiceResource, DatabaseService, DatabaseServiceRepository, DatabaseConnection> { @Override - protected DatabaseServiceResource newServiceResource( - CollectionDAO collectionDAO, Authorizer authorizer, SecretsManager secretsManager) { - return new DatabaseServiceResource(collectionDAO, authorizer, secretsManager); + protected DatabaseServiceResource newServiceResource(CollectionDAO collectionDAO, Authorizer authorizer) { + return new DatabaseServiceResource(collectionDAO, authorizer); } @Override diff --git a/openmetadata-service/src/test/java/org/openmetadata/service/resources/services/MessagingServiceResourceUnitTest.java b/openmetadata-service/src/test/java/org/openmetadata/service/resources/services/MessagingServiceResourceUnitTest.java index 368d49c8ca5..be5aad2e2e0 100644 --- a/openmetadata-service/src/test/java/org/openmetadata/service/resources/services/MessagingServiceResourceUnitTest.java +++ b/openmetadata-service/src/test/java/org/openmetadata/service/resources/services/MessagingServiceResourceUnitTest.java @@ -34,7 +34,6 @@ import org.openmetadata.schema.type.MessagingConnection; import org.openmetadata.service.jdbi3.CollectionDAO; import org.openmetadata.service.jdbi3.MessagingServiceRepository; import org.openmetadata.service.resources.services.messaging.MessagingServiceResource; -import org.openmetadata.service.secrets.SecretsManager; import org.openmetadata.service.security.Authorizer; public class MessagingServiceResourceUnitTest @@ -42,9 +41,8 @@ public class MessagingServiceResourceUnitTest MessagingServiceResource, MessagingService, MessagingServiceRepository, MessagingConnection> { @Override - protected MessagingServiceResource newServiceResource( - CollectionDAO collectionDAO, Authorizer authorizer, SecretsManager secretsManager) { - return new MessagingServiceResource(collectionDAO, authorizer, secretsManager); + protected MessagingServiceResource newServiceResource(CollectionDAO collectionDAO, Authorizer authorizer) { + return new MessagingServiceResource(collectionDAO, authorizer); } @Override diff --git a/openmetadata-service/src/test/java/org/openmetadata/service/resources/services/MlModelServiceResourceUnitTest.java b/openmetadata-service/src/test/java/org/openmetadata/service/resources/services/MlModelServiceResourceUnitTest.java index 04e0ffca744..bf23a5aef6e 100644 --- a/openmetadata-service/src/test/java/org/openmetadata/service/resources/services/MlModelServiceResourceUnitTest.java +++ b/openmetadata-service/src/test/java/org/openmetadata/service/resources/services/MlModelServiceResourceUnitTest.java @@ -36,7 +36,6 @@ import org.openmetadata.schema.type.MlModelConnection; import org.openmetadata.service.jdbi3.CollectionDAO; import org.openmetadata.service.jdbi3.MlModelServiceRepository; import org.openmetadata.service.resources.services.mlmodel.MlModelServiceResource; -import org.openmetadata.service.secrets.SecretsManager; import org.openmetadata.service.security.Authorizer; @ExtendWith(MockitoExtension.class) @@ -44,9 +43,8 @@ public class MlModelServiceResourceUnitTest extends ServiceResourceTest { @Override - protected MlModelServiceResource newServiceResource( - CollectionDAO collectionDAO, Authorizer authorizer, SecretsManager secretsManager) { - return new MlModelServiceResource(collectionDAO, authorizer, secretsManager); + protected MlModelServiceResource newServiceResource(CollectionDAO collectionDAO, Authorizer authorizer) { + return new MlModelServiceResource(collectionDAO, authorizer); } @Override diff --git a/openmetadata-service/src/test/java/org/openmetadata/service/resources/services/PipelineServiceResourceUnitTest.java b/openmetadata-service/src/test/java/org/openmetadata/service/resources/services/PipelineServiceResourceUnitTest.java index d0680bc150a..1557e5f6c09 100644 --- a/openmetadata-service/src/test/java/org/openmetadata/service/resources/services/PipelineServiceResourceUnitTest.java +++ b/openmetadata-service/src/test/java/org/openmetadata/service/resources/services/PipelineServiceResourceUnitTest.java @@ -36,7 +36,6 @@ import org.openmetadata.schema.type.PipelineConnection; import org.openmetadata.service.jdbi3.CollectionDAO; import org.openmetadata.service.jdbi3.PipelineServiceRepository; import org.openmetadata.service.resources.services.pipeline.PipelineServiceResource; -import org.openmetadata.service.secrets.SecretsManager; import org.openmetadata.service.security.Authorizer; @ExtendWith(MockitoExtension.class) @@ -45,9 +44,8 @@ public class PipelineServiceResourceUnitTest PipelineServiceResource, PipelineService, PipelineServiceRepository, PipelineConnection> { @Override - protected PipelineServiceResource newServiceResource( - CollectionDAO collectionDAO, Authorizer authorizer, SecretsManager secretsManager) { - return new PipelineServiceResource(collectionDAO, authorizer, secretsManager); + protected PipelineServiceResource newServiceResource(CollectionDAO collectionDAO, Authorizer authorizer) { + return new PipelineServiceResource(collectionDAO, authorizer); } @Override diff --git a/openmetadata-service/src/test/java/org/openmetadata/service/resources/services/ServiceResourceTest.java b/openmetadata-service/src/test/java/org/openmetadata/service/resources/services/ServiceResourceTest.java index fe05dad666e..1e1f05dc455 100644 --- a/openmetadata-service/src/test/java/org/openmetadata/service/resources/services/ServiceResourceTest.java +++ b/openmetadata-service/src/test/java/org/openmetadata/service/resources/services/ServiceResourceTest.java @@ -28,6 +28,7 @@ import static org.mockito.Mockito.when; import java.io.IOException; import java.util.UUID; import javax.ws.rs.core.SecurityContext; +import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.extension.ExtendWith; import org.junit.jupiter.params.ParameterizedTest; @@ -40,6 +41,7 @@ import org.openmetadata.schema.entity.services.ServiceType; import org.openmetadata.service.jdbi3.CollectionDAO; import org.openmetadata.service.jdbi3.ServiceEntityRepository; import org.openmetadata.service.secrets.SecretsManager; +import org.openmetadata.service.secrets.SecretsManagerFactory; import org.openmetadata.service.security.AuthorizationException; import org.openmetadata.service.security.Authorizer; @@ -66,6 +68,7 @@ public abstract class ServiceResourceTest< @BeforeEach void beforeEach() throws IOException { + SecretsManagerFactory.setSecretsManager(secretsManager); mockServiceResourceSpecific(); when(collectionDAO.relationshipDAO()).thenReturn(mock(CollectionDAO.EntityRelationshipDAO.class)); when(service.getId()).thenReturn(UUID.randomUUID()); @@ -75,13 +78,17 @@ public abstract class ServiceResourceTest< secretsManager.encryptOrDecryptServiceConnectionConfig( any(), anyString(), any(), any(ServiceType.class), anyBoolean())) .thenReturn(serviceConnectionConfig); - serviceResource = newServiceResource(collectionDAO, authorizer, secretsManager); + serviceResource = newServiceResource(collectionDAO, authorizer); + } + + @AfterEach + void afterEach() { + SecretsManagerFactory.setSecretsManager(null); } protected abstract void mockServiceResourceSpecific() throws IOException; - protected abstract T newServiceResource( - CollectionDAO collectionDAO, Authorizer authorizer, SecretsManager secretsManager); + protected abstract T newServiceResource(CollectionDAO collectionDAO, Authorizer authorizer); @ParameterizedTest @CsvSource({ diff --git a/openmetadata-service/src/test/java/org/openmetadata/service/resources/services/ingestionpipelines/IngestionPipelineResourceUnitTest.java b/openmetadata-service/src/test/java/org/openmetadata/service/resources/services/ingestionpipelines/IngestionPipelineResourceUnitTest.java index 387a9bb9fa3..f4e053f26d7 100644 --- a/openmetadata-service/src/test/java/org/openmetadata/service/resources/services/ingestionpipelines/IngestionPipelineResourceUnitTest.java +++ b/openmetadata-service/src/test/java/org/openmetadata/service/resources/services/ingestionpipelines/IngestionPipelineResourceUnitTest.java @@ -35,6 +35,7 @@ import java.util.List; import java.util.Map; import java.util.UUID; import javax.ws.rs.core.SecurityContext; +import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -58,6 +59,7 @@ import org.openmetadata.service.jdbi3.CollectionDAO; import org.openmetadata.service.jdbi3.EntityDAO; import org.openmetadata.service.jdbi3.EntityRepository; import org.openmetadata.service.secrets.SecretsManager; +import org.openmetadata.service.secrets.SecretsManagerFactory; import org.openmetadata.service.security.Authorizer; import org.openmetadata.service.util.PipelineServiceClient; @@ -93,7 +95,13 @@ public class IngestionPipelineResourceUnitTest { lenient().when(relationshipDAO.findFrom(any(), any(), anyInt())).thenReturn(List.of(entityRelationshipRecord)); when(collectionDAO.ingestionPipelineDAO()).thenReturn(entityDAO); lenient().when(collectionDAO.relationshipDAO()).thenReturn(relationshipDAO); - ingestionPipelineResource = new IngestionPipelineResource(collectionDAO, authorizer, secretsManager); + ingestionPipelineResource = new IngestionPipelineResource(collectionDAO, authorizer); + SecretsManagerFactory.setSecretsManager(secretsManager); + } + + @AfterEach + void afterEach() { + SecretsManagerFactory.setSecretsManager(null); } @Test