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);
});
}
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);
}
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);
}
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);
}
}
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");
}
}
Aggregations