Skip to content

Commit

Permalink
API key and role field name translators
Browse files Browse the repository at this point in the history
  • Loading branch information
albertzaharovits committed Jun 10, 2024
1 parent a1b27a0 commit 6882441
Show file tree
Hide file tree
Showing 9 changed files with 364 additions and 298 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@
import java.util.Map;
import java.util.concurrent.atomic.AtomicBoolean;

import static org.elasticsearch.xpack.security.support.ApiKeyFieldNameTranslators.translateFieldSortBuilders;
import static org.elasticsearch.xpack.security.support.FieldNameTranslators.API_KEY_FIELD_NAME_TRANSLATORS;
import static org.elasticsearch.xpack.security.support.SecuritySystemIndices.SECURITY_MAIN_ALIAS;

public final class TransportQueryApiKeyAction extends TransportAction<QueryApiKeyRequest, QueryApiKeyResponse> {
Expand Down Expand Up @@ -94,7 +94,7 @@ protected void doExecute(Task task, QueryApiKeyRequest request, ActionListener<Q
}, filteringAuthentication));

if (request.getFieldSortBuilders() != null) {
translateFieldSortBuilders(request.getFieldSortBuilders(), searchSourceBuilder, fieldName -> {
API_KEY_FIELD_NAME_TRANSLATORS.translateFieldSortBuilders(request.getFieldSortBuilders(), searchSourceBuilder, fieldName -> {
if (API_KEY_TYPE_RUNTIME_MAPPING_FIELD.equals(fieldName)) {
accessesApiKeyTypeField.set(true);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,9 @@
import org.elasticsearch.xpack.core.security.action.apikey.QueryApiKeyResponse;
import org.elasticsearch.xpack.core.security.action.role.QueryRoleAction;
import org.elasticsearch.xpack.security.authz.store.NativeRolesStore;
import org.elasticsearch.xpack.security.support.RoleBoolQueryBuilder;

import static org.elasticsearch.xpack.security.support.FieldNameTranslators.ROLE_FIELD_NAME_TRANSLATORS;

public class TransportQueryRoleAction extends TransportAction<QueryApiKeyRequest, QueryApiKeyResponse> {

Expand All @@ -41,18 +44,9 @@ protected void doExecute(Task task, QueryApiKeyRequest request, ActionListener<Q
if (request.getSize() != null) {
searchSourceBuilder.size(request.getSize());
}
// searchSourceBuilder.query(ApiKeyBoolQueryBuilder.build(request.getQueryBuilder(), fieldName -> {
// if (API_KEY_TYPE_RUNTIME_MAPPING_FIELD.equals(fieldName)) {
// accessesApiKeyTypeField.set(true);
// }
// }, filteringAuthentication));
//
// if (request.getFieldSortBuilders() != null) {
// translateFieldSortBuilders(request.getFieldSortBuilders(), searchSourceBuilder, fieldName -> {
// if (API_KEY_TYPE_RUNTIME_MAPPING_FIELD.equals(fieldName)) {
// accessesApiKeyTypeField.set(true);
// }
// });
// }
searchSourceBuilder.query(RoleBoolQueryBuilder.build(request.getQueryBuilder(), null));
if (request.getFieldSortBuilders() != null) {
ROLE_FIELD_NAME_TRANSLATORS.translateFieldSortBuilders(request.getFieldSortBuilders(), searchSourceBuilder, null);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@

import java.util.function.Consumer;

import static org.elasticsearch.xpack.security.support.ApiKeyFieldNameTranslators.translateQueryBuilderFields;
import static org.elasticsearch.xpack.security.support.FieldNameTranslators.API_KEY_FIELD_NAME_TRANSLATORS;

public class ApiKeyAggregationsBuilder {

Expand Down Expand Up @@ -73,7 +73,7 @@ private static AggregationBuilder translateAggsFields(AggregationBuilder aggsBui
throw new IllegalArgumentException("Unsupported script value source for [" + copiedAggsBuilder.getName() + "] agg");
}
// the user-facing field names are different from the index mapping field names of API Key docs
String translatedFieldName = ApiKeyFieldNameTranslators.translate(valuesSourceAggregationBuilder.field());
String translatedFieldName = API_KEY_FIELD_NAME_TRANSLATORS.translate(valuesSourceAggregationBuilder.field());
valuesSourceAggregationBuilder.field(translatedFieldName);
fieldNameVisitor.accept(translatedFieldName);
return valuesSourceAggregationBuilder;
Expand All @@ -88,7 +88,7 @@ private static AggregationBuilder translateAggsFields(AggregationBuilder aggsBui
+ "]"
);
}
String translatedFieldName = ApiKeyFieldNameTranslators.translate(valueSource.field());
String translatedFieldName = API_KEY_FIELD_NAME_TRANSLATORS.translate(valueSource.field());
valueSource.field(translatedFieldName);
fieldNameVisitor.accept(translatedFieldName);
}
Expand All @@ -97,7 +97,7 @@ private static AggregationBuilder translateAggsFields(AggregationBuilder aggsBui
// filters the aggregation query to user's allowed API Keys only
FilterAggregationBuilder newFilterAggregationBuilder = new FilterAggregationBuilder(
filterAggregationBuilder.getName(),
translateQueryBuilderFields(filterAggregationBuilder.getFilter(), fieldNameVisitor)
API_KEY_FIELD_NAME_TRANSLATORS.translateQueryBuilderFields(filterAggregationBuilder.getFilter(), fieldNameVisitor)
);
if (filterAggregationBuilder.getMetadata() != null) {
newFilterAggregationBuilder.setMetadata(filterAggregationBuilder.getMetadata());
Expand All @@ -110,7 +110,7 @@ private static AggregationBuilder translateAggsFields(AggregationBuilder aggsBui
// filters the aggregation's bucket queries to user's allowed API Keys only
QueryBuilder[] filterQueryBuilders = new QueryBuilder[filtersAggregationBuilder.filters().size()];
for (int i = 0; i < filtersAggregationBuilder.filters().size(); i++) {
filterQueryBuilders[i] = translateQueryBuilderFields(
filterQueryBuilders[i] = API_KEY_FIELD_NAME_TRANSLATORS.translateQueryBuilderFields(
filtersAggregationBuilder.filters().get(i).filter(),
fieldNameVisitor
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
import java.util.function.Consumer;

import static org.elasticsearch.xpack.security.action.apikey.TransportQueryApiKeyAction.API_KEY_TYPE_RUNTIME_MAPPING_FIELD;
import static org.elasticsearch.xpack.security.support.ApiKeyFieldNameTranslators.translateQueryBuilderFields;
import static org.elasticsearch.xpack.security.support.FieldNameTranslators.API_KEY_FIELD_NAME_TRANSLATORS;

public class ApiKeyBoolQueryBuilder extends BoolQueryBuilder {

Expand Down Expand Up @@ -69,7 +69,7 @@ public static ApiKeyBoolQueryBuilder build(
) {
final ApiKeyBoolQueryBuilder finalQuery = new ApiKeyBoolQueryBuilder();
if (queryBuilder != null) {
QueryBuilder processedQuery = translateQueryBuilderFields(queryBuilder, fieldNameVisitor);
QueryBuilder processedQuery = API_KEY_FIELD_NAME_TRANSLATORS.translateQueryBuilderFields(queryBuilder, fieldNameVisitor);
finalQuery.must(processedQuery);
}
finalQuery.filter(QueryBuilders.termQuery("doc_type", "api_key"));
Expand Down Expand Up @@ -112,5 +112,4 @@ protected QueryBuilder doRewrite(QueryRewriteContext queryRewriteContext) throws
static boolean isIndexFieldNameAllowed(String fieldName) {
return ALLOWED_EXACT_INDEX_FIELD_NAMES.contains(fieldName) || fieldName.startsWith("metadata_flattened.");
}

}
Loading

0 comments on commit 6882441

Please sign in to comment.