Search in sources :

Example 1 with Filter

use of io.micronaut.http.annotation.Filter in project akhq by tchiotludo.

the class StaticFilter method doFilter.

@Override
public Publisher<MutableHttpResponse<?>> doFilter(HttpRequest<?> request, ServerFilterChain chain) {
    return Publishers.map(chain.proceed(request), response -> {
        boolean first = response.getBody(NettyStreamedFileCustomizableResponseType.class).filter(n -> n.getMediaType().getName().equals(MediaType.TEXT_HTML)).isPresent();
        boolean second = response.getBody(NettySystemFileCustomizableResponseType.class).filter(n -> n.getFile().getAbsoluteFile().toString().endsWith("ui/index.html")).isPresent();
        if (first || second) {
            try {
                InputStream inputStream = Objects.requireNonNull(StaticFilter.class.getClassLoader().getResourceAsStream("ui/index.html"));
                String content;
                try (Reader reader = new InputStreamReader(inputStream)) {
                    content = CharStreams.toString(reader);
                }
                String finalBody = replace(content);
                return HttpResponse.<String>ok().body(finalBody).contentType(MediaType.TEXT_HTML).contentLength(finalBody.length());
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        }
        return response;
    });
}
Also used : Filter(io.micronaut.http.annotation.Filter) Publishers(io.micronaut.core.async.publisher.Publishers) ServerFilterChain(io.micronaut.http.filter.ServerFilterChain) Publisher(org.reactivestreams.Publisher) MutableHttpResponse(io.micronaut.http.MutableHttpResponse) IOException(java.io.IOException) Value(io.micronaut.context.annotation.Value) Reader(java.io.Reader) InputStreamReader(java.io.InputStreamReader) NettyStreamedFileCustomizableResponseType(io.micronaut.http.server.netty.types.files.NettyStreamedFileCustomizableResponseType) Objects(java.util.Objects) CharStreams(com.google.common.io.CharStreams) MediaType(io.micronaut.http.MediaType) Nullable(io.micronaut.core.annotation.Nullable) HttpServerFilter(io.micronaut.http.filter.HttpServerFilter) HttpResponse(io.micronaut.http.HttpResponse) HttpRequest(io.micronaut.http.HttpRequest) NettySystemFileCustomizableResponseType(io.micronaut.http.server.netty.types.files.NettySystemFileCustomizableResponseType) InputStream(java.io.InputStream) InputStreamReader(java.io.InputStreamReader) InputStream(java.io.InputStream) Reader(java.io.Reader) InputStreamReader(java.io.InputStreamReader) IOException(java.io.IOException)

Example 2 with Filter

use of io.micronaut.http.annotation.Filter in project micronaut-core by micronaut-projects.

the class DefaultHttpClientFilterResolver method resolveFilterEntries.

@Override
public List<FilterEntry<HttpClientFilter>> resolveFilterEntries(ClientFilterResolutionContext context) {
    return clientFilters.stream().map(httpClientFilter -> {
        AnnotationMetadata annotationMetadata = annotationMetadataResolver.resolveMetadata(httpClientFilter);
        HttpMethod[] methods = annotationMetadata.enumValues(Filter.class, "methods", HttpMethod.class);
        FilterPatternStyle patternStyle = annotationMetadata.enumValue(Filter.class, "patternStyle", FilterPatternStyle.class).orElse(FilterPatternStyle.ANT);
        final Set<HttpMethod> httpMethods = new HashSet<>(Arrays.asList(methods));
        if (annotationMetadata.hasStereotype(FilterMatcher.class)) {
            httpMethods.addAll(Arrays.asList(annotationMetadata.enumValues(FilterMatcher.class, "methods", HttpMethod.class)));
        }
        return FilterEntry.of(httpClientFilter, annotationMetadata, httpMethods, patternStyle, annotationMetadata.stringValues(Filter.class));
    }).filter(entry -> {
        AnnotationMetadata annotationMetadata = entry.getAnnotationMetadata();
        boolean matches = !annotationMetadata.hasStereotype(FilterMatcher.class);
        String filterAnnotation = annotationMetadata.getAnnotationNameByStereotype(FilterMatcher.class).orElse(null);
        if (filterAnnotation != null && !matches) {
            matches = context.getAnnotationMetadata().hasStereotype(filterAnnotation);
        }
        if (matches) {
            String[] clients = annotationMetadata.stringValues(Filter.class, "serviceId");
            boolean hasClients = ArrayUtils.isNotEmpty(clients);
            if (hasClients) {
                matches = containsIdentifier(context.getClientIds(), clients);
            }
        }
        return matches;
    }).collect(Collectors.toList());
}
Also used : HttpMethod(io.micronaut.http.HttpMethod) Filter(io.micronaut.http.annotation.Filter) Arrays(java.util.Arrays) Collection(java.util.Collection) ArrayUtils(io.micronaut.core.util.ArrayUtils) AnnotationMetadataResolver(io.micronaut.core.annotation.AnnotationMetadataResolver) Singleton(jakarta.inject.Singleton) Set(java.util.Set) HttpClientFilterResolver(io.micronaut.http.filter.HttpClientFilterResolver) Internal(io.micronaut.core.annotation.Internal) FilterPatternStyle(io.micronaut.http.filter.FilterPatternStyle) Toggleable(io.micronaut.core.util.Toggleable) Collectors(java.util.stream.Collectors) ArrayList(java.util.ArrayList) HashSet(java.util.HashSet) StringUtils(io.micronaut.core.util.StringUtils) HttpClientFilter(io.micronaut.http.filter.HttpClientFilter) List(java.util.List) FilterMatcher(io.micronaut.http.annotation.FilterMatcher) BootstrapContextCompatible(io.micronaut.context.annotation.BootstrapContextCompatible) AnnotationMetadata(io.micronaut.core.annotation.AnnotationMetadata) HttpRequest(io.micronaut.http.HttpRequest) Filter(io.micronaut.http.annotation.Filter) HttpClientFilter(io.micronaut.http.filter.HttpClientFilter) FilterPatternStyle(io.micronaut.http.filter.FilterPatternStyle) AnnotationMetadata(io.micronaut.core.annotation.AnnotationMetadata) HttpMethod(io.micronaut.http.HttpMethod) HashSet(java.util.HashSet)

Aggregations

HttpRequest (io.micronaut.http.HttpRequest)2 Filter (io.micronaut.http.annotation.Filter)2 CharStreams (com.google.common.io.CharStreams)1 BootstrapContextCompatible (io.micronaut.context.annotation.BootstrapContextCompatible)1 Value (io.micronaut.context.annotation.Value)1 AnnotationMetadata (io.micronaut.core.annotation.AnnotationMetadata)1 AnnotationMetadataResolver (io.micronaut.core.annotation.AnnotationMetadataResolver)1 Internal (io.micronaut.core.annotation.Internal)1 Nullable (io.micronaut.core.annotation.Nullable)1 Publishers (io.micronaut.core.async.publisher.Publishers)1 ArrayUtils (io.micronaut.core.util.ArrayUtils)1 StringUtils (io.micronaut.core.util.StringUtils)1 Toggleable (io.micronaut.core.util.Toggleable)1 HttpMethod (io.micronaut.http.HttpMethod)1 HttpResponse (io.micronaut.http.HttpResponse)1 MediaType (io.micronaut.http.MediaType)1 MutableHttpResponse (io.micronaut.http.MutableHttpResponse)1 FilterMatcher (io.micronaut.http.annotation.FilterMatcher)1 FilterPatternStyle (io.micronaut.http.filter.FilterPatternStyle)1 HttpClientFilter (io.micronaut.http.filter.HttpClientFilter)1