This is an automated email from the ASF dual-hosted git repository. lahirujayathilake pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/airavata-custos.git
commit c7ad339f006e4ffd9655b0e813406dc4358e87b8 Author: lahiruj <[email protected]> AuthorDate: Wed Aug 28 15:03:50 2024 -0400 redhat released keycloak version and docker compose to run services --- compose/dbinit/init-db.sh | 14 +++++ compose/docker-compose.yml | 67 ++++++++++++++++++++++ compose/vault/config/vault-config.hcl | 11 ++++ pom.xml | 8 ++- .../federated/client/keycloak/KeycloakClient.java | 6 +- .../federated/client/keycloak/KeycloakUtils.java | 4 +- .../custos/service/profile/UserProfileService.java | 4 +- 7 files changed, 106 insertions(+), 8 deletions(-) diff --git a/compose/dbinit/init-db.sh b/compose/dbinit/init-db.sh new file mode 100755 index 000000000..2b51b4bc9 --- /dev/null +++ b/compose/dbinit/init-db.sh @@ -0,0 +1,14 @@ +#!/bin/bash + +echo "Creating databases and users..." + +mysql -u root -p"$MYSQL_ROOT_PASSWORD" <<-EOSQL + CREATE DATABASE IF NOT EXISTS custos; + CREATE DATABASE IF NOT EXISTS keycloak; + CREATE USER IF NOT EXISTS 'admin'@'%' IDENTIFIED BY 'admin'; + GRANT ALL PRIVILEGES ON custos.* TO 'admin'@'%'; + GRANT ALL PRIVILEGES ON keycloak.* TO 'admin'@'%'; + FLUSH PRIVILEGES; +EOSQL + +echo "Databases and users created" \ No newline at end of file diff --git a/compose/docker-compose.yml b/compose/docker-compose.yml new file mode 100644 index 000000000..cd1519dad --- /dev/null +++ b/compose/docker-compose.yml @@ -0,0 +1,67 @@ +version: "3.8" +services: + keycloak: + image: quay.io/keycloak/keycloak:24.0.0 + environment: + KC_HOSTNAME: localhost + KC_HOSTNAME_PORT: 8080 + KC_HOSTNAME_STRICT_BACKCHANNEL: "true" + KC_DB: mysql + KC_DB_URL: jdbc:mysql://db:3306/keycloak?characterEncoding=UTF-8 + KC_DB_USERNAME: admin + KC_DB_PASSWORD: admin + KEYCLOAK_ADMIN: admin + KEYCLOAK_ADMIN_PASSWORD: admin + ports: + - "8080:8080" + command: + - start-dev + restart: unless-stopped + + db: + container_name: custos_db + image: mysql:8.0.31 + restart: always + command: --character-set-server=utf8 --collation-server=utf8_general_ci + ports: + - "3306:3306" + environment: + MYSQL_ROOT_PASSWORD: root + MYSQL_USER: admin + MYSQL_PASSWORD: admin + MAX_ALLOWED_PACKET: 1073741824 + volumes: + - ./dbinit:/docker-entrypoint-initdb.d + + adminer: + image: adminer + restart: always + ports: + - 18080:8080 + + vault: + image: vault:1.11.0 + container_name: vault + restart: unless-stopped + ports: + - "8201:8201" + - "8200:8200" + environment: + VAULT_ADDR: http://0.0.0.0:8201 + VAULT_API_ADDR: http://127.0.0.1:8200 + VAULT_CLUSTER_ADDR: http://127.0.0.1:8201 + VAULT_LOCAL_CONFIG: '{"listener": [{"tcp":{"address": "0.0.0.0:8201","tls_disable":"1"}}], "default_lease_ttl": "168h", "max_lease_ttl": "720h"}, "ui": true}' + cap_add: + - IPC_LOCK + volumes: + - ./vault/data:/vault/data + - ./vault/config:/vault/config + entrypoint: vault server + command: -config=/vault/config/vault-config.hcl + healthcheck: + test: "vault login 00000000-0000-0000-0000-000000000000 && + vault kv get secret && + vault secrets disable secret && + vault secrets enable -version=1 -path=secret kv && + vault secrets enable -version=1 -path=resourcesecret kv" + interval: 5s \ No newline at end of file diff --git a/compose/vault/config/vault-config.hcl b/compose/vault/config/vault-config.hcl new file mode 100644 index 000000000..11d7e4d59 --- /dev/null +++ b/compose/vault/config/vault-config.hcl @@ -0,0 +1,11 @@ +storage "raft" { + path = "./vault/data" + node_id = "node1" +} + +listener "tcp" { + address = "0.0.0.0:8200" + tls_disable = 1 +} + +ui = true \ No newline at end of file diff --git a/pom.xml b/pom.xml index adb6889a2..86e6199e8 100644 --- a/pom.xml +++ b/pom.xml @@ -131,6 +131,11 @@ <artifactId>spring-vault-core</artifactId> <version>${spring.vault.version}</version> </dependency> + <dependency> + <groupId>jakarta.ws.rs</groupId> + <artifactId>jakarta.ws.rs-api</artifactId> + <version>${jakarta.ws.version}</version> + </dependency> </dependencies> </dependencyManagement> @@ -187,7 +192,7 @@ <com.google.protobuf.util>3.21.11</com.google.protobuf.util> <mysql.connector.java>8.0.31</mysql.connector.java> - <keycloak.admin.version>20.0.3</keycloak.admin.version> + <keycloak.admin.version>24.0.5</keycloak.admin.version> <testng.version>6.8</testng.version> <org.json.version>20240303</org.json.version> <nimbusds.jwt.version>9.40</nimbusds.jwt.version> @@ -203,6 +208,7 @@ <ssh.username>ubuntu</ssh.username> <project.version>1.1-SNAPSHOT</project.version> <clusterIssuer>letsencrypt-prod</clusterIssuer> + <jakarta.ws.version>4.0.0</jakarta.ws.version> </properties> <repositories> diff --git a/services/src/main/java/org/apache/custos/service/federated/client/keycloak/KeycloakClient.java b/services/src/main/java/org/apache/custos/service/federated/client/keycloak/KeycloakClient.java index ab516e635..495e24a5b 100644 --- a/services/src/main/java/org/apache/custos/service/federated/client/keycloak/KeycloakClient.java +++ b/services/src/main/java/org/apache/custos/service/federated/client/keycloak/KeycloakClient.java @@ -20,8 +20,10 @@ package org.apache.custos.service.federated.client.keycloak; import com.fasterxml.jackson.databind.ObjectMapper; -import org.apache.custos.core.exception.UnauthorizedException; +import jakarta.ws.rs.NotFoundException; +import jakarta.ws.rs.core.Response; import org.apache.custos.core.constants.Constants; +import org.apache.custos.core.exception.UnauthorizedException; import org.apache.http.HttpStatus; import org.keycloak.admin.client.Keycloak; import org.keycloak.admin.client.resource.GroupResource; @@ -50,8 +52,6 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import javax.validation.constraints.NotNull; -import javax.ws.rs.NotFoundException; -import javax.ws.rs.core.Response; import java.net.URI; import java.net.http.HttpClient; import java.net.http.HttpRequest; diff --git a/services/src/main/java/org/apache/custos/service/federated/client/keycloak/KeycloakUtils.java b/services/src/main/java/org/apache/custos/service/federated/client/keycloak/KeycloakUtils.java index cb897932c..7decf06aa 100644 --- a/services/src/main/java/org/apache/custos/service/federated/client/keycloak/KeycloakUtils.java +++ b/services/src/main/java/org/apache/custos/service/federated/client/keycloak/KeycloakUtils.java @@ -19,6 +19,8 @@ package org.apache.custos.service.federated.client.keycloak; +import jakarta.ws.rs.client.Client; +import jakarta.ws.rs.client.ClientBuilder; import org.keycloak.admin.client.Keycloak; import org.keycloak.admin.client.KeycloakBuilder; import org.slf4j.Logger; @@ -27,8 +29,6 @@ import org.slf4j.LoggerFactory; import javax.net.ssl.SSLContext; import javax.net.ssl.TrustManager; import javax.net.ssl.TrustManagerFactory; -import javax.ws.rs.client.Client; -import javax.ws.rs.client.ClientBuilder; import java.security.KeyManagementException; import java.security.KeyStore; import java.security.KeyStoreException; diff --git a/services/src/main/java/org/apache/custos/service/profile/UserProfileService.java b/services/src/main/java/org/apache/custos/service/profile/UserProfileService.java index 3464ab53a..e05b71257 100644 --- a/services/src/main/java/org/apache/custos/service/profile/UserProfileService.java +++ b/services/src/main/java/org/apache/custos/service/profile/UserProfileService.java @@ -19,6 +19,8 @@ package org.apache.custos.service.profile; +import jakarta.persistence.EntityNotFoundException; +import jakarta.ws.rs.NotFoundException; import org.apache.custos.core.mapper.user.AttributeUpdateMetadataMapper; import org.apache.custos.core.mapper.user.GroupMapper; import org.apache.custos.core.mapper.user.StatusUpdateMetadataMapper; @@ -55,13 +57,11 @@ import org.apache.custos.core.user.profile.api.UserProfileAttributeUpdateMetadat import org.apache.custos.core.user.profile.api.UserProfileRequest; import org.apache.custos.core.user.profile.api.UserProfileStatusUpdateMetadata; import org.apache.custos.service.exceptions.InternalServerException; -import jakarta.persistence.EntityNotFoundException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import javax.ws.rs.NotFoundException; import java.text.MessageFormat; import java.util.ArrayList; import java.util.Collections;
