mirror of
https://github.com/open-metadata/OpenMetadata.git
synced 2025-11-01 02:56:10 +00:00
parent
806dcea0de
commit
f4acc4af1f
@ -136,7 +136,7 @@ public class OpenMetadataApplication extends Application<OpenMetadataApplication
|
||||
// start event hub before registering publishers
|
||||
EventPubSub.start();
|
||||
|
||||
registerResources(catalogConfig, environment, jdbi, secretsManager);
|
||||
registerResources(catalogConfig, environment, jdbi);
|
||||
|
||||
// Register Event Handler
|
||||
registerEventFilter(catalogConfig, environment, jdbi);
|
||||
@ -270,9 +270,8 @@ public class OpenMetadataApplication extends Application<OpenMetadataApplication
|
||||
}
|
||||
}
|
||||
|
||||
private void registerResources(
|
||||
OpenMetadataApplicationConfig config, Environment environment, Jdbi jdbi, SecretsManager secretsManager) {
|
||||
CollectionRegistry.getInstance().registerResources(jdbi, environment, config, authorizer, secretsManager);
|
||||
private void registerResources(OpenMetadataApplicationConfig config, Environment environment, Jdbi jdbi) {
|
||||
CollectionRegistry.getInstance().registerResources(jdbi, environment, config, authorizer);
|
||||
environment.jersey().register(new JsonPatchProvider());
|
||||
ErrorPageErrorHandler eph = new ErrorPageErrorHandler();
|
||||
eph.addErrorPage(Response.Status.NOT_FOUND.getStatusCode(), "/");
|
||||
|
||||
@ -23,17 +23,15 @@ import org.openmetadata.schema.type.Relationship;
|
||||
import org.openmetadata.service.Entity;
|
||||
import org.openmetadata.service.resources.bots.BotResource;
|
||||
import org.openmetadata.service.secrets.SecretsManager;
|
||||
import org.openmetadata.service.secrets.SecretsManagerFactory;
|
||||
import org.openmetadata.service.util.EntityUtil.Fields;
|
||||
|
||||
public class BotRepository extends EntityRepository<Bot> {
|
||||
|
||||
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<Bot> {
|
||||
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);
|
||||
|
||||
@ -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<DashboardService, DashboardConnection> {
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
@ -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<DatabaseService, DatabaseConnection> {
|
||||
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);
|
||||
}
|
||||
|
||||
@ -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<IngestionPipel
|
||||
private static final String PATCH_FIELDS = "owner,sourceConfig,airflowConfig,loggerLevel,enabled";
|
||||
private static PipelineServiceClient pipelineServiceClient;
|
||||
|
||||
private final SecretsManager secretsManager;
|
||||
|
||||
public IngestionPipelineRepository(CollectionDAO dao, SecretsManager secretsManager) {
|
||||
public IngestionPipelineRepository(CollectionDAO dao) {
|
||||
super(
|
||||
IngestionPipelineResource.COLLECTION_PATH,
|
||||
Entity.INGESTION_PIPELINE,
|
||||
@ -50,7 +49,6 @@ public class IngestionPipelineRepository extends EntityRepository<IngestionPipel
|
||||
dao,
|
||||
PATCH_FIELDS,
|
||||
UPDATE_FIELDS);
|
||||
this.secretsManager = secretsManager;
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -83,6 +81,7 @@ public class IngestionPipelineRepository extends EntityRepository<IngestionPipel
|
||||
ingestionPipeline.withOwner(null).withService(null).withHref(null);
|
||||
|
||||
// encrypt config in case of local secret manager
|
||||
SecretsManager secretsManager = SecretsManagerFactory.getSecretsManager();
|
||||
if (secretsManager.isLocal()) {
|
||||
secretsManager.encryptOrDecryptDbtConfigSource(ingestionPipeline, service, true);
|
||||
store(ingestionPipeline.getId(), ingestionPipeline, update);
|
||||
@ -152,6 +151,7 @@ public class IngestionPipelineRepository extends EntityRepository<IngestionPipel
|
||||
}
|
||||
|
||||
private void updateSourceConfig() throws JsonProcessingException {
|
||||
SecretsManager secretsManager = SecretsManagerFactory.getSecretsManager();
|
||||
secretsManager.encryptOrDecryptDbtConfigSource(original, false);
|
||||
|
||||
JSONObject origSourceConfig = new JSONObject(JsonUtils.pojoToJson(original.getSourceConfig().getConfig()));
|
||||
|
||||
@ -18,18 +18,16 @@ import org.openmetadata.schema.entity.services.ServiceType;
|
||||
import org.openmetadata.schema.type.MessagingConnection;
|
||||
import org.openmetadata.service.Entity;
|
||||
import org.openmetadata.service.resources.services.messaging.MessagingServiceResource;
|
||||
import org.openmetadata.service.secrets.SecretsManager;
|
||||
|
||||
public class MessagingServiceRepository extends ServiceEntityRepository<MessagingService, MessagingConnection> {
|
||||
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);
|
||||
|
||||
@ -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<MlModelService, MlModelConnection> {
|
||||
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);
|
||||
|
||||
@ -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<PipelineService, PipelineConnection> {
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
@ -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<S> 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<T> entityDAO,
|
||||
SecretsManager secretsManager,
|
||||
Class<S> 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<T> entityDAO,
|
||||
SecretsManager secretsManager,
|
||||
Class<S> 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();
|
||||
|
||||
@ -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<User> {
|
||||
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> {
|
||||
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<User> {
|
||||
// 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<User> {
|
||||
@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;
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
@ -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<String, CollectionDetails> 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);
|
||||
|
||||
@ -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<T extends EntityInterface, K extends Entity
|
||||
protected final Class<T> entityClass;
|
||||
protected final String entityType;
|
||||
protected final List<String> allowedFields;
|
||||
protected final K dao;
|
||||
@Getter protected final K dao;
|
||||
protected final Authorizer authorizer;
|
||||
|
||||
protected EntityResource(Class<T> entityClass, K repository, Authorizer authorizer) {
|
||||
|
||||
@ -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<Bot, BotRepository> {
|
||||
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<Bot, BotRepository> {
|
||||
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);
|
||||
}
|
||||
|
||||
@ -76,7 +76,6 @@ public class ChartResource extends EntityResource<Chart, ChartRepository> {
|
||||
return chart;
|
||||
}
|
||||
|
||||
@Collection
|
||||
public ChartResource(CollectionDAO dao, Authorizer authorizer) {
|
||||
super(Chart.class, new ChartRepository(dao), authorizer);
|
||||
}
|
||||
|
||||
@ -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(
|
||||
|
||||
@ -75,7 +75,6 @@ public class DashboardResource extends EntityResource<Dashboard, DashboardReposi
|
||||
return dashboard;
|
||||
}
|
||||
|
||||
@Collection
|
||||
public DashboardResource(CollectionDAO dao, Authorizer authorizer) {
|
||||
super(Dashboard.class, new DashboardRepository(dao), authorizer);
|
||||
}
|
||||
|
||||
@ -76,7 +76,6 @@ public class DatabaseResource extends EntityResource<Database, DatabaseRepositor
|
||||
return db;
|
||||
}
|
||||
|
||||
@Collection
|
||||
public DatabaseResource(CollectionDAO dao, Authorizer authorizer) {
|
||||
super(Database.class, new DatabaseRepository(dao), authorizer);
|
||||
}
|
||||
|
||||
@ -75,7 +75,6 @@ public class DatabaseSchemaResource extends EntityResource<DatabaseSchema, Datab
|
||||
return schema;
|
||||
}
|
||||
|
||||
@Collection
|
||||
public DatabaseSchemaResource(CollectionDAO dao, Authorizer authorizer) {
|
||||
super(DatabaseSchema.class, new DatabaseSchemaRepository(dao), authorizer);
|
||||
}
|
||||
|
||||
@ -114,7 +114,6 @@ public class TableResource extends EntityResource<Table, TableRepository> {
|
||||
return operations.toArray(new MetadataOperation[0]);
|
||||
}
|
||||
|
||||
@Collection
|
||||
public TableResource(CollectionDAO dao, Authorizer authorizer) {
|
||||
super(Table.class, new TableRepository(dao), authorizer);
|
||||
allowedFields.add("tests");
|
||||
|
||||
@ -83,7 +83,6 @@ public class TestCaseResource extends EntityResource<TestCase, TestCaseRepositor
|
||||
}
|
||||
|
||||
@Inject
|
||||
@Collection
|
||||
public TestCaseResource(CollectionDAO dao, Authorizer authorizer) {
|
||||
super(TestCase.class, new TestCaseRepository(dao), authorizer);
|
||||
}
|
||||
|
||||
@ -77,7 +77,6 @@ public class TestDefinitionResource extends EntityResource<TestDefinition, TestD
|
||||
}
|
||||
|
||||
@Inject
|
||||
@Collection
|
||||
public TestDefinitionResource(CollectionDAO dao, Authorizer authorizer) {
|
||||
super(TestDefinition.class, new TestDefinitionRepository(dao), authorizer);
|
||||
this.daoTestDefinition = new TestDefinitionRepository(dao);
|
||||
|
||||
@ -67,7 +67,6 @@ public class TestSuiteResource extends EntityResource<TestSuite, TestSuiteReposi
|
||||
}
|
||||
|
||||
@Inject
|
||||
@Collection
|
||||
public TestSuiteResource(CollectionDAO dao, Authorizer authorizer) {
|
||||
super(TestSuite.class, new TestSuiteRepository(dao), authorizer);
|
||||
}
|
||||
|
||||
@ -60,7 +60,6 @@ import org.openmetadata.service.jdbi3.EntityRepository;
|
||||
import org.openmetadata.service.jdbi3.ListFilter;
|
||||
import org.openmetadata.service.jdbi3.UserRepository;
|
||||
import org.openmetadata.service.resources.Collection;
|
||||
import org.openmetadata.service.secrets.SecretsManager;
|
||||
import org.openmetadata.service.security.Authorizer;
|
||||
import org.openmetadata.service.util.ElasticSearchClientUtils;
|
||||
import org.openmetadata.service.util.EntityUtil;
|
||||
@ -84,21 +83,22 @@ public class BuildSearchIndexResource {
|
||||
private final ExecutorService threadScheduler;
|
||||
private final UserRepository userRepository;
|
||||
|
||||
@Collection(constructorType = Collection.ConstructorType.DAO_AUTH_SM_CONFIG)
|
||||
public BuildSearchIndexResource(
|
||||
CollectionDAO dao, Authorizer authorizer, SecretsManager secretsManager, OpenMetadataApplicationConfig config) {
|
||||
if (config.getElasticSearchConfiguration() != null) {
|
||||
this.client = ElasticSearchClientUtils.createElasticSearchClient(config.getElasticSearchConfiguration());
|
||||
this.elasticSearchIndexDefinition = new ElasticSearchIndexDefinition(client, dao);
|
||||
}
|
||||
public BuildSearchIndexResource(CollectionDAO dao, Authorizer authorizer) {
|
||||
this.dao = dao;
|
||||
this.userRepository = new UserRepository(dao, secretsManager);
|
||||
this.userRepository = new UserRepository(dao);
|
||||
this.authorizer = authorizer;
|
||||
this.threadScheduler =
|
||||
new ThreadPoolExecutor(
|
||||
2, 2, 0L, TimeUnit.MILLISECONDS, new ArrayBlockingQueue<>(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<BulkRequest, ActionListener<BulkResponse>> bulkConsumer =
|
||||
(request, bulkListener) -> client.bulkAsync(request, RequestOptions.DEFAULT, bulkListener);
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -86,7 +86,6 @@ public class WebhookResource extends EntityResource<Webhook, WebhookRepository>
|
||||
}
|
||||
}
|
||||
|
||||
@Collection
|
||||
public WebhookResource(CollectionDAO dao, Authorizer authorizer) {
|
||||
super(Webhook.class, new WebhookRepository(dao), authorizer);
|
||||
webhookDAO = dao.webhookDAO();
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -77,7 +77,6 @@ public class GlossaryResource extends EntityResource<Glossary, GlossaryRepositor
|
||||
}
|
||||
|
||||
@Inject
|
||||
@Collection
|
||||
public GlossaryResource(CollectionDAO dao, Authorizer authorizer) {
|
||||
super(Glossary.class, new GlossaryRepository(dao), authorizer);
|
||||
}
|
||||
|
||||
@ -84,7 +84,6 @@ public class GlossaryTermResource extends EntityResource<GlossaryTerm, GlossaryT
|
||||
}
|
||||
|
||||
@Inject
|
||||
@Collection
|
||||
public GlossaryTermResource(CollectionDAO dao, Authorizer authorizer) {
|
||||
super(GlossaryTerm.class, new GlossaryTermRepository(dao), authorizer);
|
||||
}
|
||||
|
||||
@ -66,7 +66,6 @@ public class LineageResource {
|
||||
private final LineageRepository dao;
|
||||
private final Authorizer authorizer;
|
||||
|
||||
@Collection
|
||||
public LineageResource(@NonNull CollectionDAO dao, Authorizer authorizer) {
|
||||
this.dao = new LineageRepository(dao);
|
||||
this.authorizer = authorizer;
|
||||
|
||||
@ -78,7 +78,6 @@ public class LocationResource extends EntityResource<Location, LocationRepositor
|
||||
return location;
|
||||
}
|
||||
|
||||
@Collection
|
||||
public LocationResource(CollectionDAO dao, Authorizer authorizer) {
|
||||
super(Location.class, new LocationRepository(dao), authorizer);
|
||||
}
|
||||
|
||||
@ -57,7 +57,6 @@ import org.openmetadata.service.util.ResultList;
|
||||
public class MetricsResource extends EntityResource<Metrics, MetricsRepository> {
|
||||
public static final String COLLECTION_PATH = "/v1/metrics/";
|
||||
|
||||
@Collection
|
||||
public MetricsResource(CollectionDAO dao, Authorizer authorizer) {
|
||||
super(Metrics.class, new MetricsRepository(dao), authorizer);
|
||||
}
|
||||
|
||||
@ -78,7 +78,6 @@ public class MlModelResource extends EntityResource<MlModel, MlModelRepository>
|
||||
return mlmodel;
|
||||
}
|
||||
|
||||
@Collection
|
||||
public MlModelResource(CollectionDAO dao, Authorizer authorizer) {
|
||||
super(MlModel.class, new MlModelRepository(dao), authorizer);
|
||||
}
|
||||
|
||||
@ -48,7 +48,6 @@ public class PermissionsResource {
|
||||
private final Authorizer authorizer;
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
@Collection
|
||||
public PermissionsResource(CollectionDAO dao, @NonNull Authorizer authorizer) {
|
||||
this.authorizer = authorizer;
|
||||
}
|
||||
|
||||
@ -80,7 +80,6 @@ public class PipelineResource extends EntityResource<Pipeline, PipelineRepositor
|
||||
return pipeline;
|
||||
}
|
||||
|
||||
@Collection
|
||||
public PipelineResource(CollectionDAO dao, Authorizer authorizer) {
|
||||
super(Pipeline.class, new PipelineRepository(dao), authorizer);
|
||||
}
|
||||
|
||||
@ -91,7 +91,6 @@ public class PolicyResource extends EntityResource<Policy, PolicyRepository> {
|
||||
return policy;
|
||||
}
|
||||
|
||||
@Collection
|
||||
public PolicyResource(CollectionDAO dao, Authorizer authorizer) {
|
||||
super(Policy.class, new PolicyRepository(dao), authorizer);
|
||||
}
|
||||
|
||||
@ -56,7 +56,6 @@ import org.openmetadata.service.util.ResultList;
|
||||
public class ReportResource extends EntityResource<Report, ReportRepository> {
|
||||
public static final String COLLECTION_PATH = "/v1/bots/";
|
||||
|
||||
@Collection
|
||||
public ReportResource(CollectionDAO dao, Authorizer authorizer) {
|
||||
super(Report.class, new ReportRepository(dao), authorizer);
|
||||
}
|
||||
|
||||
@ -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());
|
||||
}
|
||||
|
||||
@ -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<T, R> {
|
||||
|
||||
private final SecretsManager secretsManager;
|
||||
|
||||
@Getter private final ServiceEntityRepository<T, S> serviceEntityRepository;
|
||||
|
||||
private final ServiceType serviceType;
|
||||
|
||||
protected ServiceEntityResource(
|
||||
Class<T> entityClass,
|
||||
R serviceRepository,
|
||||
Authorizer authorizer,
|
||||
SecretsManager secretsManager,
|
||||
ServiceType serviceType) {
|
||||
Class<T> 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);
|
||||
}
|
||||
|
||||
@ -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<DashboardService> {
|
||||
|
||||
@ -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<DatabaseService> {
|
||||
|
||||
@ -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<IngestionPipeline,
|
||||
public static final String COLLECTION_PATH = "v1/services/ingestionPipelines/";
|
||||
private PipelineServiceClient pipelineServiceClient;
|
||||
private OpenMetadataApplicationConfig openMetadataApplicationConfig;
|
||||
private final SecretsManager secretsManager;
|
||||
|
||||
@Getter private final IngestionPipelineRepository ingestionPipelineRepository;
|
||||
|
||||
@Override
|
||||
public IngestionPipeline addHref(UriInfo uriInfo, IngestionPipeline ingestionPipeline) {
|
||||
@ -98,11 +95,8 @@ public class IngestionPipelineResource extends EntityResource<IngestionPipeline,
|
||||
return ingestionPipeline;
|
||||
}
|
||||
|
||||
@Collection(constructorType = Collection.ConstructorType.DAO_AUTH_SM)
|
||||
public IngestionPipelineResource(CollectionDAO dao, Authorizer authorizer, SecretsManager secretsManager) {
|
||||
super(IngestionPipeline.class, new IngestionPipelineRepository(dao, secretsManager), authorizer);
|
||||
this.secretsManager = secretsManager;
|
||||
this.ingestionPipelineRepository = new IngestionPipelineRepository(dao, secretsManager);
|
||||
public IngestionPipelineResource(CollectionDAO dao, Authorizer authorizer) {
|
||||
super(IngestionPipeline.class, new IngestionPipelineRepository(dao), authorizer);
|
||||
}
|
||||
|
||||
public void initialize(OpenMetadataApplicationConfig config) {
|
||||
@ -404,7 +398,7 @@ public class IngestionPipelineResource extends EntityResource<IngestionPipeline,
|
||||
Fields fields = getFields(FIELD_OWNER);
|
||||
IngestionPipeline ingestionPipeline = dao.get(uriInfo, id, fields);
|
||||
ingestionPipeline.setOpenMetadataServerConnection(
|
||||
new OpenMetadataServerConnectionBuilder(secretsManager, openMetadataApplicationConfig).build());
|
||||
new OpenMetadataServerConnectionBuilder(openMetadataApplicationConfig).build());
|
||||
pipelineServiceClient.deployPipeline(ingestionPipeline);
|
||||
decryptOrNullify(securityContext, ingestionPipeline);
|
||||
return addHref(uriInfo, ingestionPipeline);
|
||||
@ -498,6 +492,7 @@ public class IngestionPipelineResource extends EntityResource<IngestionPipeline,
|
||||
@Context UriInfo uriInfo,
|
||||
@Context SecurityContext securityContext,
|
||||
@Valid TestServiceConnection testServiceConnection) {
|
||||
SecretsManager secretsManager = SecretsManagerFactory.getSecretsManager();
|
||||
testServiceConnection =
|
||||
testServiceConnection
|
||||
.withConnection(secretsManager.storeTestConnectionObject(testServiceConnection))
|
||||
@ -590,7 +585,7 @@ public class IngestionPipelineResource extends EntityResource<IngestionPipeline,
|
||||
|
||||
private IngestionPipeline getIngestionPipeline(CreateIngestionPipeline create, String user) throws IOException {
|
||||
OpenMetadataServerConnection openMetadataServerConnection =
|
||||
new OpenMetadataServerConnectionBuilder(secretsManager, openMetadataApplicationConfig).build();
|
||||
new OpenMetadataServerConnectionBuilder(openMetadataApplicationConfig).build();
|
||||
return copy(new IngestionPipeline(), create, user)
|
||||
.withPipelineType(create.getPipelineType())
|
||||
.withAirflowConfig(create.getAirflowConfig())
|
||||
@ -614,6 +609,7 @@ public class IngestionPipelineResource extends EntityResource<IngestionPipeline,
|
||||
}
|
||||
|
||||
private IngestionPipeline decryptOrNullify(SecurityContext securityContext, IngestionPipeline ingestionPipeline) {
|
||||
SecretsManager secretsManager = SecretsManagerFactory.getSecretsManager();
|
||||
try {
|
||||
authorizer.authorize(
|
||||
securityContext,
|
||||
|
||||
@ -55,7 +55,6 @@ import org.openmetadata.service.jdbi3.ListFilter;
|
||||
import org.openmetadata.service.jdbi3.MessagingServiceRepository;
|
||||
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;
|
||||
@ -79,14 +78,8 @@ public class MessagingServiceResource
|
||||
return service;
|
||||
}
|
||||
|
||||
@Collection(constructorType = Collection.ConstructorType.DAO_AUTH_SM)
|
||||
public MessagingServiceResource(CollectionDAO dao, Authorizer authorizer, SecretsManager secretsManager) {
|
||||
super(
|
||||
MessagingService.class,
|
||||
new MessagingServiceRepository(dao, secretsManager),
|
||||
authorizer,
|
||||
secretsManager,
|
||||
ServiceType.MESSAGING);
|
||||
public MessagingServiceResource(CollectionDAO dao, Authorizer authorizer) {
|
||||
super(MessagingService.class, new MessagingServiceRepository(dao), authorizer, ServiceType.MESSAGING);
|
||||
}
|
||||
|
||||
public static class MessagingServiceList extends ResultList<MessagingService> {
|
||||
|
||||
@ -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<MlModelService> {
|
||||
|
||||
@ -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<PipelineService> {
|
||||
|
||||
@ -73,7 +73,6 @@ public class StorageServiceResource extends EntityResource<StorageService, Stora
|
||||
return service;
|
||||
}
|
||||
|
||||
@Collection
|
||||
public StorageServiceResource(CollectionDAO dao, Authorizer authorizer) {
|
||||
super(StorageService.class, new StorageServiceRepository(dao), authorizer);
|
||||
}
|
||||
|
||||
@ -120,7 +120,6 @@ public class SettingsResource {
|
||||
}
|
||||
}
|
||||
|
||||
@Collection
|
||||
public SettingsResource(CollectionDAO dao, Authorizer authorizer) {
|
||||
Objects.requireNonNull(dao, "SettingsRepository must not be null");
|
||||
this.settingsRepository = new SettingsRepository(dao);
|
||||
|
||||
@ -86,7 +86,6 @@ public class TagResource {
|
||||
}
|
||||
}
|
||||
|
||||
@Collection
|
||||
public TagResource(CollectionDAO collectionDAO, Authorizer authorizer) {
|
||||
Objects.requireNonNull(collectionDAO, "TagRepository must not be null");
|
||||
this.dao = new TagRepository(collectionDAO);
|
||||
@ -94,7 +93,7 @@ public class TagResource {
|
||||
this.authorizer = authorizer;
|
||||
}
|
||||
|
||||
@SuppressWarnings("unused") // Method used for reflection
|
||||
@SuppressWarnings("unused") // Method used by reflection
|
||||
public void initialize(OpenMetadataApplicationConfig config) throws IOException {
|
||||
// Find tag definitions and load tag categories from the json file, if necessary
|
||||
List<String> tagFiles = EntityUtil.getJsonDataResources(".*json/data/tags/.*\\.json$");
|
||||
|
||||
@ -86,7 +86,6 @@ public class RoleResource extends EntityResource<Role, RoleRepository> {
|
||||
return role;
|
||||
}
|
||||
|
||||
@Collection
|
||||
public RoleResource(CollectionDAO collectionDAO, Authorizer authorizer) {
|
||||
super(Role.class, new RoleRepository(collectionDAO), authorizer);
|
||||
}
|
||||
|
||||
@ -87,7 +87,6 @@ public class TeamResource extends EntityResource<Team, TeamRepository> {
|
||||
return team;
|
||||
}
|
||||
|
||||
@Collection
|
||||
public TeamResource(CollectionDAO dao, Authorizer authorizer) {
|
||||
super(Team.class, new TeamRepository(dao), authorizer);
|
||||
}
|
||||
|
||||
@ -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<User, UserRepository> {
|
||||
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<User, UserRepository> {
|
||||
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<User, UserRepository> {
|
||||
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<User, UserRepository> {
|
||||
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<User, UserRepository> {
|
||||
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<User, UserRepository> {
|
||||
}
|
||||
|
||||
private User decryptOrNullify(SecurityContext securityContext, User user) {
|
||||
SecretsManager secretsManager = SecretsManagerFactory.getSecretsManager();
|
||||
if (Boolean.TRUE.equals(user.getIsBot()) && user.getAuthenticationMechanism() != null) {
|
||||
try {
|
||||
authorizer.authorize(
|
||||
|
||||
@ -78,7 +78,6 @@ public class TopicResource extends EntityResource<Topic, TopicRepository> {
|
||||
}
|
||||
|
||||
@Inject
|
||||
@Collection
|
||||
public TopicResource(CollectionDAO dao, Authorizer authorizer) {
|
||||
super(Topic.class, new TopicRepository(dao), authorizer);
|
||||
}
|
||||
|
||||
@ -85,7 +85,6 @@ public class TypeResource extends EntityResource<Type, TypeRepository> {
|
||||
}
|
||||
|
||||
@Inject
|
||||
@Collection
|
||||
public TypeResource(CollectionDAO dao, Authorizer authorizer) {
|
||||
super(Type.class, new TypeRepository(dao), authorizer);
|
||||
}
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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());
|
||||
|
||||
@ -24,11 +24,10 @@ public class InMemorySecretsManager extends ThirdPartySecretsManager {
|
||||
|
||||
private static InMemorySecretsManager INSTANCE;
|
||||
|
||||
@Getter private final Map<String, String> secretsMap;
|
||||
@Getter private final Map<String, String> secretsMap = new HashMap<>();
|
||||
|
||||
protected InMemorySecretsManager(SecretsManagerProvider secretsManagerProvider, String clusterPrefix) {
|
||||
super(secretsManagerProvider, clusterPrefix);
|
||||
secretsMap = new HashMap<>();
|
||||
}
|
||||
|
||||
public static InMemorySecretsManager getInstance(String clusterPrefix) {
|
||||
|
||||
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@ -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<IngestionPipeline> ingestionPipelineRepository;
|
||||
|
||||
private final UserRepository userRepository;
|
||||
private final EntityRepository<User> 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 <T> Optional<T> retrieveResource(CollectionRegistry.CollectionDetails collectionDetails, Class<T> clazz) {
|
||||
private <T> Optional<T> retrieveResource(CollectionDetails collectionDetails, Class<T> 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<ServiceEntityRepository<?, ?>> retrieveServiceRepository(
|
||||
CollectionRegistry.CollectionDetails collectionDetails) {
|
||||
private Optional<ServiceEntityRepository<?, ?>> 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());
|
||||
|
||||
@ -82,7 +82,6 @@ public class DefaultAuthorizer implements Authorizer {
|
||||
private Set<String> botPrincipalUsers;
|
||||
private Set<String> 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);
|
||||
|
||||
@ -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) {
|
||||
|
||||
@ -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<User> 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());
|
||||
}
|
||||
|
||||
@ -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<DashboardServiceRepository, DashboardService, DashboardConnection> {
|
||||
@ -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
|
||||
|
||||
@ -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<DatabaseServiceRepository, DatabaseService, DatabaseConnection> {
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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<MessagingServiceRepository, MessagingService, MessagingConnection> {
|
||||
@ -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
|
||||
|
||||
@ -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<MlModelServiceRepository, MlModelService, MlModelConnection> {
|
||||
@ -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
|
||||
|
||||
@ -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<PipelineServiceRepository, PipelineService, PipelineConnection> {
|
||||
@ -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
|
||||
|
||||
@ -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();
|
||||
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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<MlModelServiceResource, MlModelService, MlModelServiceRepository, MlModelConnection> {
|
||||
|
||||
@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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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({
|
||||
|
||||
@ -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
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user