• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

FIWARE / contract-management / #69

30 Oct 2025 07:38AM UTC coverage: 1.686% (+0.04%) from 1.651%
#69

Pull #12

wistefan
improve organization creation and cleanup
Pull Request #12: Support for central marketplace and policy creation

117 of 1238 new or added lines in 31 files covered. (9.45%)

5 existing lines in 2 files now uncovered.

587 of 34807 relevant lines covered (1.69%)

0.02 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

0.0
/src/main/java/org/fiware/iam/http/Oid4VpAuthHandler.java
1
package org.fiware.iam.http;
2

3
import io.github.wistefan.oid4vp.OID4VPClient;
4
import io.github.wistefan.oid4vp.config.RequestParameters;
5
import io.github.wistefan.oid4vp.exception.BadGatewayException;
6
import io.github.wistefan.oid4vp.model.TokenResponse;
7
import io.micronaut.context.annotation.Requires;
8
import io.micronaut.http.HttpRequest;
9
import io.micronaut.http.HttpResponse;
10
import io.micronaut.http.HttpStatus;
11
import io.micronaut.http.MutableHttpRequest;
12
import io.micronaut.http.client.exceptions.HttpClientResponseException;
13
import jakarta.inject.Singleton;
14
import lombok.RequiredArgsConstructor;
15
import lombok.extern.slf4j.Slf4j;
16
import org.fiware.iam.configuration.Oid4VpConfiguration;
17
import reactor.core.publisher.Mono;
18

19
import java.net.URI;
20
import java.util.Set;
21
import java.util.function.Function;
22
import java.util.stream.Collectors;
23

24

25
@Requires(condition = Oid4VpConfiguration.Oid4VpCondition.class)
NEW
26
@Slf4j
×
27
@Singleton
28
@RequiredArgsConstructor
29
public class Oid4VpAuthHandler implements AuthHandler {
30

31
    public static final String CLIENT_ID_ATTRIBUTE = "clientId";
32
    public static final String SCOPE_ATTRIBUTE = "scope";
33

34
    private final OID4VPClient oid4VPClient;
35

36
    private Set<String> getScope(HttpRequest request) {
NEW
37
        return request.getAttribute(SCOPE_ATTRIBUTE, Set.class)
×
NEW
38
                .map(set -> (Set<?>) set) // Optional<Set<?>>
×
NEW
39
                .orElse(Set.of())
×
NEW
40
                .stream()
×
NEW
41
                .filter(String.class::isInstance)
×
NEW
42
                .map(String.class::cast)
×
NEW
43
                .collect(Collectors.toSet());
×
44
    }
45

46
    private String getClientId(HttpRequest request) {
NEW
47
        return request.getAttribute(CLIENT_ID_ATTRIBUTE)
×
NEW
48
                .filter(String.class::isInstance)
×
NEW
49
                .map(String.class::cast)
×
NEW
50
                .orElse("");
×
51
    }
52

53
    @Override
54
    public Mono<HttpResponse> executeWithAuth(MutableHttpRequest<?> request, Function<MutableHttpRequest<?>, Mono<HttpResponse>> executor) {
NEW
55
        return executor.apply(request)
×
NEW
56
                .onErrorResume(t -> {
×
NEW
57
                    if (t instanceof HttpClientResponseException hcre) {
×
NEW
58
                        return Mono.just(hcre.getResponse());
×
59
                    } else {
NEW
60
                        throw new BadGatewayException("Was not able to call downstream service.", t);
×
61
                    }
62
                })
NEW
63
                .flatMap(response -> {
×
NEW
64
                    if (response.getStatus() == HttpStatus.UNAUTHORIZED) {
×
NEW
65
                        RequestParameters params = new RequestParameters(
×
NEW
66
                                URI.create(request.getUri().getScheme() + "://" + request.getUri().getHost() + ":" + request.getUri().getPort()),
×
NEW
67
                                request.getPath(),
×
NEW
68
                                getClientId(request),
×
NEW
69
                                getScope(request)
×
70
                        );
NEW
71
                        return Mono.fromFuture(oid4VPClient.getAccessToken(params))
×
NEW
72
                                .map(TokenResponse::getAccessToken)
×
NEW
73
                                .flatMap(token -> {
×
NEW
74
                                    request.bearerAuth(token);
×
NEW
75
                                    return executor.apply(request);
×
76
                                });
77
                    }
NEW
78
                    return Mono.just(response);
×
79
                });
80
    }
81
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc