use of io.openk9.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);
}
}
use of io.openk9.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");
}
}
use of io.openk9.model.Tenant in project openk9 by smclab.
the class InsertIndexWriter method activate.
@Activate
void activate() {
_disposable = _receiverReactor.consumeAutoAck(_binding.getQueue()).flatMap(delivery -> {
ObjectNode enrichProcessorContext = _jsonFactory.fromJsonToJsonNode(delivery.getBody()).toObjectNode();
String routingKey = delivery.getEnvelope().getRoutingKey();
long tenantId = enrichProcessorContext.get("datasourceContext").get("tenant").get("tenantId").asLong();
String pluginDriverName = enrichProcessorContext.get("pluginDriver").get("name").asText();
String indexName = String.join("-", Long.toString(tenantId), pluginDriverName, "data");
if (routingKey.endsWith("entity")) {
return Mono.fromSupplier(() -> new IndexRequest(indexName).source(enrichProcessorContext.toString(), XContentType.JSON));
}
return _createDocWriterRequest(indexName, enrichProcessorContext);
}).onErrorContinue(this::_manageExceptions).doOnNext(_indexBus::sendRequest).subscribe();
}
use of io.openk9.model.Tenant in project openk9 by smclab.
the class BaseSearchHTTPHandler method _toQuerySearchRequest.
private Mono<SearchResponse> _toQuerySearchRequest(Tenant tenant, List<Datasource> datasources, PluginDriverDTOList pdDTOList, SearchRequest searchRequest, HttpServerRequest httpRequest) {
return Mono.defer(() -> {
List<PluginDriverDTO> pluginDriverDTOList = pdDTOList.getPluginDriverDTOList();
Map<String, List<SearchToken>> tokenTypeGroup = searchRequest.getSearchQuery().stream().collect(Collectors.groupingBy(SearchToken::getTokenType));
List<SearchToken> datasource = tokenTypeGroup.get("DATASOURCE");
Stream<PluginDriverDTO> documentTypeStream = pluginDriverDTOList.stream();
if (datasource != null) {
List<String> datasourceValues = datasource.stream().map(SearchToken::getValues).flatMap(Arrays::stream).distinct().collect(Collectors.toList());
documentTypeStream = documentTypeStream.filter(entry -> datasourceValues.contains(entry.getName()));
}
List<PluginDriverDTO> documentTypeList = documentTypeStream.collect(Collectors.toList());
QueryParser queryParser = _queryParsers.stream().reduce(QueryParser.NOTHING, QueryParser::andThen);
return queryParser.apply(createQueryParserContext(tenant, datasources, httpRequest, tokenTypeGroup, documentTypeList)).flatMap(boolQueryBuilderConsumer -> _search.flatMapSearch(factory -> {
long tenantId = tenant.getTenantId();
if (documentTypeList.isEmpty()) {
return Mono.just(SearchUtil.EMPTY_SEARCH_REQUEST);
}
BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();
boolQueryBuilderConsumer.accept(boolQuery);
org.elasticsearch.action.search.SearchRequest elasticSearchQuery;
if (datasource != null) {
String[] indexNames = documentTypeList.stream().map(PluginDriverDTO::getName).distinct().toArray(String[]::new);
elasticSearchQuery = factory.createSearchRequestData(tenantId, indexNames);
} else {
elasticSearchQuery = factory.createSearchRequestData(tenantId, "*");
}
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
searchSourceBuilder.fetchSource(includeFields(), excludeFields());
searchSourceBuilder.query(boolQuery);
searchSourceBuilder.trackTotalHits(true);
return customizeSearchSourceBuilderMono(tenant, datasources, searchRequest, documentTypeList, searchSourceBuilder, elasticSearchQuery);
}));
});
}
use of io.openk9.model.Tenant in project openk9 by smclab.
the class BaseSearchHTTPHandler method customizeSearchSourceBuilder.
protected void customizeSearchSourceBuilder(Tenant tenant, List<Datasource> datasources, SearchRequest searchRequest, List<PluginDriverDTO> documentTypeList, SearchSourceBuilder searchSourceBuilder, org.elasticsearch.action.search.SearchRequest elasticSearchQuery) {
int[] range = searchRequest.getRange();
if (range != null) {
searchSourceBuilder.from(range[0]);
searchSourceBuilder.size(range[1]);
}
HighlightBuilder highlightBuilder = new HighlightBuilder();
documentTypeList.stream().map(PluginDriverDTO::getDocumentTypes).flatMap(Collection::stream).map(DocumentTypeDTO::getSearchKeywords).flatMap(Collection::stream).filter(SearchKeywordDTO::isText).map(SearchKeywordDTO::getKeyword).distinct().forEach(highlightBuilder::field);
highlightBuilder.forceSource(true);
highlightBuilder.tagsSchema("default");
searchSourceBuilder.highlighter(highlightBuilder);
}
Aggregations