Loading src/main/java/org/etsi/osl/hypo/api/peering/mapper/OssLifecycleDataToOssClientDataMapper.java +1 −0 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ public interface OssLifecycleDataToOssClientDataMapper { @Mapping(target = "id", ignore = true) @Mapping(target = "organizationId", ignore = true) @Mapping(target = "healthCheckCounter", ignore = true) @Mapping(target = "oauth2TokenUri", source = "authUrl") @BeanMapping(nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.IGNORE) OssClientData mapToOssClientData( OssLifecycleData ossLifecycleData, @MappingTarget OssClientData ossClientData); Loading src/main/java/org/etsi/osl/hypo/api/peering/model/OssLifecycleData.java +2 −2 Original line number Diff line number Diff line Loading @@ -18,7 +18,7 @@ import lombok.ToString; "oauth2ClientId", "oauth2ClientSecret", "oauth2Scopes", "oauth2TokenUri", "authUrl", "username", "password" }) Loading @@ -38,7 +38,7 @@ public class OssLifecycleData { private String oauth2Scopes; private String oauth2TokenUri; private String authUrl; private String username; Loading src/main/java/org/etsi/osl/hypo/api/peering/oss/OidcClientCreator.java +18 −16 Original line number Diff line number Diff line package org.etsi.osl.hypo.api.peering.oss; import io.quarkus.oidc.client.OidcClient; import io.quarkus.oidc.client.OidcClientConfig; import io.quarkus.oidc.client.OidcClientConfig.Grant.Type; import io.quarkus.oidc.client.OidcClientConfigBuilder; import io.quarkus.oidc.client.OidcClients; import io.quarkus.oidc.client.runtime.OidcClientConfig; import io.smallrye.mutiny.Uni; import jakarta.enterprise.context.ApplicationScoped; import jakarta.inject.Inject; import java.util.ArrayList; import java.util.List; import java.util.Map; @ApplicationScoped public class OidcClientCreator { @Inject OidcClients oidcClients; private static final String openSliceRealm = "/auth/realms/openslice"; public Uni<OidcClient> createOidcClient( String name, String url, String clientId, String secret, String username, String password) { OidcClientConfig cfg = new OidcClientConfig(); cfg.setId(name); cfg.setAuthServerUrl(url + openSliceRealm); cfg.setClientId(clientId); cfg.getCredentials().setSecret(secret); cfg.getGrant().setType(Type.PASSWORD); cfg.setGrantOptions(Map.of("password", Map.of("username", username, "password", password))); List<String> scopes = new ArrayList<>(); scopes.add("offline_access"); cfg.setScopes(scopes); String name, String authUrl, String clientId, String secret, String username, String password) { OidcClientConfig cfg = new OidcClientConfigBuilder() .id(name) .authServerUrl(authUrl) .clientId(clientId) .credentials(secret) .grant(OidcClientConfig.Grant.Type.PASSWORD) .scopes("offline_access") .grantOptions(Map.of("password", Map.of("username", username, "password", password))) .build(); return oidcClients.newClient(cfg); } } src/main/java/org/etsi/osl/hypo/api/peering/oss/OssRestClientImpl.java +13 −8 Original line number Diff line number Diff line Loading @@ -72,7 +72,8 @@ public class OssRestClientImpl { String oauth2ClientSecret, String username, String password, String organizationId) { String organizationId, String authUrl) { return executeWithRetry( baseUrl, Loading @@ -82,6 +83,7 @@ public class OssRestClientImpl { oauth2ClientSecret, username, password, authUrl, (client, token) -> { Response response = client.getServiceSpecifications("Bearer " + token.getAccessToken()); String jsonResponse = response.readEntity(String.class); Loading @@ -98,7 +100,8 @@ public class OssRestClientImpl { String username, String password, String serviceSpecificationId, String organizationId) { String organizationId, String authUrl) { return executeWithRetry( baseUrl, Loading @@ -108,6 +111,7 @@ public class OssRestClientImpl { oauth2ClientSecret, username, password, authUrl, (client, token) -> { Response response = client.getServiceSpecificationById( Loading @@ -122,7 +126,7 @@ public class OssRestClientImpl { Tokens createToken( String name, String baseUrl, String authUrl, String oauth2ClientId, String oauth2ClientSecret, String username, Loading @@ -130,7 +134,7 @@ public class OssRestClientImpl { logger.debugf("Will retrieve a fresh token for org: %s", name); Uni<OidcClient> oidcClientUni = oidcClientCreator.createOidcClient( name, baseUrl, oauth2ClientId, oauth2ClientSecret, username, password); name, authUrl, oauth2ClientId, oauth2ClientSecret, username, password); TokensHelper tokenHelper = new TokensHelper(); return tokenHelper.getTokens(oidcClientUni.await().indefinitely()).await().indefinitely(); } Loading @@ -143,11 +147,12 @@ public class OssRestClientImpl { String secret, String user, String pass, String authUrl, BiFunctionWithException<OssRestClient, Tokens, T> action) { OssRestClient client = getCachedRestClient(baseUrl); // Compute token if missing Tokens tokens = getOrComputeToken(orgId, name, baseUrl, clientId, secret, user, pass); Tokens tokens = getOrComputeToken(orgId, name, authUrl, clientId, secret, user, pass); try { return action.apply(client, tokens); } catch (Exception e) { Loading @@ -155,7 +160,7 @@ public class OssRestClientImpl { "Request failed for %s, attempting to refresh token and retry: " + e.getMessage(), name); // Force refresh token tokens = createToken(name, baseUrl, clientId, secret, user, pass); tokens = createToken(name, authUrl, clientId, secret, user, pass); tokenCache.put(orgId, tokens); // Update cache try { Loading Loading @@ -189,12 +194,12 @@ public class OssRestClientImpl { Tokens getOrComputeToken( String orgId, String name, String baseUrl, String authUrl, String clientId, String secret, String user, String pass) { return tokenCache.get(orgId, k -> createToken(name, baseUrl, clientId, secret, user, pass)); return tokenCache.get(orgId, k -> createToken(name, authUrl, clientId, secret, user, pass)); } public void removeCachedToken(String organizationId) { Loading src/main/java/org/etsi/osl/hypo/api/peering/services/HealthCheckService.java +7 −2 Original line number Diff line number Diff line Loading @@ -80,6 +80,9 @@ public class HealthCheckService { } } catch (Exception e) { logger.debugf( "Heartbeat check failed for organization %s because of: %s", ossClientDatum.getName(), e.getMessage()); handleHealthCheckFailure(ossClientDatum, e); } } Loading @@ -96,7 +99,8 @@ public class HealthCheckService { ossClientData.getOauth2ClientSecret(), peeringInfoSecret.getUsername(), peeringInfoSecret.getPassword(), ossClientData.getOrganizationId()); ossClientData.getOrganizationId(), ossClientData.getOauth2TokenUri()); List<ServiceSpecificationEntity> updatedServiceSpecificationEntities = new ArrayList<>(); Loading @@ -112,7 +116,8 @@ public class HealthCheckService { peeringInfoSecret.getUsername(), peeringInfoSecret.getPassword(), entry.getKey(), ossClientData.getOrganizationId()); ossClientData.getOrganizationId(), ossClientData.getOauth2TokenUri()); serviceSpecificationEntityList.add(serviceSpecificationEntity); } Loading Loading
src/main/java/org/etsi/osl/hypo/api/peering/mapper/OssLifecycleDataToOssClientDataMapper.java +1 −0 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ public interface OssLifecycleDataToOssClientDataMapper { @Mapping(target = "id", ignore = true) @Mapping(target = "organizationId", ignore = true) @Mapping(target = "healthCheckCounter", ignore = true) @Mapping(target = "oauth2TokenUri", source = "authUrl") @BeanMapping(nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.IGNORE) OssClientData mapToOssClientData( OssLifecycleData ossLifecycleData, @MappingTarget OssClientData ossClientData); Loading
src/main/java/org/etsi/osl/hypo/api/peering/model/OssLifecycleData.java +2 −2 Original line number Diff line number Diff line Loading @@ -18,7 +18,7 @@ import lombok.ToString; "oauth2ClientId", "oauth2ClientSecret", "oauth2Scopes", "oauth2TokenUri", "authUrl", "username", "password" }) Loading @@ -38,7 +38,7 @@ public class OssLifecycleData { private String oauth2Scopes; private String oauth2TokenUri; private String authUrl; private String username; Loading
src/main/java/org/etsi/osl/hypo/api/peering/oss/OidcClientCreator.java +18 −16 Original line number Diff line number Diff line package org.etsi.osl.hypo.api.peering.oss; import io.quarkus.oidc.client.OidcClient; import io.quarkus.oidc.client.OidcClientConfig; import io.quarkus.oidc.client.OidcClientConfig.Grant.Type; import io.quarkus.oidc.client.OidcClientConfigBuilder; import io.quarkus.oidc.client.OidcClients; import io.quarkus.oidc.client.runtime.OidcClientConfig; import io.smallrye.mutiny.Uni; import jakarta.enterprise.context.ApplicationScoped; import jakarta.inject.Inject; import java.util.ArrayList; import java.util.List; import java.util.Map; @ApplicationScoped public class OidcClientCreator { @Inject OidcClients oidcClients; private static final String openSliceRealm = "/auth/realms/openslice"; public Uni<OidcClient> createOidcClient( String name, String url, String clientId, String secret, String username, String password) { OidcClientConfig cfg = new OidcClientConfig(); cfg.setId(name); cfg.setAuthServerUrl(url + openSliceRealm); cfg.setClientId(clientId); cfg.getCredentials().setSecret(secret); cfg.getGrant().setType(Type.PASSWORD); cfg.setGrantOptions(Map.of("password", Map.of("username", username, "password", password))); List<String> scopes = new ArrayList<>(); scopes.add("offline_access"); cfg.setScopes(scopes); String name, String authUrl, String clientId, String secret, String username, String password) { OidcClientConfig cfg = new OidcClientConfigBuilder() .id(name) .authServerUrl(authUrl) .clientId(clientId) .credentials(secret) .grant(OidcClientConfig.Grant.Type.PASSWORD) .scopes("offline_access") .grantOptions(Map.of("password", Map.of("username", username, "password", password))) .build(); return oidcClients.newClient(cfg); } }
src/main/java/org/etsi/osl/hypo/api/peering/oss/OssRestClientImpl.java +13 −8 Original line number Diff line number Diff line Loading @@ -72,7 +72,8 @@ public class OssRestClientImpl { String oauth2ClientSecret, String username, String password, String organizationId) { String organizationId, String authUrl) { return executeWithRetry( baseUrl, Loading @@ -82,6 +83,7 @@ public class OssRestClientImpl { oauth2ClientSecret, username, password, authUrl, (client, token) -> { Response response = client.getServiceSpecifications("Bearer " + token.getAccessToken()); String jsonResponse = response.readEntity(String.class); Loading @@ -98,7 +100,8 @@ public class OssRestClientImpl { String username, String password, String serviceSpecificationId, String organizationId) { String organizationId, String authUrl) { return executeWithRetry( baseUrl, Loading @@ -108,6 +111,7 @@ public class OssRestClientImpl { oauth2ClientSecret, username, password, authUrl, (client, token) -> { Response response = client.getServiceSpecificationById( Loading @@ -122,7 +126,7 @@ public class OssRestClientImpl { Tokens createToken( String name, String baseUrl, String authUrl, String oauth2ClientId, String oauth2ClientSecret, String username, Loading @@ -130,7 +134,7 @@ public class OssRestClientImpl { logger.debugf("Will retrieve a fresh token for org: %s", name); Uni<OidcClient> oidcClientUni = oidcClientCreator.createOidcClient( name, baseUrl, oauth2ClientId, oauth2ClientSecret, username, password); name, authUrl, oauth2ClientId, oauth2ClientSecret, username, password); TokensHelper tokenHelper = new TokensHelper(); return tokenHelper.getTokens(oidcClientUni.await().indefinitely()).await().indefinitely(); } Loading @@ -143,11 +147,12 @@ public class OssRestClientImpl { String secret, String user, String pass, String authUrl, BiFunctionWithException<OssRestClient, Tokens, T> action) { OssRestClient client = getCachedRestClient(baseUrl); // Compute token if missing Tokens tokens = getOrComputeToken(orgId, name, baseUrl, clientId, secret, user, pass); Tokens tokens = getOrComputeToken(orgId, name, authUrl, clientId, secret, user, pass); try { return action.apply(client, tokens); } catch (Exception e) { Loading @@ -155,7 +160,7 @@ public class OssRestClientImpl { "Request failed for %s, attempting to refresh token and retry: " + e.getMessage(), name); // Force refresh token tokens = createToken(name, baseUrl, clientId, secret, user, pass); tokens = createToken(name, authUrl, clientId, secret, user, pass); tokenCache.put(orgId, tokens); // Update cache try { Loading Loading @@ -189,12 +194,12 @@ public class OssRestClientImpl { Tokens getOrComputeToken( String orgId, String name, String baseUrl, String authUrl, String clientId, String secret, String user, String pass) { return tokenCache.get(orgId, k -> createToken(name, baseUrl, clientId, secret, user, pass)); return tokenCache.get(orgId, k -> createToken(name, authUrl, clientId, secret, user, pass)); } public void removeCachedToken(String organizationId) { Loading
src/main/java/org/etsi/osl/hypo/api/peering/services/HealthCheckService.java +7 −2 Original line number Diff line number Diff line Loading @@ -80,6 +80,9 @@ public class HealthCheckService { } } catch (Exception e) { logger.debugf( "Heartbeat check failed for organization %s because of: %s", ossClientDatum.getName(), e.getMessage()); handleHealthCheckFailure(ossClientDatum, e); } } Loading @@ -96,7 +99,8 @@ public class HealthCheckService { ossClientData.getOauth2ClientSecret(), peeringInfoSecret.getUsername(), peeringInfoSecret.getPassword(), ossClientData.getOrganizationId()); ossClientData.getOrganizationId(), ossClientData.getOauth2TokenUri()); List<ServiceSpecificationEntity> updatedServiceSpecificationEntities = new ArrayList<>(); Loading @@ -112,7 +116,8 @@ public class HealthCheckService { peeringInfoSecret.getUsername(), peeringInfoSecret.getPassword(), entry.getKey(), ossClientData.getOrganizationId()); ossClientData.getOrganizationId(), ossClientData.getOauth2TokenUri()); serviceSpecificationEntityList.add(serviceSpecificationEntity); } Loading