Search in sources :

Example 6 with Tenant

use of io.openk9.datasource.model.Tenant in project openk9 by smclab.

the class SuggestionsHTTPHandler method customizeSearchSourceBuilderMono.

@Override
protected Mono<org.elasticsearch.action.search.SearchRequest> customizeSearchSourceBuilderMono(Tenant tenant, List<Datasource> datasources, SearchRequest searchRequest, List<PluginDriverDTO> documentTypeList, SearchSourceBuilder searchSourceBuilder, org.elasticsearch.action.search.SearchRequest elasticSearchQuery) {
    return Mono.defer(() -> {
        Long suggestionCategoryId = searchRequest.getSuggestionCategoryId();
        if (suggestionCategoryId == null) {
            return _datasourceClient.findSuggestionCategoryFieldsByTenantId(tenant.getTenantId());
        } else {
            return _datasourceClient.findSuggestionCategoryFieldsByTenantIdAndCategoryId(tenant.getTenantId(), suggestionCategoryId);
        }
    }).map(fields -> {
        if (!(fields == null || fields.isEmpty())) {
            Function<String, CompositeValuesSourceBuilder<?>> fieldToTerms = nameField -> new TermsValuesSourceBuilder(nameField).field(nameField).missingBucket(true);
            CompositeAggregationBuilder compositeAggregation = fields.stream().map(SuggestionCategoryField::getFieldName).map(fieldToTerms).collect(Collectors.collectingAndThen(Collectors.toList(), list -> AggregationBuilders.composite("composite", list)));
            String afterKey = searchRequest.getAfterKey();
            if (afterKey != null) {
                byte[] afterKeyDecoded = Base64.getDecoder().decode(afterKey);
                Map<String, Object> map = _jsonFactory.fromJsonMap(new String(afterKeyDecoded), Object.class);
                compositeAggregation.aggregateAfter(map);
            }
            int[] range = searchRequest.getRange();
            if (range != null && range.length == 2) {
                int size = range[1];
                compositeAggregation.size(size);
            }
            searchSourceBuilder.aggregation(compositeAggregation);
        }
        searchSourceBuilder.from(0);
        searchSourceBuilder.size(0);
        searchSourceBuilder.highlighter(null);
        return elasticSearchQuery.source(searchSourceBuilder);
    });
}
Also used : PluginDriverDTO(io.openk9.plugin.driver.manager.model.PluginDriverDTO) HttpUtil(io.openk9.http.util.HttpUtil) PluginDriverDTOList(io.openk9.plugin.driver.manager.model.PluginDriverDTOList) LoggerFactory(org.slf4j.LoggerFactory) SuggestionsResponse(io.openk9.search.query.internal.response.SuggestionsResponse) QueryParser(io.openk9.search.api.query.QueryParser) QueryBuilders(org.elasticsearch.index.query.QueryBuilders) SearchToken(io.openk9.search.api.query.SearchToken) JsonFactory(io.openk9.json.api.JsonFactory) Map(java.util.Map) SearchResponse(org.elasticsearch.action.search.SearchResponse) PluginDriverManagerClient(io.openk9.plugin.driver.manager.client.api.PluginDriverManagerClient) SearchHit(org.elasticsearch.search.SearchHit) Tenant(io.openk9.model.Tenant) Aggregations(org.elasticsearch.search.aggregations.Aggregations) DatasourceClient(io.openk9.datasource.client.api.DatasourceClient) ReferencePolicy(org.osgi.service.component.annotations.ReferencePolicy) Collectors(java.util.stream.Collectors) StandardCharsets(java.nio.charset.StandardCharsets) Objects(java.util.Objects) HttpServerRequest(reactor.netty.http.server.HttpServerRequest) Base64(java.util.Base64) List(java.util.List) ReferencePolicyOption(org.osgi.service.component.annotations.ReferencePolicyOption) SuggestionCategoryField(io.openk9.model.SuggestionCategoryField) BoolQueryBuilder(org.elasticsearch.index.query.BoolQueryBuilder) HttpServerRoutes(reactor.netty.http.server.HttpServerRoutes) HttpServerResponse(reactor.netty.http.server.HttpServerResponse) Search(io.openk9.search.client.api.Search) Tuple2(reactor.util.function.Tuple2) HashMap(java.util.HashMap) HttpResponseWriter(io.openk9.http.util.HttpResponseWriter) Function(java.util.function.Function) Component(org.osgi.service.component.annotations.Component) CompositeAggregation(org.elasticsearch.search.aggregations.bucket.composite.CompositeAggregation) CompositeAggregationBuilder(org.elasticsearch.search.aggregations.bucket.composite.CompositeAggregationBuilder) SearchSourceBuilder(org.elasticsearch.search.builder.SearchSourceBuilder) BiConsumer(java.util.function.BiConsumer) Aggregation(org.elasticsearch.search.aggregations.Aggregation) Activate(org.osgi.service.component.annotations.Activate) LinkedList(java.util.LinkedList) RouterHandler(io.openk9.http.web.RouterHandler) CompositeValuesSourceBuilder(org.elasticsearch.search.aggregations.bucket.composite.CompositeValuesSourceBuilder) Logger(org.slf4j.Logger) Datasource(io.openk9.model.Datasource) Suggestions(io.openk9.search.query.internal.response.suggestions.Suggestions) AggregationBuilders(org.elasticsearch.search.aggregations.AggregationBuilders) Mono(reactor.core.publisher.Mono) TermsValuesSourceBuilder(org.elasticsearch.search.aggregations.bucket.composite.TermsValuesSourceBuilder) ReferenceCardinality(org.osgi.service.component.annotations.ReferenceCardinality) SearchRequest(io.openk9.search.api.query.SearchRequest) SearchTokenizer(io.openk9.search.api.query.SearchTokenizer) Modified(org.osgi.service.component.annotations.Modified) Reference(org.osgi.service.component.annotations.Reference) CompositeAggregationBuilder(org.elasticsearch.search.aggregations.bucket.composite.CompositeAggregationBuilder) TermsValuesSourceBuilder(org.elasticsearch.search.aggregations.bucket.composite.TermsValuesSourceBuilder) CompositeValuesSourceBuilder(org.elasticsearch.search.aggregations.bucket.composite.CompositeValuesSourceBuilder) SuggestionCategoryField(io.openk9.model.SuggestionCategoryField)

Example 7 with Tenant

use of io.openk9.datasource.model.Tenant in project openk9 by smclab.

the class CustomTenantConfigResolver method createTenantConfig.

private Uni<OidcTenantConfig> createTenantConfig(String tenantName) {
    Tenant tenant = _tenantRegistry.getTenantNullable(tenantName);
    if (tenant == null) {
        logger.warn("tenant " + tenantName + " not found");
        return Uni.createFrom().nullItem();
    }
    logger.info("tenant: " + tenantName);
    final OidcTenantConfig config = new OidcTenantConfig();
    config.setTenantId(tenant.getRealmName());
    config.setAuthServerUrl(_createAuthServerUrl(tenant.getRealmName()));
    config.setClientId(tenant.getClientId());
    config.setApplicationType(OidcTenantConfig.ApplicationType.SERVICE);
    if (tenant.getClientSecret() != null && !tenant.getClientSecret().isBlank()) {
        OidcTenantConfig.Credentials credentials = new OidcTenantConfig.Credentials();
        credentials.setSecret(tenant.getClientSecret());
        config.setCredentials(credentials);
    }
    return Uni.createFrom().item(config);
}
Also used : Tenant(io.openk9.api.aggregator.model.Tenant) OidcTenantConfig(io.quarkus.oidc.OidcTenantConfig)

Example 8 with Tenant

use of io.openk9.datasource.model.Tenant in project openk9 by smclab.

the class TenantRegistry method initializeTenantMap.

@Scheduled(every = "30s")
@Blocking
void initializeTenantMap() {
    List<Tenant> listTenant = Tenant.<Tenant>list("active = true").await().indefinitely();
    Map<String, Tenant> map = new HashMap<>(listTenant.size());
    for (Tenant tenant : listTenant) {
        map.put(tenant.getVirtualHost(), tenant);
    }
    _tenantMap.clear();
    _tenantMap.putAll(map);
}
Also used : Tenant(io.openk9.api.aggregator.model.Tenant) ConcurrentHashMap(java.util.concurrent.ConcurrentHashMap) HashMap(java.util.HashMap) Scheduled(io.quarkus.scheduler.Scheduled) Blocking(io.smallrye.common.annotation.Blocking)

Example 9 with Tenant

use of io.openk9.datasource.model.Tenant in project openk9 by smclab.

the class AuthResource method userInfo.

@PermitAll
@Path("/v1/auth/user-info")
@POST
@SecurityRequirement(name = "SecurityScheme")
public Uni<UserInfoResponseDTO> userInfo(@Context HttpServerRequest context) {
    System.out.println("userInfo");
    String host = context.host();
    Tenant tenant = _findTenant(host);
    String realmName = tenant.getRealmName();
    String clientSecret = tenant.getClientSecret();
    String clientId = tenant.getClientId();
    String rawToken = jwt.getRawToken();
    if (clientSecret != null) {
        return _authClient.userInfo(realmName, clientId, clientSecret, rawToken);
    } else {
        return _authClient.userInfo(realmName, clientId, rawToken);
    }
}
Also used : Tenant(io.openk9.api.aggregator.model.Tenant) Path(javax.ws.rs.Path) POST(javax.ws.rs.POST) PermitAll(javax.annotation.security.PermitAll) SecurityRequirement(org.eclipse.microprofile.openapi.annotations.security.SecurityRequirement)

Example 10 with Tenant

use of io.openk9.datasource.model.Tenant in project openk9 by smclab.

the class AuthResource method login.

@PermitAll
@Path("/v1/auth/login")
@POST
public Uni<LoginResponseDTO> login(@Context HttpServerRequest context, LoginRequest request) {
    String host = context.host();
    Tenant tenant = _findTenant(host);
    String realmName = tenant.getRealmName();
    String clientSecret = tenant.getClientSecret();
    String clientId = tenant.getClientId();
    String username = request.getUsername();
    String password = request.getPassword();
    if (username == null) {
        return Uni.createFrom().failure(() -> new HttpException(400, "required username"));
    }
    if (password == null) {
        return Uni.createFrom().failure(() -> new HttpException(400, "required password"));
    }
    if (clientSecret != null) {
        return _authClient.login(realmName, username, password, clientId, clientSecret, "password");
    } else {
        return _authClient.login(realmName, username, password, clientId, "password");
    }
}
Also used : Tenant(io.openk9.api.aggregator.model.Tenant) HttpException(io.vertx.ext.web.handler.HttpException) Path(javax.ws.rs.Path) POST(javax.ws.rs.POST) PermitAll(javax.annotation.security.PermitAll)

Aggregations

Tenant (io.openk9.api.aggregator.model.Tenant)6 List (java.util.List)6 Activate (org.osgi.service.component.annotations.Activate)6 JsonFactory (io.openk9.json.api.JsonFactory)5 Datasource (io.openk9.model.Datasource)5 Tenant (io.openk9.model.Tenant)5 Logger (org.slf4j.Logger)5 LoggerFactory (org.slf4j.LoggerFactory)5 DatasourceClient (io.openk9.datasource.client.api.DatasourceClient)4 RouterHandler (io.openk9.http.web.RouterHandler)4 PluginDriverManagerClient (io.openk9.plugin.driver.manager.client.api.PluginDriverManagerClient)4 PluginDriverDTO (io.openk9.plugin.driver.manager.model.PluginDriverDTO)4 QueryParser (io.openk9.search.api.query.QueryParser)4 Search (io.openk9.search.client.api.Search)4 HashMap (java.util.HashMap)4 Map (java.util.Map)4 Collectors (java.util.stream.Collectors)4 BoolQueryBuilder (org.elasticsearch.index.query.BoolQueryBuilder)4 QueryBuilders (org.elasticsearch.index.query.QueryBuilders)4 SearchHit (org.elasticsearch.search.SearchHit)4